aboutsummaryrefslogtreecommitdiffstats
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/api/vpp/supported_crcs.yaml592
l---------resources/job_specs/hoststack_daily/vpp-2n-icx.md1
l---------resources/job_specs/hoststack_daily/vpp-2n-spr.md1
l---------resources/job_specs/hoststack_daily/vpp-3n-icx.md1
l---------resources/job_specs/hoststack_daily/vpp-3na-spr.md1
l---------resources/job_specs/hoststack_daily/vpp-3nb-spr.md1
l---------resources/job_specs/mrr_daily/vpp-2n-aws.md1
l---------resources/job_specs/mrr_daily/vpp-2n-c6in.md1
l---------resources/job_specs/mrr_daily/vpp-2n-clx.md1
l---------resources/job_specs/mrr_daily/vpp-2n-icx.md1
l---------resources/job_specs/mrr_daily/vpp-2n-spr.md1
l---------resources/job_specs/mrr_daily/vpp-2n-tx2.md1
l---------resources/job_specs/mrr_daily/vpp-2n-zn2.md1
l---------resources/job_specs/mrr_daily/vpp-3n-alt.md1
l---------resources/job_specs/mrr_daily/vpp-3n-aws.md1
l---------resources/job_specs/mrr_daily/vpp-3n-c6in.md1
l---------resources/job_specs/mrr_daily/vpp-3n-icx.md1
l---------resources/job_specs/mrr_daily/vpp-3n-icxd.md1
l---------resources/job_specs/mrr_daily/vpp-3n-snr.md1
l---------resources/job_specs/mrr_daily/vpp-3n-tsh.md1
l---------resources/job_specs/mrr_daily/vpp-3na-spr.md1
l---------resources/job_specs/mrr_daily/vpp-3nb-spr.md1
l---------resources/job_specs/mrr_weekly/dpdk-2n-clx.md1
l---------resources/job_specs/mrr_weekly/dpdk-2n-icx.md1
l---------resources/job_specs/mrr_weekly/dpdk-2n-spr.md1
l---------resources/job_specs/mrr_weekly/dpdk-2n-tx2.md1
l---------resources/job_specs/mrr_weekly/dpdk-2n-zn2.md1
l---------resources/job_specs/mrr_weekly/dpdk-3n-alt.md1
l---------resources/job_specs/mrr_weekly/dpdk-3n-icx.md1
l---------resources/job_specs/mrr_weekly/dpdk-3n-icxd.md1
l---------resources/job_specs/mrr_weekly/dpdk-3n-snr.md1
l---------resources/job_specs/mrr_weekly/dpdk-3n-tsh.md1
l---------resources/job_specs/mrr_weekly/dpdk-3na-spr.md1
l---------resources/job_specs/mrr_weekly/dpdk-3nb-spr.md1
l---------resources/job_specs/mrr_weekly/vpp-2n-aws.md1
l---------resources/job_specs/mrr_weekly/vpp-2n-c6in.md1
l---------resources/job_specs/mrr_weekly/vpp-2n-c7gn.md1
l---------resources/job_specs/mrr_weekly/vpp-2n-clx.md1
l---------resources/job_specs/mrr_weekly/vpp-2n-icx.md1
l---------resources/job_specs/mrr_weekly/vpp-3n-aws.md1
l---------resources/job_specs/mrr_weekly/vpp-3n-c6in.md1
l---------resources/job_specs/mrr_weekly/vpp-3n-c7gn.md1
l---------resources/job_specs/mrr_weekly/vpp-3n-icx.md1
l---------resources/job_specs/ndrpdr_weekly/trex-1n-aws.md1
l---------resources/job_specs/ndrpdr_weekly/trex-2n-icx.md1
l---------resources/job_specs/ndrpdr_weekly/trex-2n-spr.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-aws.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-c6in.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-c7gn.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-clx.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-icx.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-spr.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-tx2.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-2n-zn2.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-alt.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-aws.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-c6in.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-c7gn.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-icx.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-icxd.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-snr.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3n-tsh.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3na-spr.md1
l---------resources/job_specs/ndrpdr_weekly/vpp-3nb-spr.md1
-rw-r--r--resources/job_specs/report_coverage/1n-aws/trex-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-aws/vpp-00.md37
-rw-r--r--resources/job_specs/report_coverage/2n-c6in/vpp-00.md37
-rw-r--r--resources/job_specs/report_coverage/2n-c7gn/vpp-00.md37
-rw-r--r--resources/job_specs/report_coverage/2n-clx/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-clx/gso-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-00.md145
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-05.md68
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-06.md92
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-07.md36
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4-08.md128
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4tun-00.md64
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip4tun-01.md24
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip6-01.md125
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip6-02.md48
-rw-r--r--resources/job_specs/report_coverage/2n-clx/ip6-03.md88
-rw-r--r--resources/job_specs/report_coverage/2n-clx/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/2n-clx/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-clx/l2-02.md128
-rw-r--r--resources/job_specs/report_coverage/2n-clx/l2-03.md48
-rw-r--r--resources/job_specs/report_coverage/2n-clx/lb-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-clx/lb-01.md34
-rw-r--r--resources/job_specs/report_coverage/2n-clx/memif-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-clx/memif-01.md45
-rw-r--r--resources/job_specs/report_coverage/2n-clx/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/2n-clx/vhost-01.md85
-rw-r--r--resources/job_specs/report_coverage/2n-icx/dpdk-00.md67
-rw-r--r--resources/job_specs/report_coverage/2n-icx/gso-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-icx/hoststack-00.md42
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-00.md145
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-05.md68
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-06.md92
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-07.md36
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-10.md145
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-11.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-12.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-13.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-14.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-15.md68
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-16.md92
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4-17.md36
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4tun-00.md64
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip4tun-10.md64
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip6-01.md125
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip6-10.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/ip6-11.md125
-rw-r--r--resources/job_specs/report_coverage/2n-icx/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/2n-icx/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/l2-10.md85
-rw-r--r--resources/job_specs/report_coverage/2n-icx/l2-11.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/lb-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/lb-10.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/memif-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/memif-10.md65
-rw-r--r--resources/job_specs/report_coverage/2n-icx/trex-00.md45
-rw-r--r--resources/job_specs/report_coverage/2n-icx/trex-10.md48
-rw-r--r--resources/job_specs/report_coverage/2n-icx/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/2n-icx/vhost-10.md125
-rw-r--r--resources/job_specs/report_coverage/2n-spr/dpdk-00.md67
-rw-r--r--resources/job_specs/report_coverage/2n-spr/gso-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-spr/hoststack-00.md42
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-00.md145
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-05.md68
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-06.md92
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-07.md36
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-10.md74
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-11.md34
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-12.md24
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-13.md24
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4-14.md24
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip4tun-00.md64
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip6-01.md125
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip6-10.md34
-rw-r--r--resources/job_specs/report_coverage/2n-spr/ip6-11.md64
-rw-r--r--resources/job_specs/report_coverage/2n-spr/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/2n-spr/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-spr/l2-10.md44
-rw-r--r--resources/job_specs/report_coverage/2n-spr/l2-11.md34
-rw-r--r--resources/job_specs/report_coverage/2n-spr/lb-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-spr/lb-10.md34
-rw-r--r--resources/job_specs/report_coverage/2n-spr/memif-00.md93
-rw-r--r--resources/job_specs/report_coverage/2n-spr/memif-10.md48
-rw-r--r--resources/job_specs/report_coverage/2n-spr/trex-00.md48
-rw-r--r--resources/job_specs/report_coverage/2n-spr/trex-10.md48
-rw-r--r--resources/job_specs/report_coverage/2n-spr/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/2n-spr/vhost-10.md64
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/dpdk-00.md29
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-00.md109
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-01.md57
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-02.md44
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-03.md44
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-04.md44
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-05.md50
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip4-06.md50
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip6-00.md57
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/ip6-01.md57
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/l2-00.md70
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/l2-01.md57
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/l2-02.md44
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/l2-03.md44
-rw-r--r--resources/job_specs/report_coverage/2n-tx2/l2-04.md31
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/gso-00.md23
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-00.md208
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4-05.md105
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip4tun-00.md64
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip6-00.md87
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/ip6-01.md168
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/l2-00.md148
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/l2-01.md88
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/lb-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/memif-00.md65
-rw-r--r--resources/job_specs/report_coverage/2n-zn2/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/3n-alt/dpdk-00.md11
-rw-r--r--resources/job_specs/report_coverage/3n-alt/dpdk-10.md29
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-00.md21
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-01.md29
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-02.md37
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-10.md56
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-11.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-12.md30
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4-13.md30
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4tun-00.md21
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip4tun-10.md30
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip6-00.md21
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip6-10.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/ip6-11.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-00.md45
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-01.md45
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-10.md56
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-11.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-12.md30
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-13.md30
-rw-r--r--resources/job_specs/report_coverage/3n-alt/l2-14.md17
-rw-r--r--resources/job_specs/report_coverage/3n-alt/memif-10.md20
-rw-r--r--resources/job_specs/report_coverage/3n-alt/srv6-10.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/srv6-11.md43
-rw-r--r--resources/job_specs/report_coverage/3n-alt/vhost-10.md82
-rw-r--r--resources/job_specs/report_coverage/3n-alt/vhost-11.md30
-rw-r--r--resources/job_specs/report_coverage/3n-aws/vpp-00.md27
-rw-r--r--resources/job_specs/report_coverage/3n-c6in/vpp-00.md27
-rw-r--r--resources/job_specs/report_coverage/3n-c7gn/vpp-00.md27
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-00.md145
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-01.md57
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-02.md49
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-03.md49
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-04.md221
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-05.md34
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-10.md145
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-11.md57
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-12.md49
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-13.md49
-rw-r--r--resources/job_specs/report_coverage/3n-icx/crypto-14.md221
-rw-r--r--resources/job_specs/report_coverage/3n-icx/dpdk-00.md67
-rw-r--r--resources/job_specs/report_coverage/3n-icx/hoststack-00.md38
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-00.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-05.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-06.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-07.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-10.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-11.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-12.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-13.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-14.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-15.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-16.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4-17.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-02.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-03.md64
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-04.md46
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-10.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-12.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip4tun-13.md64
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6-10.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6-11.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/ip6tun-10.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-02.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-03.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-04.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-05.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-06.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-07.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-08.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-09.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-10.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-20.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-21.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-22.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-23.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-24.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-25.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-26.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-27.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-28.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-29.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/l2-30.md25
-rw-r--r--resources/job_specs/report_coverage/3n-icx/memif-00.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/memif-10.md85
-rw-r--r--resources/job_specs/report_coverage/3n-icx/srv6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/srv6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/srv6-10.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/srv6-11.md65
-rw-r--r--resources/job_specs/report_coverage/3n-icx/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/3n-icx/vhost-01.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icx/vhost-10.md125
-rw-r--r--resources/job_specs/report_coverage/3n-icx/vhost-11.md45
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/crypto-00.md94
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/crypto-01.md40
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/crypto-02.md112
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip4-00.md74
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip4-01.md34
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip4tun-00.md24
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip4tun-01.md124
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip6-00.md34
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/ip6-01.md64
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/l2-00.md44
-rw-r--r--resources/job_specs/report_coverage/3n-icxd/l2-01.md34
-rw-r--r--resources/job_specs/report_coverage/3n-snr/crypto-00.md94
-rw-r--r--resources/job_specs/report_coverage/3n-snr/crypto-01.md40
-rw-r--r--resources/job_specs/report_coverage/3n-snr/crypto-02.md112
-rw-r--r--resources/job_specs/report_coverage/3n-snr/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip4-00.md74
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip4-01.md34
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip4tun-00.md24
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip4tun-01.md124
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip6-00.md34
-rw-r--r--resources/job_specs/report_coverage/3n-snr/ip6-01.md64
-rw-r--r--resources/job_specs/report_coverage/3n-snr/l2-00.md44
-rw-r--r--resources/job_specs/report_coverage/3n-snr/l2-01.md34
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/dpdk-00.md29
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip4-00.md70
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip4-01.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip4-02.md44
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip4-03.md44
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip4tun-00.md44
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip6-00.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/ip6-01.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/l2-00.md70
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/l2-01.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/l2-02.md44
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/l2-03.md44
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/l2-04.md31
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/memif-00.md70
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/srv6-00.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/srv6-01.md57
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/vhost-00.md96
-rw-r--r--resources/job_specs/report_coverage/3n-tsh/vhost-01.md44
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-00.md145
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-01.md57
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-02.md49
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-03.md49
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-04.md221
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-05.md34
-rw-r--r--resources/job_specs/report_coverage/3na-spr/crypto-06.md49
-rw-r--r--resources/job_specs/report_coverage/3na-spr/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/3na-spr/hoststack-00.md20
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-00.md85
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-05.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-06.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-07.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4-08.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4tun-02.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4tun-03.md125
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4tun-04.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip4tun-05.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip6-02.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/ip6tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-02.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-03.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-04.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-05.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-06.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-07.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-08.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-09.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-10.md25
-rw-r--r--resources/job_specs/report_coverage/3na-spr/l2-11.md85
-rw-r--r--resources/job_specs/report_coverage/3na-spr/memif-00.md85
-rw-r--r--resources/job_specs/report_coverage/3na-spr/srv6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/srv6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/srv6-02.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/srv6-03.md65
-rw-r--r--resources/job_specs/report_coverage/3na-spr/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/3na-spr/vhost-01.md45
-rw-r--r--resources/job_specs/report_coverage/3na-spr/vhost-02.md125
-rw-r--r--resources/job_specs/report_coverage/3na-spr/vhost-03.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-00.md145
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-01.md57
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-02.md49
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-03.md49
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-04.md221
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-05.md34
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-06.md49
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/crypto-07.md84
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/dpdk-00.md23
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/hoststack-00.md20
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-00.md85
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-01.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-02.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-03.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-04.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-05.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-06.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-07.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4-08.md25
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-02.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-03.md125
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-04.md46
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-05.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip4tun-06.md64
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip6-02.md25
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/ip6tun-00.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-00.md85
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-01.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-02.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-03.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-04.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-05.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-06.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-07.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-08.md25
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-09.md25
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-10.md25
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/l2-11.md85
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/memif-00.md85
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/srv6-00.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/srv6-01.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/srv6-02.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/srv6-03.md65
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/vhost-00.md125
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/vhost-01.md45
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/vhost-02.md125
-rw-r--r--resources/job_specs/report_coverage/3nb-spr/vhost-03.md45
-rw-r--r--resources/job_specs/report_iterative/1n-aws/trex-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/1n-aws/trex-ndrpdr-00.md11
-rw-r--r--resources/job_specs/report_iterative/2n-aws/vpp-mrr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-aws/vpp-ndrpdr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-c6in/vpp-mrr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-c6in/vpp-ndrpdr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-c7gn/vpp-mrr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-c7gn/vpp-ndrpdr-00.md37
-rw-r--r--resources/job_specs/report_iterative/2n-clx/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/2n-clx/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/2n-clx/nfv-density-mrr-00.md125
-rw-r--r--resources/job_specs/report_iterative/2n-clx/nfv-density-ndrpdr-00.md125
-rw-r--r--resources/job_specs/report_iterative/2n-clx/reconf-00.md20
-rw-r--r--resources/job_specs/report_iterative/2n-clx/vpp-gso-mrr-00.md23
-rw-r--r--resources/job_specs/report_iterative/2n-clx/vpp-mrr-00.md429
-rw-r--r--resources/job_specs/report_iterative/2n-clx/vpp-ndrpdr-00.md429
-rw-r--r--resources/job_specs/report_iterative/2n-clx/vpp-soak-00.md43
-rw-r--r--resources/job_specs/report_iterative/2n-icx/dpdk-mrr-00.md31
-rw-r--r--resources/job_specs/report_iterative/2n-icx/dpdk-ndrpdr-00.md67
-rw-r--r--resources/job_specs/report_iterative/2n-icx/nfv-density-mrr-00.md125
-rw-r--r--resources/job_specs/report_iterative/2n-icx/nfv-density-ndrpdr-00.md125
-rw-r--r--resources/job_specs/report_iterative/2n-icx/reconf-00.md20
-rw-r--r--resources/job_specs/report_iterative/2n-icx/trex-mrr-00.md33
-rw-r--r--resources/job_specs/report_iterative/2n-icx/trex-ndrpdr-00.md33
-rw-r--r--resources/job_specs/report_iterative/2n-icx/vpp-gso-mrr-00.md23
-rw-r--r--resources/job_specs/report_iterative/2n-icx/vpp-hoststack-00.md26
-rw-r--r--resources/job_specs/report_iterative/2n-icx/vpp-mrr-00.md516
-rw-r--r--resources/job_specs/report_iterative/2n-icx/vpp-ndrpdr-00.md516
-rw-r--r--resources/job_specs/report_iterative/2n-icx/vpp-soak-00.md43
-rw-r--r--resources/job_specs/report_iterative/2n-spr/dpdk-mrr-00.md31
-rw-r--r--resources/job_specs/report_iterative/2n-spr/dpdk-ndrpdr-00.md67
-rw-r--r--resources/job_specs/report_iterative/2n-spr/trex-mrr-00.md62
-rw-r--r--resources/job_specs/report_iterative/2n-spr/trex-ndrpdr-00.md65
-rw-r--r--resources/job_specs/report_iterative/2n-spr/vpp-hoststack-00.md30
-rw-r--r--resources/job_specs/report_iterative/2n-spr/vpp-mrr-00.md564
-rw-r--r--resources/job_specs/report_iterative/2n-spr/vpp-ndrpdr-00.md564
-rw-r--r--resources/job_specs/report_iterative/2n-spr/vpp-soak-00.md45
-rw-r--r--resources/job_specs/report_iterative/2n-tx2/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/2n-tx2/dpdk-ndrpdr-00.md29
-rw-r--r--resources/job_specs/report_iterative/2n-tx2/vpp-mrr-00.md266
-rw-r--r--resources/job_specs/report_iterative/2n-tx2/vpp-ndrpdr-00.md266
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/nfv-density-mrr-00.md138
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/nfv-density-ndrpdr-00.md138
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/reconf-00.md36
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/soak-00.md58
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/vpp-gso-mrr-00.md23
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/vpp-mrr-00.md335
-rw-r--r--resources/job_specs/report_iterative/2n-zn2/vpp-ndrpdr-00.md334
-rw-r--r--resources/job_specs/report_iterative/3n-alt/dpdk-mrr-00.md21
-rw-r--r--resources/job_specs/report_iterative/3n-alt/dpdk-ndrpdr-00.md57
-rw-r--r--resources/job_specs/report_iterative/3n-alt/vpp-mrr-00.md346
-rw-r--r--resources/job_specs/report_iterative/3n-alt/vpp-ndrpdr-00.md346
-rw-r--r--resources/job_specs/report_iterative/3n-aws/vpp-mrr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-aws/vpp-ndrpdr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-c6in/vpp-mrr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-c6in/vpp-ndrpdr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-c7gn/vpp-mrr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-c7gn/vpp-ndrpdr-00.md27
-rw-r--r--resources/job_specs/report_iterative/3n-icx/dpdk-mrr-00.md31
-rw-r--r--resources/job_specs/report_iterative/3n-icx/dpdk-ndrpdr-00.md67
-rw-r--r--resources/job_specs/report_iterative/3n-icx/vpp-hoststack-00.md38
-rw-r--r--resources/job_specs/report_iterative/3n-icx/vpp-mrr-00.md474
-rw-r--r--resources/job_specs/report_iterative/3n-icx/vpp-mrr-01.md143
-rw-r--r--resources/job_specs/report_iterative/3n-icx/vpp-ndrpdr-00.md474
-rw-r--r--resources/job_specs/report_iterative/3n-icx/vpp-soak-00.md44
-rw-r--r--resources/job_specs/report_iterative/3n-icxd/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/3n-icxd/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/3n-icxd/vpp-mrr-00.md231
-rw-r--r--resources/job_specs/report_iterative/3n-icxd/vpp-ndrpdr-00.md219
-rw-r--r--resources/job_specs/report_iterative/3n-icxd/vpp-soak-00.md46
-rw-r--r--resources/job_specs/report_iterative/3n-snr/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/3n-snr/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/3n-snr/vpp-mrr-00.md231
-rw-r--r--resources/job_specs/report_iterative/3n-snr/vpp-ndrpdr-00.md219
-rw-r--r--resources/job_specs/report_iterative/3n-tsh/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/3n-tsh/dpdk-ndrpdr-00.md29
-rw-r--r--resources/job_specs/report_iterative/3n-tsh/vpp-mrr-00.md231
-rw-r--r--resources/job_specs/report_iterative/3n-tsh/vpp-ndrpdr-00.md229
-rw-r--r--resources/job_specs/report_iterative/3na-spr/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/3na-spr/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/3na-spr/vpp-hoststack-00.md20
-rw-r--r--resources/job_specs/report_iterative/3na-spr/vpp-mrr-00.md221
-rw-r--r--resources/job_specs/report_iterative/3na-spr/vpp-ndrpdr-00.md221
-rw-r--r--resources/job_specs/report_iterative/3nb-spr/dpdk-mrr-00.md11
-rw-r--r--resources/job_specs/report_iterative/3nb-spr/dpdk-ndrpdr-00.md23
-rw-r--r--resources/job_specs/report_iterative/3nb-spr/vpp-hoststack-00.md20
-rw-r--r--resources/job_specs/report_iterative/3nb-spr/vpp-mrr-00.md466
-rw-r--r--resources/job_specs/report_iterative/3nb-spr/vpp-ndrpdr-00.md466
l---------resources/job_specs/soak_weekly/vpp-2n-clx.md1
l---------resources/job_specs/soak_weekly/vpp-2n-icx.md1
l---------resources/job_specs/soak_weekly/vpp-2n-spr.md1
l---------resources/job_specs/soak_weekly/vpp-3n-icx.md1
l---------resources/job_specs/soak_weekly/vpp-3n-icxd.md1
-rw-r--r--resources/job_specs/vpp_device/vpp-1n-alt.md205
-rw-r--r--resources/job_specs/vpp_device/vpp-1n-skx.md208
-rw-r--r--resources/job_specs/vpp_device/vpp-1n-spr.md208
-rw-r--r--resources/job_specs/vpp_device/vpp-1n-vbox.md158
-rw-r--r--resources/libraries/bash/config/defaults8
-rw-r--r--resources/libraries/bash/entry/bisect.sh188
-rwxr-xr-xresources/libraries/bash/entry/bootstrap_aws_eb_version_deploy.sh (renamed from resources/libraries/bash/entry/bootstrap_docs.sh)10
-rwxr-xr-xresources/libraries/bash/entry/bootstrap_aws_eb_version_verify.sh (renamed from resources/libraries/bash/entry/bootstrap_trending.sh)10
-rwxr-xr-xresources/libraries/bash/entry/bootstrap_report.sh6
-rwxr-xr-xresources/libraries/bash/entry/bootstrap_verify_perf.sh11
-rwxr-xr-xresources/libraries/bash/entry/bootstrap_vpp_device.sh9
-rw-r--r--resources/libraries/bash/entry/check/doc_verify.sh53
-rwxr-xr-xresources/libraries/bash/entry/check_l3fwd.sh39
-rwxr-xr-xresources/libraries/bash/entry/check_testpmd.sh39
-rwxr-xr-xresources/libraries/bash/entry/patch_l3fwd_flip_routes2
-rw-r--r--resources/libraries/bash/entry/per_patch_device.sh17
-rw-r--r--resources/libraries/bash/entry/per_patch_perf.sh29
-rw-r--r--resources/libraries/bash/entry/tox/README.txt (renamed from resources/libraries/bash/entry/check/README.txt)26
-rw-r--r--resources/libraries/bash/entry/tox/autogen.sh (renamed from resources/libraries/bash/entry/check/autogen.sh)6
-rw-r--r--resources/libraries/bash/entry/tox/copyright_year.sh (renamed from resources/libraries/bash/entry/check/copyright_year.sh)9
-rw-r--r--resources/libraries/bash/entry/tox/fix_copyright_year.sh (renamed from resources/libraries/bash/entry/check/job_spec.sh)51
-rw-r--r--resources/libraries/bash/entry/tox/gpl_license.sh (renamed from resources/libraries/bash/entry/check/gpl_license.sh)2
-rw-r--r--resources/libraries/bash/entry/tox/line.sh (renamed from resources/libraries/bash/entry/check/line.sh)2
-rw-r--r--resources/libraries/bash/entry/tox/new_line.sh (renamed from resources/libraries/bash/entry/check/new_line.sh)2
-rw-r--r--resources/libraries/bash/entry/tox/pylint.sh (renamed from resources/libraries/bash/entry/check/pylint.sh)2
-rw-r--r--resources/libraries/bash/function/ansible.sh12
-rw-r--r--resources/libraries/bash/function/artifacts.sh79
-rw-r--r--resources/libraries/bash/function/branch.sh6
-rw-r--r--resources/libraries/bash/function/common.sh533
-rw-r--r--resources/libraries/bash/function/device.sh161
-rw-r--r--resources/libraries/bash/function/docs.sh264
-rw-r--r--resources/libraries/bash/function/dpdk.sh92
-rw-r--r--resources/libraries/bash/function/eb_version.sh159
-rw-r--r--resources/libraries/bash/function/gather.sh13
-rw-r--r--resources/libraries/bash/function/hugo.sh113
-rwxr-xr-xresources/libraries/bash/function/nginx.sh8
-rw-r--r--resources/libraries/bash/function/per_patch.sh214
-rw-r--r--resources/libraries/bash/function/terraform.sh115
-rwxr-xr-xresources/libraries/bash/k8s_setup.sh65
-rw-r--r--resources/libraries/bash/shell/k8s_utils.sh132
-rw-r--r--resources/libraries/bash/shell/tc_naming.sh140
-rw-r--r--resources/libraries/python/Constants.py463
-rw-r--r--resources/libraries/python/ContainerUtils.py86
-rw-r--r--resources/libraries/python/CoreDumpUtil.py12
-rw-r--r--resources/libraries/python/CpuUtils.py178
-rw-r--r--resources/libraries/python/DMAUtil.py213
-rw-r--r--resources/libraries/python/DPDK/DPDKTools.py26
-rw-r--r--resources/libraries/python/DPDK/L3fwdTest.py122
-rw-r--r--resources/libraries/python/DPDK/TestpmdTest.py109
-rw-r--r--resources/libraries/python/DUTSetup.py239
-rw-r--r--resources/libraries/python/DpdkUtil.py8
-rw-r--r--resources/libraries/python/FlowUtil.py114
-rw-r--r--resources/libraries/python/HoststackUtil.py118
-rw-r--r--resources/libraries/python/IPTopology.py177
-rw-r--r--resources/libraries/python/IPUtil.py54
-rw-r--r--resources/libraries/python/IPsecUtil.py2253
-rw-r--r--resources/libraries/python/InterfaceUtil.py144
-rw-r--r--resources/libraries/python/Iperf3.py25
-rw-r--r--resources/libraries/python/L2Util.py20
-rw-r--r--resources/libraries/python/LispSetup.py2
-rw-r--r--resources/libraries/python/LoadBalancerUtil.py8
-rw-r--r--resources/libraries/python/MLRsearch/AbstractMeasurer.py32
-rw-r--r--resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py48
-rw-r--r--resources/libraries/python/MLRsearch/MeasurementDatabase.py157
-rw-r--r--resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py485
-rw-r--r--resources/libraries/python/MLRsearch/PerDurationDatabase.py123
-rw-r--r--resources/libraries/python/MLRsearch/ProgressState.py60
-rw-r--r--resources/libraries/python/MLRsearch/ReceiveRateInterval.py74
-rw-r--r--resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py125
-rw-r--r--resources/libraries/python/MLRsearch/WidthArithmetics.py137
-rw-r--r--resources/libraries/python/MLRsearch/__init__.py16
-rw-r--r--resources/libraries/python/MLRsearch/candidate.py153
-rw-r--r--resources/libraries/python/MLRsearch/config.py179
-rw-r--r--resources/libraries/python/MLRsearch/dataclass/__init__.py (renamed from resources/libraries/bash/function/README.txt)13
-rw-r--r--resources/libraries/python/MLRsearch/dataclass/dc_property.py173
-rw-r--r--resources/libraries/python/MLRsearch/dataclass/field.py44
-rw-r--r--resources/libraries/python/MLRsearch/discrete_interval.py140
-rw-r--r--resources/libraries/python/MLRsearch/discrete_load.py316
-rw-r--r--resources/libraries/python/MLRsearch/discrete_result.py76
-rw-r--r--resources/libraries/python/MLRsearch/discrete_width.py197
-rw-r--r--resources/libraries/python/MLRsearch/expander.py102
-rw-r--r--resources/libraries/python/MLRsearch/global_width.py70
-rw-r--r--resources/libraries/python/MLRsearch/goal_result.py72
-rw-r--r--resources/libraries/python/MLRsearch/limit_handler.py198
-rw-r--r--resources/libraries/python/MLRsearch/load_rounding.py205
-rw-r--r--resources/libraries/python/MLRsearch/load_stats.py112
-rw-r--r--resources/libraries/python/MLRsearch/measurement_database.py126
-rw-r--r--resources/libraries/python/MLRsearch/multiple_loss_ratio_search.py325
-rw-r--r--resources/libraries/python/MLRsearch/pep3140/__init__.py24
-rw-r--r--resources/libraries/python/MLRsearch/pep3140/classes.py34
-rw-r--r--resources/libraries/python/MLRsearch/relevant_bounds.py56
-rw-r--r--resources/libraries/python/MLRsearch/search_goal.py119
-rw-r--r--resources/libraries/python/MLRsearch/search_goal_tuple.py60
-rw-r--r--resources/libraries/python/MLRsearch/selector.py183
-rw-r--r--resources/libraries/python/MLRsearch/strategy/__init__.py35
-rw-r--r--resources/libraries/python/MLRsearch/strategy/base.py132
-rw-r--r--resources/libraries/python/MLRsearch/strategy/bisect.py193
-rw-r--r--resources/libraries/python/MLRsearch/strategy/extend_hi.py76
-rw-r--r--resources/libraries/python/MLRsearch/strategy/extend_lo.py76
-rw-r--r--resources/libraries/python/MLRsearch/strategy/halve.py83
-rw-r--r--resources/libraries/python/MLRsearch/strategy/refine_hi.py55
-rw-r--r--resources/libraries/python/MLRsearch/strategy/refine_lo.py53
-rw-r--r--resources/libraries/python/MLRsearch/target_scaling.py103
-rw-r--r--resources/libraries/python/MLRsearch/target_spec.py95
-rw-r--r--resources/libraries/python/MLRsearch/target_stat.py153
-rw-r--r--resources/libraries/python/MLRsearch/trial_measurement/__init__.py19
-rw-r--r--resources/libraries/python/MLRsearch/trial_measurement/abstract_measurer.py55
-rw-r--r--resources/libraries/python/MLRsearch/trial_measurement/measurement_result.py161
-rw-r--r--resources/libraries/python/MLRsearch/trimmed_stat.py52
-rw-r--r--resources/libraries/python/Memif.py20
-rw-r--r--resources/libraries/python/NATUtil.py99
-rw-r--r--resources/libraries/python/NGINX/NGINXTools.py14
-rw-r--r--resources/libraries/python/NodePath.py16
-rw-r--r--resources/libraries/python/PLRsearch/Integrator.py59
-rw-r--r--resources/libraries/python/PLRsearch/PLRsearch.py221
-rw-r--r--resources/libraries/python/PLRsearch/log_plus.py8
-rw-r--r--resources/libraries/python/PLRsearch/stat_trackers.py58
-rw-r--r--resources/libraries/python/PapiExecutor.py751
-rw-r--r--resources/libraries/python/PapiHistory.py24
-rw-r--r--resources/libraries/python/Policer.py16
-rw-r--r--resources/libraries/python/QATUtil.py92
-rw-r--r--resources/libraries/python/QemuManager.py3
-rw-r--r--resources/libraries/python/QemuUtils.py32
-rw-r--r--resources/libraries/python/SRv6.py11
-rw-r--r--resources/libraries/python/SetupFramework.py17
-rw-r--r--resources/libraries/python/TRexConfigGenerator.py301
-rw-r--r--resources/libraries/python/Tap.py4
-rw-r--r--resources/libraries/python/TelemetryUtil.py138
-rw-r--r--resources/libraries/python/TestConfig.py142
-rw-r--r--resources/libraries/python/TrafficGenerator.py625
-rw-r--r--resources/libraries/python/VPPUtil.py115
-rw-r--r--resources/libraries/python/VatExecutor.py397
-rw-r--r--resources/libraries/python/VatJsonUtil.py218
-rw-r--r--resources/libraries/python/VppApiCrc.py41
-rw-r--r--resources/libraries/python/VppConfigGenerator.py411
-rw-r--r--resources/libraries/python/WireGuardUtil.py298
-rw-r--r--resources/libraries/python/autogen/Regenerator.py299
-rw-r--r--resources/libraries/python/enum_util.py67
-rw-r--r--resources/libraries/python/jumpavg/__init__.py10
-rw-r--r--resources/libraries/python/jumpavg/avg_stdev_stats.py (renamed from resources/libraries/python/jumpavg/AvgStdevStats.py)58
-rw-r--r--resources/libraries/python/jumpavg/bit_counting_group.py (renamed from resources/libraries/python/jumpavg/BitCountingGroup.py)146
-rw-r--r--resources/libraries/python/jumpavg/bit_counting_group_list.py (renamed from resources/libraries/python/jumpavg/BitCountingGroupList.py)140
-rw-r--r--resources/libraries/python/jumpavg/bit_counting_stats.py (renamed from resources/libraries/python/jumpavg/BitCountingStats.py)131
-rw-r--r--resources/libraries/python/jumpavg/classify.py78
-rw-r--r--resources/libraries/python/model/ExportJson.py395
-rw-r--r--resources/libraries/python/model/ExportResult.py316
-rw-r--r--resources/libraries/python/model/MemDump.py194
-rw-r--r--resources/libraries/python/model/__init__.py (renamed from resources/libraries/python/parsers/__init__.py)4
-rw-r--r--resources/libraries/python/model/parse.py112
-rw-r--r--resources/libraries/python/model/util.py69
-rw-r--r--resources/libraries/python/model/validate.py62
-rw-r--r--resources/libraries/python/parsers/JsonParser.py54
-rw-r--r--resources/libraries/python/ssh.py35
-rw-r--r--resources/libraries/python/topology.py21
-rw-r--r--resources/libraries/robot/crypto/ipsec.robot51
-rw-r--r--resources/libraries/robot/dpdk/default.robot85
-rw-r--r--resources/libraries/robot/features/acl.robot6
-rw-r--r--resources/libraries/robot/features/dma.robot28
-rw-r--r--resources/libraries/robot/hoststack/hoststack.robot191
-rw-r--r--resources/libraries/robot/ip/ip4.robot86
-rw-r--r--resources/libraries/robot/ip/ip6.robot10
-rw-r--r--resources/libraries/robot/ip/nat.robot5
-rw-r--r--resources/libraries/robot/l2/l2_bridge_domain.robot10
-rw-r--r--resources/libraries/robot/l2/l2_xconnect.robot8
-rw-r--r--resources/libraries/robot/l2/tagging.robot16
-rw-r--r--resources/libraries/robot/overlay/gtpu.robot17
-rw-r--r--resources/libraries/robot/overlay/lisp.robot4
-rw-r--r--resources/libraries/robot/overlay/srv6.robot12
-rw-r--r--resources/libraries/robot/performance/performance_actions.robot123
-rw-r--r--resources/libraries/robot/performance/performance_display.robot130
-rw-r--r--resources/libraries/robot/performance/performance_utils.robot132
-rw-r--r--resources/libraries/robot/performance/performance_vars.robot250
-rw-r--r--resources/libraries/robot/shared/container.robot14
-rw-r--r--resources/libraries/robot/shared/default.robot92
-rw-r--r--resources/libraries/robot/shared/interfaces.robot94
-rw-r--r--resources/libraries/robot/shared/suite_setup.robot93
-rw-r--r--resources/libraries/robot/shared/suite_teardown.robot3
-rw-r--r--resources/libraries/robot/shared/test_setup.robot7
-rw-r--r--resources/libraries/robot/shared/test_teardown.robot20
-rw-r--r--resources/libraries/robot/shared/vm.robot17
-rw-r--r--resources/libraries/robot/wireguard/wireguard.robot66
-rw-r--r--resources/model_schema/test_case.schema.yaml752
-rw-r--r--resources/templates/container/memif_create_chain_dma.exec10
-rw-r--r--resources/templates/telemetry/bpf_runtime.yaml688
-rw-r--r--resources/templates/telemetry/perf_stat_runtime.yaml134
-rw-r--r--resources/templates/telemetry/vpp_clear_stats.yaml119
-rw-r--r--resources/templates/telemetry/vpp_runtime.yaml355
-rw-r--r--resources/templates/telemetry/vpp_show_stats.yaml115
-rw-r--r--resources/templates/telemetry/vpp_test_teardown.yaml115
-rw-r--r--resources/templates/telemetry/vppctl_clear_stats.yaml272
-rw-r--r--resources/templates/telemetry/vppctl_runtime.yaml209
-rw-r--r--resources/templates/telemetry/vppctl_show_stats.yaml251
-rw-r--r--resources/templates/telemetry/vppctl_test_teardown.yaml251
-rw-r--r--resources/templates/vat/dhcp_proxy_dump.vat1
-rw-r--r--resources/templates/vat/dump_interfaces.vat3
-rw-r--r--resources/templates/vat/ipsec/ipsec_policy_add.vat1
-rw-r--r--resources/templates/vat/ipsec/ipsec_show.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_adjacency.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_local_eid.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_local_eid_mac.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_locator.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_locator_set.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_map_resolver.vat1
-rw-r--r--resources/templates/vat/lisp/add_lisp_remote_mapping.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_adjacency.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_local_eid.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_local_eid_mac.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_locator.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_locator_set.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_map_resolver.vat1
-rw-r--r--resources/templates/vat/lisp/del_lisp_remote_mapping.vat1
-rw-r--r--resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat1
-rw-r--r--resources/templates/vat/lisp/lisp_gpe_iface.vat1
-rw-r--r--resources/templates/vat/lisp/lisp_gpe_status.vat1
-rw-r--r--resources/templates/vat/lisp/lisp_status.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_eid_table.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_locator_set.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_map_register.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_map_request_mode.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_map_resolver.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_map_server.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_petr_config.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_pitr.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_rloc_config.vat1
-rw-r--r--resources/templates/vat/lisp/show_lisp_status.vat1
-rw-r--r--resources/templates/vat/show_hardware_detail.vat1
-rw-r--r--resources/templates/vat/vpp_route_add.vat1
-rw-r--r--resources/templates/vcl/vcl_dma.conf9
-rw-r--r--resources/templates/vcl/vcl_iperf3.conf9
-rw-r--r--resources/templates/vcl/vcl_nginx.conf12
-rw-r--r--resources/templates/vm/init.sh1
-rwxr-xr-xresources/tools/ab/ABFork.py4
-rw-r--r--resources/tools/ab/ABTools.py158
-rw-r--r--resources/tools/doc_gen/.gitignore3
-rw-r--r--resources/tools/doc_gen/README.rst116
-rwxr-xr-xresources/tools/doc_gen/gen_rst.py322
-rw-r--r--resources/tools/doc_gen/src/Makefile225
-rw-r--r--resources/tools/doc_gen/src/conf.py302
-rw-r--r--resources/tools/doc_gen/src/index.rst16
-rw-r--r--resources/tools/doc_gen/src/indices.rst6
-rw-r--r--resources/tools/doc_gen/src/overview.rst53
-rw-r--r--resources/tools/doc_gen/src/resources.libraries.python.rst3
-rw-r--r--resources/tools/doc_gen/src/resources.libraries.robot.rst3
-rw-r--r--resources/tools/doc_gen/src/tests.dpdk.perf.rst3
-rw-r--r--resources/tools/doc_gen/src/tests.trex.perf.rst2
-rw-r--r--resources/tools/doc_gen/src/tests.vpp.device.rst3
-rw-r--r--resources/tools/doc_gen/src/tests.vpp.perf.rst3
-rw-r--r--resources/tools/integrated/check_crc.py3
-rw-r--r--resources/tools/integrated/compare_bisect.py134
-rw-r--r--resources/tools/integrated/compare_perpatch.py129
-rw-r--r--resources/tools/presentation/README.md52
-rw-r--r--resources/tools/presentation/__init__.py34
-rw-r--r--resources/tools/presentation/convert_xml_json.py410
-rw-r--r--resources/tools/presentation/doc/graphs_improvements.css5
-rw-r--r--resources/tools/presentation/doc/graphs_improvements.rst590
-rw-r--r--resources/tools/presentation/doc/pal_func_diagram.svg1413
-rw-r--r--resources/tools/presentation/doc/pal_layers.svg441
-rw-r--r--resources/tools/presentation/doc/pal_lld.rst1715
-rw-r--r--resources/tools/presentation/doc/pic/graph-latency.svg1127
-rw-r--r--resources/tools/presentation/doc/pic/graph-speedup.svg1554
-rw-r--r--resources/tools/presentation/doc/pic/graph-throughput.svg645
-rw-r--r--resources/tools/presentation/doc/report_test_groups.txt467
-rw-r--r--resources/tools/presentation/doc/trending_test_groups.md921
-rw-r--r--resources/tools/presentation/environment.py129
-rw-r--r--resources/tools/presentation/generator_alerts.py498
-rw-r--r--resources/tools/presentation/generator_cpta.py863
-rw-r--r--resources/tools/presentation/generator_files.py444
-rw-r--r--resources/tools/presentation/generator_plots.py1849
-rw-r--r--resources/tools/presentation/generator_report.py267
-rw-r--r--resources/tools/presentation/generator_tables.py2264
-rw-r--r--resources/tools/presentation/input_data_files.py312
-rw-r--r--resources/tools/presentation/input_data_parser.py2147
-rw-r--r--resources/tools/presentation/json/template_0.1.0.json23
-rw-r--r--resources/tools/presentation/pal.py196
-rw-r--r--resources/tools/presentation/pal_errors.py83
-rw-r--r--resources/tools/presentation/pal_utils.py352
-rw-r--r--resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca1.yaml68
-rw-r--r--resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca2.yaml29
-rw-r--r--resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca1.yaml79
-rw-r--r--resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca2.yaml37
-rw-r--r--resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca1.yaml74
-rw-r--r--resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca2.yaml31
-rw-r--r--resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca1.yaml60
-rw-r--r--resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca2.yaml24
-rw-r--r--resources/tools/presentation/requirements.txt13
-rwxr-xr-xresources/tools/presentation/run_convert.sh35
-rw-r--r--resources/tools/presentation/specification_parser.py917
-rw-r--r--resources/tools/presentation/specifications/converter/environment.yaml130
-rw-r--r--resources/tools/presentation/specifications/converter/input.yaml21
-rw-r--r--resources/tools/presentation/specifications/report/data_sets.yaml1233
-rw-r--r--resources/tools/presentation/specifications/report/elements.yaml12975
-rw-r--r--resources/tools/presentation/specifications/report/environment.yaml271
-rw-r--r--resources/tools/presentation/specifications/report/layouts.yaml875
-rw-r--r--resources/tools/presentation/specifications/report_local/data_sets.yaml51
-rw-r--r--resources/tools/presentation/specifications/report_local/elements.yaml322
-rw-r--r--resources/tools/presentation/specifications/report_local/environment.yaml265
-rw-r--r--resources/tools/presentation/specifications/report_local/layouts.yaml875
-rw-r--r--resources/tools/presentation/specifications/trending/data_sets.yaml254
-rw-r--r--resources/tools/presentation/specifications/trending/elements.yaml5314
-rw-r--r--resources/tools/presentation/specifications/trending/environment.yaml243
-rw-r--r--resources/tools/presentation/specifications/trending/layouts.yaml212
-rw-r--r--resources/tools/presentation/sphinx_conf/report/conf.py296
-rw-r--r--resources/tools/presentation/sphinx_conf/trending/conf.py113
-rw-r--r--resources/tools/presentation/static_content.py62
-rwxr-xr-xresources/tools/scripts/topo_reservation.py2
-rw-r--r--resources/tools/storage/__init__.py0
-rw-r--r--resources/tools/storage/__main__.py53
-rwxr-xr-xresources/tools/storage/storage.py270
-rwxr-xr-xresources/tools/telemetry/__main__.py4
-rw-r--r--resources/tools/telemetry/bundle_bpf.py73
-rw-r--r--resources/tools/telemetry/bundle_perf_stat.py112
-rw-r--r--resources/tools/telemetry/bundle_vpp.py96
-rw-r--r--resources/tools/telemetry/bundle_vppctl.py425
-rw-r--r--resources/tools/telemetry/constants.py52
-rw-r--r--resources/tools/telemetry/executor.py7
-rw-r--r--resources/tools/telemetry/metrics.py18
-rw-r--r--resources/tools/telemetry/parser.py7
-rw-r--r--resources/tools/telemetry/serializer.py5
853 files changed, 52381 insertions, 52947 deletions
diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml
index 840abe8084..fb6a499d42 100644
--- a/resources/api/vpp/supported_crcs.yaml
+++ b/resources/api/vpp/supported_crcs.yaml
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,21 +17,19 @@
# Comment https link towards the build used to get or verify the CRC values.
# Link cannot easily be name as it is too long.
-# Prefer x86_64, Ubuntu, latest LTS.
-# Note that during flag day process, the link would point
-# to (logged artifacts of) verify job, not merge job.
-
# Note that you cannot easily avoid quotes for CRC values.
# With leading 0x, yaml interprets the values as numbers.
# Even with 0x removed, hexa CRC value may appear as decimal number.
# Trailing comments are optional, for tracking how to test the message.
+
# Please keep alphabetic order.
# Use bash command "env LC_COLLATE=C sort -u" if not clear.
# https://packagecloud.io/app/fdio/release
-# /search?q=21.06&filter=debs&filter=all&dist=debian
-21.06-release:
+# /search?q=24.02&filter=debs&filter=all&dist=debian
+24.02-with-srv6-bug:
+ # plugins/acl/acl.api
acl_add_replace: '0xee5c2f18' # dev
acl_add_replace_reply: '0xac407b0c' # dev
acl_details: '0x95babae0' # dev teardown
@@ -40,25 +38,39 @@
acl_interface_list_dump: '0xf9e6675e' # dev teardown
acl_interface_set_acl_list: '0x473982bd' # dev
acl_interface_set_acl_list_reply: '0xe8d4e804' # dev
+
+ # vlibmemory/vlib.api
add_node_next: '0x2457116d' # dev
add_node_next_reply: '0x2ed75f32' # dev
+
+ # plugins/adl/adl.api
adl_allowlist_enable_disable: '0xea88828d' # dev
adl_allowlist_enable_disable_reply: '0xe8d4e804' # dev
adl_interface_enable_disable: '0x5501adee' # dev
adl_interface_enable_disable_reply: '0xe8d4e804' # dev
- af_xdp_create: '0x21226c99' # dev
- af_xdp_create_reply: '0x5383d31f' # dev
+
+ # plugins/af_xdp/af_xdp.api
+ af_xdp_create_v3: '0xcf4b1827' # perf
+ af_xdp_create_v3_reply: '0x5383d31f' # perf
+
+ # plugins/avf/avf.api
avf_create: '0xdaab8ae2' # dev
avf_create_reply: '0x5383d31f' # dev
+
+ # vnet/bonding/bond.api
bond_add_member: '0xe7d14948' # perf
bond_add_member_reply: '0xe8d4e804' # perf
bond_create2: '0x912fda76' # perf
bond_create2_reply: '0x5383d31f' # perf
# 4x^ 64B-1c-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
# ^ ndrpdrAND1cAND64bAND1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm
- bridge_domain_add_del: '0x600b7170' # dev
- bridge_domain_add_del_reply: '0xe8d4e804' # dev
+
+ # vnet/l2/l2.api
+ bridge_domain_add_del_v2: '0x600b7170' # dev
+ bridge_domain_add_del_v2_reply: '0xfcb1e980' # dev
# bridge_domain_dump / details # honeycomb
+
+ # vnet/classify/classify.api
classify_add_del_session: '0xf20879f0' # dev
classify_add_del_session_reply: '0xe8d4e804' # dev
classify_add_del_table: '0x6849e39e' # dev
@@ -66,23 +78,39 @@
# classify_session_dump / details # honeycomb
# classify_table_by_interface / reply # honeycomb
# classify_table_info / reply # honeycomb
+
+ # vlibmemory/vlib.api
cli_inband: '0xf8377302' # dev setup
cli_inband_reply: '0x05879051' # dev setup
+
+ # vnet/interface.api
create_loopback_instance: '0xd36a3ee2' # dev
create_loopback_instance_reply: '0x5383d31f' # dev
+
+ # vnet/interface.api
create_subif: '0x790ca755' # perf
create_subif_reply: '0x5383d31f' # perf
# ^^ 64B-1c-dot1ad-l2xcbase-ndrpdr
# ^ ndrpdrAND1cAND64bANDdot1ad-l2xcbase
+
+ # plugins/vhost/vhost_user.api
create_vhost_user_if_v2: '0xdba1cc1d' # dev
create_vhost_user_if_v2_reply: '0x5383d31f' # dev
+
+ # vnet/interface.api
create_vlan_subif: '0xaf34ac8b' # dev
create_vlan_subif_reply: '0x5383d31f' # dev
+
+ # plugins/crypto_sw_scheduler/crypto_sw_scheduler.api
+ crypto_set_async_dispatch_v2: '0x667d2d54' # perf
+ crypto_set_async_dispatch_v2_reply: '0xe8d4e804' # perf
crypto_sw_scheduler_set_worker: '0xb4274502' # perf
crypto_sw_scheduler_set_worker_reply: '0xe8d4e804' # perf
- # ^^ 64B-1c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-udir-ndrpdr
+ # 4^ 64B-1c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-udir-ndrpdr
# ^ ndrpdrAND1cAND64BANDethip4ipsec8tnlswasync-scheduler-ip4base-int-\
# aes128gcm-udir
+
+ # plugins/nat/det44/det44.api
det44_add_del_map: '0x1150a190' # dev
det44_add_del_map_reply: '0xe8d4e804' # dev
det44_interface_add_del_feature: '0xdc17a836' # dev
@@ -96,47 +124,73 @@
det44_session_dump: '0xe45a3af7' # dev
# TODO: Which test to run to verify det44_* messages?
# dhcp_proxy_dump / details # honeycomb
- flow_add: '0xf946ed84' # dev
- flow_add_reply: '0x8587dc85' # dev
+
+ # vnet/flow/flow.api
+ flow_add_v2: '0x5b757558' # dev
+ flow_add_v2_reply: '0x8587dc85' # dev
+ flow_del: '0xb6b9b02c' # dev
+ flow_del_reply: '0xe8d4e804' # dev
+ flow_disable: '0x2024be69' # dev
+ flow_disable_reply: '0xe8d4e804' # dev
flow_enable: '0x2024be69' # dev
flow_enable_reply: '0xe8d4e804' # dev
- flow_disable: '0x2024be69' #dev
- flow_disable_reply: '0xe8d4e804' #dev
- flow_del: '0xb6b9b02c' #dev
- flow_del_reply: '0xe8d4e804' #dev
+
+ # plugins/geneve/geneve.api
geneve_add_del_tunnel2: '0x8c2a9999' # dev
geneve_add_del_tunnel2_reply: '0x5383d31f' # dev
geneve_tunnel_details: '0x6b16eb24' # dev
geneve_tunnel_dump: '0xf9e6675e' # dev
+
+ # plugins/lisp/lisp-gpe/lisp_gpe.api
gpe_enable_disable: '0xc264d7bf' # dev
gpe_enable_disable_reply: '0xe8d4e804' # dev
+
# gre_tunnel_add_del / reply # unused L1 keyword: create_gre_tunnel_interface
- gtpu_add_del_tunnel: '0xca983a2b' # perf
- gtpu_add_del_tunnel_reply: '0x5383d31f' # perf
+
+ # plugins/gtpu/gtpu.api
+ gtpu_add_del_tunnel_v2: '0xa0c30713' # perf
+ gtpu_add_del_tunnel_v2_reply: '0x62b41304' # perf
# ^^ 64B-1c-ethip4gtpusw-ip4base-ndrpdr
# ^ ndrpdrAND1cAND64BANDethip4gtpusw-ip4base
+ gtpu_offload_rx: '0xf0b08786' # perf
+ gtpu_offload_rx_reply: '0xe8d4e804' # perf
+
+ # vnet/interface.api
hw_interface_set_mtu: '0xe6746899' # dev
hw_interface_set_mtu_reply: '0xe8d4e804' # dev
+
+ # vnet/classify/classify.api
input_acl_set_interface: '0xde7ad708' # dev
input_acl_set_interface_reply: '0xe8d4e804' # dev
+
+ # vnet/ip/ip.api
ip_address_details: '0xee29b797' # dev
ip_address_dump: '0x2d033de4' # dev
+
+ # vnet/ip-neighbor/ip_neighbor.api
ip_neighbor_add_del: '0x0607c257' # dev
ip_neighbor_add_del_reply: '0x1992deab' # dev
+
# ip_probe_neighbor / reply # unused L1 keyword vpp_ip_probe
+
+ # vnet/ip/ip.api
ip_route_add_del: '0xb8ecfe0d' # dev
ip_route_add_del_reply: '0x1992deab' # dev
# ip_source_check_interface_add_del / reply # unused L1 keyword vpp_ip_source_check_setup
ip_table_add_del: '0x0ffdaec0' # dev
ip_table_add_del_reply: '0xe8d4e804' # dev
+
+ # vnet/ipip/ipip.api
ipip_add_tunnel: '0x2ac399f5' # dev
ipip_add_tunnel_reply: '0x5383d31f' # dev
+
+ # vnet/ipsec/ipsec.api
ipsec_interface_add_del_spd: '0x80f80cbb' # dev
ipsec_interface_add_del_spd_reply: '0xe8d4e804' # dev
- ipsec_sa_v3_details: '0x2fc991ee' # dev
- ipsec_sa_v3_dump: '0x2076c2f4' # dev
- ipsec_sad_entry_add_del_v3: '0xc77ebd92' # dev
- ipsec_sad_entry_add_del_v3_reply: '0x9ffac24b' # dev
+ ipsec_sa_v5_details: '0x3cfecfbd' # dev teardown
+ ipsec_sa_v5_dump: '0x2076c2f4' # dev teardown
+ ipsec_sad_entry_add_v2: '0x9611297a' # dev
+ ipsec_sad_entry_add_v2_reply: '0x9ffac24b' # dev
ipsec_select_backend: '0x5bcfd3b7' # perf
ipsec_select_backend_reply: '0xe8d4e804' # perf
# ^^ 64B-1c-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr
@@ -145,12 +199,14 @@
ipsec_set_async_mode_reply: '0xe8d4e804' # perf
ipsec_spd_add_del: '0x20e89a95' # dev
ipsec_spd_add_del_reply: '0xe8d4e804' # dev
- ipsec_spd_entry_add_del: '0x338b7411' # dev
- ipsec_spd_entry_add_del_reply: '0x9ffac24b' # dev
+ ipsec_spd_entry_add_del_v2: '0x7bfe69fc' # dev
+ ipsec_spd_entry_add_del_v2_reply: '0x9ffac24b' # dev
ipsec_tunnel_protect_update: '0x30d5f133' # dev
ipsec_tunnel_protect_update_reply: '0xe8d4e804' # dev
# ^^ 64B-1c-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr
# ^ See ipsec_select_backend.
+
+ # vnet/l2/l2.api
# l2_fib_table_dump / details # honeycomb
l2_interface_vlan_tag_rewrite: '0x62cc0bbc' # perf
l2_interface_vlan_tag_rewrite_reply: '0xe8d4e804' # perf
@@ -159,16 +215,20 @@
l2_patch_add_del: '0xa1f6a6f3' # dev
l2_patch_add_del_reply: '0xe8d4e804' # dev
# l2fib_add_del / reply # unused L1 keyword: vpp_add_l2fib_entry
+
+ # plugins/lb/lb.api
lb_add_del_as: '0x35d72500' # perf
lb_add_del_as_reply: '0xe8d4e804' # perf
lb_add_del_intf_nat4: '0x47d6e753' # perf
lb_add_del_intf_nat4_reply: '0xe8d4e804' # perf
- lb_add_del_vip: '0x6fa569c7' # perf
- lb_add_del_vip_reply: '0xe8d4e804' # perf
+ lb_add_del_vip_v2: '0x7c520e0f' # perf
+ lb_add_del_vip_v2_reply: '0xe8d4e804' # perf
lb_conf: '0x56cd3261' # perf
lb_conf_reply: '0xe8d4e804' # perf
# 8x^ 64B-1c-ethip4-loadbalancer-nat4-ndrpdr
# ^ 2n: ndrpdrAND1cAND64BANDethip4-loadbalancer-nat4
+
+ # plugins/lisp/lisp-cp/lisp.api
lisp_add_del_adjacency: '0x2ce0e6f6' # dev
lisp_add_del_adjacency_reply: '0xe8d4e804' # dev
lisp_add_del_local_eid: '0x4e5a83a2' # dev
@@ -184,6 +244,8 @@
lisp_eid_table_add_del_map_reply: '0xe8d4e804' # dev
lisp_enable_disable: '0xc264d7bf' # dev
lisp_enable_disable_reply: '0xe8d4e804' # dev
+
+ # plugins/acl/acl.api
macip_acl_add: '0xce6fbad0' # dev
macip_acl_add_reply: '0xac407b0c' # dev
macip_acl_details: '0x27135b59' # dev teardown
@@ -192,90 +254,115 @@
macip_acl_interface_add_del_reply: '0xe8d4e804' # dev
macip_acl_interface_get: '0x51077d14' # dev teardown
macip_acl_interface_get_reply: '0xaccf9b05' # dev teardown
- memif_create: '0xb1b25061' # dev
- memif_create_reply: '0x5383d31f' # dev
+
+ # plugins/memif/memif.api
+ memif_create_v2: '0x8c7de5f7' # dev
+ memif_create_v2_reply: '0x5383d31f' # dev
memif_details: '0xda34feb9' # dev
memif_dump: '0x51077d14' # dev
- memif_socket_filename_add_del: '0xa2ce1a10' # dev
- memif_socket_filename_add_del_reply: '0xe8d4e804' # dev
+ memif_socket_filename_add_del_v2: '0x34223bdf' # dev
+ memif_socket_filename_add_del_v2_reply: '0x9f29bdb9' # dev
+
+ # plugins/nat/nat44-ed/nat44_ed.api
nat44_add_del_address_range: '0x6f2b8055' # dev
nat44_add_del_address_range_reply: '0xe8d4e804' # dev
nat44_address_details: '0x0d1beac1' # dev teardown
nat44_address_dump: '0x51077d14' # dev teardown
+ nat44_ed_plugin_enable_disable: '0xbe17f8dd' # dev
+ nat44_ed_plugin_enable_disable_reply: '0xe8d4e804' # dev
nat44_interface_add_del_feature: '0xf3699b83' # dev
nat44_interface_add_del_feature_reply: '0xe8d4e804' # dev
nat44_interface_addr_details: '0xe4aca9ca' # dev teardown
nat44_interface_addr_dump: '0x51077d14' # dev teardown
nat44_interface_details: '0x5d286289' # dev teardown
nat44_interface_dump: '0x51077d14' # dev teardown
- nat44_plugin_enable_disable: '0xdea0d501' # dev
- nat44_plugin_enable_disable_reply: '0xe8d4e804' # dev
nat44_show_running_config: '0x51077d14' # dev teardown
nat44_show_running_config_reply: '0x93d8e267' # dev teardown
nat44_static_mapping_details: '0x06cb40b2' # dev teardown
nat44_static_mapping_dump: '0x51077d14' # dev teardown
- nat44_user_details: '0x355896c2' # not used
- nat44_user_dump: '0x51077d14' # not used
- nat44_user_session_details: '0x2cf6e16d' # not used
- nat44_user_session_dump: '0xe1899c98' # not used
# nat44_user_dump and nat44_user_session_dump can be called
# by show_nat_user_data function
nat_worker_details: '0x84bf06fc' # dev teardown
nat_worker_dump: '0x51077d14' # dev teardown
+
+ # plugins/nsim/nsim.api
nsim_configure2: '0x64de8ed3' # perf
nsim_configure2_reply: '0xe8d4e804' # perf
nsim_output_feature_enable_disable: '0x3865946c' # perf
nsim_output_feature_enable_disable_reply: '0xe8d4e804' # perf
# 4x^ 1280B-1c-eth-ip4udpquicscale10cl1s-vppecho-bps
# ^ 1280BAND1cANDeth-ip4udpquicscale10cl1s-vppecho
- policer_add_del: '0x2b31dd38' # dev
- policer_add_del_reply: '0xa177cef2' # dev
+
+ # vnet/policer/policer.api
+ policer_add: '0x4d949e35' # dev
+ policer_add_reply: '0xa177cef2' # dev
+
+ # vnet/classify/classify.api
policer_classify_set_interface: '0xde7ad708' # dev
policer_classify_set_interface_reply: '0xe8d4e804' # dev
- rdma_create_v3: '0xc6287ea8' # perf
- rdma_create_v3_reply: '0x5383d31f' # perf
+
+ # plugins/rdma/rdma.api
+ rdma_create_v4: '0xc6287ea8' # perf
+ rdma_create_v4_reply: '0x5383d31f' # perf
# 2x^ Any test with drv_rdma. Currently only available on 2n-clx.
# - Not testable by devicetest (until we have environment with right NICs).
+
+ # vlibmemory/vlib.api
show_threads: '0x51077d14' # dev
show_threads_reply: '0xefd78e83' # dev
+
+ # vpp/api/vpe.api
show_version: '0x51077d14' # dev setup
show_version_reply: '0xc919bde1' # dev setup
+
+ # vnet/srv6/sr.api
sr_localsid_add_del: '0x5a36c324' # dev
sr_localsid_add_del_reply: '0xe8d4e804' # dev
sr_localsids_details: '0x2e9221b9' # dev teardown
sr_localsids_dump: '0x51077d14' # dev teardown
- sr_policies_details: '0xdb6ff2a1' # dev teardown
- sr_policies_dump: '0x51077d14' # dev teardown
- sr_policy_add: '0x44ac92e8' # dev
- sr_policy_add_reply: '0xe8d4e804' # dev
+ sr_policies_v2_details: '0x96dcb699' # dev teardown
+ sr_policies_v2_dump: '0x51077d14' # dev teardown
+ sr_policy_add_v2: '0xf6297f36' # dev
+ sr_policy_add_reply: '0xe8d4e804' # dev but wrong
sr_set_encap_source: '0xd3bad5e1' # dev
sr_set_encap_source_reply: '0xe8d4e804' # dev
sr_steering_add_del: '0xe46b0a0f' # dev
sr_steering_add_del_reply: '0xe8d4e804' # dev
sr_steering_pol_details: '0xd41258c9' # dev teardown
sr_steering_pol_dump: '0x51077d14' # dev teardown
+
+ # vnet/bonding/bond.api
sw_bond_interface_details: '0x9428a69c' # perf
sw_bond_interface_dump: '0xf9e6675e' # perf
# ^^ see bond_*
+
+ # vnet/interface.api
sw_interface_add_del_address: '0x5463d73b' # dev
sw_interface_add_del_address_reply: '0xe8d4e804' # dev
sw_interface_details: '0x6c221fc7' # dev
sw_interface_dump: '0xaa610c27' # dev
# sw_interface_get_table / reply # honeycomb
+
+ # vnet/ip6-nd/ip6_nd.api
sw_interface_ip6nd_ra_config: '0x3eb00b1c' # dev
sw_interface_ip6nd_ra_config_reply: '0xe8d4e804' # dev
+
+ # vnet/interface.api
sw_interface_rx_placement_details: '0x9e44a7ce' # dev
sw_interface_rx_placement_dump: '0xf9e6675e' # dev
sw_interface_set_flags: '0xf5aec1b8' # dev
sw_interface_set_flags_reply: '0xe8d4e804' # dev
- sw_interface_set_geneve_bypass: '0x65247409' # not used
- sw_interface_set_geneve_bypass_reply: '0xe8d4e804' # not used
+
# sw_interface_set_geneve_bypass can be called
# by enable_interface_geneve_bypass function
+
+ # vnet/l2/l2.api
sw_interface_set_l2_bridge: '0xd0678b13' # dev
sw_interface_set_l2_bridge_reply: '0xe8d4e804' # dev
sw_interface_set_l2_xconnect: '0x4fa28a85' # dev
sw_interface_set_l2_xconnect_reply: '0xe8d4e804' # dev
+
+ # vnet/interface.api
sw_interface_set_mac_address: '0xc536e7eb' # dev
sw_interface_set_mac_address_reply: '0xe8d4e804' # dev
sw_interface_set_rx_placement: '0xdb65f3c9' # dev
@@ -284,22 +371,424 @@
sw_interface_set_table_reply: '0xe8d4e804' # dev
sw_interface_set_unnumbered: '0x154a6439' # dev
sw_interface_set_unnumbered_reply: '0xe8d4e804' # dev
+
+ # plugins/vxlan/vxlan.api
sw_interface_set_vxlan_bypass: '0x65247409' # dev
sw_interface_set_vxlan_bypass_reply: '0xe8d4e804' # dev
+
+ # vnet/devices/tap/tapv2.api
sw_interface_tap_v2_details: '0x1e2b2a47' # dev
sw_interface_tap_v2_dump: '0xf9e6675e' # dev
+
+ # plugins/vhost/vhost_user.api
sw_interface_vhost_user_details: '0x0cee1e53' # dev teardown
sw_interface_vhost_user_dump: '0xf9e6675e' # dev deardown
+
+ # vnet/bonding/bond.api
sw_member_interface_details: '0x3c4a0e23' # perf
sw_member_interface_dump: '0xf9e6675e' # perf
# ^^ see bond_*
- tap_create_v2: '0x2d0d6570' # dev
- tap_create_v2_reply: '0x5383d31f' # dev
+
+ # vnet/devices/tap/tapv2.api
+ tap_create_v3: '0x3f3fd1df' # dev
+ tap_create_v3_reply: '0x5383d31f' # dev
+
+ # plugins/vxlan/vxlan.api
vxlan_add_del_tunnel_v3: '0x0072b037' # dev
vxlan_add_del_tunnel_v3_reply: '0x5383d31f' # dev
# vxlan_gpe_tunnel_dump / details # honeycomb
# vxlan_tunnel_dump /details # unused L2 keyword: Get VXLAN dump
-# Please keep alphabetic order.
+
+ # plugins/wireguard/wireguard.api
+ wireguard_interface_create: '0xa530137e'
+ wireguard_interface_create_reply: '0x5383d31f'
+ wireguard_peer_add: '0x9b8aad61'
+ wireguard_peer_add_reply: '0x084a0cd3'
+ wg_set_async_mode: '0xa6465f7c'
+ wg_set_async_mode_reply: '0xe8d4e804'
+
+ # Please keep alphabetic order.
+
+24.02-with-srv6-fix:
+ # plugins/acl/acl.api
+ acl_add_replace: '0xee5c2f18' # dev
+ acl_add_replace_reply: '0xac407b0c' # dev
+ acl_details: '0x95babae0' # dev teardown
+ acl_dump: '0xef34fea4' # dev teardown
+ acl_interface_list_details: '0xe695d256' # dev teardown
+ acl_interface_list_dump: '0xf9e6675e' # dev teardown
+ acl_interface_set_acl_list: '0x473982bd' # dev
+ acl_interface_set_acl_list_reply: '0xe8d4e804' # dev
+
+ # vlibmemory/vlib.api
+ add_node_next: '0x2457116d' # dev
+ add_node_next_reply: '0x2ed75f32' # dev
+
+ # plugins/adl/adl.api
+ adl_allowlist_enable_disable: '0xea88828d' # dev
+ adl_allowlist_enable_disable_reply: '0xe8d4e804' # dev
+ adl_interface_enable_disable: '0x5501adee' # dev
+ adl_interface_enable_disable_reply: '0xe8d4e804' # dev
+
+ # plugins/af_xdp/af_xdp.api
+ af_xdp_create_v3: '0xcf4b1827' # perf
+ af_xdp_create_v3_reply: '0x5383d31f' # perf
+
+ # plugins/avf/avf.api
+ avf_create: '0xdaab8ae2' # dev
+ avf_create_reply: '0x5383d31f' # dev
+
+ # vnet/bonding/bond.api
+ bond_add_member: '0xe7d14948' # perf
+ bond_add_member_reply: '0xe8d4e804' # perf
+ bond_create2: '0x912fda76' # perf
+ bond_create2_reply: '0x5383d31f' # perf
+ # 4x^ 64B-1c-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
+ # ^ ndrpdrAND1cAND64bAND1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm
+
+ # vnet/l2/l2.api
+ bridge_domain_add_del_v2: '0x600b7170' # dev
+ bridge_domain_add_del_v2_reply: '0xfcb1e980' # dev
+ # bridge_domain_dump / details # honeycomb
+
+ # vnet/classify/classify.api
+ classify_add_del_session: '0xf20879f0' # dev
+ classify_add_del_session_reply: '0xe8d4e804' # dev
+ classify_add_del_table: '0x6849e39e' # dev
+ classify_add_del_table_reply: '0x05486349' # dev
+ # classify_session_dump / details # honeycomb
+ # classify_table_by_interface / reply # honeycomb
+ # classify_table_info / reply # honeycomb
+
+ # vlibmemory/vlib.api
+ cli_inband: '0xf8377302' # dev setup
+ cli_inband_reply: '0x05879051' # dev setup
+
+ # vnet/interface.api
+ create_loopback_instance: '0xd36a3ee2' # dev
+ create_loopback_instance_reply: '0x5383d31f' # dev
+
+ # vnet/interface.api
+ create_subif: '0x790ca755' # perf
+ create_subif_reply: '0x5383d31f' # perf
+ # ^^ 64B-1c-dot1ad-l2xcbase-ndrpdr
+ # ^ ndrpdrAND1cAND64bANDdot1ad-l2xcbase
+
+ # plugins/vhost/vhost_user.api
+ create_vhost_user_if_v2: '0xdba1cc1d' # dev
+ create_vhost_user_if_v2_reply: '0x5383d31f' # dev
+
+ # vnet/interface.api
+ create_vlan_subif: '0xaf34ac8b' # dev
+ create_vlan_subif_reply: '0x5383d31f' # dev
+
+ # plugins/crypto_sw_scheduler/crypto_sw_scheduler.api
+ crypto_set_async_dispatch_v2: '0x667d2d54' # perf
+ crypto_set_async_dispatch_v2_reply: '0xe8d4e804' # perf
+ crypto_sw_scheduler_set_worker: '0xb4274502' # perf
+ crypto_sw_scheduler_set_worker_reply: '0xe8d4e804' # perf
+ # 4^ 64B-1c-ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm-udir-ndrpdr
+ # ^ ndrpdrAND1cAND64BANDethip4ipsec8tnlswasync-scheduler-ip4base-int-\
+ # aes128gcm-udir
+
+ # plugins/nat/det44/det44.api
+ det44_add_del_map: '0x1150a190' # dev
+ det44_add_del_map_reply: '0xe8d4e804' # dev
+ det44_interface_add_del_feature: '0xdc17a836' # dev
+ det44_interface_add_del_feature_reply: '0xe8d4e804' # dev
+ det44_interface_details: '0xe60cc5be' # dev teardown
+ det44_interface_dump: '0x51077d14' # dev teardown
+ det44_map_details: '0xad91dc83' # dev teardown
+ det44_map_dump: '0x51077d14' # dev teardown
+ det44_plugin_enable_disable: '0x617b6bf8' # dev
+ det44_plugin_enable_disable_reply: '0xe8d4e804' # dev
+ det44_session_dump: '0xe45a3af7' # dev
+ # TODO: Which test to run to verify det44_* messages?
+ # dhcp_proxy_dump / details # honeycomb
+
+ # vnet/flow/flow.api
+ flow_add_v2: '0x5b757558' # dev
+ flow_add_v2_reply: '0x8587dc85' # dev
+ flow_del: '0xb6b9b02c' # dev
+ flow_del_reply: '0xe8d4e804' # dev
+ flow_disable: '0x2024be69' # dev
+ flow_disable_reply: '0xe8d4e804' # dev
+ flow_enable: '0x2024be69' # dev
+ flow_enable_reply: '0xe8d4e804' # dev
+
+ # plugins/geneve/geneve.api
+ geneve_add_del_tunnel2: '0x8c2a9999' # dev
+ geneve_add_del_tunnel2_reply: '0x5383d31f' # dev
+ geneve_tunnel_details: '0x6b16eb24' # dev
+ geneve_tunnel_dump: '0xf9e6675e' # dev
+
+ # plugins/lisp/lisp-gpe/lisp_gpe.api
+ gpe_enable_disable: '0xc264d7bf' # dev
+ gpe_enable_disable_reply: '0xe8d4e804' # dev
+
+ # gre_tunnel_add_del / reply # unused L1 keyword: create_gre_tunnel_interface
+
+ # plugins/gtpu/gtpu.api
+ gtpu_add_del_tunnel_v2: '0xa0c30713' # perf
+ gtpu_add_del_tunnel_v2_reply: '0x62b41304' # perf
+ # ^^ 64B-1c-ethip4gtpusw-ip4base-ndrpdr
+ # ^ ndrpdrAND1cAND64BANDethip4gtpusw-ip4base
+ gtpu_offload_rx: '0xf0b08786' # perf
+ gtpu_offload_rx_reply: '0xe8d4e804' # perf
+
+ # vnet/interface.api
+ hw_interface_set_mtu: '0xe6746899' # dev
+ hw_interface_set_mtu_reply: '0xe8d4e804' # dev
+
+ # vnet/classify/classify.api
+ input_acl_set_interface: '0xde7ad708' # dev
+ input_acl_set_interface_reply: '0xe8d4e804' # dev
+
+ # vnet/ip/ip.api
+ ip_address_details: '0xee29b797' # dev
+ ip_address_dump: '0x2d033de4' # dev
+
+ # vnet/ip-neighbor/ip_neighbor.api
+ ip_neighbor_add_del: '0x0607c257' # dev
+ ip_neighbor_add_del_reply: '0x1992deab' # dev
+
+ # ip_probe_neighbor / reply # unused L1 keyword vpp_ip_probe
+
+ # vnet/ip/ip.api
+ ip_route_add_del: '0xb8ecfe0d' # dev
+ ip_route_add_del_reply: '0x1992deab' # dev
+ # ip_source_check_interface_add_del / reply # unused L1 keyword vpp_ip_source_check_setup
+ ip_table_add_del: '0x0ffdaec0' # dev
+ ip_table_add_del_reply: '0xe8d4e804' # dev
+
+ # vnet/ipip/ipip.api
+ ipip_add_tunnel: '0x2ac399f5' # dev
+ ipip_add_tunnel_reply: '0x5383d31f' # dev
+
+ # vnet/ipsec/ipsec.api
+ ipsec_interface_add_del_spd: '0x80f80cbb' # dev
+ ipsec_interface_add_del_spd_reply: '0xe8d4e804' # dev
+ ipsec_sa_v5_details: '0x3cfecfbd' # dev teardown
+ ipsec_sa_v5_dump: '0x2076c2f4' # dev teardown
+ ipsec_sad_entry_add_v2: '0x9611297a' # dev
+ ipsec_sad_entry_add_v2_reply: '0x9ffac24b' # dev
+ ipsec_select_backend: '0x5bcfd3b7' # perf
+ ipsec_select_backend_reply: '0xe8d4e804' # perf
+ # ^^ 64B-1c-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr
+ # ^ ndrpdrAND1cAND64BANDethip4ipsec1tnlhw-ip4base-int-aes256gcm
+ ipsec_set_async_mode: '0xa6465f7c' # perf
+ ipsec_set_async_mode_reply: '0xe8d4e804' # perf
+ ipsec_spd_add_del: '0x20e89a95' # dev
+ ipsec_spd_add_del_reply: '0xe8d4e804' # dev
+ ipsec_spd_entry_add_del_v2: '0x7bfe69fc' # dev
+ ipsec_spd_entry_add_del_v2_reply: '0x9ffac24b' # dev
+ ipsec_tunnel_protect_update: '0x30d5f133' # dev
+ ipsec_tunnel_protect_update_reply: '0xe8d4e804' # dev
+ # ^^ 64B-1c-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr
+ # ^ See ipsec_select_backend.
+
+ # vnet/l2/l2.api
+ # l2_fib_table_dump / details # honeycomb
+ l2_interface_vlan_tag_rewrite: '0x62cc0bbc' # perf
+ l2_interface_vlan_tag_rewrite_reply: '0xe8d4e804' # perf
+ # ^^ 64B-1c-dot1ad-l2xcbase-ndrpdr
+ # ^ ndrpdrAND1cAND64BANDdot1ad-l2xcbase
+ l2_patch_add_del: '0xa1f6a6f3' # dev
+ l2_patch_add_del_reply: '0xe8d4e804' # dev
+ # l2fib_add_del / reply # unused L1 keyword: vpp_add_l2fib_entry
+
+ # plugins/lb/lb.api
+ lb_add_del_as: '0x35d72500' # perf
+ lb_add_del_as_reply: '0xe8d4e804' # perf
+ lb_add_del_intf_nat4: '0x47d6e753' # perf
+ lb_add_del_intf_nat4_reply: '0xe8d4e804' # perf
+ lb_add_del_vip_v2: '0x7c520e0f' # perf
+ lb_add_del_vip_v2_reply: '0xe8d4e804' # perf
+ lb_conf: '0x56cd3261' # perf
+ lb_conf_reply: '0xe8d4e804' # perf
+ # 8x^ 64B-1c-ethip4-loadbalancer-nat4-ndrpdr
+ # ^ 2n: ndrpdrAND1cAND64BANDethip4-loadbalancer-nat4
+
+ # plugins/lisp/lisp-cp/lisp.api
+ lisp_add_del_adjacency: '0x2ce0e6f6' # dev
+ lisp_add_del_adjacency_reply: '0xe8d4e804' # dev
+ lisp_add_del_local_eid: '0x4e5a83a2' # dev
+ lisp_add_del_local_eid_reply: '0xe8d4e804' # dev
+ lisp_add_del_locator: '0xaf4d8f13' # dev
+ lisp_add_del_locator_reply: '0xe8d4e804' # dev
+ lisp_add_del_locator_set: '0x6fcd6471' # dev
+ lisp_add_del_locator_set_reply: '0xb6666db4' # dev
+ # lisp_add_del_map_resolver / reply # unused L2 keyword: Configure LISP map resolver address
+ lisp_add_del_remote_mapping: '0x6d5c789e' # dev
+ lisp_add_del_remote_mapping_reply: '0xe8d4e804' # dev
+ lisp_eid_table_add_del_map: '0x9481416b' # dev
+ lisp_eid_table_add_del_map_reply: '0xe8d4e804' # dev
+ lisp_enable_disable: '0xc264d7bf' # dev
+ lisp_enable_disable_reply: '0xe8d4e804' # dev
+
+ # plugins/acl/acl.api
+ macip_acl_add: '0xce6fbad0' # dev
+ macip_acl_add_reply: '0xac407b0c' # dev
+ macip_acl_details: '0x27135b59' # dev teardown
+ macip_acl_dump: '0xef34fea4' # dev teardown
+ macip_acl_interface_add_del: '0x4b8690b1' # dev
+ macip_acl_interface_add_del_reply: '0xe8d4e804' # dev
+ macip_acl_interface_get: '0x51077d14' # dev teardown
+ macip_acl_interface_get_reply: '0xaccf9b05' # dev teardown
+
+ # plugins/memif/memif.api
+ memif_create_v2: '0x8c7de5f7' # dev
+ memif_create_v2_reply: '0x5383d31f' # dev
+ memif_details: '0xda34feb9' # dev
+ memif_dump: '0x51077d14' # dev
+ memif_socket_filename_add_del_v2: '0x34223bdf' # dev
+ memif_socket_filename_add_del_v2_reply: '0x9f29bdb9' # dev
+
+ # plugins/nat/nat44-ed/nat44_ed.api
+ nat44_add_del_address_range: '0x6f2b8055' # dev
+ nat44_add_del_address_range_reply: '0xe8d4e804' # dev
+ nat44_address_details: '0x0d1beac1' # dev teardown
+ nat44_address_dump: '0x51077d14' # dev teardown
+ nat44_ed_plugin_enable_disable: '0xbe17f8dd' # dev
+ nat44_ed_plugin_enable_disable_reply: '0xe8d4e804' # dev
+ nat44_interface_add_del_feature: '0xf3699b83' # dev
+ nat44_interface_add_del_feature_reply: '0xe8d4e804' # dev
+ nat44_interface_addr_details: '0xe4aca9ca' # dev teardown
+ nat44_interface_addr_dump: '0x51077d14' # dev teardown
+ nat44_interface_details: '0x5d286289' # dev teardown
+ nat44_interface_dump: '0x51077d14' # dev teardown
+ nat44_show_running_config: '0x51077d14' # dev teardown
+ nat44_show_running_config_reply: '0x93d8e267' # dev teardown
+ nat44_static_mapping_details: '0x06cb40b2' # dev teardown
+ nat44_static_mapping_dump: '0x51077d14' # dev teardown
+ # nat44_user_dump and nat44_user_session_dump can be called
+ # by show_nat_user_data function
+ nat_worker_details: '0x84bf06fc' # dev teardown
+ nat_worker_dump: '0x51077d14' # dev teardown
+
+ # plugins/nsim/nsim.api
+ nsim_configure2: '0x64de8ed3' # perf
+ nsim_configure2_reply: '0xe8d4e804' # perf
+ nsim_output_feature_enable_disable: '0x3865946c' # perf
+ nsim_output_feature_enable_disable_reply: '0xe8d4e804' # perf
+ # 4x^ 1280B-1c-eth-ip4udpquicscale10cl1s-vppecho-bps
+ # ^ 1280BAND1cANDeth-ip4udpquicscale10cl1s-vppecho
+
+ # vnet/policer/policer.api
+ policer_add: '0x4d949e35' # dev
+ policer_add_reply: '0xa177cef2' # dev
+
+ # vnet/classify/classify.api
+ policer_classify_set_interface: '0xde7ad708' # dev
+ policer_classify_set_interface_reply: '0xe8d4e804' # dev
+
+ # plugins/rdma/rdma.api
+ rdma_create_v4: '0xc6287ea8' # perf
+ rdma_create_v4_reply: '0x5383d31f' # perf
+ # 2x^ Any test with drv_rdma. Currently only available on 2n-clx.
+ # - Not testable by devicetest (until we have environment with right NICs).
+
+ # vlibmemory/vlib.api
+ show_threads: '0x51077d14' # dev
+ show_threads_reply: '0xefd78e83' # dev
+
+ # vpp/api/vpe.api
+ show_version: '0x51077d14' # dev setup
+ show_version_reply: '0xc919bde1' # dev setup
+
+ # vnet/srv6/sr.api
+ sr_localsid_add_del: '0x5a36c324' # dev
+ sr_localsid_add_del_reply: '0xe8d4e804' # dev
+ sr_localsids_details: '0x2e9221b9' # dev teardown
+ sr_localsids_dump: '0x51077d14' # dev teardown
+ sr_policies_v2_details: '0x96dcb699' # dev teardown
+ sr_policies_v2_dump: '0x51077d14' # dev teardown
+ sr_policy_add_v2: '0xf6297f36' # dev
+ sr_policy_add_v2_reply: '0xe8d4e804' # dev
+ sr_set_encap_source: '0xd3bad5e1' # dev
+ sr_set_encap_source_reply: '0xe8d4e804' # dev
+ sr_steering_add_del: '0xe46b0a0f' # dev
+ sr_steering_add_del_reply: '0xe8d4e804' # dev
+ sr_steering_pol_details: '0xd41258c9' # dev teardown
+ sr_steering_pol_dump: '0x51077d14' # dev teardown
+
+ # vnet/bonding/bond.api
+ sw_bond_interface_details: '0x9428a69c' # perf
+ sw_bond_interface_dump: '0xf9e6675e' # perf
+ # ^^ see bond_*
+
+ # vnet/interface.api
+ sw_interface_add_del_address: '0x5463d73b' # dev
+ sw_interface_add_del_address_reply: '0xe8d4e804' # dev
+ sw_interface_details: '0x6c221fc7' # dev
+ sw_interface_dump: '0xaa610c27' # dev
+ # sw_interface_get_table / reply # honeycomb
+
+ # vnet/ip6-nd/ip6_nd.api
+ sw_interface_ip6nd_ra_config: '0x3eb00b1c' # dev
+ sw_interface_ip6nd_ra_config_reply: '0xe8d4e804' # dev
+
+ # vnet/interface.api
+ sw_interface_rx_placement_details: '0x9e44a7ce' # dev
+ sw_interface_rx_placement_dump: '0xf9e6675e' # dev
+ sw_interface_set_flags: '0xf5aec1b8' # dev
+ sw_interface_set_flags_reply: '0xe8d4e804' # dev
+
+ # sw_interface_set_geneve_bypass can be called
+ # by enable_interface_geneve_bypass function
+
+ # vnet/l2/l2.api
+ sw_interface_set_l2_bridge: '0xd0678b13' # dev
+ sw_interface_set_l2_bridge_reply: '0xe8d4e804' # dev
+ sw_interface_set_l2_xconnect: '0x4fa28a85' # dev
+ sw_interface_set_l2_xconnect_reply: '0xe8d4e804' # dev
+
+ # vnet/interface.api
+ sw_interface_set_mac_address: '0xc536e7eb' # dev
+ sw_interface_set_mac_address_reply: '0xe8d4e804' # dev
+ sw_interface_set_rx_placement: '0xdb65f3c9' # dev
+ sw_interface_set_rx_placement_reply: '0xe8d4e804' # dev
+ sw_interface_set_table: '0xdf42a577' # dev
+ sw_interface_set_table_reply: '0xe8d4e804' # dev
+ sw_interface_set_unnumbered: '0x154a6439' # dev
+ sw_interface_set_unnumbered_reply: '0xe8d4e804' # dev
+
+ # plugins/vxlan/vxlan.api
+ sw_interface_set_vxlan_bypass: '0x65247409' # dev
+ sw_interface_set_vxlan_bypass_reply: '0xe8d4e804' # dev
+
+ # vnet/devices/tap/tapv2.api
+ sw_interface_tap_v2_details: '0x1e2b2a47' # dev
+ sw_interface_tap_v2_dump: '0xf9e6675e' # dev
+
+ # plugins/vhost/vhost_user.api
+ sw_interface_vhost_user_details: '0x0cee1e53' # dev teardown
+ sw_interface_vhost_user_dump: '0xf9e6675e' # dev deardown
+
+ # vnet/bonding/bond.api
+ sw_member_interface_details: '0x3c4a0e23' # perf
+ sw_member_interface_dump: '0xf9e6675e' # perf
+ # ^^ see bond_*
+
+ # vnet/devices/tap/tapv2.api
+ tap_create_v3: '0x3f3fd1df' # dev
+ tap_create_v3_reply: '0x5383d31f' # dev
+
+ # plugins/vxlan/vxlan.api
+ vxlan_add_del_tunnel_v3: '0x0072b037' # dev
+ vxlan_add_del_tunnel_v3_reply: '0x5383d31f' # dev
+ # vxlan_gpe_tunnel_dump / details # honeycomb
+ # vxlan_tunnel_dump /details # unused L2 keyword: Get VXLAN dump
+
+ # plugins/wireguard/wireguard.api
+ wireguard_interface_create: '0xa530137e'
+ wireguard_interface_create_reply: '0x5383d31f'
+ wireguard_peer_add: '0x9b8aad61'
+ wireguard_peer_add_reply: '0x084a0cd3'
+ wg_set_async_mode: '0xa6465f7c'
+ wg_set_async_mode_reply: '0xe8d4e804'
+
+ # Please keep alphabetic order.
# Use bash command "env LC_COLLATE=C sort -u" if not clear.
# Hint to see the currently used command messages:
@@ -307,6 +796,7 @@
# Independent hint:
# $ fgrep -rn dump_and_log
+# (The rest has not been updated since 2021-09-28.)
# TODO: Create an on-demand perf verify job with a tag expression
# covering API calls used only in perf tests,
# and maintain the expression as device test gets more coverage.
diff --git a/resources/job_specs/hoststack_daily/vpp-2n-icx.md b/resources/job_specs/hoststack_daily/vpp-2n-icx.md
new file mode 120000
index 0000000000..c2daf3c07c
--- /dev/null
+++ b/resources/job_specs/hoststack_daily/vpp-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/vpp-hoststack-00.md \ No newline at end of file
diff --git a/resources/job_specs/hoststack_daily/vpp-2n-spr.md b/resources/job_specs/hoststack_daily/vpp-2n-spr.md
new file mode 120000
index 0000000000..3f4cc69a30
--- /dev/null
+++ b/resources/job_specs/hoststack_daily/vpp-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/vpp-hoststack-00.md \ No newline at end of file
diff --git a/resources/job_specs/hoststack_daily/vpp-3n-icx.md b/resources/job_specs/hoststack_daily/vpp-3n-icx.md
new file mode 120000
index 0000000000..7b4197a336
--- /dev/null
+++ b/resources/job_specs/hoststack_daily/vpp-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/vpp-hoststack-00.md \ No newline at end of file
diff --git a/resources/job_specs/hoststack_daily/vpp-3na-spr.md b/resources/job_specs/hoststack_daily/vpp-3na-spr.md
new file mode 120000
index 0000000000..3060e7ca5b
--- /dev/null
+++ b/resources/job_specs/hoststack_daily/vpp-3na-spr.md
@@ -0,0 +1 @@
+../report_iterative/3na-spr/vpp-hoststack-00.md \ No newline at end of file
diff --git a/resources/job_specs/hoststack_daily/vpp-3nb-spr.md b/resources/job_specs/hoststack_daily/vpp-3nb-spr.md
new file mode 120000
index 0000000000..443f8baefc
--- /dev/null
+++ b/resources/job_specs/hoststack_daily/vpp-3nb-spr.md
@@ -0,0 +1 @@
+../report_iterative/3nb-spr/vpp-hoststack-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-aws.md b/resources/job_specs/mrr_daily/vpp-2n-aws.md
new file mode 120000
index 0000000000..965e53fa4e
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-aws.md
@@ -0,0 +1 @@
+../report_iterative/2n-aws/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-c6in.md b/resources/job_specs/mrr_daily/vpp-2n-c6in.md
new file mode 120000
index 0000000000..3074380d6d
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/2n-c6in/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-clx.md b/resources/job_specs/mrr_daily/vpp-2n-clx.md
new file mode 120000
index 0000000000..044239b6d1
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-clx.md
@@ -0,0 +1 @@
+../report_iterative/2n-clx/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-icx.md b/resources/job_specs/mrr_daily/vpp-2n-icx.md
new file mode 120000
index 0000000000..7ff928265e
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-spr.md b/resources/job_specs/mrr_daily/vpp-2n-spr.md
new file mode 120000
index 0000000000..cc3073457d
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-tx2.md b/resources/job_specs/mrr_daily/vpp-2n-tx2.md
new file mode 120000
index 0000000000..14c98d957c
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-tx2.md
@@ -0,0 +1 @@
+../report_iterative/2n-tx2/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-2n-zn2.md b/resources/job_specs/mrr_daily/vpp-2n-zn2.md
new file mode 120000
index 0000000000..73776daa0a
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-2n-zn2.md
@@ -0,0 +1 @@
+../report_iterative/2n-zn2/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-alt.md b/resources/job_specs/mrr_daily/vpp-3n-alt.md
new file mode 120000
index 0000000000..1b9596d9af
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-alt.md
@@ -0,0 +1 @@
+../report_iterative/3n-alt/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-aws.md b/resources/job_specs/mrr_daily/vpp-3n-aws.md
new file mode 120000
index 0000000000..50ba8409ce
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-aws.md
@@ -0,0 +1 @@
+../report_iterative/3n-aws/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-c6in.md b/resources/job_specs/mrr_daily/vpp-3n-c6in.md
new file mode 120000
index 0000000000..0f7dc47446
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/3n-c6in/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-icx.md b/resources/job_specs/mrr_daily/vpp-3n-icx.md
new file mode 120000
index 0000000000..d0b496b069
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-icxd.md b/resources/job_specs/mrr_daily/vpp-3n-icxd.md
new file mode 120000
index 0000000000..2568163794
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-icxd.md
@@ -0,0 +1 @@
+../report_iterative/3n-icxd/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-snr.md b/resources/job_specs/mrr_daily/vpp-3n-snr.md
new file mode 120000
index 0000000000..65b6a2831c
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-snr.md
@@ -0,0 +1 @@
+../report_iterative/3n-snr/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3n-tsh.md b/resources/job_specs/mrr_daily/vpp-3n-tsh.md
new file mode 120000
index 0000000000..a558022c30
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3n-tsh.md
@@ -0,0 +1 @@
+../report_iterative/3n-tsh/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3na-spr.md b/resources/job_specs/mrr_daily/vpp-3na-spr.md
new file mode 120000
index 0000000000..d43bf2e979
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3na-spr.md
@@ -0,0 +1 @@
+../report_iterative/3na-spr/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_daily/vpp-3nb-spr.md b/resources/job_specs/mrr_daily/vpp-3nb-spr.md
new file mode 120000
index 0000000000..d609476a17
--- /dev/null
+++ b/resources/job_specs/mrr_daily/vpp-3nb-spr.md
@@ -0,0 +1 @@
+../report_iterative/3nb-spr/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-2n-clx.md b/resources/job_specs/mrr_weekly/dpdk-2n-clx.md
new file mode 120000
index 0000000000..0d1ea215a1
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-2n-clx.md
@@ -0,0 +1 @@
+../report_iterative/2n-clx/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-2n-icx.md b/resources/job_specs/mrr_weekly/dpdk-2n-icx.md
new file mode 120000
index 0000000000..71f0e84290
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-2n-spr.md b/resources/job_specs/mrr_weekly/dpdk-2n-spr.md
new file mode 120000
index 0000000000..b2831b40b9
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-2n-tx2.md b/resources/job_specs/mrr_weekly/dpdk-2n-tx2.md
new file mode 120000
index 0000000000..b1b9de6fc0
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-2n-tx2.md
@@ -0,0 +1 @@
+../report_iterative/2n-tx2/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-2n-zn2.md b/resources/job_specs/mrr_weekly/dpdk-2n-zn2.md
new file mode 120000
index 0000000000..bc5be8bd8c
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-2n-zn2.md
@@ -0,0 +1 @@
+../report_iterative/2n-zn2/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3n-alt.md b/resources/job_specs/mrr_weekly/dpdk-3n-alt.md
new file mode 120000
index 0000000000..1f9d6df133
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3n-alt.md
@@ -0,0 +1 @@
+../report_iterative/3n-alt/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3n-icx.md b/resources/job_specs/mrr_weekly/dpdk-3n-icx.md
new file mode 120000
index 0000000000..4704ed3d77
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3n-icxd.md b/resources/job_specs/mrr_weekly/dpdk-3n-icxd.md
new file mode 120000
index 0000000000..fed3574315
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3n-icxd.md
@@ -0,0 +1 @@
+../report_iterative/3n-icxd/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3n-snr.md b/resources/job_specs/mrr_weekly/dpdk-3n-snr.md
new file mode 120000
index 0000000000..e1b66b30d1
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3n-snr.md
@@ -0,0 +1 @@
+../report_iterative/3n-snr/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3n-tsh.md b/resources/job_specs/mrr_weekly/dpdk-3n-tsh.md
new file mode 120000
index 0000000000..6219c500bc
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3n-tsh.md
@@ -0,0 +1 @@
+../report_iterative/3n-tsh/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3na-spr.md b/resources/job_specs/mrr_weekly/dpdk-3na-spr.md
new file mode 120000
index 0000000000..343d1ad403
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3na-spr.md
@@ -0,0 +1 @@
+../report_iterative/3na-spr/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/dpdk-3nb-spr.md b/resources/job_specs/mrr_weekly/dpdk-3nb-spr.md
new file mode 120000
index 0000000000..255a61d7d1
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/dpdk-3nb-spr.md
@@ -0,0 +1 @@
+../report_iterative/3nb-spr/dpdk-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-2n-aws.md b/resources/job_specs/mrr_weekly/vpp-2n-aws.md
new file mode 120000
index 0000000000..965e53fa4e
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-2n-aws.md
@@ -0,0 +1 @@
+../report_iterative/2n-aws/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-2n-c6in.md b/resources/job_specs/mrr_weekly/vpp-2n-c6in.md
new file mode 120000
index 0000000000..3074380d6d
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-2n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/2n-c6in/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-2n-c7gn.md b/resources/job_specs/mrr_weekly/vpp-2n-c7gn.md
new file mode 120000
index 0000000000..274f15c6df
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-2n-c7gn.md
@@ -0,0 +1 @@
+../report_iterative/2n-c7gn/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-2n-clx.md b/resources/job_specs/mrr_weekly/vpp-2n-clx.md
new file mode 120000
index 0000000000..bf807ff871
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-2n-clx.md
@@ -0,0 +1 @@
+../report_iterative/2n-clx/nfv-density-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-2n-icx.md b/resources/job_specs/mrr_weekly/vpp-2n-icx.md
new file mode 120000
index 0000000000..0a77ba6cb2
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/nfv-density-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-3n-aws.md b/resources/job_specs/mrr_weekly/vpp-3n-aws.md
new file mode 120000
index 0000000000..50ba8409ce
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-3n-aws.md
@@ -0,0 +1 @@
+../report_iterative/3n-aws/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-3n-c6in.md b/resources/job_specs/mrr_weekly/vpp-3n-c6in.md
new file mode 120000
index 0000000000..0f7dc47446
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-3n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/3n-c6in/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-3n-c7gn.md b/resources/job_specs/mrr_weekly/vpp-3n-c7gn.md
new file mode 120000
index 0000000000..777b65fb21
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-3n-c7gn.md
@@ -0,0 +1 @@
+../report_iterative/3n-c7gn/vpp-mrr-00.md \ No newline at end of file
diff --git a/resources/job_specs/mrr_weekly/vpp-3n-icx.md b/resources/job_specs/mrr_weekly/vpp-3n-icx.md
new file mode 120000
index 0000000000..8bdb6a47bd
--- /dev/null
+++ b/resources/job_specs/mrr_weekly/vpp-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/vpp-mrr-01.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/trex-1n-aws.md b/resources/job_specs/ndrpdr_weekly/trex-1n-aws.md
new file mode 120000
index 0000000000..ba37e0aeff
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/trex-1n-aws.md
@@ -0,0 +1 @@
+../report_iterative/1n-aws/trex-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/trex-2n-icx.md b/resources/job_specs/ndrpdr_weekly/trex-2n-icx.md
new file mode 120000
index 0000000000..6a5be6cc52
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/trex-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/trex-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/trex-2n-spr.md b/resources/job_specs/ndrpdr_weekly/trex-2n-spr.md
new file mode 120000
index 0000000000..d0e2718135
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/trex-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/trex-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-aws.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-aws.md
new file mode 120000
index 0000000000..038d104cb2
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-aws.md
@@ -0,0 +1 @@
+../report_iterative/2n-aws/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-c6in.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-c6in.md
new file mode 120000
index 0000000000..1681d6889a
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/2n-c6in/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-c7gn.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-c7gn.md
new file mode 120000
index 0000000000..d2acc82d97
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-c7gn.md
@@ -0,0 +1 @@
+../report_iterative/2n-c7gn/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-clx.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-clx.md
new file mode 120000
index 0000000000..26380e3b87
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-clx.md
@@ -0,0 +1 @@
+../report_iterative/2n-clx/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-icx.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-icx.md
new file mode 120000
index 0000000000..26bc8e79ba
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-spr.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-spr.md
new file mode 120000
index 0000000000..d3e8994d51
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-tx2.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-tx2.md
new file mode 120000
index 0000000000..4f8d1fbc05
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-tx2.md
@@ -0,0 +1 @@
+../report_iterative/2n-tx2/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-2n-zn2.md b/resources/job_specs/ndrpdr_weekly/vpp-2n-zn2.md
new file mode 120000
index 0000000000..3d298e1620
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-2n-zn2.md
@@ -0,0 +1 @@
+../report_iterative/2n-zn2/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-alt.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-alt.md
new file mode 120000
index 0000000000..1a4724f4ba
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-alt.md
@@ -0,0 +1 @@
+../report_iterative/3n-alt/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-aws.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-aws.md
new file mode 120000
index 0000000000..59a0c9cab8
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-aws.md
@@ -0,0 +1 @@
+../report_iterative/3n-aws/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-c6in.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-c6in.md
new file mode 120000
index 0000000000..b2dbaf8dea
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-c6in.md
@@ -0,0 +1 @@
+../report_iterative/3n-c6in/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-c7gn.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-c7gn.md
new file mode 120000
index 0000000000..3491794e61
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-c7gn.md
@@ -0,0 +1 @@
+../report_iterative/3n-c7gn/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-icx.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-icx.md
new file mode 120000
index 0000000000..e573a084a3
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-icxd.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-icxd.md
new file mode 120000
index 0000000000..34536e77d4
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-icxd.md
@@ -0,0 +1 @@
+../report_iterative/3n-icxd/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-snr.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-snr.md
new file mode 120000
index 0000000000..f8cec14fbe
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-snr.md
@@ -0,0 +1 @@
+../report_iterative/3n-snr/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3n-tsh.md b/resources/job_specs/ndrpdr_weekly/vpp-3n-tsh.md
new file mode 120000
index 0000000000..42c1e6ebf8
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3n-tsh.md
@@ -0,0 +1 @@
+../report_iterative/3n-tsh/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3na-spr.md b/resources/job_specs/ndrpdr_weekly/vpp-3na-spr.md
new file mode 120000
index 0000000000..2971d5e6d9
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3na-spr.md
@@ -0,0 +1 @@
+../report_iterative/3na-spr/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/ndrpdr_weekly/vpp-3nb-spr.md b/resources/job_specs/ndrpdr_weekly/vpp-3nb-spr.md
new file mode 120000
index 0000000000..e58991fd44
--- /dev/null
+++ b/resources/job_specs/ndrpdr_weekly/vpp-3nb-spr.md
@@ -0,0 +1 @@
+../report_iterative/3nb-spr/vpp-ndrpdr-00.md \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/1n-aws/trex-00.md b/resources/job_specs/report_coverage/1n-aws/trex-00.md
new file mode 100644
index 0000000000..ba8246b2c3
--- /dev/null
+++ b/resources/job_specs/report_coverage/1n-aws/trex-00.md
@@ -0,0 +1,23 @@
+# 1n-aws
+## ./ip4
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4base-tg
+- AND 1518b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4base-tg
+- AND 9000b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4base-tg
+- AND imix AND ndrpdr AND nitro-50g AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+- AND 1518b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+- AND 9000b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+- AND imix AND ndrpdr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+## ./ip6
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6base-tg
+- AND 1518b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6base-tg
+- AND 9000b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6base-tg
+- AND imix AND ndrpdr AND nitro-50g AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6scale20k-tg
+- AND 1518b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6scale20k-tg
+- AND 9000b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6scale20k-tg
+- AND imix AND ndrpdr AND nitro-50g AND - AND ethip6-ip6scale20k-tg \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-aws/vpp-00.md b/resources/job_specs/report_coverage/2n-aws/vpp-00.md
new file mode 100644
index 0000000000..472491c2d0
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-aws/vpp-00.md
@@ -0,0 +1,37 @@
+# 2n-aws
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-c6in/vpp-00.md b/resources/job_specs/report_coverage/2n-c6in/vpp-00.md
new file mode 100644
index 0000000000..7f3eed1dd6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-c6in/vpp-00.md
@@ -0,0 +1,37 @@
+# 2n-c6in
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_coverage/2n-c7gn/vpp-00.md b/resources/job_specs/report_coverage/2n-c7gn/vpp-00.md
new file mode 100644
index 0000000000..27f15d638d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-c7gn/vpp-00.md
@@ -0,0 +1,37 @@
+# 2n-c7gn
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_coverage/2n-clx/dpdk-00.md b/resources/job_specs/report_coverage/2n-clx/dpdk-00.md
new file mode 100644
index 0000000000..cfb61497bc
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/dpdk-00.md
@@ -0,0 +1,23 @@
+# 2n-clx
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/gso-00.md b/resources/job_specs/report_coverage/2n-clx/gso-00.md
new file mode 100644
index 0000000000..7e416efdd6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/gso-00.md
@@ -0,0 +1,23 @@
+# 2n-clx
+## ./gso
+### intel-xxv710
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-00.md b/resources/job_specs/report_coverage/2n-clx/ip4-00.md
new file mode 100644
index 0000000000..034b09e5e2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-00.md
@@ -0,0 +1,145 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-01.md b/resources/job_specs/report_coverage/2n-clx/ip4-01.md
new file mode 100644
index 0000000000..09d3fab6be
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-01.md
@@ -0,0 +1,65 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-02.md b/resources/job_specs/report_coverage/2n-clx/ip4-02.md
new file mode 100644
index 0000000000..c0797c780f
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-02.md
@@ -0,0 +1,45 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-03.md b/resources/job_specs/report_coverage/2n-clx/ip4-03.md
new file mode 100644
index 0000000000..a6309098c7
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-03.md
@@ -0,0 +1,45 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-04.md b/resources/job_specs/report_coverage/2n-clx/ip4-04.md
new file mode 100644
index 0000000000..e8e682a8bc
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-04.md
@@ -0,0 +1,45 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-05.md b/resources/job_specs/report_coverage/2n-clx/ip4-05.md
new file mode 100644
index 0000000000..d72d13e039
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-05.md
@@ -0,0 +1,68 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-06.md b/resources/job_specs/report_coverage/2n-clx/ip4-06.md
new file mode 100644
index 0000000000..901f49e92d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-06.md
@@ -0,0 +1,92 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+##### ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+##### ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-07.md b/resources/job_specs/report_coverage/2n-clx/ip4-07.md
new file mode 100644
index 0000000000..48477335a1
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-07.md
@@ -0,0 +1,36 @@
+# 2n-clx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4-08.md b/resources/job_specs/report_coverage/2n-clx/ip4-08.md
new file mode 100644
index 0000000000..7ddfb40b11
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4-08.md
@@ -0,0 +1,128 @@
+# 2n-clx
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+#### mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4tun-00.md b/resources/job_specs/report_coverage/2n-clx/ip4tun-00.md
new file mode 100644
index 0000000000..40b8066c4e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4tun-00.md
@@ -0,0 +1,64 @@
+# 2n-clx
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+##### ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip4tun-01.md b/resources/job_specs/report_coverage/2n-clx/ip4tun-01.md
new file mode 100644
index 0000000000..c3667be88c
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip4tun-01.md
@@ -0,0 +1,24 @@
+# 2n-clx
+## ./ip4_tunnels
+### intel-xxv710
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip6-00.md b/resources/job_specs/report_coverage/2n-clx/ip6-00.md
new file mode 100644
index 0000000000..05cd25b740
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip6-00.md
@@ -0,0 +1,65 @@
+# 2n-clx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip6-01.md b/resources/job_specs/report_coverage/2n-clx/ip6-01.md
new file mode 100644
index 0000000000..a034a7781c
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip6-01.md
@@ -0,0 +1,125 @@
+# 2n-clx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip6-02.md b/resources/job_specs/report_coverage/2n-clx/ip6-02.md
new file mode 100644
index 0000000000..e6ba545cd8
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip6-02.md
@@ -0,0 +1,48 @@
+# 2n-clx
+## ./ip6
+### intel-xxv710
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+#### mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/ip6-03.md b/resources/job_specs/report_coverage/2n-clx/ip6-03.md
new file mode 100644
index 0000000000..cac1baae51
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/ip6-03.md
@@ -0,0 +1,88 @@
+# 2n-clx
+## ./ip6
+### intel-xxv710
+#### avf
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+#### mlx5_core
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
diff --git a/resources/job_specs/report_coverage/2n-clx/l2-00.md b/resources/job_specs/report_coverage/2n-clx/l2-00.md
new file mode 100644
index 0000000000..b2743a8b92
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/l2-00.md
@@ -0,0 +1,85 @@
+# 2n-clx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/l2-01.md b/resources/job_specs/report_coverage/2n-clx/l2-01.md
new file mode 100644
index 0000000000..2431a58f83
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/l2-01.md
@@ -0,0 +1,65 @@
+# 2n-clx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/l2-02.md b/resources/job_specs/report_coverage/2n-clx/l2-02.md
new file mode 100644
index 0000000000..606535558b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/l2-02.md
@@ -0,0 +1,128 @@
+# 2n-clx
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+#### mlx5_core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/l2-03.md b/resources/job_specs/report_coverage/2n-clx/l2-03.md
new file mode 100644
index 0000000000..c922103a61
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/l2-03.md
@@ -0,0 +1,48 @@
+# 2n-clx
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+#### mlx5_core
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/lb-00.md b/resources/job_specs/report_coverage/2n-clx/lb-00.md
new file mode 100644
index 0000000000..a01b0d2a0e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/lb-00.md
@@ -0,0 +1,65 @@
+# 2n-clx
+## ./lb
+### intel-e810cq
+#### avf
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+#### dpdk-vfio-pci
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/lb-01.md b/resources/job_specs/report_coverage/2n-clx/lb-01.md
new file mode 100644
index 0000000000..b67874addd
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/lb-01.md
@@ -0,0 +1,34 @@
+# 2n-clx
+## ./lb
+### intel-xxv710
+#### avf
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/memif-00.md b/resources/job_specs/report_coverage/2n-clx/memif-00.md
new file mode 100644
index 0000000000..50b86b08df
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/memif-00.md
@@ -0,0 +1,65 @@
+# 2n-clx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/memif-01.md b/resources/job_specs/report_coverage/2n-clx/memif-01.md
new file mode 100644
index 0000000000..d23e041c19
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/memif-01.md
@@ -0,0 +1,45 @@
+# 2n-clx
+## ./container_memif
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/vhost-00.md b/resources/job_specs/report_coverage/2n-clx/vhost-00.md
new file mode 100644
index 0000000000..e3c2d77269
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/vhost-00.md
@@ -0,0 +1,125 @@
+# 2n-clx
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-clx/vhost-01.md b/resources/job_specs/report_coverage/2n-clx/vhost-01.md
new file mode 100644
index 0000000000..196ab63568
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-clx/vhost-01.md
@@ -0,0 +1,85 @@
+# 2n-clx
+## ./vm_vhost
+### intel-xxv710
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/dpdk-00.md b/resources/job_specs/report_coverage/2n-icx/dpdk-00.md
new file mode 100644
index 0000000000..26004ffa3f
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/dpdk-00.md
@@ -0,0 +1,67 @@
+# 2n-icx
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/gso-00.md b/resources/job_specs/report_coverage/2n-icx/gso-00.md
new file mode 100644
index 0000000000..f779ada7fa
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/gso-00.md
@@ -0,0 +1,23 @@
+# 2n-icx
+## ./gso
+### intel-e810cq
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/hoststack-00.md b/resources/job_specs/report_coverage/2n-icx/hoststack-00.md
new file mode 100644
index 0000000000..388b7e5321
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/hoststack-00.md
@@ -0,0 +1,42 @@
+# 2n-icx
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-00.md b/resources/job_specs/report_coverage/2n-icx/ip4-00.md
new file mode 100644
index 0000000000..ce5d81a750
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-00.md
@@ -0,0 +1,145 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-01.md b/resources/job_specs/report_coverage/2n-icx/ip4-01.md
new file mode 100644
index 0000000000..6dbb8b7858
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-01.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-02.md b/resources/job_specs/report_coverage/2n-icx/ip4-02.md
new file mode 100644
index 0000000000..6cae363f9d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-02.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-03.md b/resources/job_specs/report_coverage/2n-icx/ip4-03.md
new file mode 100644
index 0000000000..88de917570
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-03.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-04.md b/resources/job_specs/report_coverage/2n-icx/ip4-04.md
new file mode 100644
index 0000000000..f0ba7c1f55
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-04.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-05.md b/resources/job_specs/report_coverage/2n-icx/ip4-05.md
new file mode 100644
index 0000000000..bd07702a78
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-05.md
@@ -0,0 +1,68 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-06.md b/resources/job_specs/report_coverage/2n-icx/ip4-06.md
new file mode 100644
index 0000000000..90e61d2d4e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-06.md
@@ -0,0 +1,92 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+##### ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+##### ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-07.md b/resources/job_specs/report_coverage/2n-icx/ip4-07.md
new file mode 100644
index 0000000000..f9dd72b832
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-07.md
@@ -0,0 +1,36 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-10.md b/resources/job_specs/report_coverage/2n-icx/ip4-10.md
new file mode 100644
index 0000000000..f123ac3fef
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-10.md
@@ -0,0 +1,145 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# ##### ethip4-ip4scale20k
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# ##### ethip4-ip4scale20k-rnd
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+# ##### ethip4-ip4scale200k
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# ##### ethip4-ip4scale200k-rnd
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+# ##### ethip4-ip4scale2m
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# ##### ethip4-ip4scale2m-rnd
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+#### drv_mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-11.md b/resources/job_specs/report_coverage/2n-icx/ip4-11.md
new file mode 100644
index 0000000000..3af2cdf350
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-11.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4-ip4base-adlalwlistbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# ##### ethip4-ip4base-iacldstbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# ##### ethip4-ip4base-ipolicemarkbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+#### drv_mlx5_core
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-12.md b/resources/job_specs/report_coverage/2n-icx/ip4-12.md
new file mode 100644
index 0000000000..a9da8527d5
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-12.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# ##### ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+#### drv_mlx5_core
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-13.md b/resources/job_specs/report_coverage/2n-icx/ip4-13.md
new file mode 100644
index 0000000000..8e258250c1
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-13.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# ##### ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+#### drv_mlx5_core
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-14.md b/resources/job_specs/report_coverage/2n-icx/ip4-14.md
new file mode 100644
index 0000000000..5f70043118
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-14.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# ##### ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+#### drv_mlx5_core
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-15.md b/resources/job_specs/report_coverage/2n-icx/ip4-15.md
new file mode 100644
index 0000000000..beb4aacd71
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-15.md
@@ -0,0 +1,68 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+# ##### ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+# ##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+# ##### ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+# ##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+# ##### ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+# ##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+# ##### ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+# ##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+# ##### ethip4tcp-ip4base-h16384-p63-s1032192-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+# ##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+# ##### ethip4tcp-ip4base-h262144-p63-s16515072-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+# ##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+# ##### ethip4tcp-ip4base-h16384-p63-s1032192-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+# ##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+# ##### ethip4tcp-ip4base-h262144-p63-s16515072-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4tcp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-16.md b/resources/job_specs/report_coverage/2n-icx/ip4-16.md
new file mode 100644
index 0000000000..a7245f8254
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-16.md
@@ -0,0 +1,92 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4udp-nat44det-h1024-p63-s64512
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h1024-p63-s64512
+# ##### ethip4udp-nat44det-h16384-p63-s1032192
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h16384-p63-s1032192
+# ##### ethip4udp-nat44det-h65536-p63-s4128758
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h65536-p63-s4128758
+# ##### ethip4udp-nat44det-h262144-p63-s16515072
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44det-h262144-p63-s16515072
+# ##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+# ##### ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+# ##### ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+# ##### ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+# ##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+# ##### ethip4udp-nat44ed-h16384-p63-s1032192-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+# ##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+# ##### ethip4udp-nat44ed-h262144-p63-s16515072-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+# ##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+# ##### ethip4udp-nat44ed-h16384-p63-s1032192-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+# ##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+# ##### ethip4udp-nat44ed-h262144-p63-s16515072-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-nat44ed-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4-17.md b/resources/job_specs/report_coverage/2n-icx/ip4-17.md
new file mode 100644
index 0000000000..087cab2eae
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4-17.md
@@ -0,0 +1,36 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4udp-ip4base-h1024-p63-s64512-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+# ##### ethip4udp-ip4base-h16384-p63-s1032192-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+# ##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+# ##### ethip4udp-ip4base-h262144-p63-s16515072-cps
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+# ##### ethip4udp-ip4base-h1024-p63-s64512-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+# ##### ethip4udp-ip4base-h16384-p63-s1032192-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+# ##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+# ##### ethip4udp-ip4base-h262144-p63-s16515072-tput
+# 1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+# 2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+# 4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4tun-00.md b/resources/job_specs/report_coverage/2n-icx/ip4tun-00.md
new file mode 100644
index 0000000000..74ebf38703
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4tun-00.md
@@ -0,0 +1,64 @@
+# 2n-icx
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+##### ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip4tun-10.md b/resources/job_specs/report_coverage/2n-icx/ip4tun-10.md
new file mode 100644
index 0000000000..302481eebe
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip4tun-10.md
@@ -0,0 +1,64 @@
+# 2n-icx
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4--ethip4udpgeneve-1tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+# ##### ethip4--ethip4udpgeneve-4tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-4tun-ip4base
+# ##### ethip4--ethip4udpgeneve-16tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+# ##### ethip4--ethip4udpgeneve-64tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-64tun-ip4base
+# ##### ethip4--ethip4udpgeneve-256tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+# ##### ethip4--ethip4udpgeneve-1024tun-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip6-00.md b/resources/job_specs/report_coverage/2n-icx/ip6-00.md
new file mode 100644
index 0000000000..6dd195c2ab
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip6-00.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip6-01.md b/resources/job_specs/report_coverage/2n-icx/ip6-01.md
new file mode 100644
index 0000000000..5ee9a5611c
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip6-01.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip6-10.md b/resources/job_specs/report_coverage/2n-icx/ip6-10.md
new file mode 100644
index 0000000000..def78cc3fa
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip6-10.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./ip6
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip6-ip6base
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# ##### ethip6-ip6base-adlalwlistbase
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# ##### ethip6-ip6base-iacldstbase
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+#### drv_mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/ip6-11.md b/resources/job_specs/report_coverage/2n-icx/ip6-11.md
new file mode 100644
index 0000000000..8bf767d21b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/ip6-11.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./ip6
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip6-ip6scale20k
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# ##### ethip6-ip6scale200k
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# ##### ethip6-ip6scale2m
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# ##### ethip6-ip6scale20k-rnd
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+# ##### ethip6-ip6scale200k-rnd
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+# ##### ethip6-ip6scale2m-rnd
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+#### drv_mlx5_core
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/l2-00.md b/resources/job_specs/report_coverage/2n-icx/l2-00.md
new file mode 100644
index 0000000000..1a4c21ab3b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/l2-00.md
@@ -0,0 +1,85 @@
+# 2n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/l2-01.md b/resources/job_specs/report_coverage/2n-icx/l2-01.md
new file mode 100644
index 0000000000..ffbdd7b41a
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/l2-01.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/l2-10.md b/resources/job_specs/report_coverage/2n-icx/l2-10.md
new file mode 100644
index 0000000000..e416dfc40e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/l2-10.md
@@ -0,0 +1,85 @@
+# 2n-icx
+## ./l2
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### eth-l2patch
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# ##### eth-l2xcbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# ##### eth-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# ##### dot1q-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+#### drv_mlx5_core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/l2-11.md b/resources/job_specs/report_coverage/2n-icx/l2-11.md
new file mode 100644
index 0000000000..6e0ae896d2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/l2-11.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./l2
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### eth-l2bdscale10kmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# ##### eth-l2bdscale100kmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# ##### eth-l2bdscale1mmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+#### drv_mlx5_core
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/lb-00.md b/resources/job_specs/report_coverage/2n-icx/lb-00.md
new file mode 100644
index 0000000000..b593d8772b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/lb-00.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./lb
+### intel-e810cq
+#### avf
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+#### dpdk-vfio-pci
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/lb-10.md b/resources/job_specs/report_coverage/2n-icx/lb-10.md
new file mode 100644
index 0000000000..a6dd326aac
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/lb-10.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./lb
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### ethip4-loadbalancer-l3dsr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-l3dsr
+# ##### ethip4-loadbalancer-maglev
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-maglev
+# ##### ethip4-loadbalancer-nat4
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-loadbalancer-nat4
+#### drv_mlx5_core
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/memif-00.md b/resources/job_specs/report_coverage/2n-icx/memif-00.md
new file mode 100644
index 0000000000..cc3bb4fdf0
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/memif-00.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/memif-10.md b/resources/job_specs/report_coverage/2n-icx/memif-10.md
new file mode 100644
index 0000000000..df21d124cb
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/memif-10.md
@@ -0,0 +1,65 @@
+# 2n-icx
+## ./container_memif
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+# ##### eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# ##### ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+#### drv_mlx5_core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/trex-00.md b/resources/job_specs/report_coverage/2n-icx/trex-00.md
new file mode 100644
index 0000000000..3d9cffa447
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/trex-00.md
@@ -0,0 +1,45 @@
+# 2n-icx
+## ./ip4
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND imix AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/trex-10.md b/resources/job_specs/report_coverage/2n-icx/trex-10.md
new file mode 100644
index 0000000000..4b6f52a12b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/trex-10.md
@@ -0,0 +1,48 @@
+# 2n-icx
+## ./ip4
+### mellanox-cx7veat
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### mellanox-cx7veat
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### mellanox-cx7veat
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/vhost-00.md b/resources/job_specs/report_coverage/2n-icx/vhost-00.md
new file mode 100644
index 0000000000..88e218462a
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/vhost-00.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-icx/vhost-10.md b/resources/job_specs/report_coverage/2n-icx/vhost-10.md
new file mode 100644
index 0000000000..43525e3087
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-icx/vhost-10.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./vm_vhost
+### mellanox-cx7veat
+#### drv_rdma_core
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### drv_mlx5_core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/dpdk-00.md b/resources/job_specs/report_coverage/2n-spr/dpdk-00.md
new file mode 100644
index 0000000000..19a170ed6e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/dpdk-00.md
@@ -0,0 +1,67 @@
+# 2n-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/gso-00.md b/resources/job_specs/report_coverage/2n-spr/gso-00.md
new file mode 100644
index 0000000000..86c9d7ab68
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/gso-00.md
@@ -0,0 +1,23 @@
+# 2n-spr
+## ./gso
+### intel-e810cq
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/hoststack-00.md b/resources/job_specs/report_coverage/2n-spr/hoststack-00.md
new file mode 100644
index 0000000000..74dd03e3a0
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/hoststack-00.md
@@ -0,0 +1,42 @@
+# 2n-spr
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 64b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 64b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 1024b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 1024b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 2000b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 2000b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-00.md b/resources/job_specs/report_coverage/2n-spr/ip4-00.md
new file mode 100644
index 0000000000..93e9bee4ea
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-00.md
@@ -0,0 +1,145 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-01.md b/resources/job_specs/report_coverage/2n-spr/ip4-01.md
new file mode 100644
index 0000000000..1cec772a21
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-01.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-02.md b/resources/job_specs/report_coverage/2n-spr/ip4-02.md
new file mode 100644
index 0000000000..dd9846add6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-02.md
@@ -0,0 +1,45 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-03.md b/resources/job_specs/report_coverage/2n-spr/ip4-03.md
new file mode 100644
index 0000000000..a29e67bccb
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-03.md
@@ -0,0 +1,45 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-04.md b/resources/job_specs/report_coverage/2n-spr/ip4-04.md
new file mode 100644
index 0000000000..8245cc9a85
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-04.md
@@ -0,0 +1,45 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-05.md b/resources/job_specs/report_coverage/2n-spr/ip4-05.md
new file mode 100644
index 0000000000..37e91c1ebe
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-05.md
@@ -0,0 +1,68 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h262144-p63-s16515072-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-06.md b/resources/job_specs/report_coverage/2n-spr/ip4-06.md
new file mode 100644
index 0000000000..90e61d2d4e
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-06.md
@@ -0,0 +1,92 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-udir
+##### ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-udir
+##### ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h16384-p63-s1032192-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-nat44ed-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-07.md b/resources/job_specs/report_coverage/2n-spr/ip4-07.md
new file mode 100644
index 0000000000..58ba2864bb
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-07.md
@@ -0,0 +1,36 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h262144-p63-s16515072-tput \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-10.md b/resources/job_specs/report_coverage/2n-spr/ip4-10.md
new file mode 100644
index 0000000000..a91123ef0d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-10.md
@@ -0,0 +1,74 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-11.md b/resources/job_specs/report_coverage/2n-spr/ip4-11.md
new file mode 100644
index 0000000000..cd87a993f2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-11.md
@@ -0,0 +1,34 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-12.md b/resources/job_specs/report_coverage/2n-spr/ip4-12.md
new file mode 100644
index 0000000000..68b71d3ff5
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-12.md
@@ -0,0 +1,24 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-13.md b/resources/job_specs/report_coverage/2n-spr/ip4-13.md
new file mode 100644
index 0000000000..ea26e486c2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-13.md
@@ -0,0 +1,24 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4-14.md b/resources/job_specs/report_coverage/2n-spr/ip4-14.md
new file mode 100644
index 0000000000..c5139b6a35
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4-14.md
@@ -0,0 +1,24 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip4tun-00.md b/resources/job_specs/report_coverage/2n-spr/ip4tun-00.md
new file mode 100644
index 0000000000..5531403617
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip4tun-00.md
@@ -0,0 +1,64 @@
+# 2n-spr
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+##### ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip6-00.md b/resources/job_specs/report_coverage/2n-spr/ip6-00.md
new file mode 100644
index 0000000000..4f0d13bef1
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip6-00.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip6-01.md b/resources/job_specs/report_coverage/2n-spr/ip6-01.md
new file mode 100644
index 0000000000..94a5d241c2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip6-01.md
@@ -0,0 +1,125 @@
+# 2n-spr
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip6-10.md b/resources/job_specs/report_coverage/2n-spr/ip6-10.md
new file mode 100644
index 0000000000..62ee26ec22
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip6-10.md
@@ -0,0 +1,34 @@
+# 2n-icx
+## ./ip6
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/ip6-11.md b/resources/job_specs/report_coverage/2n-spr/ip6-11.md
new file mode 100644
index 0000000000..02d2d6bb4b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/ip6-11.md
@@ -0,0 +1,64 @@
+# 2n-spr
+## ./ip6
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/l2-00.md b/resources/job_specs/report_coverage/2n-spr/l2-00.md
new file mode 100644
index 0000000000..baabce1685
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/l2-00.md
@@ -0,0 +1,85 @@
+# 2n-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/l2-01.md b/resources/job_specs/report_coverage/2n-spr/l2-01.md
new file mode 100644
index 0000000000..2aa74b4307
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/l2-01.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/l2-10.md b/resources/job_specs/report_coverage/2n-spr/l2-10.md
new file mode 100644
index 0000000000..9c92de7726
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/l2-10.md
@@ -0,0 +1,44 @@
+# 2n-spr
+## ./l2
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/l2-11.md b/resources/job_specs/report_coverage/2n-spr/l2-11.md
new file mode 100644
index 0000000000..cbcc727cd6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/l2-11.md
@@ -0,0 +1,34 @@
+# 2n-spr
+## ./l2
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/lb-00.md b/resources/job_specs/report_coverage/2n-spr/lb-00.md
new file mode 100644
index 0000000000..07002c2b43
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/lb-00.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./lb
+### intel-e810cq
+#### avf
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-loadbalancer-nat4
+#### dpdk-vfio-pci
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/lb-10.md b/resources/job_specs/report_coverage/2n-spr/lb-10.md
new file mode 100644
index 0000000000..e3ab16262d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/lb-10.md
@@ -0,0 +1,34 @@
+# 2n-spr
+## ./lb
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/memif-00.md b/resources/job_specs/report_coverage/2n-spr/memif-00.md
new file mode 100644
index 0000000000..be544dd81b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/memif-00.md
@@ -0,0 +1,93 @@
+# 2n-spr
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/memif-10.md b/resources/job_specs/report_coverage/2n-spr/memif-10.md
new file mode 100644
index 0000000000..ac40f1cfe8
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/memif-10.md
@@ -0,0 +1,48 @@
+# 2n-spr
+## ./container_memif
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/trex-00.md b/resources/job_specs/report_coverage/2n-spr/trex-00.md
new file mode 100644
index 0000000000..4922080d1f
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/trex-00.md
@@ -0,0 +1,48 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### intel-e810cq
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+- AND imix AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### intel-e810cq
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 1518b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 9000b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg
+- AND imix AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/trex-10.md b/resources/job_specs/report_coverage/2n-spr/trex-10.md
new file mode 100644
index 0000000000..1229678bc2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/trex-10.md
@@ -0,0 +1,48 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### mellanox-cx7veat
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### mellanox-cx7veat
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 1518b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND 9000b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+- AND imix AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/vhost-00.md b/resources/job_specs/report_coverage/2n-spr/vhost-00.md
new file mode 100644
index 0000000000..6dff36fefb
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/vhost-00.md
@@ -0,0 +1,125 @@
+# 2n-spr
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-spr/vhost-10.md b/resources/job_specs/report_coverage/2n-spr/vhost-10.md
new file mode 100644
index 0000000000..3d92f58213
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-spr/vhost-10.md
@@ -0,0 +1,64 @@
+# 2n-spr
+## ./vm_vhost
+### mellanox-cx7veat
+#### drv_mlx5_core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-tx2/dpdk-00.md b/resources/job_specs/report_coverage/2n-tx2/dpdk-00.md
new file mode 100644
index 0000000000..fa850c1103
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/dpdk-00.md
@@ -0,0 +1,29 @@
+# 2n-tx2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-00.md b/resources/job_specs/report_coverage/2n-tx2/ip4-00.md
new file mode 100644
index 0000000000..6a786ee37d
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-00.md
@@ -0,0 +1,109 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-01.md b/resources/job_specs/report_coverage/2n-tx2/ip4-01.md
new file mode 100644
index 0000000000..b47109bd0f
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-01.md
@@ -0,0 +1,57 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-02.md b/resources/job_specs/report_coverage/2n-tx2/ip4-02.md
new file mode 100644
index 0000000000..e2a5aed1c5
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-02.md
@@ -0,0 +1,44 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-03.md b/resources/job_specs/report_coverage/2n-tx2/ip4-03.md
new file mode 100644
index 0000000000..695446736b
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-03.md
@@ -0,0 +1,44 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-04.md b/resources/job_specs/report_coverage/2n-tx2/ip4-04.md
new file mode 100644
index 0000000000..aee115510c
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-04.md
@@ -0,0 +1,44 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-05.md b/resources/job_specs/report_coverage/2n-tx2/ip4-05.md
new file mode 100644
index 0000000000..8e2c0efc04
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-05.md
@@ -0,0 +1,50 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h16384-p63-s1032192-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4tcp-ip4base-h262144-p63-s16515072-tput
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip4-06.md b/resources/job_specs/report_coverage/2n-tx2/ip4-06.md
new file mode 100644
index 0000000000..f241fcc4c5
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip4-06.md
@@ -0,0 +1,50 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h16384-p63-s1032192-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h16384-p63-s1032192-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h16384-p63-s1032192-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput
+1c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+2c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+4c AND 100b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-h262144-p63-s16515072-tput
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip6-00.md b/resources/job_specs/report_coverage/2n-tx2/ip6-00.md
new file mode 100644
index 0000000000..ce3cba3dd9
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip6-00.md
@@ -0,0 +1,57 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/ip6-01.md b/resources/job_specs/report_coverage/2n-tx2/ip6-01.md
new file mode 100644
index 0000000000..912bfb7362
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/ip6-01.md
@@ -0,0 +1,57 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale2m
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/l2-00.md b/resources/job_specs/report_coverage/2n-tx2/l2-00.md
new file mode 100644
index 0000000000..a1e1821d88
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/l2-00.md
@@ -0,0 +1,70 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/l2-01.md b/resources/job_specs/report_coverage/2n-tx2/l2-01.md
new file mode 100644
index 0000000000..5028338779
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/l2-01.md
@@ -0,0 +1,57 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/l2-02.md b/resources/job_specs/report_coverage/2n-tx2/l2-02.md
new file mode 100644
index 0000000000..062c6245b3
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/l2-02.md
@@ -0,0 +1,44 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/l2-03.md b/resources/job_specs/report_coverage/2n-tx2/l2-03.md
new file mode 100644
index 0000000000..e7abbcda61
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/l2-03.md
@@ -0,0 +1,44 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-tx2/l2-04.md b/resources/job_specs/report_coverage/2n-tx2/l2-04.md
new file mode 100644
index 0000000000..e2bbd8b0c6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-tx2/l2-04.md
@@ -0,0 +1,31 @@
+# 2n-tx2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/2n-zn2/dpdk-00.md b/resources/job_specs/report_coverage/2n-zn2/dpdk-00.md
new file mode 100644
index 0000000000..2ea2001715
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/dpdk-00.md
@@ -0,0 +1,23 @@
+# 2n-zn2
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/gso-00.md b/resources/job_specs/report_coverage/2n-zn2/gso-00.md
new file mode 100644
index 0000000000..567654f1f7
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/gso-00.md
@@ -0,0 +1,23 @@
+# 2n-zn2
+## ./gso
+### intel-xxv710
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-00.md b/resources/job_specs/report_coverage/2n-zn2/ip4-00.md
new file mode 100644
index 0000000000..c71a959457
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-00.md
@@ -0,0 +1,208 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale2m-rnd
+#### mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-01.md b/resources/job_specs/report_coverage/2n-zn2/ip4-01.md
new file mode 100644
index 0000000000..9a343b3993
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-01.md
@@ -0,0 +1,65 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-02.md b/resources/job_specs/report_coverage/2n-zn2/ip4-02.md
new file mode 100644
index 0000000000..fde114b0ac
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-02.md
@@ -0,0 +1,45 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-03.md b/resources/job_specs/report_coverage/2n-zn2/ip4-03.md
new file mode 100644
index 0000000000..e057149175
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-03.md
@@ -0,0 +1,45 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-04.md b/resources/job_specs/report_coverage/2n-zn2/ip4-04.md
new file mode 100644
index 0000000000..deb67cc8a2
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-04.md
@@ -0,0 +1,45 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4-05.md b/resources/job_specs/report_coverage/2n-zn2/ip4-05.md
new file mode 100644
index 0000000000..7eebfdfecc
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4-05.md
@@ -0,0 +1,105 @@
+# 2n-zn2
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4udp-nat44det-h1-p63-s63
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1-p63-s63
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+#### dpdk-vfio-pci
+##### ethip4udp-nat44det-h1-p63-s63
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1-p63-s63
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4udp-nat44det-h262144-p63-s16515072 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip4tun-00.md b/resources/job_specs/report_coverage/2n-zn2/ip4tun-00.md
new file mode 100644
index 0000000000..13c25ff313
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip4tun-00.md
@@ -0,0 +1,64 @@
+# 2n-zn2
+## ./ip4_tunnels
+### intel-xxv710
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+##### ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1024tun-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip6-00.md b/resources/job_specs/report_coverage/2n-zn2/ip6-00.md
new file mode 100644
index 0000000000..7686ee3be6
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip6-00.md
@@ -0,0 +1,87 @@
+# 2n-zn2
+### intel-xxv710
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+#### mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/ip6-01.md b/resources/job_specs/report_coverage/2n-zn2/ip6-01.md
new file mode 100644
index 0000000000..45096f2e11
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/ip6-01.md
@@ -0,0 +1,168 @@
+# 2n-zn2
+## ./ip6
+### intel-xxv710
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale2m-rnd
+#### mlx5_core
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/l2-00.md b/resources/job_specs/report_coverage/2n-zn2/l2-00.md
new file mode 100644
index 0000000000..5aa5a10307
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/l2-00.md
@@ -0,0 +1,148 @@
+# 2n-zn2
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+#### mlx5_core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/l2-01.md b/resources/job_specs/report_coverage/2n-zn2/l2-01.md
new file mode 100644
index 0000000000..c792e28697
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/l2-01.md
@@ -0,0 +1,88 @@
+# 2n-zn2
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+#### mlx5_core
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/lb-00.md b/resources/job_specs/report_coverage/2n-zn2/lb-00.md
new file mode 100644
index 0000000000..be5d748070
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/lb-00.md
@@ -0,0 +1,65 @@
+# 2n-zn2
+## ./lb
+### intel-xxv710
+#### avf
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-loadbalancer-nat4
+#### dpdk-vfio-pci
+##### ethip4-loadbalancer-l3dsr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-l3dsr
+##### ethip4-loadbalancer-maglev
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-maglev
+##### ethip4-loadbalancer-nat4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-loadbalancer-nat4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/memif-00.md b/resources/job_specs/report_coverage/2n-zn2/memif-00.md
new file mode 100644
index 0000000000..6dff4a63ca
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/memif-00.md
@@ -0,0 +1,65 @@
+# 2n-zn2
+## ./container_memif
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/2n-zn2/vhost-00.md b/resources/job_specs/report_coverage/2n-zn2/vhost-00.md
new file mode 100644
index 0000000000..24cb9070d0
--- /dev/null
+++ b/resources/job_specs/report_coverage/2n-zn2/vhost-00.md
@@ -0,0 +1,125 @@
+# 2n-zn2
+## ./vm_vhost
+### intel-xxv710
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-alt/dpdk-00.md b/resources/job_specs/report_coverage/3n-alt/dpdk-00.md
new file mode 100644
index 0000000000..47ba284f1d
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/dpdk-00.md
@@ -0,0 +1,11 @@
+# 3n-alt
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_coverage/3n-alt/dpdk-10.md b/resources/job_specs/report_coverage/3n-alt/dpdk-10.md
new file mode 100644
index 0000000000..8b41b67c49
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/dpdk-10.md
@@ -0,0 +1,29 @@
+# 3n-alt
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-00.md b/resources/job_specs/report_coverage/3n-alt/ip4-00.md
new file mode 100644
index 0000000000..ccda7031f9
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-00.md
@@ -0,0 +1,21 @@
+# 3n-alt
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4scale20k
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-01.md b/resources/job_specs/report_coverage/3n-alt/ip4-01.md
new file mode 100644
index 0000000000..e0da97bb62
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-01.md
@@ -0,0 +1,29 @@
+# 3n-alt
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base-ipolicemarkbase
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-02.md b/resources/job_specs/report_coverage/3n-alt/ip4-02.md
new file mode 100644
index 0000000000..595aa42c58
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-02.md
@@ -0,0 +1,37 @@
+# 3n-alt
+## ./ip4
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-10.md b/resources/job_specs/report_coverage/3n-alt/ip4-10.md
new file mode 100644
index 0000000000..02a196529c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-10.md
@@ -0,0 +1,56 @@
+# 3n-alt
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-11.md b/resources/job_specs/report_coverage/3n-alt/ip4-11.md
new file mode 100644
index 0000000000..954c412c90
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-11.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-12.md b/resources/job_specs/report_coverage/3n-alt/ip4-12.md
new file mode 100644
index 0000000000..88b7e53525
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-12.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4-13.md b/resources/job_specs/report_coverage/3n-alt/ip4-13.md
new file mode 100644
index 0000000000..4e5f1f91bc
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4-13.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4tun-00.md b/resources/job_specs/report_coverage/3n-alt/ip4tun-00.md
new file mode 100644
index 0000000000..fa199a9216
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4tun-00.md
@@ -0,0 +1,21 @@
+# 3n-alt
+## ./ip4_tunnels
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4vxlan-l2xcbase
diff --git a/resources/job_specs/report_coverage/3n-alt/ip4tun-10.md b/resources/job_specs/report_coverage/3n-alt/ip4tun-10.md
new file mode 100644
index 0000000000..1a3ff89774
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip4tun-10.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
diff --git a/resources/job_specs/report_coverage/3n-alt/ip6-00.md b/resources/job_specs/report_coverage/3n-alt/ip6-00.md
new file mode 100644
index 0000000000..3ba9ce61e7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip6-00.md
@@ -0,0 +1,21 @@
+# 3n-alt
+## ./ip6
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xl710 AND drv_avf AND ethip6-ip6scale20k
diff --git a/resources/job_specs/report_coverage/3n-alt/ip6-10.md b/resources/job_specs/report_coverage/3n-alt/ip6-10.md
new file mode 100644
index 0000000000..6cb1c99552
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip6-10.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
diff --git a/resources/job_specs/report_coverage/3n-alt/ip6-11.md b/resources/job_specs/report_coverage/3n-alt/ip6-11.md
new file mode 100644
index 0000000000..5f6decc6f6
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/ip6-11.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-00.md b/resources/job_specs/report_coverage/3n-alt/l2-00.md
new file mode 100644
index 0000000000..0bac8b3629
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-00.md
@@ -0,0 +1,45 @@
+# 3n-alt
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdscale10kmaclrn
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-01.md b/resources/job_specs/report_coverage/3n-alt/l2-01.md
new file mode 100644
index 0000000000..b365251894
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-01.md
@@ -0,0 +1,45 @@
+# 3n-alt
+## ./l2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+#### avf
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-10.md b/resources/job_specs/report_coverage/3n-alt/l2-10.md
new file mode 100644
index 0000000000..5604ad18a5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-10.md
@@ -0,0 +1,56 @@
+# 3n-alt
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-11.md b/resources/job_specs/report_coverage/3n-alt/l2-11.md
new file mode 100644
index 0000000000..c74375207d
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-11.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-12.md b/resources/job_specs/report_coverage/3n-alt/l2-12.md
new file mode 100644
index 0000000000..942a609146
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-12.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-13.md b/resources/job_specs/report_coverage/3n-alt/l2-13.md
new file mode 100644
index 0000000000..0bd073c44e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-13.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/l2-14.md b/resources/job_specs/report_coverage/3n-alt/l2-14.md
new file mode 100644
index 0000000000..d70172965c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/l2-14.md
@@ -0,0 +1,17 @@
+# 3n-alt
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3n-alt/memif-10.md b/resources/job_specs/report_coverage/3n-alt/memif-10.md
new file mode 100644
index 0000000000..55714e3f77
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/memif-10.md
@@ -0,0 +1,20 @@
+# 3n-alt
+## ./container_memif
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
diff --git a/resources/job_specs/report_coverage/3n-alt/srv6-10.md b/resources/job_specs/report_coverage/3n-alt/srv6-10.md
new file mode 100644
index 0000000000..85f5a07e06
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/srv6-10.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
diff --git a/resources/job_specs/report_coverage/3n-alt/srv6-11.md b/resources/job_specs/report_coverage/3n-alt/srv6-11.md
new file mode 100644
index 0000000000..3d4d501dc7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/srv6-11.md
@@ -0,0 +1,43 @@
+# 3n-alt
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_coverage/3n-alt/vhost-10.md b/resources/job_specs/report_coverage/3n-alt/vhost-10.md
new file mode 100644
index 0000000000..e04c15e133
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/vhost-10.md
@@ -0,0 +1,82 @@
+# 3n-alt
+## ./vm_vhost
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
diff --git a/resources/job_specs/report_coverage/3n-alt/vhost-11.md b/resources/job_specs/report_coverage/3n-alt/vhost-11.md
new file mode 100644
index 0000000000..fda225d818
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-alt/vhost-11.md
@@ -0,0 +1,30 @@
+# 3n-alt
+## ./vm_vhost
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_coverage/3n-aws/vpp-00.md b/resources/job_specs/report_coverage/3n-aws/vpp-00.md
new file mode 100644
index 0000000000..b35e0f88c3
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-aws/vpp-00.md
@@ -0,0 +1,27 @@
+# 3n-aws
+## ./crypto
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-c6in/vpp-00.md b/resources/job_specs/report_coverage/3n-c6in/vpp-00.md
new file mode 100644
index 0000000000..d29ab4e252
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-c6in/vpp-00.md
@@ -0,0 +1,27 @@
+# 3n-c6in
+## ./crypto
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_coverage/3n-c7gn/vpp-00.md b/resources/job_specs/report_coverage/3n-c7gn/vpp-00.md
new file mode 100644
index 0000000000..9925139e7e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-c7gn/vpp-00.md
@@ -0,0 +1,27 @@
+# 3n-c7gn
+## ./crypto
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-00.md b/resources/job_specs/report_coverage/3n-icx/crypto-00.md
new file mode 100644
index 0000000000..0716402b8d
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-00.md
@@ -0,0 +1,145 @@
+# 3n-icx
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-01.md b/resources/job_specs/report_coverage/3n-icx/crypto-01.md
new file mode 100644
index 0000000000..4d705d7119
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-01.md
@@ -0,0 +1,57 @@
+# 3n-icx
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-02.md b/resources/job_specs/report_coverage/3n-icx/crypto-02.md
new file mode 100644
index 0000000000..6dad318b31
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-02.md
@@ -0,0 +1,49 @@
+# 3n-icx
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-03.md b/resources/job_specs/report_coverage/3n-icx/crypto-03.md
new file mode 100644
index 0000000000..3f6e0b7de0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-03.md
@@ -0,0 +1,49 @@
+# 3n-icx
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-04.md b/resources/job_specs/report_coverage/3n-icx/crypto-04.md
new file mode 100644
index 0000000000..bd04621981
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-04.md
@@ -0,0 +1,221 @@
+# 3n-icx
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-05.md b/resources/job_specs/report_coverage/3n-icx/crypto-05.md
new file mode 100644
index 0000000000..35c93a428a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-05.md
@@ -0,0 +1,34 @@
+# 3n-icx
+## ./crypto
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-10.md b/resources/job_specs/report_coverage/3n-icx/crypto-10.md
new file mode 100644
index 0000000000..2c34efe707
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-10.md
@@ -0,0 +1,145 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-11.md b/resources/job_specs/report_coverage/3n-icx/crypto-11.md
new file mode 100644
index 0000000000..841836c986
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-11.md
@@ -0,0 +1,57 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-12.md b/resources/job_specs/report_coverage/3n-icx/crypto-12.md
new file mode 100644
index 0000000000..5dbe9eaf7c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-12.md
@@ -0,0 +1,49 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-13.md b/resources/job_specs/report_coverage/3n-icx/crypto-13.md
new file mode 100644
index 0000000000..988327af45
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-13.md
@@ -0,0 +1,49 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/crypto-14.md b/resources/job_specs/report_coverage/3n-icx/crypto-14.md
new file mode 100644
index 0000000000..81a994b3d6
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/crypto-14.md
@@ -0,0 +1,221 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/dpdk-00.md b/resources/job_specs/report_coverage/3n-icx/dpdk-00.md
new file mode 100644
index 0000000000..51950da5f5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/dpdk-00.md
@@ -0,0 +1,67 @@
+# 3n-icx
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/hoststack-00.md b/resources/job_specs/report_coverage/3n-icx/hoststack-00.md
new file mode 100644
index 0000000000..1fb5cab06f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/hoststack-00.md
@@ -0,0 +1,38 @@
+# 3n-icx
+## ./hoststack
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale10cl10s-vppecho
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-00.md b/resources/job_specs/report_coverage/3n-icx/ip4-00.md
new file mode 100644
index 0000000000..6e2cf10793
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-00.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-01.md b/resources/job_specs/report_coverage/3n-icx/ip4-01.md
new file mode 100644
index 0000000000..699172eff1
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-01.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-02.md b/resources/job_specs/report_coverage/3n-icx/ip4-02.md
new file mode 100644
index 0000000000..319b60c590
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-02.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-03.md b/resources/job_specs/report_coverage/3n-icx/ip4-03.md
new file mode 100644
index 0000000000..2d4be8764c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-03.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-04.md b/resources/job_specs/report_coverage/3n-icx/ip4-04.md
new file mode 100644
index 0000000000..13b12b10c6
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-04.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-05.md b/resources/job_specs/report_coverage/3n-icx/ip4-05.md
new file mode 100644
index 0000000000..06feb197d8
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-05.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-06.md b/resources/job_specs/report_coverage/3n-icx/ip4-06.md
new file mode 100644
index 0000000000..c056554c4f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-06.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-07.md b/resources/job_specs/report_coverage/3n-icx/ip4-07.md
new file mode 100644
index 0000000000..7cd8f81cb9
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-07.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-10.md b/resources/job_specs/report_coverage/3n-icx/ip4-10.md
new file mode 100644
index 0000000000..9e8bedf250
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-10.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4-ip4base
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base
+# ##### ethip4-ip4scale20k
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale20k
+# ##### ethip4-ip4scale200k
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale200k
+# ##### ethip4-ip4scale2m
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4scale2m
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-11.md b/resources/job_specs/report_coverage/3n-icx/ip4-11.md
new file mode 100644
index 0000000000..fda61ac6ad
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-11.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4-ip4base-adlalwlistbase
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# ##### ethip4-ip4base-iacldstbase
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# ##### ethip4-ip4base-ipolicemarkbase
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+#### mlx5-core
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-12.md b/resources/job_specs/report_coverage/3n-icx/ip4-12.md
new file mode 100644
index 0000000000..dd51823ea3
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-12.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# ##### ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-13.md b/resources/job_specs/report_coverage/3n-icx/ip4-13.md
new file mode 100644
index 0000000000..4848f00774
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-13.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# ##### ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-14.md b/resources/job_specs/report_coverage/3n-icx/ip4-14.md
new file mode 100644
index 0000000000..7fc5f89ee5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-14.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# ##### ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-15.md b/resources/job_specs/report_coverage/3n-icx/ip4-15.md
new file mode 100644
index 0000000000..e649564f22
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-15.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# ##### ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-16.md b/resources/job_specs/report_coverage/3n-icx/ip4-16.md
new file mode 100644
index 0000000000..fd0561530e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-16.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# ##### ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4-17.md b/resources/job_specs/report_coverage/3n-icx/ip4-17.md
new file mode 100644
index 0000000000..bb30325955
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4-17.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# ##### ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-00.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-00.md
new file mode 100644
index 0000000000..3e196aa5e7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-00.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-02.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-02.md
new file mode 100644
index 0000000000..c78ffdabe8
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-02.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+#### dpdk-vfio-pci
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-03.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-03.md
new file mode 100644
index 0000000000..478b02119b
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-03.md
@@ -0,0 +1,64 @@
+# 3n-icx
+## ./ip4_tunnels
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-04.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-04.md
new file mode 100644
index 0000000000..374e5c442a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-04.md
@@ -0,0 +1,46 @@
+# 3n-icx
+## ./ip4_tunnels
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-10.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-10.md
new file mode 100644
index 0000000000..84fd743550
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-10.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# ##### ethip4vxlan-l2xcbase
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2xcbase
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-12.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-12.md
new file mode 100644
index 0000000000..567bde09d6
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-12.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4lispip4-ip4base
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip4-ip4base
+# ##### ethip4lispip6-ip4base
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4lispip6-ip4base
+#### mlx5-core
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4lispip6-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip4tun-13.md b/resources/job_specs/report_coverage/3n-icx/ip4tun-13.md
new file mode 100644
index 0000000000..0a74aaca66
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip4tun-13.md
@@ -0,0 +1,64 @@
+# 3n-icx
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx-core
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6-00.md b/resources/job_specs/report_coverage/3n-icx/ip6-00.md
new file mode 100644
index 0000000000..691ea0559c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6-00.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6-01.md b/resources/job_specs/report_coverage/3n-icx/ip6-01.md
new file mode 100644
index 0000000000..322ccf257c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6-01.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6-10.md b/resources/job_specs/report_coverage/3n-icx/ip6-10.md
new file mode 100644
index 0000000000..65f1885d0f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6-10.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip6
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip6-ip6base
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base
+# ##### ethip6-ip6base-adlalwlistbase
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# ##### ethip6-ip6base-iacldstbase
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6-11.md b/resources/job_specs/report_coverage/3n-icx/ip6-11.md
new file mode 100644
index 0000000000..84019ba921
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6-11.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./ip6
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip6-ip6scale20k
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale20k
+# ##### ethip6-ip6scale200k
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale200k
+# ##### ethip6-ip6scale2m
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6-ip6scale2m
+#### mlx5-core
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6tun-00.md b/resources/job_specs/report_coverage/3n-icx/ip6tun-00.md
new file mode 100644
index 0000000000..5532db8723
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6tun-00.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip6_tunnels
+### intel-e810cq
+#### avf
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/ip6tun-10.md b/resources/job_specs/report_coverage/3n-icx/ip6tun-10.md
new file mode 100644
index 0000000000..8130a72898
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/ip6tun-10.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./ip6_tunnels
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip6lispip4-ip6base
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip4-ip6base
+# ##### ethip6lispip6-ip6base
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6lispip6-ip6base
+#### mlx5-core
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6lispip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-00.md b/resources/job_specs/report_coverage/3n-icx/l2-00.md
new file mode 100644
index 0000000000..b0c8d7683f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-00.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-01.md b/resources/job_specs/report_coverage/3n-icx/l2-01.md
new file mode 100644
index 0000000000..70d78b9b99
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-01.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-02.md b/resources/job_specs/report_coverage/3n-icx/l2-02.md
new file mode 100644
index 0000000000..a59291188a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-02.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-03.md b/resources/job_specs/report_coverage/3n-icx/l2-03.md
new file mode 100644
index 0000000000..6e0575e77f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-03.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-04.md b/resources/job_specs/report_coverage/3n-icx/l2-04.md
new file mode 100644
index 0000000000..b96f5ee911
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-04.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-05.md b/resources/job_specs/report_coverage/3n-icx/l2-05.md
new file mode 100644
index 0000000000..8d51d31084
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-05.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-06.md b/resources/job_specs/report_coverage/3n-icx/l2-06.md
new file mode 100644
index 0000000000..76d63b763a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-06.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-07.md b/resources/job_specs/report_coverage/3n-icx/l2-07.md
new file mode 100644
index 0000000000..080750d75e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-07.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-08.md b/resources/job_specs/report_coverage/3n-icx/l2-08.md
new file mode 100644
index 0000000000..a9c2fe104c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-08.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-09.md b/resources/job_specs/report_coverage/3n-icx/l2-09.md
new file mode 100644
index 0000000000..70bc932b36
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-09.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-10.md b/resources/job_specs/report_coverage/3n-icx/l2-10.md
new file mode 100644
index 0000000000..961b43775b
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-10.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-20.md b/resources/job_specs/report_coverage/3n-icx/l2-20.md
new file mode 100644
index 0000000000..85039f1546
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-20.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2patch
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2patch
+# ##### eth-l2xcbase
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase
+# ##### eth-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn
+# ##### dot1q-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+#### mlx5-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-21.md b/resources/job_specs/report_coverage/3n-icx/l2-21.md
new file mode 100644
index 0000000000..8962bcf552
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-21.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdscale10kmaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# ##### eth-l2bdscale100kmaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# ##### eth-l2bdscale1mmaclrn
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+#### mlx5-core
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-22.md b/resources/job_specs/report_coverage/3n-icx/l2-22.md
new file mode 100644
index 0000000000..8db9fb77d8
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-22.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-23.md b/resources/job_specs/report_coverage/3n-icx/l2-23.md
new file mode 100644
index 0000000000..a43b46fce5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-23.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-24.md b/resources/job_specs/report_coverage/3n-icx/l2-24.md
new file mode 100644
index 0000000000..59be5f7977
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-24.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-25.md b/resources/job_specs/report_coverage/3n-icx/l2-25.md
new file mode 100644
index 0000000000..36976099bf
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-25.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-26.md b/resources/job_specs/report_coverage/3n-icx/l2-26.md
new file mode 100644
index 0000000000..9dc66a9de8
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-26.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-27.md b/resources/job_specs/report_coverage/3n-icx/l2-27.md
new file mode 100644
index 0000000000..23c227e397
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-27.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-28.md b/resources/job_specs/report_coverage/3n-icx/l2-28.md
new file mode 100644
index 0000000000..2b75b4566e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-28.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-29.md b/resources/job_specs/report_coverage/3n-icx/l2-29.md
new file mode 100644
index 0000000000..c8ada10149
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-29.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/l2-30.md b/resources/job_specs/report_coverage/3n-icx/l2-30.md
new file mode 100644
index 0000000000..16f92f45a0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/l2-30.md
@@ -0,0 +1,25 @@
+# 3n-icx
+## ./l2
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/memif-00.md b/resources/job_specs/report_coverage/3n-icx/memif-00.md
new file mode 100644
index 0000000000..6bad241158
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/memif-00.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/memif-10.md b/resources/job_specs/report_coverage/3n-icx/memif-10.md
new file mode 100644
index 0000000000..5f9b69a4df
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/memif-10.md
@@ -0,0 +1,85 @@
+# 3n-icx
+## ./container_memif
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# ##### eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# ##### eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# ##### ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/srv6-00.md b/resources/job_specs/report_coverage/3n-icx/srv6-00.md
new file mode 100644
index 0000000000..40ecde5eca
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/srv6-00.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./srv6
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/srv6-01.md b/resources/job_specs/report_coverage/3n-icx/srv6-01.md
new file mode 100644
index 0000000000..161da30660
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/srv6-01.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./srv6
+### intel-e810cq
+#### avf
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+#### dpdk-vfio-pci
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/srv6-10.md b/resources/job_specs/report_coverage/3n-icx/srv6-10.md
new file mode 100644
index 0000000000..018def0bcb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/srv6-10.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./srv6
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# ##### ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# ##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/srv6-11.md b/resources/job_specs/report_coverage/3n-icx/srv6-11.md
new file mode 100644
index 0000000000..9b969f496e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/srv6-11.md
@@ -0,0 +1,65 @@
+# 3n-icx
+## ./srv6
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip6srhip6-srv6proxy-dyn
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# ##### ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# ##### ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+#### mlx5-core
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/vhost-00.md b/resources/job_specs/report_coverage/3n-icx/vhost-00.md
new file mode 100644
index 0000000000..92a8fadcb2
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/vhost-00.md
@@ -0,0 +1,125 @@
+# 3n-icx
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/vhost-01.md b/resources/job_specs/report_coverage/3n-icx/vhost-01.md
new file mode 100644
index 0000000000..a71253b71a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/vhost-01.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/vhost-10.md b/resources/job_specs/report_coverage/3n-icx/vhost-10.md
new file mode 100644
index 0000000000..2aa17c1e39
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/vhost-10.md
@@ -0,0 +1,125 @@
+# 3n-icx
+## ./vm_vhost
+### mellanox-cx6dx
+#### rdma-core
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### mlx5-core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icx/vhost-11.md b/resources/job_specs/report_coverage/3n-icx/vhost-11.md
new file mode 100644
index 0000000000..bee98fb18a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icx/vhost-11.md
@@ -0,0 +1,45 @@
+# 3n-icx
+## ./vm_vhost
+### mellanox-cx6dx
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/crypto-00.md b/resources/job_specs/report_coverage/3n-icxd/crypto-00.md
new file mode 100644
index 0000000000..dde0844b57
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/crypto-00.md
@@ -0,0 +1,94 @@
+# 3n-icxd
+## ./crypto
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/crypto-01.md b/resources/job_specs/report_coverage/3n-icxd/crypto-01.md
new file mode 100644
index 0000000000..2be5b4b9dd
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/crypto-01.md
@@ -0,0 +1,40 @@
+# 3n-icxd
+## ./crypto
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/crypto-02.md b/resources/job_specs/report_coverage/3n-icxd/crypto-02.md
new file mode 100644
index 0000000000..b1e2578b2e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/crypto-02.md
@@ -0,0 +1,112 @@
+# 3n-icxd
+## ./crypto
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/dpdk-00.md b/resources/job_specs/report_coverage/3n-icxd/dpdk-00.md
new file mode 100644
index 0000000000..5fa06803ac
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/dpdk-00.md
@@ -0,0 +1,23 @@
+# 3n-icxd
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip4-00.md b/resources/job_specs/report_coverage/3n-icxd/ip4-00.md
new file mode 100644
index 0000000000..32616ac139
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip4-00.md
@@ -0,0 +1,74 @@
+# 3n-icxd
+## ./ip4
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip4-01.md b/resources/job_specs/report_coverage/3n-icxd/ip4-01.md
new file mode 100644
index 0000000000..30ad972470
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip4-01.md
@@ -0,0 +1,34 @@
+# 3n-icxd
+## ./ip4
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip4tun-00.md b/resources/job_specs/report_coverage/3n-icxd/ip4tun-00.md
new file mode 100644
index 0000000000..6829ac1d40
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip4tun-00.md
@@ -0,0 +1,24 @@
+# 3n-icxd
+## ./ip4_tunnels
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip4tun-01.md b/resources/job_specs/report_coverage/3n-icxd/ip4tun-01.md
new file mode 100644
index 0000000000..e320a7347a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip4tun-01.md
@@ -0,0 +1,124 @@
+# 3n-icxd
+## ./ip4_tunnels
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip6-00.md b/resources/job_specs/report_coverage/3n-icxd/ip6-00.md
new file mode 100644
index 0000000000..f2ab8ae66f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip6-00.md
@@ -0,0 +1,34 @@
+# 3n-icxd
+## ./ip6
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/ip6-01.md b/resources/job_specs/report_coverage/3n-icxd/ip6-01.md
new file mode 100644
index 0000000000..1af12d779f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/ip6-01.md
@@ -0,0 +1,64 @@
+# 3n-icxd
+## ./ip6
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/l2-00.md b/resources/job_specs/report_coverage/3n-icxd/l2-00.md
new file mode 100644
index 0000000000..4ec849bba1
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/l2-00.md
@@ -0,0 +1,44 @@
+# 3n-icxd
+## ./l2
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-icxd/l2-01.md b/resources/job_specs/report_coverage/3n-icxd/l2-01.md
new file mode 100644
index 0000000000..fc31fc53a7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-icxd/l2-01.md
@@ -0,0 +1,34 @@
+# 3n-icxd
+## ./l2
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/crypto-00.md b/resources/job_specs/report_coverage/3n-snr/crypto-00.md
new file mode 100644
index 0000000000..eeaac10593
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/crypto-00.md
@@ -0,0 +1,94 @@
+# 3n-snr
+## ./crypto
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/crypto-01.md b/resources/job_specs/report_coverage/3n-snr/crypto-01.md
new file mode 100644
index 0000000000..bc04c58a58
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/crypto-01.md
@@ -0,0 +1,40 @@
+# 3n-snr
+## ./crypto
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/crypto-02.md b/resources/job_specs/report_coverage/3n-snr/crypto-02.md
new file mode 100644
index 0000000000..de289c69e4
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/crypto-02.md
@@ -0,0 +1,112 @@
+# 3n-snr
+## ./crypto
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/dpdk-00.md b/resources/job_specs/report_coverage/3n-snr/dpdk-00.md
new file mode 100644
index 0000000000..399f6581be
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/dpdk-00.md
@@ -0,0 +1,23 @@
+# 3n-snr
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip4-00.md b/resources/job_specs/report_coverage/3n-snr/ip4-00.md
new file mode 100644
index 0000000000..d1a98c3617
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip4-00.md
@@ -0,0 +1,74 @@
+# 3n-snr
+## ./ip4
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip4-01.md b/resources/job_specs/report_coverage/3n-snr/ip4-01.md
new file mode 100644
index 0000000000..13ba29b417
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip4-01.md
@@ -0,0 +1,34 @@
+# 3n-snr
+## ./ip4
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip4tun-00.md b/resources/job_specs/report_coverage/3n-snr/ip4tun-00.md
new file mode 100644
index 0000000000..8b84ffe790
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip4tun-00.md
@@ -0,0 +1,24 @@
+# 3n-snr
+## ./ip4_tunnels
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip4tun-01.md b/resources/job_specs/report_coverage/3n-snr/ip4tun-01.md
new file mode 100644
index 0000000000..2bcf6a03c5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip4tun-01.md
@@ -0,0 +1,124 @@
+# 3n-snr
+## ./ip4_tunnels
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip6-00.md b/resources/job_specs/report_coverage/3n-snr/ip6-00.md
new file mode 100644
index 0000000000..ce149ae18b
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip6-00.md
@@ -0,0 +1,34 @@
+# 3n-snr
+## ./ip6
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/ip6-01.md b/resources/job_specs/report_coverage/3n-snr/ip6-01.md
new file mode 100644
index 0000000000..2d9a8b3380
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/ip6-01.md
@@ -0,0 +1,64 @@
+# 3n-snr
+## ./ip6
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale200k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale2m-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/l2-00.md b/resources/job_specs/report_coverage/3n-snr/l2-00.md
new file mode 100644
index 0000000000..eef4e88ac0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/l2-00.md
@@ -0,0 +1,44 @@
+# 3n-snr
+## ./l2
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-snr/l2-01.md b/resources/job_specs/report_coverage/3n-snr/l2-01.md
new file mode 100644
index 0000000000..1d50d5e138
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-snr/l2-01.md
@@ -0,0 +1,34 @@
+# 3n-snr
+## ./l2
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3n-tsh/dpdk-00.md b/resources/job_specs/report_coverage/3n-tsh/dpdk-00.md
new file mode 100644
index 0000000000..ae1cd194be
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/dpdk-00.md
@@ -0,0 +1,29 @@
+# 3n-tsh
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip4-00.md b/resources/job_specs/report_coverage/3n-tsh/ip4-00.md
new file mode 100644
index 0000000000..5e5b55e9d5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip4-00.md
@@ -0,0 +1,70 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4scale2m
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip4-01.md b/resources/job_specs/report_coverage/3n-tsh/ip4-01.md
new file mode 100644
index 0000000000..d0388ff9e0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip4-01.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip4-02.md b/resources/job_specs/report_coverage/3n-tsh/ip4-02.md
new file mode 100644
index 0000000000..34ac21bc4a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip4-02.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip4-03.md b/resources/job_specs/report_coverage/3n-tsh/ip4-03.md
new file mode 100644
index 0000000000..035a2f53eb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip4-03.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip4tun-00.md b/resources/job_specs/report_coverage/3n-tsh/ip4tun-00.md
new file mode 100644
index 0000000000..4fd2682dab
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip4tun-00.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip6-00.md b/resources/job_specs/report_coverage/3n-tsh/ip6-00.md
new file mode 100644
index 0000000000..f26d8d93b3
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip6-00.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/ip6-01.md b/resources/job_specs/report_coverage/3n-tsh/ip6-01.md
new file mode 100644
index 0000000000..dd395ae7e9
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/ip6-01.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6scale2m
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/l2-00.md b/resources/job_specs/report_coverage/3n-tsh/l2-00.md
new file mode 100644
index 0000000000..4b4f04e168
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/l2-00.md
@@ -0,0 +1,70 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/l2-01.md b/resources/job_specs/report_coverage/3n-tsh/l2-01.md
new file mode 100644
index 0000000000..e93de3495b
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/l2-01.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/l2-02.md b/resources/job_specs/report_coverage/3n-tsh/l2-02.md
new file mode 100644
index 0000000000..915a534749
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/l2-02.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/l2-03.md b/resources/job_specs/report_coverage/3n-tsh/l2-03.md
new file mode 100644
index 0000000000..7209f177d1
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/l2-03.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/l2-04.md b/resources/job_specs/report_coverage/3n-tsh/l2-04.md
new file mode 100644
index 0000000000..a397ce7227
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/l2-04.md
@@ -0,0 +1,31 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/memif-00.md b/resources/job_specs/report_coverage/3n-tsh/memif-00.md
new file mode 100644
index 0000000000..cf8003132f
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/memif-00.md
@@ -0,0 +1,70 @@
+# 3n-tsh
+## ./container_memif
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/srv6-00.md b/resources/job_specs/report_coverage/3n-tsh/srv6-00.md
new file mode 100644
index 0000000000..69aa1d0f28
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/srv6-00.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/srv6-01.md b/resources/job_specs/report_coverage/3n-tsh/srv6-01.md
new file mode 100644
index 0000000000..4b5b1c2447
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/srv6-01.md
@@ -0,0 +1,57 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./tcp
+## ./vm_vhost
diff --git a/resources/job_specs/report_coverage/3n-tsh/vhost-00.md b/resources/job_specs/report_coverage/3n-tsh/vhost-00.md
new file mode 100644
index 0000000000..9d9df00ccc
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/vhost-00.md
@@ -0,0 +1,96 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
diff --git a/resources/job_specs/report_coverage/3n-tsh/vhost-01.md b/resources/job_specs/report_coverage/3n-tsh/vhost-01.md
new file mode 100644
index 0000000000..0fa36d8dff
--- /dev/null
+++ b/resources/job_specs/report_coverage/3n-tsh/vhost-01.md
@@ -0,0 +1,44 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./srv6
+## ./tcp
+## ./vm_vhost
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-00.md b/resources/job_specs/report_coverage/3na-spr/crypto-00.md
new file mode 100644
index 0000000000..2eb9570139
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-00.md
@@ -0,0 +1,145 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-01.md b/resources/job_specs/report_coverage/3na-spr/crypto-01.md
new file mode 100644
index 0000000000..69365c76bf
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-01.md
@@ -0,0 +1,57 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+# ##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-02.md b/resources/job_specs/report_coverage/3na-spr/crypto-02.md
new file mode 100644
index 0000000000..f42385a4ca
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-02.md
@@ -0,0 +1,49 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-03.md b/resources/job_specs/report_coverage/3na-spr/crypto-03.md
new file mode 100644
index 0000000000..949e248929
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-03.md
@@ -0,0 +1,49 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-04.md b/resources/job_specs/report_coverage/3na-spr/crypto-04.md
new file mode 100644
index 0000000000..d55ab57fae
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-04.md
@@ -0,0 +1,221 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+# ##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-05.md b/resources/job_specs/report_coverage/3na-spr/crypto-05.md
new file mode 100644
index 0000000000..c802eebabc
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-05.md
@@ -0,0 +1,34 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/crypto-06.md b/resources/job_specs/report_coverage/3na-spr/crypto-06.md
new file mode 100644
index 0000000000..0e2a0137da
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/crypto-06.md
@@ -0,0 +1,49 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+# ##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+#### mlx5-core
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/dpdk-00.md b/resources/job_specs/report_coverage/3na-spr/dpdk-00.md
new file mode 100644
index 0000000000..1971438bdb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/dpdk-00.md
@@ -0,0 +1,23 @@
+# 3na-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/hoststack-00.md b/resources/job_specs/report_coverage/3na-spr/hoststack-00.md
new file mode 100644
index 0000000000..a6ab56f4d1
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/hoststack-00.md
@@ -0,0 +1,20 @@
+# 3na-spr
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-00.md b/resources/job_specs/report_coverage/3na-spr/ip4-00.md
new file mode 100644
index 0000000000..fd731142ba
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-00.md
@@ -0,0 +1,85 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# ##### ethip4-ip4scale20k
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale20k
+# ##### ethip4-ip4scale200k
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale200k
+# ##### ethip4-ip4scale2m
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4scale2m
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-01.md b/resources/job_specs/report_coverage/3na-spr/ip4-01.md
new file mode 100644
index 0000000000..379c66f843
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-01.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4-ip4base-adlalwlistbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-adlalwlistbase
+# ##### ethip4-ip4base-iacldstbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-iacldstbase
+# ##### ethip4-ip4base-ipolicemarkbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-ipolicemarkbase
+#### mlx5-core
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-02.md b/resources/job_specs/report_coverage/3na-spr/ip4-02.md
new file mode 100644
index 0000000000..1a42200f6a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-02.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sf-10kflows
+# ##### ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl1sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-03.md b/resources/job_specs/report_coverage/3na-spr/ip4-03.md
new file mode 100644
index 0000000000..cf3bd4d5fd
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-03.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sf-10kflows
+# ##### ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl10sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-04.md b/resources/job_specs/report_coverage/3na-spr/ip4-04.md
new file mode 100644
index 0000000000..8aed3df761
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-04.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+# ##### ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-05.md b/resources/job_specs/report_coverage/3na-spr/ip4-05.md
new file mode 100644
index 0000000000..8bd571cd0a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-05.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sf-10kflows
+# ##### ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl1sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-06.md b/resources/job_specs/report_coverage/3na-spr/ip4-06.md
new file mode 100644
index 0000000000..54b45b6768
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-06.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sf-10kflows
+# ##### ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl10sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-07.md b/resources/job_specs/report_coverage/3na-spr/ip4-07.md
new file mode 100644
index 0000000000..adb3b54c12
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-07.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+# ##### ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+#### mlx5-core
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4-08.md b/resources/job_specs/report_coverage/3na-spr/ip4-08.md
new file mode 100644
index 0000000000..2f4647655e
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4-08.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./ip4
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4tun-00.md b/resources/job_specs/report_coverage/3na-spr/ip4tun-00.md
new file mode 100644
index 0000000000..56c92bd700
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4tun-00.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# ##### ethip4vxlan-l2xcbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4tun-02.md b/resources/job_specs/report_coverage/3na-spr/ip4tun-02.md
new file mode 100644
index 0000000000..01a70411ff
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4tun-02.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4lispip4-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip4-ip4base
+# ##### ethip4lispip6-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4lispip6-ip4base
+#### mlx5-core
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4lispip6-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4tun-03.md b/resources/job_specs/report_coverage/3na-spr/ip4tun-03.md
new file mode 100644
index 0000000000..54995db4de
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4tun-03.md
@@ -0,0 +1,125 @@
+# 3na-spr
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4udpwireguard1tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1tnlsw-ip4base
+# ##### ethip4udpwireguard2tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard2tnlsw-ip4base
+# ##### ethip4udpwireguard4tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard4tnlsw-ip4base
+# ##### ethip4udpwireguard8tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard8tnlsw-ip4base
+# ##### ethip4udpwireguard100tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard100tnlsw-ip4base
+# ##### ethip4udpwireguard1000tnlsw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4udpwireguard1000tnlsw-ip4base
+#### mlx5-core
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4tun-04.md b/resources/job_specs/report_coverage/3na-spr/ip4tun-04.md
new file mode 100644
index 0000000000..6979ebd403
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4tun-04.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4gtpusw-ip4base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4gtpusw-ip4base
+#### mlx5-core
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip4tun-05.md b/resources/job_specs/report_coverage/3na-spr/ip4tun-05.md
new file mode 100644
index 0000000000..56c92bd700
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip4tun-05.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn
+# ##### ethip4vxlan-l2xcbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2xcbase
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip6-00.md b/resources/job_specs/report_coverage/3na-spr/ip6-00.md
new file mode 100644
index 0000000000..43f65b6ac9
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip6-00.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./ip6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6-ip6base
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base
+# ##### ethip6-ip6base-adlalwlistbase
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-adlalwlistbase
+# ##### ethip6-ip6base-iacldstbase
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6base-iacldstbase
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base-iacldstbase \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip6-01.md b/resources/job_specs/report_coverage/3na-spr/ip6-01.md
new file mode 100644
index 0000000000..2b9a7ad571
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip6-01.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./ip6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6-ip6scale20k
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale20k
+# ##### ethip6-ip6scale200k
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale200k
+# ##### ethip6-ip6scale2m
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6-ip6scale2m
+#### mlx5-core
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip6-02.md b/resources/job_specs/report_coverage/3na-spr/ip6-02.md
new file mode 100644
index 0000000000..7ea42129ec
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip6-02.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./ip6
+### mellanox-e810xxv
+#### rdma-core
+# ##### ethip6-ip6base
+# 1c AND 78b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 78b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 4c AND 78b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 1518b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 2c AND 1518b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 1c AND 9000b AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 1c AND imix AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 2c AND imix AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+# 4c AND imix AND ndrpdr AND e810xxv AND drv_rdma_core AND ethip6-ip6base
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810xxv AND drv_mlx5_core AND ethip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/ip6tun-00.md b/resources/job_specs/report_coverage/3na-spr/ip6tun-00.md
new file mode 100644
index 0000000000..c8433480d8
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/ip6tun-00.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./ip6_tunnels
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6lispip4-ip6base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip4-ip6base
+# ##### ethip6lispip6-ip6base
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6lispip6-ip6base
+#### mlx5-core
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6lispip6-ip6base \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-00.md b/resources/job_specs/report_coverage/3na-spr/l2-00.md
new file mode 100644
index 0000000000..19649d36ef
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-00.md
@@ -0,0 +1,85 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2patch
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# ##### eth-l2xcbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# ##### eth-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# ##### dot1q-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+#### mlx5-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-01.md b/resources/job_specs/report_coverage/3na-spr/l2-01.md
new file mode 100644
index 0000000000..2f4a223dd1
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-01.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdscale10kmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+# ##### eth-l2bdscale100kmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+# ##### eth-l2bdscale1mmaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+#### mlx5-core
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-02.md b/resources/job_specs/report_coverage/3na-spr/l2-02.md
new file mode 100644
index 0000000000..f9ada9712c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-02.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-03.md b/resources/job_specs/report_coverage/3na-spr/l2-03.md
new file mode 100644
index 0000000000..c2122f30f0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-03.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-04.md b/resources/job_specs/report_coverage/3na-spr/l2-04.md
new file mode 100644
index 0000000000..f1c64b1fa2
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-04.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+# ##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-05.md b/resources/job_specs/report_coverage/3na-spr/l2-05.md
new file mode 100644
index 0000000000..3785618168
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-05.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-06.md b/resources/job_specs/report_coverage/3na-spr/l2-06.md
new file mode 100644
index 0000000000..e300bfd90c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-06.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-07.md b/resources/job_specs/report_coverage/3na-spr/l2-07.md
new file mode 100644
index 0000000000..b3251a5359
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-07.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+# #### rdma-core
+# ##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+# ##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-08.md b/resources/job_specs/report_coverage/3na-spr/l2-08.md
new file mode 100644
index 0000000000..6ebe2da8f7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-08.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-09.md b/resources/job_specs/report_coverage/3na-spr/l2-09.md
new file mode 100644
index 0000000000..78d57b742c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-09.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-10.md b/resources/job_specs/report_coverage/3na-spr/l2-10.md
new file mode 100644
index 0000000000..05a7c5e3bb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-10.md
@@ -0,0 +1,25 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+#### mlx5-core
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/l2-11.md b/resources/job_specs/report_coverage/3na-spr/l2-11.md
new file mode 100644
index 0000000000..19649d36ef
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/l2-11.md
@@ -0,0 +1,85 @@
+# 3na-spr
+## ./l2
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2patch
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2patch
+# ##### eth-l2xcbase
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase
+# ##### eth-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn
+# ##### dot1q-l2bdbasemaclrn
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+#### mlx5-core
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/memif-00.md b/resources/job_specs/report_coverage/3na-spr/memif-00.md
new file mode 100644
index 0000000000..e738215ab7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/memif-00.md
@@ -0,0 +1,85 @@
+# 3na-spr
+## ./container_memif
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+# ##### eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+# ##### eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1lxc
+# ##### ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/srv6-00.md b/resources/job_specs/report_coverage/3na-spr/srv6-00.md
new file mode 100644
index 0000000000..a52d1d62d2
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/srv6-00.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./srv6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# ##### ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# ##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/srv6-01.md b/resources/job_specs/report_coverage/3na-spr/srv6-01.md
new file mode 100644
index 0000000000..a2ed324c92
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/srv6-01.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./srv6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6srhip6-srv6proxy-dyn
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# ##### ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# ##### ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+#### mlx5-core
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/srv6-02.md b/resources/job_specs/report_coverage/3na-spr/srv6-02.md
new file mode 100644
index 0000000000..a52d1d62d2
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/srv6-02.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./srv6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6ip6-ip6base-srv6enc1sid
+# ##### ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids
+# ##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/srv6-03.md b/resources/job_specs/report_coverage/3na-spr/srv6-03.md
new file mode 100644
index 0000000000..a2ed324c92
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/srv6-03.md
@@ -0,0 +1,65 @@
+# 3na-spr
+## ./srv6
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip6srhip6-srv6proxy-dyn
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-srv6proxy-dyn
+# ##### ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# ##### ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip6srhip6-ip6base-srv6proxy-stat
+#### mlx5-core
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/vhost-00.md b/resources/job_specs/report_coverage/3na-spr/vhost-00.md
new file mode 100644
index 0000000000..913876f6eb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/vhost-00.md
@@ -0,0 +1,125 @@
+# 3na-spr
+## ./vm_vhost
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### mlx5-core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/vhost-01.md b/resources/job_specs/report_coverage/3na-spr/vhost-01.md
new file mode 100644
index 0000000000..e36d3ba71c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/vhost-01.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./vm_vhost
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/vhost-02.md b/resources/job_specs/report_coverage/3na-spr/vhost-02.md
new file mode 100644
index 0000000000..913876f6eb
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/vhost-02.md
@@ -0,0 +1,125 @@
+# 3na-spr
+## ./vm_vhost
+### mellanox-cx7veat
+#### rdma-core
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+# ##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+# ##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### mlx5-core
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3na-spr/vhost-03.md b/resources/job_specs/report_coverage/3na-spr/vhost-03.md
new file mode 100644
index 0000000000..e36d3ba71c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3na-spr/vhost-03.md
@@ -0,0 +1,45 @@
+# 3na-spr
+## ./vm_vhost
+### mellanox-cx7veat
+#### rdma-core
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_rdma_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-00.md b/resources/job_specs/report_coverage/3nb-spr/crypto-00.md
new file mode 100644
index 0000000000..087f934a8c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-00.md
@@ -0,0 +1,145 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-01.md b/resources/job_specs/report_coverage/3nb-spr/crypto-01.md
new file mode 100644
index 0000000000..dc1f3fd2f6
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-01.md
@@ -0,0 +1,57 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-02.md b/resources/job_specs/report_coverage/3nb-spr/crypto-02.md
new file mode 100644
index 0000000000..c52b502558
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-02.md
@@ -0,0 +1,49 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-03.md b/resources/job_specs/report_coverage/3nb-spr/crypto-03.md
new file mode 100644
index 0000000000..e4aa909b0c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-03.md
@@ -0,0 +1,49 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-ip4base-int-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-04.md b/resources/job_specs/report_coverage/3nb-spr/crypto-04.md
new file mode 100644
index 0000000000..6230c25344
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-04.md
@@ -0,0 +1,221 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec2tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-05.md b/resources/job_specs/report_coverage/3nb-spr/crypto-05.md
new file mode 100644
index 0000000000..8c009a61bc
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-05.md
@@ -0,0 +1,34 @@
+# 3nb-spr
+## ./crypto
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-06.md b/resources/job_specs/report_coverage/3nb-spr/crypto-06.md
new file mode 100644
index 0000000000..e707720445
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-06.md
@@ -0,0 +1,49 @@
+# 3nb-spr
+## ./crypto
+### intel-e810xxv
+#### avf
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/crypto-07.md b/resources/job_specs/report_coverage/3nb-spr/crypto-07.md
new file mode 100644
index 0000000000..b9986cf6bf
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/crypto-07.md
@@ -0,0 +1,84 @@
+# 3nb-spr
+## ./crypto
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-policy-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlhwasync-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
diff --git a/resources/job_specs/report_coverage/3nb-spr/dpdk-00.md b/resources/job_specs/report_coverage/3nb-spr/dpdk-00.md
new file mode 100644
index 0000000000..70580fcb19
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/dpdk-00.md
@@ -0,0 +1,23 @@
+# 3nb-spr
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_coverage/3nb-spr/hoststack-00.md b/resources/job_specs/report_coverage/3nb-spr/hoststack-00.md
new file mode 100644
index 0000000000..37a570bd8d
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/hoststack-00.md
@@ -0,0 +1,20 @@
+# 3nb-spr
+## ./hoststack
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND e810xxv AND drv_vfio_pci AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-00.md b/resources/job_specs/report_coverage/3nb-spr/ip4-00.md
new file mode 100644
index 0000000000..5f3443f597
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-00.md
@@ -0,0 +1,85 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4scale2m
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-01.md b/resources/job_specs/report_coverage/3nb-spr/ip4-01.md
new file mode 100644
index 0000000000..c142dac679
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-01.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-ipolicemarkbase
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-02.md b/resources/job_specs/report_coverage/3nb-spr/ip4-02.md
new file mode 100644
index 0000000000..a3b1aaf7f7
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-02.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sf-10kflows
+##### ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-03.md b/resources/job_specs/report_coverage/3nb-spr/ip4-03.md
new file mode 100644
index 0000000000..69e7519cac
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-03.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sf-10kflows
+##### ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl10sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-04.md b/resources/job_specs/report_coverage/3nb-spr/ip4-04.md
new file mode 100644
index 0000000000..8517853907
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-04.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-05.md b/resources/job_specs/report_coverage/3nb-spr/ip4-05.md
new file mode 100644
index 0000000000..9e9b026668
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-05.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl1sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sf-10kflows
+##### ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-06.md b/resources/job_specs/report_coverage/3nb-spr/ip4-06.md
new file mode 100644
index 0000000000..0e398c6648
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-06.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl10sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sf-10kflows
+##### ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl10sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-07.md b/resources/job_specs/report_coverage/3nb-spr/ip4-07.md
new file mode 100644
index 0000000000..e8d805fada
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-07.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4-08.md b/resources/job_specs/report_coverage/3nb-spr/ip4-08.md
new file mode 100644
index 0000000000..a17f987c39
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4-08.md
@@ -0,0 +1,25 @@
+# 3nb-spr
+## ./ip4
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-00.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-00.md
new file mode 100644
index 0000000000..c701c4eb49
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-00.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-02.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-02.md
new file mode 100644
index 0000000000..9793e5d7cc
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-02.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4lispip6-ip4base
+#### dpdk-vfio-pci
+##### ethip4lispip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip4-ip4base
+##### ethip4lispip6-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4lispip6-ip4base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-03.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-03.md
new file mode 100644
index 0000000000..c7873c606c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-03.md
@@ -0,0 +1,125 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4udpwireguard1000tnlsw-ip4base
+#### dpdk-vfio-pci
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-04.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-04.md
new file mode 100644
index 0000000000..6db34112ac
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-04.md
@@ -0,0 +1,46 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-05.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-05.md
new file mode 100644
index 0000000000..e2b6408193
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-05.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810xxv
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2xcbase
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip4tun-06.md b/resources/job_specs/report_coverage/3nb-spr/ip4tun-06.md
new file mode 100644
index 0000000000..bf99d9c269
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip4tun-06.md
@@ -0,0 +1,64 @@
+# 3nb-spr
+## ./ip4_tunnels
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip6-00.md b/resources/job_specs/report_coverage/3nb-spr/ip6-00.md
new file mode 100644
index 0000000000..3aba2d2e9a
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip6-00.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base-iacldstbase
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6base-adlalwlistbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip6-01.md b/resources/job_specs/report_coverage/3nb-spr/ip6-01.md
new file mode 100644
index 0000000000..5b60f6f434
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip6-01.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./ip6
+### intel-e810cq
+#### avf
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m
+#### dpdk-vfio-pci
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6scale2m
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale2m
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip6-02.md b/resources/job_specs/report_coverage/3nb-spr/ip6-02.md
new file mode 100644
index 0000000000..69f166aeac
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip6-02.md
@@ -0,0 +1,25 @@
+# 3nb-spr
+## ./ip6
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
diff --git a/resources/job_specs/report_coverage/3nb-spr/ip6tun-00.md b/resources/job_specs/report_coverage/3nb-spr/ip6tun-00.md
new file mode 100644
index 0000000000..3ea055f957
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/ip6tun-00.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./ip6_tunnels
+### intel-e810cq
+#### avf
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6lispip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6lispip4-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip4-ip6base
+##### ethip6lispip6-ip6base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6lispip6-ip6base
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-00.md b/resources/job_specs/report_coverage/3nb-spr/l2-00.md
new file mode 100644
index 0000000000..526457e99c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-00.md
@@ -0,0 +1,85 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-01.md b/resources/job_specs/report_coverage/3nb-spr/l2-01.md
new file mode 100644
index 0000000000..afba2bbc61
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-01.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+#### dpdk-vfio-pci
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-02.md b/resources/job_specs/report_coverage/3nb-spr/l2-02.md
new file mode 100644
index 0000000000..d9025f4622
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-02.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sf-10kflows
+##### eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-03.md b/resources/job_specs/report_coverage/3nb-spr/l2-03.md
new file mode 100644
index 0000000000..65abdb57a9
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-03.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sf-10kflows
+##### eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl10sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-04.md b/resources/job_specs/report_coverage/3nb-spr/l2-04.md
new file mode 100644
index 0000000000..a4fe8f790c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-04.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-05.md b/resources/job_specs/report_coverage/3nb-spr/l2-05.md
new file mode 100644
index 0000000000..ecdc3c4c62
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-05.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sf-10kflows
+##### eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-06.md b/resources/job_specs/report_coverage/3nb-spr/l2-06.md
new file mode 100644
index 0000000000..7335542d14
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-06.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sf-10kflows
+##### eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl10sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-07.md b/resources/job_specs/report_coverage/3nb-spr/l2-07.md
new file mode 100644
index 0000000000..bd2d9f1649
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-07.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-08.md b/resources/job_specs/report_coverage/3nb-spr/l2-08.md
new file mode 100644
index 0000000000..67c3be2b7c
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-08.md
@@ -0,0 +1,25 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl1sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-09.md b/resources/job_specs/report_coverage/3nb-spr/l2-09.md
new file mode 100644
index 0000000000..f97c7ed433
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-09.md
@@ -0,0 +1,25 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl10sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-10.md b/resources/job_specs/report_coverage/3nb-spr/l2-10.md
new file mode 100644
index 0000000000..47c31ae6fa
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-10.md
@@ -0,0 +1,25 @@
+# 3nb-spr
+## ./l2
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
diff --git a/resources/job_specs/report_coverage/3nb-spr/l2-11.md b/resources/job_specs/report_coverage/3nb-spr/l2-11.md
new file mode 100644
index 0000000000..866c3f908b
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/l2-11.md
@@ -0,0 +1,85 @@
+# 3nb-spr
+## ./l2
+### intel-e810xxv
+#### avf
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2patch
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
diff --git a/resources/job_specs/report_coverage/3nb-spr/memif-00.md b/resources/job_specs/report_coverage/3nb-spr/memif-00.md
new file mode 100644
index 0000000000..b30de908a0
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/memif-00.md
@@ -0,0 +1,85 @@
+# 3nb-spr
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1lxc
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1lxc
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
diff --git a/resources/job_specs/report_coverage/3nb-spr/srv6-00.md b/resources/job_specs/report_coverage/3nb-spr/srv6-00.md
new file mode 100644
index 0000000000..c7776cc279
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/srv6-00.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./srv6
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
diff --git a/resources/job_specs/report_coverage/3nb-spr/srv6-01.md b/resources/job_specs/report_coverage/3nb-spr/srv6-01.md
new file mode 100644
index 0000000000..ee3b0ae202
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/srv6-01.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./srv6
+### intel-e810cq
+#### avf
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+#### dpdk-vfio-pci
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_coverage/3nb-spr/srv6-02.md b/resources/job_specs/report_coverage/3nb-spr/srv6-02.md
new file mode 100644
index 0000000000..253cfeb806
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/srv6-02.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./srv6
+### intel-e810xxv
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
diff --git a/resources/job_specs/report_coverage/3nb-spr/srv6-03.md b/resources/job_specs/report_coverage/3nb-spr/srv6-03.md
new file mode 100644
index 0000000000..ee108b0e3d
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/srv6-03.md
@@ -0,0 +1,65 @@
+# 3nb-spr
+## ./srv6
+### intel-e810xxv
+#### avf
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+#### dpdk-vfio-pci
+##### ethip6srhip6-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_coverage/3nb-spr/vhost-00.md b/resources/job_specs/report_coverage/3nb-spr/vhost-00.md
new file mode 100644
index 0000000000..6995e16316
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/vhost-00.md
@@ -0,0 +1,125 @@
+# 3nb-spr
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
diff --git a/resources/job_specs/report_coverage/3nb-spr/vhost-01.md b/resources/job_specs/report_coverage/3nb-spr/vhost-01.md
new file mode 100644
index 0000000000..72b03659f5
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/vhost-01.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_coverage/3nb-spr/vhost-02.md b/resources/job_specs/report_coverage/3nb-spr/vhost-02.md
new file mode 100644
index 0000000000..4546e71601
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/vhost-02.md
@@ -0,0 +1,125 @@
+# 3nb-spr
+## ./vm_vhost
+### intel-e810xxv
+#### avf
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+#### dpdk-vfio-pci
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
diff --git a/resources/job_specs/report_coverage/3nb-spr/vhost-03.md b/resources/job_specs/report_coverage/3nb-spr/vhost-03.md
new file mode 100644
index 0000000000..1b95851c47
--- /dev/null
+++ b/resources/job_specs/report_coverage/3nb-spr/vhost-03.md
@@ -0,0 +1,45 @@
+# 3nb-spr
+## ./vm_vhost
+### intel-e810xxv
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/1n-aws/trex-mrr-00.md b/resources/job_specs/report_iterative/1n-aws/trex-mrr-00.md
new file mode 100644
index 0000000000..8fe2d5490b
--- /dev/null
+++ b/resources/job_specs/report_iterative/1n-aws/trex-mrr-00.md
@@ -0,0 +1,11 @@
+# 1n-aws
+## ./ip4
+##### ethip4-ip4base-tg
+- AND 64b AND mrr AND nitro-50g AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND mrr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+## ./ip6
+##### ethip6-ip6base-tg
+- AND 78b AND mrr AND nitro-50g AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND mrr AND nitro-50g AND - AND ethip6-ip6scale20k-tg
diff --git a/resources/job_specs/report_iterative/1n-aws/trex-ndrpdr-00.md b/resources/job_specs/report_iterative/1n-aws/trex-ndrpdr-00.md
new file mode 100644
index 0000000000..280fc9669f
--- /dev/null
+++ b/resources/job_specs/report_iterative/1n-aws/trex-ndrpdr-00.md
@@ -0,0 +1,11 @@
+# 1n-aws
+## ./ip4
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND nitro-50g AND - AND ethip4-ip4scale20k-tg
+## ./ip6
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND nitro-50g AND - AND ethip6-ip6scale20k-tg \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-aws/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-aws/vpp-mrr-00.md
new file mode 100644
index 0000000000..c7bd2896bd
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-aws/vpp-mrr-00.md
@@ -0,0 +1,37 @@
+# 2n-aws
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-aws/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-aws/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..472491c2d0
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-aws/vpp-ndrpdr-00.md
@@ -0,0 +1,37 @@
+# 2n-aws
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-c6in/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-c6in/vpp-mrr-00.md
new file mode 100644
index 0000000000..883e50eba2
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-c6in/vpp-mrr-00.md
@@ -0,0 +1,37 @@
+# 2n-c6in
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_iterative/2n-c6in/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-c6in/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..7f3eed1dd6
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-c6in/vpp-ndrpdr-00.md
@@ -0,0 +1,37 @@
+# 2n-c6in
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_iterative/2n-c7gn/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-c7gn/vpp-mrr-00.md
new file mode 100644
index 0000000000..6b23f879f3
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-c7gn/vpp-mrr-00.md
@@ -0,0 +1,37 @@
+# 2n-c7gn
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_iterative/2n-c7gn/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-c7gn/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..27f15d638d
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-c7gn/vpp-ndrpdr-00.md
@@ -0,0 +1,37 @@
+# 2n-c7gn
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip6
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
diff --git a/resources/job_specs/report_iterative/2n-clx/dpdk-mrr-00.md b/resources/job_specs/report_iterative/2n-clx/dpdk-mrr-00.md
new file mode 100644
index 0000000000..55c2d2c545
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 2n-clx
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/2n-clx/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-clx/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..d80f2de151
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 2n-clx
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/2n-clx/nfv-density-mrr-00.md b/resources/job_specs/report_iterative/2n-clx/nfv-density-mrr-00.md
new file mode 100644
index 0000000000..f1d460c6d6
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/nfv-density-mrr-00.md
@@ -0,0 +1,125 @@
+# 2n-clx
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-clx/nfv-density-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-clx/nfv-density-ndrpdr-00.md
new file mode 100644
index 0000000000..10a41f51a0
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/nfv-density-ndrpdr-00.md
@@ -0,0 +1,125 @@
+# 2n-clx
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-clx/reconf-00.md b/resources/job_specs/report_iterative/2n-clx/reconf-00.md
new file mode 100644
index 0000000000..a87bea4678
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/reconf-00.md
@@ -0,0 +1,20 @@
+# 2n-clx
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-clx/vpp-gso-mrr-00.md b/resources/job_specs/report_iterative/2n-clx/vpp-gso-mrr-00.md
new file mode 100644
index 0000000000..eb1d9ef28a
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/vpp-gso-mrr-00.md
@@ -0,0 +1,23 @@
+# 2n-clx
+## ./gso
+### intel-xxv710
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
diff --git a/resources/job_specs/report_iterative/2n-clx/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-clx/vpp-mrr-00.md
new file mode 100644
index 0000000000..41dffa06e9
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/vpp-mrr-00.md
@@ -0,0 +1,429 @@
+# 2n-clx
+## ./container_memif
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+#### mlx5_core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+#### mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+#### mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+#### mlx5_core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### mlx5_core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-clx/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-clx/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..ed31f21c7b
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/vpp-ndrpdr-00.md
@@ -0,0 +1,429 @@
+# 2n-clx
+## ./container_memif
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+#### mlx5_core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+#### mlx5_core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+#### mlx5_core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+#### mlx5_core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+#### mlx5_core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx556a AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-clx/vpp-soak-00.md b/resources/job_specs/report_iterative/2n-clx/vpp-soak-00.md
new file mode 100644
index 0000000000..fb175544e2
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-clx/vpp-soak-00.md
@@ -0,0 +1,43 @@
+# 2n-clx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/2n-icx/dpdk-mrr-00.md b/resources/job_specs/report_iterative/2n-icx/dpdk-mrr-00.md
new file mode 100644
index 0000000000..08efa7af39
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/dpdk-mrr-00.md
@@ -0,0 +1,31 @@
+# 2n-icx
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-icx/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..26004ffa3f
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/dpdk-ndrpdr-00.md
@@ -0,0 +1,67 @@
+# 2n-icx
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/nfv-density-mrr-00.md b/resources/job_specs/report_iterative/2n-icx/nfv-density-mrr-00.md
new file mode 100644
index 0000000000..40e0571643
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/nfv-density-mrr-00.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/nfv-density-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-icx/nfv-density-ndrpdr-00.md
new file mode 100644
index 0000000000..b1f9106d3f
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/nfv-density-ndrpdr-00.md
@@ -0,0 +1,125 @@
+# 2n-icx
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/reconf-00.md b/resources/job_specs/report_iterative/2n-icx/reconf-00.md
new file mode 100644
index 0000000000..4855200658
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/reconf-00.md
@@ -0,0 +1,20 @@
+# 2n-icx
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-e810cq
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+1c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+2c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+4c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+1c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+2c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+4c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+1c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+2c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+4c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+1c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+2c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+4c AND imix AND reconf AND e810cq AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/trex-mrr-00.md b/resources/job_specs/report_iterative/2n-icx/trex-mrr-00.md
new file mode 100644
index 0000000000..1f0df5bfc3
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/trex-mrr-00.md
@@ -0,0 +1,33 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+##### ethip4-ip4base-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### intel-e810cq
+##### ethip6-ip6base-tg
+- AND 78b AND mrr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND mrr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### intel-e810cq
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND mrr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/trex-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-icx/trex-ndrpdr-00.md
new file mode 100644
index 0000000000..f80522c96c
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/trex-ndrpdr-00.md
@@ -0,0 +1,33 @@
+# 2n-icx
+## ./ip4
+### intel-e810cq
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### intel-e810cq
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### intel-e810cq
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/vpp-gso-mrr-00.md b/resources/job_specs/report_iterative/2n-icx/vpp-gso-mrr-00.md
new file mode 100644
index 0000000000..f779ada7fa
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/vpp-gso-mrr-00.md
@@ -0,0 +1,23 @@
+# 2n-icx
+## ./gso
+### intel-e810cq
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND e810cq AND drv_vhost AND ethip4-ip4base-2vhost-iperf3 \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/vpp-hoststack-00.md b/resources/job_specs/report_iterative/2n-icx/vpp-hoststack-00.md
new file mode 100644
index 0000000000..69b9857597
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/vpp-hoststack-00.md
@@ -0,0 +1,26 @@
+# 2n-icx
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810xxv AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810xxv AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810xxv AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810xxv AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5 \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-icx/vpp-mrr-00.md
new file mode 100644
index 0000000000..507062f851
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/vpp-mrr-00.md
@@ -0,0 +1,516 @@
+# 2n-icx
+## ./container_memif
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-icx/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..4620d6b876
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/vpp-ndrpdr-00.md
@@ -0,0 +1,516 @@
+# 2n-icx
+## ./container_memif
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-icx/vpp-soak-00.md b/resources/job_specs/report_iterative/2n-icx/vpp-soak-00.md
new file mode 100644
index 0000000000..db95287f2d
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-icx/vpp-soak-00.md
@@ -0,0 +1,43 @@
+# 2n-icx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/2n-spr/dpdk-mrr-00.md b/resources/job_specs/report_iterative/2n-spr/dpdk-mrr-00.md
new file mode 100644
index 0000000000..7f1a548d5a
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/dpdk-mrr-00.md
@@ -0,0 +1,31 @@
+# 2n-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-spr/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..19a170ed6e
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/dpdk-ndrpdr-00.md
@@ -0,0 +1,67 @@
+# 2n-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/trex-mrr-00.md b/resources/job_specs/report_iterative/2n-spr/trex-mrr-00.md
new file mode 100644
index 0000000000..35c418f3b6
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/trex-mrr-00.md
@@ -0,0 +1,62 @@
+# 2n-spr
+## ./ip4
+### mellanox-cx7veat
+##### ethip4-ip4base-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+### intel-e810cq
+##### ethip4-ip4base-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND mrr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### mellanox-cx7veat
+##### ethip6-ip6base-tg
+- AND 78b AND mrr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND mrr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+### intel-e810cq
+##### ethip6-ip6base-tg
+- AND 78b AND mrr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND mrr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### mellanox-cx7veat
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND mrr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+### intel-e810cq
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND mrr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/trex-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-spr/trex-ndrpdr-00.md
new file mode 100644
index 0000000000..8d4332a0f9
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/trex-ndrpdr-00.md
@@ -0,0 +1,65 @@
+# 2n-spr
+## ./ip4
+### intel-e810cq
+### mellanox-cx7veat
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND 2p1cx7veat AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+### intel-e810cq
+##### ethip4-ip4base-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4base-tg
+##### ethip4-ip4scale20k-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4-ip4scale20k-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4tcp-ip4base-h262144-p63-s16515072-tput-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-cps-tg
+##### ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h1024-p63-s64512-tput-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-cps-tg
+##### ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+- AND 100b AND ndrpdr AND e810cq AND - AND ethip4udp-ip4base-h262144-p63-s16515072-tput-tg
+## ./ip6
+### intel-e810cq
+### mellanox-cx7veat
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND 2p1cx7veat AND - AND ethip6-ip6scale20k-tg
+### intel-e810cq
+##### ethip6-ip6base-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6base-tg
+##### ethip6-ip6scale20k-tg
+- AND 78b AND ndrpdr AND e810cq AND - AND ethip6-ip6scale20k-tg
+## ./l2
+### intel-e810cq
+### mellanox-cx7veat
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND 2p1cx7veat AND - AND eth-l2bdscale1mmaclrn-tg
+### intel-e810cq
+##### eth-l2bdscale1mmaclrn-tg
+- AND 64b AND ndrpdr AND e810cq AND - AND eth-l2bdscale1mmaclrn-tg \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/vpp-hoststack-00.md b/resources/job_specs/report_iterative/2n-spr/vpp-hoststack-00.md
new file mode 100644
index 0000000000..72b92c453b
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/vpp-hoststack-00.md
@@ -0,0 +1,30 @@
+# 2n-spr
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+1c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+2c AND 0b AND cps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+##### eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+1c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5
+2c AND 0b AND rps AND e810cq AND drv_vfio_pci AND eth-ip4tcphttp-dma-ldpreload-nginx-1_21_5 \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-spr/vpp-mrr-00.md
new file mode 100644
index 0000000000..61e0b20196
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/vpp-mrr-00.md
@@ -0,0 +1,564 @@
+# 2n-spr
+## ./container_memif
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND mrr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND mrr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND mrr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-spr/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..631bdcd2ad
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/vpp-ndrpdr-00.md
@@ -0,0 +1,564 @@
+# 2n-spr
+## ./container_memif
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-dma-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k-rnd
+# REENABLE 1c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 2c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+# REENABLE 4c AND 64b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip4-ip4scale20k-rnd
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4scale2m-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44ed-h1024-p63-s64512-udir
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-udir
+##### ethip4udp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-cps
+##### ethip4udp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4udp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h1024-p63-s64512-tput
+##### ethip4udp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4udp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-cps
+##### ethip4udp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-cps
+##### ethip4udp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h1024-p63-s64512-tput
+##### ethip4udp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4udp-ip4base-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h1024-p63-s64512-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+2c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+4c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-ip4base-h1024-p63-s64512-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-cps
+##### ethip4tcp-ip4base-h65536-p63-s4128768-cps
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-cps
+##### ethip4tcp-ip4base-h1024-p63-s64512-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h1024-p63-s64512-tput
+##### ethip4tcp-ip4base-h65536-p63-s4128768-tput
+1c AND 100b AND ndrpdr AND e810cq AND drv_avf AND ethip4tcp-ip4base-h65536-p63-s4128768-tput
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4scale2m-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4--ethip4udpgeneve-256tun-ip4base
+### intel-e810cq
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6scale2m-rnd
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6scale20k-rnd
+### intel-e810cq
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k-rnd
+# REENABLE 1c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 2c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+# REENABLE 4c AND 78b AND ndrpdr AND e810cq AND drv_af_xdp AND ethip6-ip6scale20k-rnd
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale2m-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6scale2m-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdscale1mmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./vm_vhost
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-spr/vpp-soak-00.md b/resources/job_specs/report_iterative/2n-spr/vpp-soak-00.md
new file mode 100644
index 0000000000..760e957586
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-spr/vpp-soak-00.md
@@ -0,0 +1,45 @@
+# 2n-spr
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-cps
+##### ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+1c AND 100b AND soak AND e810cq AND drv_avf AND ethip4tcp-nat44ed-h65536-p63-s4128768-tput
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+
+# TODO: Add memif-dma test?
diff --git a/resources/job_specs/report_iterative/2n-tx2/dpdk-mrr-00.md b/resources/job_specs/report_iterative/2n-tx2/dpdk-mrr-00.md
new file mode 100644
index 0000000000..8db27ff77f
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-tx2/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 2n-tx2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/2n-tx2/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-tx2/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..fa850c1103
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-tx2/dpdk-ndrpdr-00.md
@@ -0,0 +1,29 @@
+# 2n-tx2
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/2n-tx2/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-tx2/vpp-mrr-00.md
new file mode 100644
index 0000000000..1c1ee13369
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-tx2/vpp-mrr-00.md
@@ -0,0 +1,266 @@
+# 2n-tx2
+## ./container_memif
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+## ./ip4
+### intel-xl710
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE ##### ethip4-ip4scale200k
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip6
+### intel-xl710
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k
+# REENABLE 1c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE 2c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE 4c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE ##### ethip6-ip6scale200k
+# REENABLE 1c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+# REENABLE 2c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+# REENABLE 4c AND 78b AND mrr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND mrr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+## ./l2
+### intel-xl710
+#### af_xdp
+##### eth-l2bdbasemaclrn
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE ##### eth-l2bdscale10kmaclrn
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE ##### eth-l2bdscale100kmaclrn
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE ##### eth-l2xcbase
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE ##### eth-l2patch
+# REENABLE 1c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2patch
+# REENABLE 2c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2patch
+# REENABLE 4c AND 64b AND mrr AND xl710 AND drv_af_xdp AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-tx2/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-tx2/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..bb0d31f3eb
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-tx2/vpp-ndrpdr-00.md
@@ -0,0 +1,266 @@
+# 2n-tx2
+## ./container_memif
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1lxc
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir
+##### ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1spe-cache-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec100spe-cache-ip4base-policy-outbound-nocrypto
+##### ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4ipsec1000spe-cache-ip4base-policy-outbound-nocrypto
+## ./ip4
+### intel-xl710
+#### af_xdp
+##### ethip4-ip4base
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4base
+# REENABLE ##### ethip4-ip4scale20k
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale20k
+# REENABLE ##### ethip4-ip4scale200k
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip4-ip4scale200k
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4scale200k
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip6
+### intel-xl710
+#### af_xdp
+##### ethip6-ip6base
+# REENABLE 1c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 2c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE 4c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6base
+# REENABLE ##### ethip6-ip6scale20k
+# REENABLE 1c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE 2c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE 4c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale20k
+# REENABLE ##### ethip6-ip6scale200k
+# REENABLE 1c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+# REENABLE 2c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+# REENABLE 4c AND 78b AND ndrpdr AND xl710 AND drv_af_xdp AND ethip6-ip6scale200k
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6scale200k
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+## ./l2
+### intel-xl710
+#### af_xdp
+##### eth-l2bdbasemaclrn
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdbasemaclrn
+# REENABLE ##### eth-l2bdscale10kmaclrn
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale10kmaclrn
+# REENABLE ##### eth-l2bdscale100kmaclrn
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2bdscale100kmaclrn
+# REENABLE ##### eth-l2xcbase
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2xcbase
+# REENABLE ##### eth-l2patch
+# REENABLE 1c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2patch
+# REENABLE 2c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2patch
+# REENABLE 4c AND 64b AND ndrpdr AND xl710 AND drv_af_xdp AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-zn2/dpdk-mrr-00.md b/resources/job_specs/report_iterative/2n-zn2/dpdk-mrr-00.md
new file mode 100644
index 0000000000..a7dbdb1446
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 2n-zn2
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/2n-zn2/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-zn2/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..2ea2001715
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 2n-zn2
+### intel-xxv710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/2n-zn2/nfv-density-mrr-00.md b/resources/job_specs/report_iterative/2n-zn2/nfv-density-mrr-00.md
new file mode 100644
index 0000000000..8fc93af8ef
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/nfv-density-mrr-00.md
@@ -0,0 +1,138 @@
+# 2n-zn2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND mrr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND mrr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+## ./srv6
+## ./tcp
+## ./vm_vhost
+## ./vts
diff --git a/resources/job_specs/report_iterative/2n-zn2/nfv-density-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-zn2/nfv-density-ndrpdr-00.md
new file mode 100644
index 0000000000..285958fd87
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/nfv-density-ndrpdr-00.md
@@ -0,0 +1,138 @@
+# 2n-zn2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2mif-1dcr1t-vppip4
+##### eth-l2bd-1ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-1ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-1ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12mif-6dcr1t-vppip4
+##### eth-l2bd-2ch-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4mif-2dcr1t-vppip4
+##### eth-l2bd-2ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-4ch-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8mif-4dcr1t-vppip4
+##### eth-l2bd-6ch-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12mif-6dcr1t-vppip4
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+### intel-xxv710
+#### avf
+##### eth-l2bd-1pl-2mif-1dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-1dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-2dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-4dcr1t-vppip4
+##### eth-l2bd-1pl-2mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1pl-2mif-6dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-2dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-2dcr1t-vppip4
+##### eth-l2bd-2pl-4mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-4mif-4dcr1t-vppip4
+##### eth-l2bd-2pl-8mif-4dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2pl-8mif-4dcr1t-vppip4
+##### eth-l2bd-6pl-12mif-6dcr1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6pl-12mif-6dcr1t-vppip4
+## ./nfv_density/vm_vhost/chain
+### intel-xxv710
+#### avf
+##### eth-l2bd-1ch-2vh-1vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-2vh-1vm1t-vppip4
+##### eth-l2bd-1ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-4vh-2vm1t-vppip4
+##### eth-l2bd-1ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-8vh-4vm1t-vppip4
+##### eth-l2bd-1ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-1ch-12vh-6vm1t-vppip4
+##### eth-l2bd-2ch-4vh-2vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-4vh-2vm1t-vppip4
+##### eth-l2bd-2ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-2ch-8vh-4vm1t-vppip4
+##### eth-l2bd-4ch-8vh-4vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-4ch-8vh-4vm1t-vppip4
+##### eth-l2bd-6ch-12vh-6vm1t-vppip4
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bd-6ch-12vh-6vm1t-vppip4
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+1c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+2c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+4c AND imix AND ndrpdr AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd
+## ./srv6
+## ./tcp
+## ./vm_vhost
+## ./vts
diff --git a/resources/job_specs/report_iterative/2n-zn2/reconf-00.md b/resources/job_specs/report_iterative/2n-zn2/reconf-00.md
new file mode 100644
index 0000000000..275ca79dc0
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/reconf-00.md
@@ -0,0 +1,36 @@
+# 2n-zn2
+## ./container_memif
+## ./crypto
+## ./ip4
+## ./ip4_tunnels
+## ./ip6
+## ./ip6_tunnels
+## ./l2
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+### intel-xxv710
+#### avf
+##### dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd
+##### dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd
+##### dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd
+##### dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+1c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+2c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+4c AND imix AND reconf AND xxv710 AND drv_avf AND dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd
+## ./srv6
+## ./tcp
+## ./vm_vhost
+## ./vts
diff --git a/resources/job_specs/report_iterative/2n-zn2/soak-00.md b/resources/job_specs/report_iterative/2n-zn2/soak-00.md
new file mode 100644
index 0000000000..485563dfcf
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/soak-00.md
@@ -0,0 +1,58 @@
+# 2n-zn2
+## ./container_memif
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./crypto
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND xxv710 AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+## ./ip4_tunnels
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND xxv710 AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND soak AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+## ./ip6_tunnels
+## ./l2
+#### avf
+##### eth-l2xcbase
+1c AND 64b AND soak AND xxv710 AND drv_avf AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### eth-l2xcbase
+1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+## ./srv6
+## ./tcp
+## ./vm_vhost
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND soak AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# #### dpdk-vfio-pci
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# 1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+# ##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+# 1c AND 64b AND soak AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+## ./vts
diff --git a/resources/job_specs/report_iterative/2n-zn2/vpp-gso-mrr-00.md b/resources/job_specs/report_iterative/2n-zn2/vpp-gso-mrr-00.md
new file mode 100644
index 0000000000..7bb2bd7196
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/vpp-gso-mrr-00.md
@@ -0,0 +1,23 @@
+# 2n-zn2
+## ./gso
+### intel-xxv710
+#### drv_tap
+##### ethip4-ip4base-2tap-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-gso-iperf3
+#### drv_tap
+##### ethip4-ip4base-2tap
+1c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_tap AND ethip4-ip4base-2tap-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost-gso
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-gso-iperf3
+#### drv_vhost
+##### ethip4-ip4base-2vhost
+1c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+2c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
+4c AND 128kb AND mrr AND xxv710 AND drv_vhost AND ethip4-ip4base-2vhost-iperf3
diff --git a/resources/job_specs/report_iterative/2n-zn2/vpp-mrr-00.md b/resources/job_specs/report_iterative/2n-zn2/vpp-mrr-00.md
new file mode 100644
index 0000000000..cadd241373
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/vpp-mrr-00.md
@@ -0,0 +1,335 @@
+# 2n-zn2
+## ./container_memif
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip4_tunnels
+### intel-xxv710
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-xxv710
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+2c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+4c AND 78b AND mrr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+## ./ip6_tunnels
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2patch
+## ./vm_vhost
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/2n-zn2/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/2n-zn2/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..ce89f55ca5
--- /dev/null
+++ b/resources/job_specs/report_iterative/2n-zn2/vpp-ndrpdr-00.md
@@ -0,0 +1,334 @@
+# 2n-zn2
+## ./container_memif
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base-eth-2memif-1dcr
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+##### eth-l2xcbase-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base-eth-2memif-1dcr
+## ./ip4
+### intel-xxv710
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4-ip4scale20k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-ip4base-oacl50sl-10kflows
+##### ethip4udp-nat44det-h1024-p63-s64512
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h1024-p63-s64512
+##### ethip4udp-nat44det-h16384-p63-s1032192
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h16384-p63-s1032192
+##### ethip4udp-nat44det-h65536-p63-s4128758
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h65536-p63-s4128758
+##### ethip4udp-nat44det-h262144-p63-s16515072
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4udp-nat44det-h262144-p63-s16515072
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale200k
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4-ip4scale200k-rnd
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip4_tunnels
+### intel-xxv710
+#### avf
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4--ethip4udpgeneve-4tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-4tun-ip4base
+##### ethip4--ethip4udpgeneve-16tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-16tun-ip4base
+##### ethip4--ethip4udpgeneve-64tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-64tun-ip4base
+##### ethip4--ethip4udpgeneve-256tun-ip4base
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND ethip4--ethip4udpgeneve-256tun-ip4base
+## ./ip6
+### intel-xxv710
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_avf AND ethip6-ip6scale20k-rnd
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND xxv710 AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+### mellanox-cx556a
+#### rdma-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale20k-rnd
+##### ethip6-ip6scale200k
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k
+##### ethip6-ip6scale200k-rnd
+1c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+2c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+4c AND 78b AND ndrpdr AND cx556a AND drv_rdma_core AND ethip6-ip6scale200k-rnd
+## ./l2
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdscale100kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2patch
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale10kmaclrn
+##### eth-l2bdscale100kmaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdscale100kmaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2patch
+## ./vm_vhost
+### intel-xxv710
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_avf AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND xxv710 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+### mellanox-cx556a
+#### rdma-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx556a AND drv_rdma_core AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-alt/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3n-alt/dpdk-mrr-00.md
new file mode 100644
index 0000000000..b3073bbd90
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-alt/dpdk-mrr-00.md
@@ -0,0 +1,21 @@
+# 3n-alt
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-alt/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-alt/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..06ceeb0d12
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-alt/dpdk-ndrpdr-00.md
@@ -0,0 +1,57 @@
+# 3n-alt
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-alt/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-alt/vpp-mrr-00.md
new file mode 100644
index 0000000000..deb9246e8f
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-alt/vpp-mrr-00.md
@@ -0,0 +1,346 @@
+# 3n-alt
+## ./crypto
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 64b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND xl710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND xl710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND xl710 AND drv_avf AND ethip4-ip4base
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./vm_vhost
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-alt/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-alt/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..94df71af90
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-alt/vpp-ndrpdr-00.md
@@ -0,0 +1,346 @@
+# 3n-alt
+## ./crypto
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec4tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 1c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 1c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec10000tnlsw-ip4base-policy-flow-cache-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 3c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 64b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 2c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 3c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+# 4c AND imix AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+# 1c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+# 2c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+# 4c AND 1518b AND ndrpdr AND xl710 AND dpdk-vfio-pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+### intel-xl710
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND ethip4-ip4base
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND ethip4-ip4base
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+# 1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+# 4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+##### ethip6-ip6base-iacldstbase
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+### intel-xl710
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND xl710 AND drv_avf AND eth-l2bdbasemaclrn
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+# 1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+# 4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./vm_vhost
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4 \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-aws/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-aws/vpp-mrr-00.md
new file mode 100644
index 0000000000..8849456a9c
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-aws/vpp-mrr-00.md
@@ -0,0 +1,27 @@
+# 3n-aws
+## ./crypto
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-aws/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-aws/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..b35e0f88c3
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-aws/vpp-ndrpdr-00.md
@@ -0,0 +1,27 @@
+# 3n-aws
+## ./crypto
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-50G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-50g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-c6in/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-c6in/vpp-mrr-00.md
new file mode 100644
index 0000000000..eab85ffd06
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-c6in/vpp-mrr-00.md
@@ -0,0 +1,27 @@
+# 3n-c6in
+## ./crypto
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_iterative/3n-c6in/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-c6in/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..d29ab4e252
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-c6in/vpp-ndrpdr-00.md
@@ -0,0 +1,27 @@
+# 3n-c6in
+## ./crypto
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-200G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-200g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_iterative/3n-c7gn/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-c7gn/vpp-mrr-00.md
new file mode 100644
index 0000000000..308fdca743
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-c7gn/vpp-mrr-00.md
@@ -0,0 +1,27 @@
+# 3n-c7gn
+## ./crypto
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND mrr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_iterative/3n-c7gn/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-c7gn/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..9925139e7e
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-c7gn/vpp-ndrpdr-00.md
@@ -0,0 +1,27 @@
+# 3n-c7gn
+## ./crypto
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### Amazon-Nitro-100G
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+1c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 1518b AND ndrpdr AND nitro-100g AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
diff --git a/resources/job_specs/report_iterative/3n-icx/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3n-icx/dpdk-mrr-00.md
new file mode 100644
index 0000000000..d33ba8ee01
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/dpdk-mrr-00.md
@@ -0,0 +1,31 @@
+# 3n-icx
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-icx/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..51950da5f5
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/dpdk-ndrpdr-00.md
@@ -0,0 +1,67 @@
+# 3n-icx
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/vpp-hoststack-00.md b/resources/job_specs/report_iterative/3n-icx/vpp-hoststack-00.md
new file mode 100644
index 0000000000..83415b0eea
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/vpp-hoststack-00.md
@@ -0,0 +1,38 @@
+# 3n-icx
+## ./hoststack
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND cx6dx AND drv_mlx5_core AND eth-ip4udpquicscale10cl10s-vppecho
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-icx/vpp-mrr-00.md
new file mode 100644
index 0000000000..5c8f1165a4
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/vpp-mrr-00.md
@@ -0,0 +1,474 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+### intel-e810cq
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/vpp-mrr-01.md b/resources/job_specs/report_iterative/3n-icx/vpp-mrr-01.md
new file mode 100644
index 0000000000..d041bf9735
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/vpp-mrr-01.md
@@ -0,0 +1,143 @@
+# 3n-icx
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec4tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec4tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec400tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec400tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec400tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec400tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec400tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec1000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec1000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec1000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec1000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec5000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec5000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec5000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec5000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec5000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec10000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec10000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec10000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec10000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec20000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec20000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec20000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec20000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec20000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec40000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+##### ethip4ipsec60000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-2mif-1dcr1c-vppip4-aes256gcm
+##### ethip4ipsec60000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-4mif-2dcr1c-vppip4-aes256gcm
+##### ethip4ipsec60000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-8mif-4dcr1c-vppip4-aes256gcm
+##### ethip4ipsec60000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec60000tnlsw-l2bd-1ch-16mif-8dcr1c-vppip4-aes256gcm \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-icx/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..844d537f41
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/vpp-ndrpdr-00.md
@@ -0,0 +1,474 @@
+# 3n-icx
+## ./crypto
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+### intel-e810cq
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+## ./ip4_tunnels
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND cx6dx AND drv_mlx5_core AND eth-l2patch
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icx/vpp-soak-00.md b/resources/job_specs/report_iterative/3n-icx/vpp-soak-00.md
new file mode 100644
index 0000000000..cfaa79862f
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icx/vpp-soak-00.md
@@ -0,0 +1,44 @@
+# 3n-icx
+## ./container_memif
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./crypto
+### intel-e810cq
+#### avf
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND soak AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND soak AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+## ./ip4
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND soak AND e810cq AND drv_avf AND ethip4-ip4scale20k-rnd
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND soak AND e810cq AND drv_avf AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdscale1mmaclrn
+## ./vm_vhost
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND e810cq AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+
+# TODO: No IPsecHW available, maybe add WireguardSW and GtpuHW?
diff --git a/resources/job_specs/report_iterative/3n-icxd/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3n-icxd/dpdk-mrr-00.md
new file mode 100644
index 0000000000..78719d26e2
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icxd/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 3n-icxd
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-icxd/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-icxd/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..f70ef58216
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icxd/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 3n-icxd
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-icxd/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-icxd/vpp-mrr-00.md
new file mode 100644
index 0000000000..4450333f87
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icxd/vpp-mrr-00.md
@@ -0,0 +1,231 @@
+# 3n-icxd
+## ./container_memif
+## ./crypto
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+##### ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+## ./ip4
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND mrr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND mrr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./ip6_tunnels
+## ./l2
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e823c AND drv_vfio_pci AND eth-l2patch
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+## ./srv6
+## ./hoststack
+## ./vm_vhost
+## ./vts
diff --git a/resources/job_specs/report_iterative/3n-icxd/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-icxd/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..cb08b5d479
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icxd/vpp-ndrpdr-00.md
@@ -0,0 +1,219 @@
+# 3n-icxd
+## ./crypto
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+##### ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+## ./ip4
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-e823c
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e823c AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### intel-e823c
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e823c AND drv_vfio_pci AND eth-l2patch \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-icxd/vpp-soak-00.md b/resources/job_specs/report_iterative/3n-icxd/vpp-soak-00.md
new file mode 100644
index 0000000000..bf6159e3cb
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-icxd/vpp-soak-00.md
@@ -0,0 +1,46 @@
+# 3n-icxd
+## ./container_memif
+### intel-e823c
+#### avf
+##### eth-l2bdbasemaclrn-eth-2memif-1dcr
+1c AND 64b AND soak AND e823c AND drv_avf AND eth-l2bdbasemaclrn-eth-2memif-1dcr
+## ./crypto
+### intel-e823c
+#### avf
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND soak AND e823c AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND soak AND e823c AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND soak AND e823c AND drv_avf AND ethip4ipsec1000tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND soak AND e823c AND drv_avf AND ethip4ipsec1000tnlhwasync-ip4base-int-aes256gcm
+## ./ip4
+### intel-e823c
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND soak AND e823c AND drv_avf AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND soak AND e823c AND drv_avf AND ethip4-ip4scale20k-rnd
+## ./ip6
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND soak AND e823c AND drv_avf AND ethip6-ip6base
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND soak AND e823c AND drv_avf AND ethip6-ip6scale20k-rnd
+## ./l2
+### mellanox-cx6dx
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND cx6dx AND drv_mlx5_core AND eth-l2bdbasemaclrn
+### intel-e823c
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND soak AND e823c AND drv_avf AND eth-l2bdbasemaclrn
+##### eth-l2bdscale1mmaclrn
+1c AND 64b AND soak AND e823c AND drv_avf AND eth-l2bdscale1mmaclrn
+## ./vm_vhost
+### intel-e823c
+#### avf
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND soak AND e823c AND drv_avf AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/3n-snr/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3n-snr/dpdk-mrr-00.md
new file mode 100644
index 0000000000..59241d3548
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-snr/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 3n-snr
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-snr/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-snr/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..df21548724
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-snr/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 3n-snr
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-snr/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-snr/vpp-mrr-00.md
new file mode 100644
index 0000000000..a35db1717d
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-snr/vpp-mrr-00.md
@@ -0,0 +1,231 @@
+# 3n-snr
+## ./container_memif
+## ./crypto
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+##### ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+## ./ip4
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND mrr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND mrr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND mrr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./ip6_tunnels
+## ./l2
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e822cq AND drv_vfio_pci AND eth-l2patch
+## ./lb
+## ./nfv_density/dcr_memif/chain
+## ./nfv_density/dcr_memif/chain_ipsec
+## ./nfv_density/dcr_memif/pipeline
+## ./nfv_density/vm_vhost/chain
+## ./nfv_density/vm_vhost/chain_dot1qip4vxlan
+## ./srv6
+## ./hoststack
+## ./vm_vhost
+## ./vts
diff --git a/resources/job_specs/report_iterative/3n-snr/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-snr/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..29d1785dab
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-snr/vpp-ndrpdr-00.md
@@ -0,0 +1,219 @@
+# 3n-snr
+## ./crypto
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+##### ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec1tnlhwasync-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+## ./ip4
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4scale20k
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4-ip4scale20k-rnd
+## ./ip4_tunnels
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard2tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard2tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard8tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard8tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-e822cq
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6base
+##### ethip6-ip6scale20k
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k
+##### ethip6-ip6scale20k-rnd
+1c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+2c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+4c AND 78b AND ndrpdr AND e822cq AND drv_vfio_pci AND ethip6-ip6scale20k-rnd
+## ./l2
+### intel-e822cq
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2bdscale10kmaclrn
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2bdscale10kmaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e822cq AND drv_vfio_pci AND eth-l2patch \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3n-tsh/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3n-tsh/dpdk-mrr-00.md
new file mode 100644
index 0000000000..402186a1ae
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-tsh/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 3n-tsh
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-tsh/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-tsh/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..ae1cd194be
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-tsh/dpdk-ndrpdr-00.md
@@ -0,0 +1,29 @@
+# 3n-tsh
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 9000b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3n-tsh/vpp-mrr-00.md b/resources/job_specs/report_iterative/3n-tsh/vpp-mrr-00.md
new file mode 100644
index 0000000000..9dd8880a78
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-tsh/vpp-mrr-00.md
@@ -0,0 +1,231 @@
+# 3n-tsh
+## ./container_memif
+## ./crypto
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip4_tunnels
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+## ./ip6_tunnels
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+## ./srv6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./vm_vhost
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND mrr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
diff --git a/resources/job_specs/report_iterative/3n-tsh/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3n-tsh/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..fa435f10fa
--- /dev/null
+++ b/resources/job_specs/report_iterative/3n-tsh/vpp-ndrpdr-00.md
@@ -0,0 +1,229 @@
+# 3n-tsh
+## ./crypto
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes128gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-reassembly
+## ./ip4
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4udp-ip4base-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sf-10kflows
+##### ethip4udp-ip4base-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-iacl50sl-10kflows
+##### ethip4udp-ip4base-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sf-10kflows
+##### ethip4udp-ip4base-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4udp-ip4base-oacl50sl-10kflows
+## ./ip4_tunnels
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base-reassembly
+1c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+2c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+4c AND 1518b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4gtpusw-ip4base-reassembly
+## ./ip6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6-ip6base
+## ./l2
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2patch
+##### eth-l2bdbasemaclrn-iacl50sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sf-10kflows
+##### eth-l2bdbasemaclrn-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-macip-iacl50sl-10kflows
+##### eth-l2bdbasemaclrn-oacl50sf-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sf-10kflows
+##### eth-l2bdbasemaclrn-oacl50sl-10kflows
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-oacl50sl-10kflows
+## ./srv6
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./vm_vhost
+### intel-x520-da2
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+##### eth-l2xcbase-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm
+##### eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc
+##### ethip4-ip4base-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm
+##### ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm
+##### ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+1c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+2c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc
+4c AND 64b AND ndrpdr AND x520-da2 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3na-spr/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3na-spr/dpdk-mrr-00.md
new file mode 100644
index 0000000000..9890493f66
--- /dev/null
+++ b/resources/job_specs/report_iterative/3na-spr/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 3na-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3na-spr/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3na-spr/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..09ab95447a
--- /dev/null
+++ b/resources/job_specs/report_iterative/3na-spr/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 3na-spr
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3na-spr/vpp-hoststack-00.md b/resources/job_specs/report_iterative/3na-spr/vpp-hoststack-00.md
new file mode 100644
index 0000000000..a6ab56f4d1
--- /dev/null
+++ b/resources/job_specs/report_iterative/3na-spr/vpp-hoststack-00.md
@@ -0,0 +1,20 @@
+# 3na-spr
+## ./hoststack
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND 2p1cx7veat AND drv_mlx5_core AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3na-spr/vpp-mrr-00.md b/resources/job_specs/report_iterative/3na-spr/vpp-mrr-00.md
new file mode 100644
index 0000000000..b4b7bd1c2e
--- /dev/null
+++ b/resources/job_specs/report_iterative/3na-spr/vpp-mrr-00.md
@@ -0,0 +1,221 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale60k-rnd
+3c AND 64b AND mrr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+6c AND 64b AND mrr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+12c AND 64b AND mrr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+## ./ip6
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+## ./srv6
+### mellanox-cx7veat
+#### rmda-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_iterative/3na-spr/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3na-spr/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..e2a96854f7
--- /dev/null
+++ b/resources/job_specs/report_iterative/3na-spr/vpp-ndrpdr-00.md
@@ -0,0 +1,221 @@
+# 3na-spr
+## ./crypto
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+## ./ip4
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4scale20k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale20k-rnd
+##### ethip4-ip4scale60k-rnd
+3c AND 64b AND ndrpdr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+6c AND 64b AND ndrpdr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+12c AND 64b AND ndrpdr AND 6p3cx7veat AND drv_mlx5_core AND ethip4-ip4scale60k-rnd
+##### ethip4-ip4scale200k-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale200k-rnd
+##### ethip4-ip4scale2m-rnd
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4-ip4scale2m-rnd
+## ./ip4_tunnels
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4gtpusw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard2tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard2tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard8tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard8tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip4udpwireguard1000tnlsw-ip4base
+## ./ip6
+### mellanox-cx7veat
+#### mlx5-core
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6-ip6base
+## ./l2
+### mellanox-cx7veat
+#### mlx5-core
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+2c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+4c AND 64b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND eth-l2patch
+## ./srv6
+### mellanox-cx7veat
+#### rmda-core
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND 2p1cx7veat AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_iterative/3nb-spr/dpdk-mrr-00.md b/resources/job_specs/report_iterative/3nb-spr/dpdk-mrr-00.md
new file mode 100644
index 0000000000..51136ced40
--- /dev/null
+++ b/resources/job_specs/report_iterative/3nb-spr/dpdk-mrr-00.md
@@ -0,0 +1,11 @@
+# 3nb-spr
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3nb-spr/dpdk-ndrpdr-00.md b/resources/job_specs/report_iterative/3nb-spr/dpdk-ndrpdr-00.md
new file mode 100644
index 0000000000..8e1bc39d69
--- /dev/null
+++ b/resources/job_specs/report_iterative/3nb-spr/dpdk-ndrpdr-00.md
@@ -0,0 +1,23 @@
+# 3nb-spr
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-l2xcbase-testpmd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase-testpmd
+##### ethip4-ip4base-l3fwd
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND 9000b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base-l3fwd
diff --git a/resources/job_specs/report_iterative/3nb-spr/vpp-hoststack-00.md b/resources/job_specs/report_iterative/3nb-spr/vpp-hoststack-00.md
new file mode 100644
index 0000000000..e753e6a7d2
--- /dev/null
+++ b/resources/job_specs/report_iterative/3nb-spr/vpp-hoststack-00.md
@@ -0,0 +1,20 @@
+# 3nb-spr
+## ./hoststack
+### intel-e810cq
+#### dpdk-vfio-pci
+##### eth-ip4tcpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4tcpbase-ldpreload-iperf3
+##### eth-ip4tcpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4tcpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpbase-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpbase-ldpreload-iperf3
+##### eth-ip4udpscale1cl10s-ldpreload-iperf3
+1c AND 1460b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpscale1cl10s-ldpreload-iperf3
+##### eth-ip4udpquicbase-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicbase-vppecho
+##### eth-ip4udpquicscale1cl10s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale1cl10s-vppecho
+##### eth-ip4udpquicscale10cl1s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale10cl1s-vppecho
+##### eth-ip4udpquicscale10cl10s-vppecho
+1c AND 1280b AND bps AND e810cq AND drv_vfio_pci AND eth-ip4udpquicscale10cl10s-vppecho \ No newline at end of file
diff --git a/resources/job_specs/report_iterative/3nb-spr/vpp-mrr-00.md b/resources/job_specs/report_iterative/3nb-spr/vpp-mrr-00.md
new file mode 100644
index 0000000000..ccb8aaad08
--- /dev/null
+++ b/resources/job_specs/report_iterative/3nb-spr/vpp-mrr-00.md
@@ -0,0 +1,466 @@
+# 3nb-spr
+## ./crypto
+### intel-e810xxv
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND mrr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+### intel-e810cq
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+## ./ip4
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+## ./ip4_tunnels
+### intel-e810xxv
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND mrr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+## ./ip6
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND mrr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+## ./l2
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810xxv AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND mrr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./srv6
+### intel-e810xxv
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND mrr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/report_iterative/3nb-spr/vpp-ndrpdr-00.md b/resources/job_specs/report_iterative/3nb-spr/vpp-ndrpdr-00.md
new file mode 100644
index 0000000000..d3c494affb
--- /dev/null
+++ b/resources/job_specs/report_iterative/3nb-spr/vpp-ndrpdr-00.md
@@ -0,0 +1,466 @@
+# 3nb-spr
+## ./crypto
+### intel-e810xxv
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-dir-aes256gcm
+##### ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND 1518b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+1c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+2c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+4c AND imix AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4ipsec1000tnlsw-fixtnlip-ip4base-policy-flow-rss-aes256gcm
+### intel-e810cq
+#### avf
+##### ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_avf AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+#### dpdk-vfio-pci
+##### ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec40tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlsw-ip4base-int-aes256gcm
+##### ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+3c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec8tnlswasync-scheduler-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec4tnlhwasync-ip4base-policy-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-int-aes256gcm
+##### ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4ipsec10000tnlhwasync-ip4base-policy-fastpath-aes256gcm
+## ./ip4
+### intel-e810xxv
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4-ip4base
+### intel-e810cq
+#### avf
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4-ip4base
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+## ./ip4_tunnels
+### intel-e810xxv
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND ethip4gtpusw-ip4base
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+### intel-e810xxv
+#### dpdk-vfio-pci
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+### intel-e810cq
+#### avf
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND ethip4vxlan-l2xcbase
+#### dpdk-vfio-pci
+##### ethip4vxlan-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+##### ethip4gtpusw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpusw-ip4base
+##### ethip4gtpuhw-ip4base
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4gtpuhw-ip4base
+##### ethip4udpwireguard1tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlsw-ip4base
+##### ethip4udpwireguard4tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlsw-ip4base
+##### ethip4udpwireguard100tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlsw-ip4base
+##### ethip4udpwireguard1000tnlsw-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlsw-ip4base
+##### ethip4udpwireguard1tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1tnlhwasync-ip4base
+##### ethip4udpwireguard4tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard4tnlhwasync-ip4base
+##### ethip4udpwireguard100tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard100tnlhwasync-ip4base
+##### ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND 1518b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+1c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+2c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+4c AND imix AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip4udpwireguard1000tnlhwasync-ip4base
+## ./ip6
+### intel-e810xxv
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810xxv AND drv_vfio_pci AND ethip6-ip6base
+### intel-e810cq
+#### avf
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6-ip6base
+#### dpdk-vfio-pci
+##### ethip6-ip6base
+1c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+2c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+4c AND 78b AND ndrpdr AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+## ./l2
+### intel-e810xxv
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810xxv AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810xxv AND drv_vfio_pci AND eth-l2bdbasemaclrn
+### intel-e810cq
+#### avf
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2bdbasemaclrn
+##### dot1q-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND dot1q-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_avf AND eth-l2patch
+#### dpdk-vfio-pci
+##### eth-l2bdbasemaclrn
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2bdbasemaclrn
+##### eth-l2xcbase
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2xcbase
+##### eth-l2patch
+1c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+2c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+4c AND 64b AND ndrpdr AND e810cq AND drv_vfio_pci AND eth-l2patch
+## ./srv6
+### intel-e810xxv
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810xxv AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+### intel-e810cq
+#### avf
+##### ethip6ip6-ip6base-srv6enc1sid
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+1c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+2c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
+4c AND 78b AND ndrpdr AND e810cq AND drv_avf AND ethip6srhip6-ip6base-srv6proxy-stat
diff --git a/resources/job_specs/soak_weekly/vpp-2n-clx.md b/resources/job_specs/soak_weekly/vpp-2n-clx.md
new file mode 120000
index 0000000000..1de08259c4
--- /dev/null
+++ b/resources/job_specs/soak_weekly/vpp-2n-clx.md
@@ -0,0 +1 @@
+../report_iterative/2n-clx/vpp-soak-00.md \ No newline at end of file
diff --git a/resources/job_specs/soak_weekly/vpp-2n-icx.md b/resources/job_specs/soak_weekly/vpp-2n-icx.md
new file mode 120000
index 0000000000..28c08129d4
--- /dev/null
+++ b/resources/job_specs/soak_weekly/vpp-2n-icx.md
@@ -0,0 +1 @@
+../report_iterative/2n-icx/vpp-soak-00.md \ No newline at end of file
diff --git a/resources/job_specs/soak_weekly/vpp-2n-spr.md b/resources/job_specs/soak_weekly/vpp-2n-spr.md
new file mode 120000
index 0000000000..c11899295d
--- /dev/null
+++ b/resources/job_specs/soak_weekly/vpp-2n-spr.md
@@ -0,0 +1 @@
+../report_iterative/2n-spr/vpp-soak-00.md \ No newline at end of file
diff --git a/resources/job_specs/soak_weekly/vpp-3n-icx.md b/resources/job_specs/soak_weekly/vpp-3n-icx.md
new file mode 120000
index 0000000000..755a3659e1
--- /dev/null
+++ b/resources/job_specs/soak_weekly/vpp-3n-icx.md
@@ -0,0 +1 @@
+../report_iterative/3n-icx/vpp-soak-00.md \ No newline at end of file
diff --git a/resources/job_specs/soak_weekly/vpp-3n-icxd.md b/resources/job_specs/soak_weekly/vpp-3n-icxd.md
new file mode 120000
index 0000000000..a4fb4dd8e7
--- /dev/null
+++ b/resources/job_specs/soak_weekly/vpp-3n-icxd.md
@@ -0,0 +1 @@
+../report_iterative/3n-icxd/vpp-soak-00.md \ No newline at end of file
diff --git a/resources/job_specs/vpp_device/vpp-1n-alt.md b/resources/job_specs/vpp_device/vpp-1n-alt.md
new file mode 100644
index 0000000000..9d9c8e5bfb
--- /dev/null
+++ b/resources/job_specs/vpp_device/vpp-1n-alt.md
@@ -0,0 +1,205 @@
+# 1n-alt
+## ./container_memif
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-l2xcbase-eth-2memif-1dcr
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2xcbase-eth-2memif-1dcr
+##### ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2memif-1dcr
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-eth-2memif-1dcr
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase-eth-2memif-1dcr
+##### ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+## ./crypto/ethip4
+### mellanox-cx6dx
+#### mlx5-core
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+##### ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+##### ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+## ./crypto/ethip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+##### ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+## ./interfaces
+### mellanox-cx6dx
+#### mlx5-core
+##### ethicmp4-ip4base-eth-1tap
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethicmp4-ip4base-eth-1tap
+##### ethicmp4-ip4base-eth-1tap-namespace
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethicmp4-ip4base-eth-1tap-namespace
+##### ethip4-l2bdbasemaclrn-eth-2tap
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-eth-2tap
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2bdbasemaclrn-eth-2tap
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2tap
+## ./ip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base-adlalwlistbase
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-adlblklistbase
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-adlblklistbase
+##### ethip4-ip4base
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-ipolicemarkbase
+##### ethip4tcp-nat44det
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4tcp-nat44det
+##### ethip4tcp-nat44ed
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4tcp-nat44ed
+##### ethip4udp-nat44det
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4udp-nat44det
+##### ethip4udp-nat44ed
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4udp-nat44ed
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-ip4base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base
+### intel-x710
+#### avf
+##### ethip4-ip4base
+0c AND 64b AND scapy AND x710 AND drv_avf AND ethip4-ip4base
+## ./ip4_tunnel/lisp
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4lisp-ip4base
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4lisp-ip4base
+##### ethip4lispgpe-ip4base
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4lispgpe-ip4base
+##### ethip4lispgpe-ip6base
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4lispgpe-ip6base
+## ./ip4_tunnel
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4vxlan-l2bdbasemaclrn
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4vxlan-l2xcbase
+## ./ip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base-adlalwlistbase
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-adlblklistbase
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-adlblklistbase
+##### ethip6-ip6base-iacldstbase
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-iacldstbase
+##### ethip6-ip6base-ipolicemarkbase
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-ipolicemarkbase
+##### ethip6-ip6base
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base
+## ./ip6_tunnels/lisp
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6lispgpe-ip4base
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6lispgpe-ip4base
+##### ethip6lispgpe-ip6base
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6lispgpe-ip6base
+## ./l2bd
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-l2bdbasemaclrn
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn
+##### ethip4-l2bdbasemaclrn-iacl1sf
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-iacl1sf
+##### ethip4-l2bdbasemaclrn-iacl1sl
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-iacl1sl
+##### ethip4-l2bdbasemaclrn-macip-iacl1sl
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-macip-iacl1sl
+##### ethip4-l2bdbasemaclrn-oacl1sf
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-oacl1sf
+##### ethip4-l2bdbasemaclrn-oacl1sl
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-oacl1sl
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn
+##### ethip4-l2bdbasemaclrn-iacl1sf
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sf
+##### ethip4-l2bdbasemaclrn-iacl1sl
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sl
+##### ethip4-l2bdbasemaclrn-oacl1sf
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sf
+##### ethip4-l2bdbasemaclrn-oacl1sl
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sl
+#### avf
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND x710 AND drv_avf AND ethip4-l2bdbasemaclrn
+## ./l2patch
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-l2patch
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2patch
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2patch
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2patch
+## ./l2xc
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-l2xcbase
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2xcbase
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase
+## ./srv6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6ip6-ip6base-srv6enc1sid
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./stats
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-l2xcbase-stats
+0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2xcbase-stats
+## ./vm/ethip4
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip4-ip4base-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-ip4base-eth-2vhost-1vm
+##### ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+##### ethip4-l2xcbase-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND cx6dx AND drv_mlx5_core AND ethip4-l2xcbase-eth-2vhost-1vm
+## ./vm/ethip6
+### mellanox-cx6dx
+#### mlx5-core
+##### ethip6-ip6base-eth-2vhost-1vm
+# 0c AND 78b AND scapy AND cx6dx AND drv_mlx5_core AND ethip6-ip6base-eth-2vhost-1vm \ No newline at end of file
diff --git a/resources/job_specs/vpp_device/vpp-1n-skx.md b/resources/job_specs/vpp_device/vpp-1n-skx.md
new file mode 100644
index 0000000000..2b025b796c
--- /dev/null
+++ b/resources/job_specs/vpp_device/vpp-1n-skx.md
@@ -0,0 +1,208 @@
+# 1n-skx
+## ./container_memif
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-eth-2memif-1dcr
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase-eth-2memif-1dcr
+##### ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto/ethip4
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+##### ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+## ./crypto/ethip6
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+##### ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+## ./flow
+### intel-e810cq
+#### avf
+##### ethip4-flow-ip4-ipsec-ah
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ipsec-ah
+##### ethip4-flow-ip4-ipsec-esp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ipsec-esp
+##### ethip4-flow-ip4-l2tpv3oip
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-l2tpv3oip
+##### ethip4-flow-ip4-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ntuple-tcp
+##### ethip4-flow-ip4-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ntuple-udp
+##### ethip4-flow-ip4-tcp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-tcp
+##### ethip4-flow-ip4-udp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-udp
+##### ethip6-flow-ip6-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-ntuple-tcp
+##### ethip6-flow-ip6-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-ntuple-udp
+##### ethip6-flow-ip6-tcp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-tcp
+##### ethip6-flow-ip6-udp
+0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-udp
+#### dpdk-vfio-pci
+##### ethip4-flow-ip4-gtpu
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-gtpu
+##### ethip4-flow-ip4-ipsec-ah
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ipsec-ah
+##### ethip4-flow-ip4-ipsec-esp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ipsec-esp
+##### ethip4-flow-ip4-l2tpv3oip
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-l2tpv3oip
+##### ethip4-flow-ip4-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ntuple-tcp
+##### ethip4-flow-ip4-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ntuple-udp
+##### ethip4-flow-ip4-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-tcp
+##### ethip4-flow-ip4-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-udp
+##### ethip6-flow-ip6-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-ntuple-tcp
+##### ethip6-flow-ip6-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-ntuple-udp
+##### ethip6-flow-ip6-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-tcp
+##### ethip6-flow-ip6-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-udp
+## ./interfaces
+### intel-x710
+#### dpdk-vfio-pci
+##### ethicmp4-ip4base-eth-1tap
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap
+##### ethicmp4-ip4base-eth-1tap-namespace
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap-namespace
+##### ethip4-l2bdbasemaclrn-eth-2tap
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2tap
+## ./ip4
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-adlblklistbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-adlblklistbase
+##### ethip4-ip4base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+##### ethip4tcp-nat44det
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4tcp-nat44det
+##### ethip4tcp-nat44ed
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4tcp-nat44ed
+##### ethip4udp-nat44det
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4udp-nat44det
+##### ethip4udp-nat44ed
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4udp-nat44ed
+## ./ip4_tunnel/lisp
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4lisp-ip4base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4lisp-ip4base
+##### ethip4lispgpe-ip4base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4lispgpe-ip4base
+##### ethip4lispgpe-ip6base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4lispgpe-ip6base
+## ./ip4_tunnel
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4vxlan-l2bdbasemaclrn
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+## ./ip6
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip6-ip6base-adlalwlistbase
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-adlblklistbase
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base-adlblklistbase
+##### ethip6-ip6base-iacldstbase
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+##### ethip6-ip6base-ipolicemarkbase
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base-ipolicemarkbase
+##### ethip6-ip6base
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base
+## ./ip6_tunnels/lisp
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip6lispgpe-ip4base
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6lispgpe-ip4base
+##### ethip6lispgpe-ip6base
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6lispgpe-ip6base
+## ./l2bd
+### intel-x710
+#### avf
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND x710 AND drv_avf AND ethip4-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn
+##### ethip4-l2bdbasemaclrn-iacl1sf
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sf
+##### ethip4-l2bdbasemaclrn-iacl1sl
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sl
+##### ethip4-l2bdbasemaclrn-macip-iacl1sl
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-macip-iacl1sl
+##### ethip4-l2bdbasemaclrn-oacl1sf
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sf
+##### ethip4-l2bdbasemaclrn-oacl1sl
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sl
+## ./l2patch
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2patch
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2patch
+## ./l2xc
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase
+## ./srv6
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./stats
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-stats
+0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase-stats
+## ./vm/ethip4
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip4-ip4base-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-ip4base-eth-2vhost-1vm
+##### ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+##### ethip4-l2xcbase-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND x710 AND drv_vfio_pci AND ethip4-l2xcbase-eth-2vhost-1vm
+## ./vm/ethip6
+### intel-x710
+#### dpdk-vfio-pci
+##### ethip6-ip6base-eth-2vhost-1vm
+# 0c AND 78b AND scapy AND x710 AND drv_vfio_pci AND ethip6-ip6base-eth-2vhost-1vm
diff --git a/resources/job_specs/vpp_device/vpp-1n-spr.md b/resources/job_specs/vpp_device/vpp-1n-spr.md
new file mode 100644
index 0000000000..432d78a7f4
--- /dev/null
+++ b/resources/job_specs/vpp_device/vpp-1n-spr.md
@@ -0,0 +1,208 @@
+# 1n-spr
+## ./container_memif
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-eth-2memif-1dcr
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2xcbase-eth-2memif-1dcr
+##### ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto/ethip4
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+##### ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+## ./crypto/ethip6
+### intel-e810
+#### dpdk-vfio-pci
+##### ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+##### ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+## ./flow
+### intel-e810cq
+#### avf
+##### ethip4-flow-ip4-ipsec-ah
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ipsec-ah
+##### ethip4-flow-ip4-ipsec-esp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ipsec-esp
+##### ethip4-flow-ip4-l2tpv3oip
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-l2tpv3oip
+##### ethip4-flow-ip4-ntuple-tcp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ntuple-tcp
+##### ethip4-flow-ip4-ntuple-udp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-ntuple-udp
+##### ethip4-flow-ip4-tcp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-tcp
+##### ethip4-flow-ip4-udp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-flow-ip4-udp
+##### ethip6-flow-ip6-ntuple-tcp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-ntuple-tcp
+##### ethip6-flow-ip6-ntuple-udp
+# k0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-ntuple-udp
+##### ethip6-flow-ip6-tcp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-tcp
+##### ethip6-flow-ip6-udp
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip6-flow-ip6-udp
+#### dpdk-vfio-pci
+##### ethip4-flow-ip4-gtpu
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-gtpu
+##### ethip4-flow-ip4-ipsec-ah
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ipsec-ah
+##### ethip4-flow-ip4-ipsec-esp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ipsec-esp
+##### ethip4-flow-ip4-l2tpv3oip
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-l2tpv3oip
+##### ethip4-flow-ip4-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ntuple-tcp
+##### ethip4-flow-ip4-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-ntuple-udp
+##### ethip4-flow-ip4-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-tcp
+##### ethip4-flow-ip4-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-flow-ip4-udp
+##### ethip6-flow-ip6-ntuple-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-ntuple-tcp
+##### ethip6-flow-ip6-ntuple-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-ntuple-udp
+##### ethip6-flow-ip6-tcp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-tcp
+##### ethip6-flow-ip6-udp
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-flow-ip6-udp
+## ./interfaces
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethicmp4-ip4base-eth-1tap
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap
+##### ethicmp4-ip4base-eth-1tap-namespace
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap-namespace
+##### ethip4-l2bdbasemaclrn-eth-2tap
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2tap
+## ./ip4
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-adlblklistbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-adlblklistbase
+##### ethip4-ip4base
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+##### ethip4tcp-nat44det
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4tcp-nat44det
+##### ethip4tcp-nat44ed
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4tcp-nat44ed
+##### ethip4udp-nat44det
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4udp-nat44det
+##### ethip4udp-nat44ed
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4udp-nat44ed
+## ./ip4_tunnel/lisp
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4lisp-ip4base
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4lisp-ip4base
+##### ethip4lispgpe-ip4base
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4lispgpe-ip4base
+##### ethip4lispgpe-ip6base
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4lispgpe-ip6base
+## ./ip4_tunnel
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4vxlan-l2bdbasemaclrn
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+## ./ip6
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip6-ip6base-adlalwlistbase
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-adlblklistbase
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base-adlblklistbase
+##### ethip6-ip6base-iacldstbase
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+##### ethip6-ip6base-ipolicemarkbase
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base-ipolicemarkbase
+##### ethip6-ip6base
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base
+## ./ip6_tunnels/lisp
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip6lispgpe-ip4base
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6lispgpe-ip4base
+##### ethip6lispgpe-ip6base
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6lispgpe-ip6base
+## ./l2bd
+### intel-e810cq
+#### avf
+##### ethip4-l2bdbasemaclrn
+# 0c AND 64b AND scapy AND e810cq AND drv_avf AND ethip4-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn
+##### ethip4-l2bdbasemaclrn-iacl1sf
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sf
+##### ethip4-l2bdbasemaclrn-iacl1sl
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sl
+##### ethip4-l2bdbasemaclrn-macip-iacl1sl
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-macip-iacl1sl
+##### ethip4-l2bdbasemaclrn-oacl1sf
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sf
+##### ethip4-l2bdbasemaclrn-oacl1sl
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sl
+## ./l2patch
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-l2patch
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2patch
+## ./l2xc
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2xcbase
+## ./srv6
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./stats
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-stats
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2xcbase-stats
+## ./vm/ethip4
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip4-ip4base-eth-2vhost-1vm
+0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-ip4base-eth-2vhost-1vm
+##### ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+##### ethip4-l2xcbase-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND e810cq AND drv_vfio_pci AND ethip4-l2xcbase-eth-2vhost-1vm
+## ./vm/ethip6
+### intel-e810cq
+#### dpdk-vfio-pci
+##### ethip6-ip6base-eth-2vhost-1vm
+# 0c AND 78b AND scapy AND e810cq AND drv_vfio_pci AND ethip6-ip6base-eth-2vhost-1vm
diff --git a/resources/job_specs/vpp_device/vpp-1n-vbox.md b/resources/job_specs/vpp_device/vpp-1n-vbox.md
new file mode 100644
index 0000000000..62e491bf6b
--- /dev/null
+++ b/resources/job_specs/vpp_device/vpp-1n-vbox.md
@@ -0,0 +1,158 @@
+# 1n-vbox
+## ./container_memif
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-eth-2memif-1dcr
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2xcbase-eth-2memif-1dcr
+##### ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2memif-1dcr
+##### ethip4-ip4base-eth-2memif-1dcr
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-eth-2memif-1dcr
+## ./crypto/ethip4
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4ipsec11tnlsw-ip4base-int-aes128cbc-hmac512sha
+##### ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha
+##### ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4ipsec1tptsw-ip4base-policy-aes128cbc-hmac512sha
+## ./crypto/ethip6
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6ipsec1tnlsw-ip6base-policy-aes128cbc-hmac512sha
+##### ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6ipsec1tptsw-ip6base-policy-aes128cbc-hmac512sha
+## ./interfaces
+### virtual
+#### dpdk-vfio-pci
+##### ethicmp4-ip4base-eth-1tap
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap
+##### ethicmp4-ip4base-eth-1tap-namespace
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethicmp4-ip4base-eth-1tap-namespace
+##### ethip4-l2bdbasemaclrn-eth-2tap
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2tap
+## ./ip4
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-ip4base-adlalwlistbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-adlalwlistbase
+##### ethip4-ip4base-adlblklistbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-adlblklistbase
+##### ethip4-ip4base
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base
+##### ethip4-ip4base-iacldstbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-iacldstbase
+##### ethip4-ip4base-ipolicemarkbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-ipolicemarkbase
+##### ethip4tcp-nat44det
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4tcp-nat44det
+##### ethip4tcp-nat44ed
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4tcp-nat44ed
+##### ethip4udp-nat44det
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4udp-nat44det
+##### ethip4udp-nat44ed
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4udp-nat44ed
+## ./ip4_tunnel/lisp
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4lisp-ip4base
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4lisp-ip4base
+##### ethip4lispgpe-ip4base
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4lispgpe-ip4base
+##### ethip4lispgpe-ip6base
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4lispgpe-ip6base
+## ./ip4_tunnel
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4--ethip4udpgeneve-1tun-ip4base
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4--ethip4udpgeneve-1tun-ip4base
+##### ethip4vxlan-l2bdbasemaclrn
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4vxlan-l2bdbasemaclrn
+##### ethip4vxlan-l2xcbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4vxlan-l2xcbase
+## ./ip6
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip6-ip6base-adlalwlistbase
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base-adlalwlistbase
+##### ethip6-ip6base-adlblklistbase
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base-adlblklistbase
+##### ethip6-ip6base-iacldstbase
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base-iacldstbase
+##### ethip6-ip6base-ipolicemarkbase
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base-ipolicemarkbase
+##### ethip6-ip6base
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base
+## ./ip6_tunnels/lisp
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip6lispgpe-ip4base
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6lispgpe-ip4base
+##### ethip6lispgpe-ip6base
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6lispgpe-ip6base
+## ./l2bd
+### vbox-virtual
+#### avf
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND virtual AND drv_avf AND ethip4-l2bdbasemaclrn
+#### dpdk-vfio-pci
+##### ethip4-l2bdbasemaclrn
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn
+##### ethip4-l2bdbasemaclrn-iacl1sf
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sf
+##### ethip4-l2bdbasemaclrn-iacl1sl
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-iacl1sl
+##### ethip4-l2bdbasemaclrn-macip-iacl1sl
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-macip-iacl1sl
+##### ethip4-l2bdbasemaclrn-oacl1sf
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sf
+##### ethip4-l2bdbasemaclrn-oacl1sl
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-oacl1sl
+## ./l2patch
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-l2patch
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2patch
+## ./l2xc
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2xcbase
+## ./srv6
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip6ip6-ip6base-srv6enc1sid
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6ip6-ip6base-srv6enc1sid
+##### ethip6srhip6-ip6base-srv6enc2sids
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids
+##### ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6enc2sids-nodecaps
+##### ethip6srhip6-ip6base-srv6proxy-dyn
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-dyn
+##### ethip6srhip6-ip6base-srv6proxy-masq
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-masq
+##### ethip6srhip6-ip6base-srv6proxy-stat
+0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6srhip6-ip6base-srv6proxy-stat
+## ./stats
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-l2xcbase-stats
+0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2xcbase-stats
+## ./vm/ethip4
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip4-ip4base-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-ip4base-eth-2vhost-1vm
+##### ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2bdbasemaclrn-eth-2vhost-1vm
+##### ethip4-l2xcbase-eth-2vhost-1vm
+# 0c AND 64b AND scapy AND virtual AND drv_vfio_pci AND ethip4-l2xcbase-eth-2vhost-1vm
+## ./vm/ethip6
+### vbox-virtual
+#### dpdk-vfio-pci
+##### ethip6-ip6base-eth-2vhost-1vm
+# 0c AND 78b AND scapy AND virtual AND drv_vfio_pci AND ethip6-ip6base-eth-2vhost-1vm
diff --git a/resources/libraries/bash/config/defaults b/resources/libraries/bash/config/defaults
deleted file mode 100644
index 6a25a5f04d..0000000000
--- a/resources/libraries/bash/config/defaults
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/bin/bash
-
-typeset -A cfg
-cfg=( # set default values in config array
- [K8S_CALICO]="${SCRIPT_DIR}/../../templates/kubernetes/calico_v2.6.3.yaml"
- [K8S_CONTIV_VPP]="https://raw.githubusercontent.com/contiv/vpp/master/k8s/contiv-vpp.yaml"
- [K8S_CSIT]="${SCRIPT_DIR}/../../templates/kubernetes/csit.yaml"
-)
diff --git a/resources/libraries/bash/entry/bisect.sh b/resources/libraries/bash/entry/bisect.sh
new file mode 100644
index 0000000000..d5cb1d51ba
--- /dev/null
+++ b/resources/libraries/bash/entry/bisect.sh
@@ -0,0 +1,188 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -exuo pipefail
+
+# This entry script does not change which CSIT branch is used,
+# use "with_oper_for_vpp.sh" wrapper for that.
+#
+# This script is to be used for locating performance regressions
+# (or breakages, or progressions, or fixes).
+# It uses "git bisect" commands on the VPP repository,
+# between the triggered VPP patch and a commit specified in the first argument
+# of the gerrit comment text.
+# The other arguments are used as tag expressions for selecting tests as usual.
+# Many different result types are supported.
+#
+# Logs are present in the archive directory, but usually the main output
+# is the offending commit as identified by "git bisect", visible in console.
+#
+# While selecting just one testcase is the intended use,
+# this script should be able to deal with multiple testcases as well,
+# grouping all the values together. This usually inflates
+# the standard deviation, but it is not clear how that affects the bisection.
+#
+# For the bisection decision, jumpavg library is used,
+# deciding whether shorter description is achieved by forcefully grouping
+# the middle results with the old, or with the new ones.
+# If the shortest description is achieved with 3 separate groups,
+# bisect interval focuses on biggest relative change
+# (with respect to pairwise maximum).
+#
+# If a test fails, an artificial result is used to distinguish
+# from normal results. Currently, the value 1.0, with the multiplicity of 4.
+#
+# Note that if there was a VPP API change that affects tests in the interval,
+# there frequently is no good way for single CSIT commit to work there.
+# You can try manually reverting the CSIT changes to make tests pass,
+# possibly needing to search over multiple subintervals.
+# Using and older CSIT commit (possibly cherry-picking the bisect Change
+# if it was not present in CSIT compatible with old enough VPP builds)
+# is the fastest solution; but beware of CSIT-induced performance effects
+# (e.g. TRex settings).
+#
+# If a regression happens during a subinterval where the test fails
+# due to a bug in VPP, you may try to create a new commit chain
+# with the fix cherry-picked to the start of the interval.
+# Do not do that as a chain in Gerrit, it would be long and Gerrit will refuse
+# edits of already merged Changes.
+# Instead, add a block of bash code to do the manipulation
+# on local git history between checkout and bisect.
+#
+# At the start, the script executes first bisect iteration in an attempt
+# to avoid work if the search interval has only one commit (or is invalid).
+# Only when the work is needed, earliest and latest commits are built
+# and tested. Branches "earliest", "middle" and "latest" are temporarily created
+# as a way to remember which commits to check out.
+#
+# Test results are parsed from json files,
+# symlinks are used to tell python script which results to compare.
+#
+# Assumptions:
+# + There is a directory holding VPP repo with patch under test checked out.
+# + It contains csit subdirectory with CSIT code to use (this script is there).
+# + Everything needed to build VPP is already installed locally.
+# Consequences:
+# + Working directory is switched to the VPP repo root.
+# + At the end, VPP repo has checked out and built some commit,
+# as chosen by "git bisect".
+# + Directories build_root, build and csit are reset during the run.
+# + The following directories (relative to VPP repo) are (re)created:
+# ++ csit_{earliest,middle,latest}, build_{earliest,latest},
+# ++ archive, csit/archive, csit/download_dir.
+# + Symlinks csit_{early,late,mid} are also created.
+# Arguments:
+# - ${1} - If present, override JOB_NAME to simplify manual usage.
+
+# "set -eu" handles failures from the following two lines.
+BASH_ENTRY_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
+BASH_FUNCTION_DIR="$(readlink -e "${BASH_ENTRY_DIR}/../function")"
+source "${BASH_FUNCTION_DIR}/common.sh" || {
+ echo "Source failed." >&2
+ exit 1
+}
+source "${BASH_FUNCTION_DIR}/per_patch.sh" || die "Source failed."
+# Cleanup needs ansible.
+source "${BASH_FUNCTION_DIR}/ansible.sh" || die "Source failed."
+common_dirs || die
+check_prerequisites || die
+set_perpatch_vpp_dir || die
+get_test_code "${1-}" || die
+get_test_tag_string || die
+# Unfortunately, git bisect only works at the top of the repo.
+cd "${VPP_DIR}" || die
+
+# Save the current commit.
+git checkout -b "latest"
+# Save the lower bound commit.
+git checkout -b "earliest"
+git reset --hard "${GIT_BISECT_FROM}"
+
+# This is the place for custom code manipulating local git history.
+
+#git checkout -b "alter"
+#...
+#git checkout "latest"
+#git rebase "alter" || git rebase --skip
+#git branch -D "alter"
+
+git bisect start || die
+# TODO: Can we add a trap for "git bisect reset" or even "deactivate",
+# without affecting the inner trap for unreserve and cleanup?
+git checkout "latest"
+git status || die
+git describe || die
+git bisect new || die
+# Performing first iteration early to avoid testing or even building.
+git checkout "earliest" || die "Failed to checkout earliest commit."
+git status || die
+git describe || die
+# The first iteration.
+git bisect old | tee "git.log" || die "Invalid bisect interval?"
+git checkout -b "middle" || die "Failed to create branch: middle"
+git status || die
+git describe || die
+if head -n 1 "git.log" | cut -b -11 | fgrep -q "Bisecting:"; then
+ echo "Building and testing initial bounds."
+else
+ echo "Single commit, no work needed."
+ exit 0
+fi
+# Building latest first, good for avoiding DPDK rebuilds.
+git checkout "latest" || die "Failed to checkout latest commit."
+build_vpp_ubuntu "LATEST" || die
+set_aside_build_artifacts "latest" || die
+git checkout "earliest" || die "Failed to checkout earliest commit."
+git status || die
+git describe || die
+build_vpp_ubuntu "EARLIEST" || die
+set_aside_build_artifacts "earliest" || die
+git checkout "middle" || die "Failed to checkout middle commit."
+git branch -D "earliest" "latest" || die "Failed to remove branches."
+# Done with repo manipulation for now, testing commences.
+initialize_csit_dirs "earliest" "middle" "latest" || die
+set_perpatch_dut || die
+select_topology || die
+select_arch_os || die
+activate_virtualenv "${VPP_DIR}" || die
+generate_tests || die
+archive_tests || die
+
+# TODO: Does it matter which build is tested first?
+
+select_build "build_earliest" || die
+check_download_dir || die
+reserve_and_cleanup_testbed || die
+run_robot || die
+move_test_results "csit_earliest" || die
+ln -s -T "csit_earliest" "csit_early" || die
+
+# Explicit cleanup, in case the previous test left the testbed in a bad shape.
+ansible_playbook "cleanup"
+
+select_build "build_latest" || die
+check_download_dir || die
+run_robot || die
+move_test_results "csit_latest" || die
+ln -s -T "csit_latest" "csit_late" || die
+untrap_and_unreserve_testbed || die
+
+# See function documentation for the logic in the loop.
+main_bisect_loop || die
+# In worst case, the middle branch is still checked out.
+# TODO: Is there a way to ensure "middle" branch is always deleted?
+git branch -D "middle" || true
+# Delete symlinks to prevent duplicate archiving.
+rm -vrf "csit_early" "csit_late" "csit_mid"
diff --git a/resources/libraries/bash/entry/bootstrap_docs.sh b/resources/libraries/bash/entry/bootstrap_aws_eb_version_deploy.sh
index 9d2519ebf3..15d6dae405 100755
--- a/resources/libraries/bash/entry/bootstrap_docs.sh
+++ b/resources/libraries/bash/entry/bootstrap_aws_eb_version_deploy.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -25,8 +25,8 @@ source "${BASH_FUNCTION_DIR}/common.sh" || {
echo "Source failed." >&2
exit 1
}
-source "${BASH_FUNCTION_DIR}/docs.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/eb_version.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/hugo.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/terraform.sh" || die "Source failed."
common_dirs || die
-activate_virtualenv || die
-generate_docs || die
-die_on_docs_error || die
+eb_version_deploy || die
diff --git a/resources/libraries/bash/entry/bootstrap_trending.sh b/resources/libraries/bash/entry/bootstrap_aws_eb_version_verify.sh
index b172a81be5..362a2f78af 100755
--- a/resources/libraries/bash/entry/bootstrap_trending.sh
+++ b/resources/libraries/bash/entry/bootstrap_aws_eb_version_verify.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -25,8 +25,8 @@ source "${BASH_FUNCTION_DIR}/common.sh" || {
echo "Source failed." >&2
exit 1
}
-source "${BASH_FUNCTION_DIR}/docs.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/eb_version.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/hugo.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/terraform.sh" || die "Source failed."
common_dirs || die
-activate_virtualenv || die
-generate_trending || die
-die_on_docs_error || die
+eb_version_build_verify || die
diff --git a/resources/libraries/bash/entry/bootstrap_report.sh b/resources/libraries/bash/entry/bootstrap_report.sh
index 191f910171..47a9d2e3d4 100755
--- a/resources/libraries/bash/entry/bootstrap_report.sh
+++ b/resources/libraries/bash/entry/bootstrap_report.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -25,8 +25,8 @@ source "${BASH_FUNCTION_DIR}/common.sh" || {
echo "Source failed." >&2
exit 1
}
-source "${BASH_FUNCTION_DIR}/docs.sh" || die "Source failed."
+source "${BASH_FUNCTION_DIR}/eb_version.sh" || die "Source failed."
common_dirs || die
activate_virtualenv || die
generate_report || die
-die_on_docs_error || die
+die_on_error || die
diff --git a/resources/libraries/bash/entry/bootstrap_verify_perf.sh b/resources/libraries/bash/entry/bootstrap_verify_perf.sh
index 99813573ea..18dfd08c39 100755
--- a/resources/libraries/bash/entry/bootstrap_verify_perf.sh
+++ b/resources/libraries/bash/entry/bootstrap_verify_perf.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -46,10 +46,7 @@ archive_tests || die
prepare_topology || die
select_topology || die
reserve_and_cleanup_testbed || die
-select_tags || die
-compose_pybot_arguments || die
-set_environment_variables || die
-run_pybot || die
-untrap_and_unreserve_testbed || die
+run_robot || die
move_archives || die
-die_on_pybot_error || die
+untrap_and_unreserve_testbed || die
+die_on_robot_error || die
diff --git a/resources/libraries/bash/entry/bootstrap_vpp_device.sh b/resources/libraries/bash/entry/bootstrap_vpp_device.sh
index ae4c26a1ba..fd6279f8c7 100755
--- a/resources/libraries/bash/entry/bootstrap_vpp_device.sh
+++ b/resources/libraries/bash/entry/bootstrap_vpp_device.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -44,9 +44,6 @@ archive_tests || die
prepare_topology || die
select_topology || die
activate_docker_topology || die
-select_tags || die
-compose_pybot_arguments || die
-set_environment_variables || die
-run_pybot || die
+run_robot || die
move_archives || die
-die_on_pybot_error || die
+die_on_robot_error || die
diff --git a/resources/libraries/bash/entry/check/doc_verify.sh b/resources/libraries/bash/entry/check/doc_verify.sh
deleted file mode 100644
index baa9d8aa74..0000000000
--- a/resources/libraries/bash/entry/check/doc_verify.sh
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -xeuo pipefail
-
-# This file should be executed from tox, as the assumend working directory
-# is different from where this file is located.
-# This file does not have executable flag nor shebang,
-# to dissuade non-tox callers.
-
-# "set -eu" handles failures from the following two lines.
-BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
-BASH_FUNCTION_DIR="$(readlink -e "${BASH_CHECKS_DIR}/../../function")"
-source "${BASH_FUNCTION_DIR}/common.sh" || {
- echo "Source failed." >&2
- exit 1
-}
-source "${BASH_FUNCTION_DIR}/docs.sh" || die "Source failed."
-common_dirs || die
-activate_virtualenv || die
-
-# Documentation generation.
-# Here we do store only stderr to file while stdout (inlcuding Xtrace) is
-# printed to console. This way we can track increased errors in future.
-# We do not need to do trap as the env will be closed after tox finished the
-# task.
-exec 3>&1 || die
-export BASH_XTRACEFD="3" || die
-log_file="$(pwd)/doc_verify.log" || die
-
-generate_docs 2> ${log_file} || die
-
-if [[ "${DOCS_EXIT_STATUS}" != 0 ]]; then
- # Failed to generate report.
- warn
- warn "Doc verify checker: FAIL"
- exit 1
-fi
-
-warn
-warn "Doc verify checker: PASS"
diff --git a/resources/libraries/bash/entry/check_l3fwd.sh b/resources/libraries/bash/entry/check_l3fwd.sh
new file mode 100755
index 0000000000..3e53b636a3
--- /dev/null
+++ b/resources/libraries/bash/entry/check_l3fwd.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Helper functions for starting testpmd.
+
+set -exuo pipefail
+
+# Assumptions:
+# + There is a directory holding CSIT code to use (this script is there).
+# + At least one of the following is true:
+# ++ JOB_NAME environment variable is set,
+# ++ or this entry script has access to arguments.
+# Consequences (and specific assumptions) are multiple,
+# examine tree of functions for current description.
+
+# FIXME: Define API contract (as opposed to just help) for bootstrap.
+
+# "set -eu" handles failures from the following two lines.
+BASH_ENTRY_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
+BASH_FUNCTION_DIR="$(readlink -e "${BASH_ENTRY_DIR}/../function")"
+source "${BASH_FUNCTION_DIR}/common.sh" || {
+ echo "Source failed." >&2
+ exit 1
+}
+source "${BASH_FUNCTION_DIR}/dpdk.sh" || die "Source failed."
+common_dirs || die
+dpdk_l3fwd_check || die
diff --git a/resources/libraries/bash/entry/check_testpmd.sh b/resources/libraries/bash/entry/check_testpmd.sh
new file mode 100755
index 0000000000..1622b25b70
--- /dev/null
+++ b/resources/libraries/bash/entry/check_testpmd.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Helper functions for starting testpmd.
+
+set -exuo pipefail
+
+# Assumptions:
+# + There is a directory holding CSIT code to use (this script is there).
+# + At least one of the following is true:
+# ++ JOB_NAME environment variable is set,
+# ++ or this entry script has access to arguments.
+# Consequences (and specific assumptions) are multiple,
+# examine tree of functions for current description.
+
+# FIXME: Define API contract (as opposed to just help) for bootstrap.
+
+# "set -eu" handles failures from the following two lines.
+BASH_ENTRY_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
+BASH_FUNCTION_DIR="$(readlink -e "${BASH_ENTRY_DIR}/../function")"
+source "${BASH_FUNCTION_DIR}/common.sh" || {
+ echo "Source failed." >&2
+ exit 1
+}
+source "${BASH_FUNCTION_DIR}/dpdk.sh" || die "Source failed."
+common_dirs || die
+dpdk_testpmd_check || die
diff --git a/resources/libraries/bash/entry/patch_l3fwd_flip_routes b/resources/libraries/bash/entry/patch_l3fwd_flip_routes
index 23a6675145..c5eff5d3ca 100755
--- a/resources/libraries/bash/entry/patch_l3fwd_flip_routes
+++ b/resources/libraries/bash/entry/patch_l3fwd_flip_routes
@@ -1,7 +1,7 @@
#!/bin/sh
patch --ignore-whitespace --forward main.c <<"_EOF"
-185,186c185,186
+204,205c204,205
< {RTE_IPV4(198, 18, 0, 0), 24, 0},
< {RTE_IPV4(198, 18, 1, 0), 24, 1},
---
diff --git a/resources/libraries/bash/entry/per_patch_device.sh b/resources/libraries/bash/entry/per_patch_device.sh
index db977b6e96..88d7f13494 100644
--- a/resources/libraries/bash/entry/per_patch_device.sh
+++ b/resources/libraries/bash/entry/per_patch_device.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -39,14 +39,15 @@ source "${BASH_FUNCTION_DIR}/per_patch.sh" || die "Source failed."
common_dirs || die
check_prerequisites || die
set_perpatch_vpp_dir || die
-build_vpp_ubuntu_amd64 "CURRENT" || die
-set_aside_commit_build_artifacts || die
-initialize_csit_dirs || die
+git status || die
+git describe || die
+build_vpp_ubuntu "CURRENT" || die
+initialize_csit_dirs "current" || die
get_test_code "${1-}" || die
get_test_tag_string || die
set_perpatch_dut || die
select_arch_os || die
-select_build "build_current" || die
+select_build "build-root" || die
check_download_dir || die
activate_virtualenv "${VPP_DIR}" || die
generate_tests || die
@@ -54,8 +55,6 @@ archive_tests || die
prepare_topology || die
select_topology || die
activate_docker_topology || die
-select_tags || die
-compose_pybot_arguments || die
-run_pybot || die
+run_robot || die
move_archives || die
-die_on_pybot_error || die
+die_on_robot_error || die
diff --git a/resources/libraries/bash/entry/per_patch_perf.sh b/resources/libraries/bash/entry/per_patch_perf.sh
index 565a566eb0..9a825a007e 100644
--- a/resources/libraries/bash/entry/per_patch_perf.sh
+++ b/resources/libraries/bash/entry/per_patch_perf.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -44,11 +44,16 @@ source "${BASH_FUNCTION_DIR}/ansible.sh" || die "Source failed."
common_dirs || die
check_prerequisites || die
set_perpatch_vpp_dir || die
-build_vpp_ubuntu_amd64 "CURRENT" || die
-set_aside_commit_build_artifacts || die
-build_vpp_ubuntu_amd64 "PARENT" || die
-set_aside_parent_build_artifacts || die
-initialize_csit_dirs || die
+git status || die
+git describe || die
+build_vpp_ubuntu "CURRENT" || die
+set_aside_build_artifacts "current" || die
+git checkout "HEAD~" || die "Failed to checkout parent commit."
+git status || die
+git describe || die
+build_vpp_ubuntu "PARENT" || die
+set_aside_build_artifacts "parent" || die
+initialize_csit_dirs "parent" "current" || die
get_test_code "${1-}" || die
get_test_tag_string || die
set_perpatch_dut || die
@@ -58,8 +63,6 @@ activate_virtualenv "${VPP_DIR}" || die
generate_tests || die
archive_tests || die
reserve_and_cleanup_testbed || die
-select_tags || die
-compose_pybot_arguments || die
# Support for interleaved measurements is kept for future.
iterations=1 # 8
for ((iter=0; iter<iterations; iter++)); do
@@ -71,16 +74,14 @@ for ((iter=0; iter<iterations; iter++)); do
# Testing current first. Good for early failures or for API changes.
select_build "build_current" || die
check_download_dir || die
- run_pybot || die
- archive_parse_test_results "csit_current/${iter}" || die
- die_on_pybot_error || die
+ run_robot || die
+ move_test_results "csit_current/${iter}" || die
# TODO: Use less heavy way to avoid apt remove failures.
ansible_playbook "cleanup" || die
select_build "build_parent" || die
check_download_dir || die
- run_pybot || die
- archive_parse_test_results "csit_parent/${iter}" || die
- die_on_pybot_error || die
+ run_robot || die
+ move_test_results "csit_parent/${iter}" || die
done
untrap_and_unreserve_testbed || die
compare_test_results # The error code becomes this script's error code.
diff --git a/resources/libraries/bash/entry/check/README.txt b/resources/libraries/bash/entry/tox/README.txt
index 7f86d83b58..9ce21e93d0 100644
--- a/resources/libraries/bash/entry/check/README.txt
+++ b/resources/libraries/bash/entry/tox/README.txt
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -11,10 +11,20 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-This directory contains checker scripts and other files they need.
-Each checker script is assumed to be run from tox,
+This directory contains tox scripts and other files they need.
+Generally, a tox script is either a checker (suitable for automated verify)
+or a fixer (manually started, risky as uncommitted edits can be lost).
+
+In the tox verify job we want to avoid running fixers,
+as they can affect what other checkers see
+(e.g. autogen fixer could add more too long lines).
+That is why we keep fixers separate from checkers in principle,
+even for fairly safe tasks (e.g. bumping copyright years).
+
+Each tox script is assumed to be run from tox,
when working directory is set to ${CSIT_DIR}.
-Each script should:
+
+Each checker script should:
+ Return nonzero exit code when it fails.
++ The tox might ignore the code when the check is not blocking.
+ Write less verbose output to stderr.
@@ -23,5 +33,9 @@ Each script should:
+ Only the output suitable for automated processing by an external caller
should be written to stdout.
++ The level of "less verbose" depends on check and state of codebase.
-+ TODO: Should we carefully document which files are
- whitelisted/blacklisted for a particulat check?
+
+Each fixer script should:
++ Perform edits on current filesystem
++ Not assume git is clean (there may be uncommitted edits).
++ Use "git diff HEAD~" to get both comitted and uncomitted edits to analyze.
++ Output whatever it wants (possibly nothing).
diff --git a/resources/libraries/bash/entry/check/autogen.sh b/resources/libraries/bash/entry/tox/autogen.sh
index 4ff214c260..40cc2c2066 100644
--- a/resources/libraries/bash/entry/check/autogen.sh
+++ b/resources/libraries/bash/entry/tox/autogen.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -50,8 +50,8 @@ cp -rf "${CSIT_DIR}/tests"/* "${GENERATED_DIR}/tests_tmp"/
# I think archiving the diff is enough.
diff_cmd=("diff" "-dur" "${GENERATED_DIR}/tests_tmp" "${GENERATED_DIR}/tests")
-# Diff returns RC=1 if output is nonzero, so we do not die on the next line.
-lines="$("${diff_cmd[@]}" | tee "autogen.log" | wc -l)"
+# Diff returns RC=1 if output is nonzero.
+lines="$("${diff_cmd[@]}" | tee "autogen.log" | wc -l || true)"
if [ "${lines}" != "0" ]; then
# TODO: Decide which text goes to stdout and which to stderr.
warn "Autogen conflict, diff sees nonzero lines: ${lines}"
diff --git a/resources/libraries/bash/entry/check/copyright_year.sh b/resources/libraries/bash/entry/tox/copyright_year.sh
index dae1a8dc46..272763100e 100644
--- a/resources/libraries/bash/entry/check/copyright_year.sh
+++ b/resources/libraries/bash/entry/tox/copyright_year.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -24,10 +24,7 @@ set -exuo pipefail
# but not the current year (in the same line).
# The offending lines are stored to copyright_year.log (overwriting).
#
-# 3 lines were chosen, because first two lines could be shebang and empty line,
-# and more than 3 lines would start failing on files with multiple copyright
-# holders. There, only the last updating entity needs to bump its year,
-# and put other copyright lines below.
+# 3 lines were chosen, because first two lines could be shebang and empty line.
# "set -eu" handles failures from the following two lines.
BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
@@ -42,7 +39,7 @@ IFS=$'\n'
files=($(git diff --name-only HEAD~ || true))
unset IFS
truncate -s 0 "copyright_year.log" || die
-# A change can have thousands of files, supress console output in the cycle.
+# A change can have thousands of files, supress console output for the cycle.
set +x
for fil in "${files[@]}"; do
# Greps do "fail" on 0 line output, we need to ignore that
diff --git a/resources/libraries/bash/entry/check/job_spec.sh b/resources/libraries/bash/entry/tox/fix_copyright_year.sh
index 21013fe984..d822f272af 100644
--- a/resources/libraries/bash/entry/check/job_spec.sh
+++ b/resources/libraries/bash/entry/tox/fix_copyright_year.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,10 +18,17 @@ set -exuo pipefail
# This file does not have executable flag nor shebang,
# to dissuade non-tox callers.
-# This script checks if the number of tests in a job specification is the same
-# as declared at the beginning of the file.
-# It counts the lines not starting with '#' so it can also detect redundant
-# empty lines, or lines which should not be in the job specification.
+# This is a fixer script, so be careful before starting it.
+# It is recommended to always commit your recent edits before running this,
+# and use "git diff" after running this to confirm the edits are correct.
+# Otherwise you can lose your edits and introduce bad edits.
+
+# This script runs a variant of "git diff" command
+# to get the list of edited files, and few sed commands to edit the year
+# if "20.." pattern matches in first 3 lines.
+# No detection of "copyright", so edits can apply at surprising places.
+
+# 3 lines were chosen, because first two lines could be shebang and empty line.
# "set -eu" handles failures from the following two lines.
BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
@@ -31,30 +38,18 @@ source "${BASH_FUNCTION_DIR}/common.sh" || {
exit 1
}
-job_spec_dir="docs/job_specs/"
-rm -f "job_spec.log" || die
-violations=0
-
-# Disabling -x: Following lines are doing too much garbage output.
+year=$(date +'%Y')
+IFS=$'\n'
+files=($(git diff --name-only HEAD~ || true))
+unset IFS
+# A change can have thousands of files, supress console output for the cycle.
set +x
-
-for f in $(find ${job_spec_dir} -type f | grep -v perf_tests_job_specs); do
- declared=$(fgrep "### tests" $f | tr -dc '0-9')
- present=$(fgrep -v '#' $f | wc -l)
- if [ "${declared}" != "${present}" ]; then
- echo "Wrong number of tests detected in ${f}: \
-declared: ${declared} / present: ${present}" | tee -a job_spec.log
- violations=$((violations+1))
+for fil in "${files[@]}"; do
+ if [[ -f "${fil}" ]]; then
+ sed -i "1 s/20../${year}/g" "${fil}"
+ sed -i "2 s/20../${year}/g" "${fil}"
+ sed -i "3 s/20../${year}/g" "${fil}"
+ # Else the file was actually deleted and sed would fail.
fi
done
-
set -x
-
-if [ "${violations}" != "0" ]; then
- warn
- warn "Number of tests in job spec checker: FAIL"
- exit 1
-fi
-
-warn
-warn "Number of tests in job spec checker: PASS"
diff --git a/resources/libraries/bash/entry/check/gpl_license.sh b/resources/libraries/bash/entry/tox/gpl_license.sh
index 167d3f3ecd..7112075883 100644
--- a/resources/libraries/bash/entry/check/gpl_license.sh
+++ b/resources/libraries/bash/entry/tox/gpl_license.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/libraries/bash/entry/check/line.sh b/resources/libraries/bash/entry/tox/line.sh
index 6f373121e0..a90fc22cae 100644
--- a/resources/libraries/bash/entry/check/line.sh
+++ b/resources/libraries/bash/entry/tox/line.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/libraries/bash/entry/check/new_line.sh b/resources/libraries/bash/entry/tox/new_line.sh
index 4857f9f8bd..a8fb38f73e 100644
--- a/resources/libraries/bash/entry/check/new_line.sh
+++ b/resources/libraries/bash/entry/tox/new_line.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/libraries/bash/entry/check/pylint.sh b/resources/libraries/bash/entry/tox/pylint.sh
index fbfea4773e..a3e0f8ee14 100644
--- a/resources/libraries/bash/entry/check/pylint.sh
+++ b/resources/libraries/bash/entry/tox/pylint.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/libraries/bash/function/ansible.sh b/resources/libraries/bash/function/ansible.sh
index 64508bda11..6cf4d16f43 100644
--- a/resources/libraries/bash/function/ansible.sh
+++ b/resources/libraries/bash/function/ansible.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -28,9 +28,12 @@ function ansible_adhoc () {
set -exuo pipefail
case "$FLAVOR" in
- "aws")
+ "aws" | "c6in" | "c6gn" | "c7gn")
INVENTORY_PATH="cloud_inventory"
;;
+ "x-"*)
+ INVENTORY_PATH="external_inventory"
+ ;;
*)
INVENTORY_PATH="lf_inventory"
;;
@@ -70,9 +73,12 @@ function ansible_playbook () {
set -exuo pipefail
case "$FLAVOR" in
- "aws")
+ "aws" | "c6in" | "c6gn" | "c7gn")
INVENTORY_PATH="cloud_inventory"
;;
+ "x-"*)
+ INVENTORY_PATH="external_inventory"
+ ;;
*)
INVENTORY_PATH="lf_inventory"
;;
diff --git a/resources/libraries/bash/function/artifacts.sh b/resources/libraries/bash/function/artifacts.sh
index 15a4dd2fe1..e4d5dd6fc6 100644
--- a/resources/libraries/bash/function/artifacts.sh
+++ b/resources/libraries/bash/function/artifacts.sh
@@ -1,7 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -26,8 +25,6 @@ function download_artifacts () {
# - REPO_URL - FD.io Packagecloud repository.
# Functions conditionally called (see their documentation for side effects):
# - download_ubuntu_artifacts
- # - download_centos_artifacts
- # - download_opensuse_artifacts
set -exuo pipefail
@@ -46,10 +43,6 @@ function download_artifacts () {
if [ "${os_id}" == "ubuntu" ]; then
download_ubuntu_artifacts || die
- elif [ "${os_id}" == "centos" ]; then
- download_centos_artifacts || die
- elif [ "${os_id}" == "opensuse" ]; then
- download_opensuse_artifacts || die
else
die "${os_id} is not yet supported."
fi
@@ -129,73 +122,3 @@ function download_ubuntu_artifacts () {
}
fi
}
-
-function download_centos_artifacts () {
-
- # Download or install CentOS VPP artifacts from packagecloud.io.
- #
- # Variables read:
- # - REPO_URL - FD.io Packagecloud repository.
- # - VPP_VERSION - VPP version.
- # - INSTALL - Whether install packages (if set to "true") or download only.
- # Default: "false".
-
- set -exuo pipefail
-
- curl -s "${REPO_URL}"/script.rpm.sh | sudo -E bash || {
- die "Packagecloud FD.io repo fetch failed."
- }
- # If version is set we will add suffix.
- artifacts=()
- pkgs=(vpp vpp-selinux-policy vpp-devel vpp-lib vpp-plugins vpp-api-python)
- if [ -z "${VPP_VERSION-}" ]; then
- artifs+=(${pkgs[@]})
- else
- artifs+=(${pkgs[@]/%/-${VPP_VERSION-}})
- fi
-
- if [[ "${INSTALL:-false}" == "true" ]]; then
- sudo yum -y install "${artifs[@]}" || {
- die "Install VPP artifact failed."
- }
- else
- sudo yum -y install --downloadonly --downloaddir=. "${artifs[@]}" || {
- die "Download VPP artifacts failed."
- }
- fi
-}
-
-function download_opensuse_artifacts () {
-
- # Download or install OpenSuSE VPP artifacts from packagecloud.io.
- #
- # Variables read:
- # - REPO_URL - FD.io Packagecloud repository.
- # - VPP_VERSION - VPP version.
- # - INSTALL - Whether install packages (if set to "true") or download only.
- # Default: "false".
-
- set -exuo pipefail
-
- curl -s "${REPO_URL}"/script.rpm.sh | sudo -E bash || {
- die "Packagecloud FD.io repo fetch failed."
- }
- # If version is set we will add suffix.
- artifs=()
- pkgs=(vpp vpp-devel vpp-lib vpp-plugins libvpp0)
- if [ -z "${VPP_VERSION-}" ]; then
- artifs+=(${pkgs[@]})
- else
- artifs+=(${pkgs[@]/%/-${VPP_VERSION-}})
- fi
-
- if [[ "${INSTALL:-false}" == "true" ]]; then
- sudo yum -y install "${artifs[@]}" || {
- die "Install VPP artifact failed."
- }
- else
- sudo yum -y install --downloadonly --downloaddir=. "${artifs[@]}" || {
- die "Download VPP artifacts failed."
- }
- fi
-}
diff --git a/resources/libraries/bash/function/branch.sh b/resources/libraries/bash/function/branch.sh
index ba9cc39c67..37900eab01 100644
--- a/resources/libraries/bash/function/branch.sh
+++ b/resources/libraries/bash/function/branch.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -57,10 +57,6 @@ function checkout_csit_for_vpp () {
set -exuo pipefail
case "${1}" in
- "stable/2009")
- # LTS branch
- branch_id="origin/${1/stable\//oper-rls}_lts"
- ;;
"stable/"*)
branch_id="origin/${1/stable\//oper-rls}"
;;
diff --git a/resources/libraries/bash/function/common.sh b/resources/libraries/bash/function/common.sh
index 7348f25c47..4f104dbfd3 100644
--- a/resources/libraries/bash/function/common.sh
+++ b/resources/libraries/bash/function/common.sh
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Copyright (c) 2024 PANTHEON.tech and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -45,7 +45,7 @@ function activate_docker_topology () {
device_image="$(< ${CSIT_DIR}/${IMAGE_VER_FILE})"
case_text="${NODENESS}_${FLAVOR}"
case "${case_text}" in
- "1n_skx" | "1n_tx2")
+ "1n_skx" | "1n_alt" | "1n_spr")
# We execute reservation over csit-shim-dcr (ssh) which runs sourced
# script's functions. Env variables are read from ssh output
# back to localhost for further processing.
@@ -93,6 +93,12 @@ function activate_docker_topology () {
cat ${WORKING_TOPOLOGY} | grep -v password || {
die "Topology read failed!"
}
+
+ # Subfunctions to update data that may depend on topology reserved.
+ set_environment_variables || die
+ select_tags || die
+ compose_robot_arguments || die
+
}
@@ -118,7 +124,7 @@ function activate_virtualenv () {
env_dir="${root_path}/env"
req_path=${2-$CSIT_DIR/requirements.txt}
rm -rf "${env_dir}" || die "Failed to clean previous virtualenv."
- pip3 install virtualenv==20.0.20 || {
+ pip3 install virtualenv==20.15.1 || {
die "Virtualenv package install failed."
}
virtualenv --no-download --python=$(which python3) "${env_dir}" || {
@@ -137,19 +143,19 @@ function activate_virtualenv () {
function archive_tests () {
- # Create .tar.xz of generated/tests for archiving.
+ # Create .tar.gz of generated/tests for archiving.
# To be run after generate_tests, kept separate to offer more flexibility.
# Directory read:
# - ${GENERATED_DIR}/tests - Tree of executed suites to archive.
# File rewriten:
- # - ${ARCHIVE_DIR}/tests.tar.xz - Archive of generated tests.
+ # - ${ARCHIVE_DIR}/generated_tests.tar.gz - Archive of generated tests.
set -exuo pipefail
- tar c "${GENERATED_DIR}/tests" | xz -3 > "${ARCHIVE_DIR}/tests.tar.xz" || {
- die "Error creating archive of generated tests."
- }
+ pushd "${ARCHIVE_DIR}" || die
+ tar czf "generated_tests.tar.gz" "${GENERATED_DIR}/tests" || true
+ popd || die
}
@@ -158,7 +164,7 @@ function check_download_dir () {
# Fail if there are no files visible in ${DOWNLOAD_DIR}.
#
# Variables read:
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# Directories read:
# - ${DOWNLOAD_DIR} - Has to be non-empty to proceed.
# Functions called:
@@ -227,7 +233,7 @@ function common_dirs () {
TOPOLOGIES_DIR=$(readlink -e "${CSIT_DIR}/topologies/available") || {
die "Readlink failed."
}
- JOB_SPECS_DIR=$(readlink -e "${CSIT_DIR}/docs/job_specs") || {
+ JOB_SPECS_DIR=$(readlink -e "${CSIT_DIR}/resources/job_specs") || {
die "Readlink failed."
}
RESOURCES_DIR=$(readlink -e "${CSIT_DIR}/resources") || {
@@ -236,9 +242,6 @@ function common_dirs () {
TOOLS_DIR=$(readlink -e "${RESOURCES_DIR}/tools") || {
die "Readlink failed."
}
- DOC_GEN_DIR=$(readlink -e "${TOOLS_DIR}/doc_gen") || {
- die "Readlink failed."
- }
PYTHON_SCRIPTS_DIR=$(readlink -e "${TOOLS_DIR}/scripts") || {
die "Readlink failed."
}
@@ -258,8 +261,12 @@ function common_dirs () {
}
-function compose_pybot_arguments () {
+function compose_robot_arguments () {
+ # This function is called by run_tests function.
+ # The reason is that some jobs (bisect) perform reservation multiple times,
+ # so WORKING_TOPOLOGY can be different each time.
+ #
# Variables read:
# - WORKING_TOPOLOGY - Path to topology yaml file of the reserved testbed.
# - DUT - CSIT test/ subdirectory, set while processing tags.
@@ -268,21 +275,23 @@ function compose_pybot_arguments () {
# - TEST_CODE - The test selection string from environment or argument.
# - SELECTION_MODE - Selection criteria [test, suite, include, exclude].
# Variables set:
- # - PYBOT_ARGS - String holding part of all arguments for pybot.
- # - EXPANDED_TAGS - Array of strings pybot arguments compiled from tags.
+ # - ROBOT_ARGS - String holding part of all arguments for robot.
+ # - EXPANDED_TAGS - Array of strings robot arguments compiled from tags.
set -exuo pipefail
# No explicit check needed with "set -u".
- PYBOT_ARGS=("--loglevel" "TRACE")
- PYBOT_ARGS+=("--variable" "TOPOLOGY_PATH:${WORKING_TOPOLOGY}")
+ ROBOT_ARGS=("--loglevel" "TRACE")
+ ROBOT_ARGS+=("--variable" "TOPOLOGY_PATH:${WORKING_TOPOLOGY}")
+ # TODO: The rest does not need to be recomputed on each reservation.
+ # Refactor TEST_CODE so this part can be called only once.
case "${TEST_CODE}" in
*"device"*)
- PYBOT_ARGS+=("--suite" "tests.${DUT}.device")
+ ROBOT_ARGS+=("--suite" "tests.${DUT}.device")
;;
- *"perf"*)
- PYBOT_ARGS+=("--suite" "tests.${DUT}.perf")
+ *"perf"* | *"bisect"*)
+ ROBOT_ARGS+=("--suite" "tests.${DUT}.perf")
;;
*)
die "Unknown specification: ${TEST_CODE}"
@@ -319,7 +328,7 @@ function deactivate_docker_topology () {
case_text="${NODENESS}_${FLAVOR}"
case "${case_text}" in
- "1n_skx" | "1n_tx2")
+ "1n_skx" | "1n_alt" | "1n_spr")
ssh="ssh root@172.17.0.1 -p 6022"
env_vars=$(env | grep CSIT_ | tr '\n' ' ' ) || die
# The "declare -f" output is long and boring.
@@ -360,19 +369,19 @@ function die () {
}
-function die_on_pybot_error () {
+function die_on_robot_error () {
# Source this fragment if you want to abort on any failed test case.
#
# Variables read:
- # - PYBOT_EXIT_STATUS - Set by a pybot running fragment.
+ # - ROBOT_EXIT_STATUS - Set by a robot running fragment.
# Functions called:
# - die - Print to stderr and exit.
set -exuo pipefail
- if [[ "${PYBOT_EXIT_STATUS}" != "0" ]]; then
- die "Test failures are present!" "${PYBOT_EXIT_STATUS}"
+ if [[ "${ROBOT_EXIT_STATUS}" != "0" ]]; then
+ die "Test failures are present!" "${ROBOT_EXIT_STATUS}"
fi
}
@@ -385,7 +394,7 @@ function generate_tests () {
# within any subdirectory after copying.
# This is a separate function, because this code is called
- # both by autogen checker and entries calling run_pybot.
+ # both by autogen checker and entries calling run_robot.
# Directories read:
# - ${CSIT_DIR}/tests - Used as templates for the generated tests.
@@ -431,58 +440,110 @@ function get_test_code () {
fi
case "${TEST_CODE}" in
- *"1n-vbox"*)
+ *"1n-vbox")
NODENESS="1n"
FLAVOR="vbox"
;;
- *"1n-skx"*)
+ *"1n-skx")
NODENESS="1n"
FLAVOR="skx"
;;
- *"1n-tx2"*)
+ *"1n-spr")
NODENESS="1n"
- FLAVOR="tx2"
+ FLAVOR="spr"
+ ;;
+ *"1n-alt")
+ NODENESS="1n"
+ FLAVOR="alt"
+ ;;
+ *"1n-aws")
+ NODENESS="1n"
+ FLAVOR="aws"
;;
- *"2n-aws"*)
+ *"2n-aws")
NODENESS="2n"
FLAVOR="aws"
;;
- *"3n-aws"*)
+ *"3n-aws")
NODENESS="3n"
FLAVOR="aws"
;;
- *"2n-skx"*)
+ *"2n-c7gn")
NODENESS="2n"
- FLAVOR="skx"
+ FLAVOR="c7gn"
+ ;;
+ *"3n-c7gn")
+ NODENESS="3n"
+ FLAVOR="c7gn"
;;
- *"2n-zn2"*)
+ *"1n-c6in")
+ NODENESS="1n"
+ FLAVOR="c6in"
+ ;;
+ *"2n-c6in")
NODENESS="2n"
- FLAVOR="zn2"
+ FLAVOR="c6in"
;;
- *"3n-skx"*)
+ *"3n-c6in")
NODENESS="3n"
- FLAVOR="skx"
+ FLAVOR="c6in"
+ ;;
+ *"2n-zn2")
+ NODENESS="2n"
+ FLAVOR="zn2"
;;
- *"2n-clx"*)
+ *"2n-clx")
NODENESS="2n"
FLAVOR="clx"
;;
- *"2n-dnv"*)
+ *"2n-icx")
NODENESS="2n"
- FLAVOR="dnv"
+ FLAVOR="icx"
+ ;;
+ *"2n-spr")
+ NODENESS="2n"
+ FLAVOR="spr"
+ ;;
+ *"3n-icx")
+ NODENESS="3n"
+ FLAVOR="icx"
+ ;;
+ *"3na-spr")
+ NODENESS="3na"
+ FLAVOR="spr"
+ ;;
+ *"3nb-spr")
+ NODENESS="3nb"
+ FLAVOR="spr"
+ ;;
+ *"3n-snr")
+ NODENESS="3n"
+ FLAVOR="snr"
;;
- *"3n-dnv"*)
+ *"3n-icxd")
NODENESS="3n"
- FLAVOR="dnv"
+ FLAVOR="icxd"
;;
- *"2n-tx2"*)
+ *"2n-tx2")
NODENESS="2n"
FLAVOR="tx2"
;;
- *"3n-tsh"*)
+ *"3n-tsh")
NODENESS="3n"
FLAVOR="tsh"
;;
+ *"3n-alt")
+ NODENESS="3n"
+ FLAVOR="alt"
+ ;;
+ *"2n-x-"*)
+ NODENESS="2n"
+ FLAVOR="${TEST_CODE#*2n-}"
+ ;;
+ *"3n-x-"*)
+ NODENESS="3n"
+ FLAVOR="${TEST_CODE#*3n-}"
+ ;;
esac
}
@@ -496,6 +557,10 @@ function get_test_tag_string () {
# Variables set:
# - TEST_TAG_STRING - The string following trigger word in gerrit comment.
# May be empty, or even not set on event types not adding comment.
+ # - GIT_BISECT_FROM - If bisecttest, the commit hash to bisect from.
+ # Else not set.
+ # Variables exported optionally:
+ # - GRAPH_NODE_VARIANT - Node variant to test with, set if found in trigger.
# TODO: ci-management scripts no longer need to perform this.
@@ -503,6 +568,10 @@ function get_test_tag_string () {
if [[ "${GERRIT_EVENT_TYPE-}" == "comment-added" ]]; then
case "${TEST_CODE}" in
+ # Order matters, bisect job contains "perf" in its name.
+ *"bisect"*)
+ trigger="bisecttest"
+ ;;
*"device"*)
trigger="devicetest"
;;
@@ -528,6 +597,18 @@ function get_test_tag_string () {
comment=$(fgrep "${trigger}" <<< "${comment}" || true)
TEST_TAG_STRING=$("${cmd[@]}" <<< "${comment}" || true)
fi
+ if [[ "${trigger}" == "bisecttest" ]]; then
+ # Intentionally without quotes, so spaces delimit elements.
+ test_tag_array=(${TEST_TAG_STRING}) || die "How could this fail?"
+ # First "argument" of bisecttest is a commit hash.
+ GIT_BISECT_FROM="${test_tag_array[0]}" || {
+ die "Bisect job requires commit hash."
+ }
+ # Update the tag string (tag expressions only, no commit hash).
+ TEST_TAG_STRING="${test_tag_array[@]:1}" || {
+ die "Bisect job needs a single test, no default."
+ }
+ fi
if [[ -n "${TEST_TAG_STRING-}" ]]; then
test_tag_array=(${TEST_TAG_STRING})
if [[ "${test_tag_array[0]}" == "icl" ]]; then
@@ -609,6 +690,8 @@ function prepare_topology () {
# - TEST_CODE - String affecting test selection, usually jenkins job name.
# - NODENESS - Node multiplicity of testbed, either "2n" or "3n".
# - FLAVOR - Node flavor string, e.g. "clx" or "skx".
+ # Variables set:
+ # - TERRAFORM_MODULE_DIR - Terraform module directory.
# Functions called:
# - die - Print to stderr and exit.
# - terraform_init - Terraform init topology.
@@ -618,14 +701,31 @@ function prepare_topology () {
case_text="${NODENESS}_${FLAVOR}"
case "${case_text}" in
- "2n_aws")
+ "1n_aws" | "2n_aws" | "3n_aws")
export TF_VAR_testbed_name="${TEST_CODE}"
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-${FLAVOR}-c5n"
terraform_init || die "Failed to call terraform init."
+ trap "terraform_destroy" ERR EXIT || {
+ die "Trap attempt failed, please cleanup manually. Aborting!"
+ }
terraform_apply || die "Failed to call terraform apply."
;;
- "3n_aws")
+ "2n_c7gn" | "3n_c7gn")
+ export TF_VAR_testbed_name="${TEST_CODE}"
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-c7gn"
+ terraform_init || die "Failed to call terraform init."
+ trap "terraform_destroy" ERR EXIT || {
+ die "Trap attempt failed, please cleanup manually. Aborting!"
+ }
+ terraform_apply || die "Failed to call terraform apply."
+ ;;
+ "1n_c6in" | "2n_c6in" | "3n_c6in")
export TF_VAR_testbed_name="${TEST_CODE}"
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-c6in"
terraform_init || die "Failed to call terraform init."
+ trap "terraform_destroy" ERR EXIT || {
+ die "Trap attempt failed, please cleanup manually. Aborting!"
+ }
terraform_apply || die "Failed to call terraform apply."
;;
esac
@@ -638,6 +738,9 @@ function reserve_and_cleanup_testbed () {
# When cleanup fails, remove from topologies and keep retrying
# until all topologies are removed.
#
+ # Multiple other functions are called from here,
+ # as they set variables that depend on reserved topology data.
+ #
# Variables read:
# - TOPOLOGIES - Array of paths to topology yaml to attempt reservation on.
# - PYTHON_SCRIPTS_DIR - Path to directory holding the reservation script.
@@ -706,42 +809,50 @@ function reserve_and_cleanup_testbed () {
echo "Sleeping ${sleep_time}"
sleep "${sleep_time}" || die "Sleep failed."
done
+
+ # Subfunctions to update data that may depend on topology reserved.
+ set_environment_variables || die
+ select_tags || die
+ compose_robot_arguments || die
}
-function run_pybot () {
+function run_robot () {
- # Run pybot with options based on input variables. Create output_info.xml
+ # Run robot with options based on input variables.
+ #
+ # Testbed has to be reserved already,
+ # as some data may have changed between reservations,
+ # for example excluded NICs.
#
# Variables read:
# - CSIT_DIR - Path to existing root of local CSIT git repository.
# - ARCHIVE_DIR - Path to store robot result files in.
- # - PYBOT_ARGS, EXPANDED_TAGS - See compose_pybot_arguments.sh
+ # - ROBOT_ARGS, EXPANDED_TAGS - See compose_robot_arguments.sh
# - GENERATED_DIR - Tests are assumed to be generated under there.
+ # - WORKING_TOPOLOGY - Path to topology yaml file of the reserved testbed.
+ # - DUT - CSIT test/ subdirectory, set while processing tags.
+ # - TAGS - Array variable holding selected tag boolean expressions.
+ # - TOPOLOGIES_TAGS - Tag boolean expression filtering tests for topology.
+ # - TEST_CODE - The test selection string from environment or argument.
# Variables set:
- # - PYBOT_EXIT_STATUS - Exit status of most recent pybot invocation.
+ # - ROBOT_ARGS - String holding part of all arguments for robot.
+ # - EXPANDED_TAGS - Array of string robot arguments compiled from tags.
+ # - ROBOT_EXIT_STATUS - Exit status of most recent robot invocation.
# Functions called:
# - die - Print to stderr and exit.
set -exuo pipefail
- all_options=("--outputdir" "${ARCHIVE_DIR}" "${PYBOT_ARGS[@]}")
- all_options+=("--noncritical" "EXPECTED_FAILING")
+ all_options=("--outputdir" "${ARCHIVE_DIR}" "${ROBOT_ARGS[@]}")
all_options+=("${EXPANDED_TAGS[@]}")
pushd "${CSIT_DIR}" || die "Change directory operation failed."
set +e
robot "${all_options[@]}" "${GENERATED_DIR}/tests/"
- PYBOT_EXIT_STATUS="$?"
+ ROBOT_EXIT_STATUS="$?"
set -e
- # Generate INFO level output_info.xml for post-processing.
- all_options=("--loglevel" "INFO")
- all_options+=("--log" "none")
- all_options+=("--report" "none")
- all_options+=("--output" "${ARCHIVE_DIR}/output_info.xml")
- all_options+=("${ARCHIVE_DIR}/output.xml")
- rebot "${all_options[@]}" || true
popd || die "Change directory operation failed."
}
@@ -762,9 +873,9 @@ function select_arch_os () {
case "${ID}" in
"ubuntu"*)
case "${VERSION}" in
- *"LTS (Focal Fossa)"*)
- IMAGE_VER_FILE="VPP_DEVICE_IMAGE_UBUNTU"
- VPP_VER_FILE="VPP_STABLE_VER_UBUNTU_FOCAL"
+ *"LTS (Jammy Jellyfish)"*)
+ IMAGE_VER_FILE="VPP_DEVICE_IMAGE_UBUNTU_JAMMY"
+ VPP_VER_FILE="VPP_STABLE_VER_UBUNTU_JAMMY"
PKG_SUFFIX="deb"
;;
*)
@@ -793,6 +904,9 @@ function select_arch_os () {
function select_tags () {
+ # Only to be called from the reservation function,
+ # as resulting tags may change based on topology data.
+ #
# Variables read:
# - WORKING_TOPOLOGY - Path to topology yaml file of the reserved testbed.
# - TEST_CODE - String affecting test selection, usually jenkins job name.
@@ -808,38 +922,69 @@ function select_tags () {
set -exuo pipefail
# NIC SELECTION
- start_pattern='^ TG:'
+ case "${TEST_CODE}" in
+ *"1n-aws"* | *"1n-c6in"*)
+ start_pattern='^ SUT:'
+ ;;
+ *)
+ start_pattern='^ TG:'
+ ;;
+ esac
end_pattern='^ \? \?[A-Za-z0-9]\+:'
- # Remove the TG section from topology file
+ # Remove the sections from topology file
sed_command="/${start_pattern}/,/${end_pattern}/d"
- # All topologies DUT NICs
+ # All topologies NICs
available=$(sed "${sed_command}" "${TOPOLOGIES_DIR}"/* \
| grep -hoP "model: \K.*" | sort -u)
- # Selected topology DUT NICs
+ # Selected topology NICs
reserved=$(sed "${sed_command}" "${WORKING_TOPOLOGY}" \
| grep -hoP "model: \K.*" | sort -u)
- # All topologies DUT NICs - Selected topology DUT NICs
+ # All topologies NICs - Selected topology NICs
exclude_nics=($(comm -13 <(echo "${reserved}") <(echo "${available}"))) || {
die "Computation of excluded NICs failed."
}
# Select default NIC tag.
case "${TEST_CODE}" in
- *"3n-dnv"* | *"2n-dnv"*)
- default_nic="nic_intel-x553"
+ *"3n-snr")
+ default_nic="nic_intel-e822cq"
+ ;;
+ *"3n-icxd")
+ default_nic="nic_intel-e823c"
;;
- *"3n-tsh"*)
+ *"3n-tsh")
default_nic="nic_intel-x520-da2"
;;
- *"3n-skx"* | *"2n-skx"* | *"2n-clx"* | *"2n-zn2"*)
+ *"3n-icx" | *"2n-icx")
+ default_nic="nic_intel-e810cq"
+ ;;
+ *"3na-spr")
+ default_nic="nic_mellanox-cx7veat"
+ ;;
+ *"3nb-spr")
+ default_nic="nic_intel-e810cq"
+ ;;
+ *"2n-spr")
+ default_nic="nic_intel-e810cq"
+ ;;
+ *"2n-clx" | *"2n-zn2")
default_nic="nic_intel-xxv710"
;;
- *"2n-tx2"* | *"mrr-daily-master")
+ *"2n-tx2" | *"3n-alt")
default_nic="nic_intel-xl710"
;;
- *"2n-aws"* | *"3n-aws"*)
+ *"1n-aws" | *"2n-aws" | *"3n-aws")
default_nic="nic_amazon-nitro-50g"
;;
+ *"2n-c7gn" | *"3n-c7gn")
+ default_nic="nic_amazon-nitro-100g"
+ ;;
+ *"1n-c6in" | *"2n-c6in" | *"3n-c6in")
+ default_nic="nic_amazon-nitro-200g"
+ ;;
+ *"2n-x-"* | *"3n-x-"*)
+ default_nic="nic_intel-e810cq"
+ ;;
*)
default_nic="nic_intel-x710"
;;
@@ -851,14 +996,22 @@ function select_tags () {
awk_nics_sub_cmd+='gsub("x710","10ge2p1x710");'
awk_nics_sub_cmd+='gsub("xl710","40ge2p1xl710");'
awk_nics_sub_cmd+='gsub("x520-da2","10ge2p1x520");'
- awk_nics_sub_cmd+='gsub("x553","10ge2p1x553");'
awk_nics_sub_cmd+='gsub("cx556a","100ge2p1cx556a");'
+ awk_nics_sub_cmd+='gsub("2p1cx7veat","200ge2p1cx7veat");'
+ awk_nics_sub_cmd+='gsub("6p3cx7veat","200ge6p3cx7veat");'
+ awk_nics_sub_cmd+='gsub("cx6dx","100ge2p1cx6dx");'
awk_nics_sub_cmd+='gsub("e810cq","100ge2p1e810cq");'
+ awk_nics_sub_cmd+='gsub("e822cq","25ge2p1e822cq");'
+ awk_nics_sub_cmd+='gsub("e823c","25ge2p1e823c");'
awk_nics_sub_cmd+='gsub("vic1227","10ge2p1vic1227");'
awk_nics_sub_cmd+='gsub("vic1385","40ge2p1vic1385");'
awk_nics_sub_cmd+='gsub("nitro-50g","50ge1p1ENA");'
+ awk_nics_sub_cmd+='gsub("nitro-100g","100ge1p1ENA");'
+ awk_nics_sub_cmd+='gsub("nitro-200g","200ge1p1ENA");'
+ awk_nics_sub_cmd+='gsub("virtual","1ge1p82540em");'
awk_nics_sub_cmd+='if ($9 =="drv_avf") drv="avf-";'
awk_nics_sub_cmd+='else if ($9 =="drv_rdma_core") drv ="rdma-";'
+ awk_nics_sub_cmd+='else if ($9 =="drv_mlx5_core") drv ="mlx5-";'
awk_nics_sub_cmd+='else if ($9 =="drv_af_xdp") drv ="af-xdp-";'
awk_nics_sub_cmd+='else drv="";'
awk_nics_sub_cmd+='if ($1 =="-") cores="";'
@@ -875,9 +1028,15 @@ function select_tags () {
awk {"$awk_nics_sub_cmd"} || echo "devicetest") || die
SELECTION_MODE="--test"
;;
+ *"hoststack-daily"* )
+ readarray -t test_tag_array <<< $(grep -v "#" \
+ ${tfd}/hoststack_daily/${DUT}-${NODENESS}-${FLAVOR}.md |
+ awk {"$awk_nics_sub_cmd"} || echo "perftest") || die
+ SELECTION_MODE="--test"
+ ;;
*"ndrpdr-weekly"* )
readarray -t test_tag_array <<< $(grep -v "#" \
- ${tfd}/mlr_weekly/${DUT}-${NODENESS}-${FLAVOR}.md |
+ ${tfd}/ndrpdr_weekly/${DUT}-${NODENESS}-${FLAVOR}.md |
awk {"$awk_nics_sub_cmd"} || echo "perftest") || die
SELECTION_MODE="--test"
;;
@@ -893,6 +1052,12 @@ function select_tags () {
awk {"$awk_nics_sub_cmd"} || echo "perftest") || die
SELECTION_MODE="--test"
;;
+ *"soak-weekly"* )
+ readarray -t test_tag_array <<< $(grep -v "#" \
+ ${tfd}/soak_weekly/${DUT}-${NODENESS}-${FLAVOR}.md |
+ awk {"$awk_nics_sub_cmd"} || echo "perftest") || die
+ SELECTION_MODE="--test"
+ ;;
*"report-iterative"* )
test_sets=(${TEST_TAG_STRING//:/ })
# Run only one test set per run
@@ -933,54 +1098,58 @@ function select_tags () {
# Reasons for blacklisting:
# - ipsechw - Blacklisted on testbeds without crypto hardware accelerator.
case "${TEST_CODE}" in
- *"1n-vbox"*)
+ *"1n-vbox")
test_tag_array+=("!avf")
test_tag_array+=("!vhost")
test_tag_array+=("!flow")
;;
- *"1n_tx2"*)
+ *"1n-alt")
test_tag_array+=("!flow")
;;
- *"2n-skx"*)
+ *"2n-clx")
test_tag_array+=("!ipsechw")
;;
- *"3n-skx"*)
+ *"2n-icx")
test_tag_array+=("!ipsechw")
- # Not enough nic_intel-xxv710 to support double link tests.
- test_tag_array+=("!3_node_double_link_topoANDnic_intel-xxv710")
;;
- *"2n-clx"*)
+ *"2n-spr")
+ ;;
+ *"2n-tx2")
test_tag_array+=("!ipsechw")
;;
- *"2n-zn2"*)
+ *"2n-zn2")
test_tag_array+=("!ipsechw")
;;
- *"2n-dnv"*)
+ *"3n-alt")
test_tag_array+=("!ipsechw")
- test_tag_array+=("!memif")
- test_tag_array+=("!srv6_proxy")
- test_tag_array+=("!vhost")
- test_tag_array+=("!vts")
- test_tag_array+=("!drv_avf")
;;
- *"2n-tx2"*)
+ *"3n-icx")
test_tag_array+=("!ipsechw")
+ test_tag_array+=("!3_node_double_link_topoANDnic_intel-xxv710")
;;
- *"3n-dnv"*)
- test_tag_array+=("!memif")
- test_tag_array+=("!srv6_proxy")
- test_tag_array+=("!vhost")
- test_tag_array+=("!vts")
- test_tag_array+=("!drv_avf")
+ *"3n-snr")
+ ;;
+ *"3n-icxd")
+ ;;
+ *"3na-spr")
;;
- *"3n-tsh"*)
- # 3n-tsh only has x520 NICs which don't work with AVF
+ *"3nb-spr")
+ ;;
+ *"3n-tsh")
test_tag_array+=("!drv_avf")
test_tag_array+=("!ipsechw")
;;
- *"2n-aws"* | *"3n-aws"*)
+ *"1n-aws" | *"2n-aws" | *"3n-aws")
+ test_tag_array+=("!ipsechw")
+ ;;
+ *"2n-c7gn" | *"3n-c7gn")
+ test_tag_array+=("!ipsechw")
+ ;;
+ *"1n-c6in" | *"2n-c6in" | *"3n-c6in")
test_tag_array+=("!ipsechw")
;;
+ *"2n-x-"* | *"3n-x-"*)
+ ;;
esac
# We will add excluded NICs.
@@ -988,19 +1157,17 @@ function select_tags () {
TAGS=()
prefix=""
-
- set +x
- if [[ "${TEST_CODE}" == "vpp-"* ]]; then
- if [[ "${TEST_CODE}" != *"device"* ]]; then
- # Automatic prefixing for VPP perf jobs to limit the NIC used and
- # traffic evaluation to MRR.
- if [[ "${TEST_TAG_STRING-}" == *"nic_"* ]]; then
- prefix="${prefix}mrrAND"
- else
- prefix="${prefix}mrrAND${default_nic}AND"
+ if [[ "${TEST_CODE}" != *"daily"* ]]; then
+ if [[ "${TEST_CODE}" == "vpp-"* ]]; then
+ if [[ "${TEST_CODE}" != *"device"* ]]; then
+ # Automatic prefixing for VPP perf jobs to limit the NIC used.
+ if [[ "${TEST_TAG_STRING-}" != *"nic_"* ]]; then
+ prefix="${default_nic}AND"
+ fi
fi
fi
fi
+ set +x
for tag in "${test_tag_array[@]}"; do
if [[ "${tag}" == "!"* ]]; then
# Exclude tags are not prefixed.
@@ -1045,52 +1212,101 @@ function select_topology () {
case_text="${NODENESS}_${FLAVOR}"
case "${case_text}" in
- "1n_vbox")
+ "1n_aws")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*1n-aws*.yaml )
+ TOPOLOGIES_TAGS="1_node_single_link_topo"
+ ;;
+ "1n_c6in")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*1n-c6in*.yaml )
+ TOPOLOGIES_TAGS="1_node_single_link_topo"
+ ;;
+ "1n_alt" | "1n_spr")
TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*vpp_device*.template )
TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "1n_skx" | "1n_tx2")
+ "1n_vbox")
TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*vpp_device*.template )
TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "2n_skx")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_skx*.yaml )
- TOPOLOGIES_TAGS="2_node_*_link_topo"
+ "2n_aws")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n-aws*.yaml )
+ TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "2n_zn2")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_zn2*.yaml )
- TOPOLOGIES_TAGS="2_node_*_link_topo"
+ "2n_c7gn")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n-c7gn*.yaml )
+ TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "3n_skx")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_skx*.yaml )
- TOPOLOGIES_TAGS="3_node_*_link_topo"
+ "2n_c6in")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n-c6in*.yaml )
+ TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
"2n_clx")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_clx*.yaml )
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_clx_*.yaml )
+ TOPOLOGIES_TAGS="2_node_*_link_topo"
+ ;;
+ "2n_icx")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_icx_*.yaml )
TOPOLOGIES_TAGS="2_node_*_link_topo"
;;
- "2n_dnv")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_dnv*.yaml )
+ "2n_spr")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_spr_*.yaml )
+ TOPOLOGIES_TAGS="2_node_*_link_topo"
+ ;;
+ "2n_tx2")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_tx2_*.yaml )
TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "3n_dnv")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_dnv*.yaml )
+ "2n_zn2")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_zn2_*.yaml )
+ TOPOLOGIES_TAGS="2_node_*_link_topo"
+ ;;
+ "3n_alt")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_alt_*.yaml )
+ TOPOLOGIES_TAGS="3_node_single_link_topo"
+ ;;
+ "3n_aws")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n-aws*.yaml )
+ TOPOLOGIES_TAGS="3_node_single_link_topo"
+ ;;
+ "3n_c7gn")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n-c7gn*.yaml )
+ TOPOLOGIES_TAGS="3_node_single_link_topo"
+ ;;
+ "3n_c6in")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n-c6in*.yaml )
+ TOPOLOGIES_TAGS="3_node_single_link_topo"
+ ;;
+ "3n_icx")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_icx_*.yaml )
+ # Trailing underscore is needed to distinguish from 3n_icxd.
+ TOPOLOGIES_TAGS="3_node_*_link_topo"
+ ;;
+ "3n_icxd")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_icxd_*.yaml )
+ TOPOLOGIES_TAGS="3_node_single_link_topo"
+ ;;
+ "3n_snr")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_snr_*.yaml )
TOPOLOGIES_TAGS="3_node_single_link_topo"
;;
"3n_tsh")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_tsh*.yaml )
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_tsh_*.yaml )
TOPOLOGIES_TAGS="3_node_single_link_topo"
;;
- "2n_tx2")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_tx2*.yaml )
- TOPOLOGIES_TAGS="2_node_single_link_topo"
+ "3na_spr")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3na_spr_*.yaml )
+ TOPOLOGIES_TAGS="3_node_*_link_topo"
;;
- "2n_aws")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_aws*.yaml )
+ "3nb_spr")
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3nb_spr_*.yaml )
+ TOPOLOGIES_TAGS="3_node_*_link_topo"
+ ;;
+ "2n_x"*)
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*2n_"${FLAVOR}"*.yaml )
TOPOLOGIES_TAGS="2_node_single_link_topo"
;;
- "3n_aws")
- TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_aws*.yaml )
+ "3n_x"*)
+ TOPOLOGIES=( "${TOPOLOGIES_DIR}"/*3n_"${FLAVOR}"*.yaml )
TOPOLOGIES_TAGS="3_node_single_link_topo"
;;
*)
@@ -1110,6 +1326,9 @@ function set_environment_variables () {
# Depending on testbed topology, overwrite defaults set in the
# resources/libraries/python/Constants.py file
#
+ # Only to be called from the reservation function,
+ # as resulting values may change based on topology data.
+ #
# Variables read:
# - TEST_CODE - String affecting test selection, usually jenkins job name.
# Variables set:
@@ -1118,14 +1337,34 @@ function set_environment_variables () {
set -exuo pipefail
case "${TEST_CODE}" in
- *"2n-aws"* | *"3n-aws"*)
- # T-Rex 2.88 workaround for ENA NICs
+ *"1n-aws" | *"2n-aws" | *"3n-aws")
+ export TREX_RX_DESCRIPTORS_COUNT=1024
+ export TREX_EXTRA_CMDLINE="--mbuf-factor 19"
+ export TREX_CORE_COUNT=6
+ # Settings to prevent duration stretching.
+ export PERF_TRIAL_STL_DELAY=0.1
+ ;;
+ *"2n-c7gn" | *"3n-c7gn")
export TREX_RX_DESCRIPTORS_COUNT=1024
export TREX_EXTRA_CMDLINE="--mbuf-factor 19"
export TREX_CORE_COUNT=6
- # Settings to prevent duration stretching
+ # Settings to prevent duration stretching.
export PERF_TRIAL_STL_DELAY=0.1
;;
+ *"1n-c6in" | *"2n-c6in" | *"3n-c6in")
+ export TREX_RX_DESCRIPTORS_COUNT=1024
+ export TREX_EXTRA_CMDLINE="--mbuf-factor 19"
+ export TREX_CORE_COUNT=6
+ # Settings to prevent duration stretching.
+ export PERF_TRIAL_STL_DELAY=0.1
+ ;;
+ *"2n-zn2")
+ # Maciek's workaround for Zen2 with lower amount of cores.
+ export TREX_CORE_COUNT=14
+ ;;
+ *"2n-x-"* | *"3n-x-"* )
+ export TREX_CORE_COUNT=2
+ ;;
esac
}
@@ -1144,7 +1383,8 @@ function untrap_and_unreserve_testbed () {
# Variables read (by inner function):
# - WORKING_TOPOLOGY - Path to topology yaml file of the reserved testbed.
# - PYTHON_SCRIPTS_DIR - Path to directory holding Python scripts.
- # Variables written:
+ # Variables set:
+ # - TERRAFORM_MODULE_DIR - Terraform module directory.
# - WORKING_TOPOLOGY - Set to empty string on successful unreservation.
# Trap unregistered:
# - EXIT - Failure to untrap is reported, but ignored otherwise.
@@ -1165,7 +1405,16 @@ function untrap_and_unreserve_testbed () {
die "${1:-FAILED TO UNRESERVE, FIX MANUALLY.}" 2
}
case "${TEST_CODE}" in
- *"2n-aws"* | *"3n-aws"*)
+ *"1n-aws" | *"2n-aws" | *"3n-aws")
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-${FLAVOR}-c5n"
+ terraform_destroy || die "Failed to call terraform destroy."
+ ;;
+ *"2n-c7gn" | *"3n-c7gn")
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-${FLAVOR}"
+ terraform_destroy || die "Failed to call terraform destroy."
+ ;;
+ *"1n-c6in" | *"2n-c6in" | *"3n-c6in")
+ TERRAFORM_MODULE_DIR="terraform-aws-${NODENESS}-${FLAVOR}"
terraform_destroy || die "Failed to call terraform destroy."
;;
*)
diff --git a/resources/libraries/bash/function/device.sh b/resources/libraries/bash/function/device.sh
index 228a73b78c..4d39cd2de6 100644
--- a/resources/libraries/bash/function/device.sh
+++ b/resources/libraries/bash/function/device.sh
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -30,6 +30,7 @@ function activate_wrapper () {
enter_mutex || die
get_available_interfaces "${1}" "${2}" || die
+ bind_dut_interfaces_to_vpp_driver || die
start_topology_containers "${3}" || die
bind_interfaces_to_containers || die
set_env_variables || die
@@ -38,6 +39,29 @@ function activate_wrapper () {
}
+function bind_dut_interfaces_to_vpp_driver () {
+
+ # Bind DUT network interfaces to the driver that vpp will use
+ #
+ # Variables read:
+ # - DUT1_NETDEVS - List of network devices allocated to DUT1 container.
+ # Variables set:
+ # - NETDEV - Linux network interface.
+ # - DRIVER - Kernel driver to bind the interface to.
+ # - KRN_DRIVER - The original kernel driver of the network interface.
+
+ for NETDEV in "${DUT1_NETDEVS[@]}"; do
+ get_pci_addr || die
+ get_krn_driver || die
+ if [[ ${KRN_DRIVER} == "iavf" ]]; then
+ DRIVER="vfio-pci"
+ ADDR=${PCI_ADDR}
+ bind_interfaces_to_driver || die
+ fi
+ done
+}
+
+
function bind_interfaces_to_containers () {
# Bind linux network interface to container and create symlink for PCI
@@ -51,36 +75,42 @@ function bind_interfaces_to_containers () {
# - TG_NETDEVS - List of network devices allocated to TG container.
# Variables set:
# - NETDEV - Linux network interface.
+ # - KRN_DRIVER - Kernel driver of network device.
set -exuo pipefail
- for NETDEV in "${TG_NETDEVS[@]}"; do
- get_pci_addr || die
+ for PCI_ADDR in "${TG_PCIDEVS[@]}"; do
+ get_netdev_name || die
link_target=$(readlink -f /sys/bus/pci/devices/"${PCI_ADDR}") || {
die "Reading symlink for PCI address failed!"
}
cmd="ln -s ${link_target} /sys/bus/pci/devices/${PCI_ADDR}"
- sudo ip link set ${NETDEV} netns ${DCR_CPIDS[tg]} || {
- die "Moving interface to ${DCR_CPIDS[tg]} namespace failed!"
- }
docker exec "${DCR_UUIDS[tg]}" ${cmd} || {
die "Linking PCI address in container failed!"
}
+
+ sudo ip link set ${NETDEV} netns ${DCR_CPIDS[tg]} || {
+ die "Moving interface to ${DCR_CPIDS[tg]} namespace failed!"
+ }
done
- for NETDEV in "${DUT1_NETDEVS[@]}"; do
- get_pci_addr || die
+ for PCI_ADDR in "${DUT1_PCIDEVS[@]}"; do
link_target=$(readlink -f /sys/bus/pci/devices/"${PCI_ADDR}") || {
die "Reading symlink for PCI address failed!"
}
cmd="ln -s ${link_target} /sys/bus/pci/devices/${PCI_ADDR}"
- sudo ip link set ${NETDEV} netns ${DCR_CPIDS[dut1]} || {
- die "Moving interface to ${DCR_CPIDS[dut1]} namespace failed!"
- }
docker exec "${DCR_UUIDS[dut1]}" ${cmd} || {
die "Linking PCI address in container failed!"
}
+
+ get_krn_driver
+ if [[ ${KRN_DRIVER} != "vfio-pci" ]]; then
+ get_netdev_name || die
+ sudo ip link set ${NETDEV} netns ${DCR_CPIDS[dut1]} || {
+ die "Moving interface to ${DCR_CPIDS[dut1]} namespace failed!"
+ }
+ fi
done
}
@@ -99,13 +129,22 @@ function bind_interfaces_to_driver () {
pci_path="/sys/bus/pci/devices/${ADDR}"
drv_path="/sys/bus/pci/drivers/${DRIVER}"
if [ -d "${pci_path}/driver" ]; then
- echo ${ADDR} | sudo tee ${pci_path}/driver/unbind || {
+ echo ${ADDR} | sudo tee ${pci_path}/driver/unbind > /dev/null || {
die "Failed to unbind interface ${ADDR}!"
}
fi
- echo ${ADDR} | sudo tee ${drv_path}/bind || {
+
+ echo ${DRIVER} | sudo tee /sys/bus/pci/devices/${ADDR}/driver_override \
+ > /dev/null || {
+ die "Failed to override driver to ${DRIVER} for ${ADDR}!"
+ }
+
+ echo ${ADDR} | sudo tee ${drv_path}/bind > /dev/null || {
die "Failed to bind interface ${ADDR}!"
}
+
+ echo | sudo tee /sys/bus/pci/devices/${ADDR}/driver_override > /dev/null \
+ || die "Failed to reset driver override for ${ADDR}!"
}
@@ -134,13 +173,17 @@ function clean_environment () {
}
# Rebind interfaces back to kernel drivers.
+ i=0
for ADDR in ${TG_PCIDEVS[@]}; do
- DRIVER="${TG_DRIVERS[0]}"
+ DRIVER="${TG_DRIVERS[${i}]}"
bind_interfaces_to_driver || die
+ ((i++))
done
+ i=0
for ADDR in ${DUT1_PCIDEVS[@]}; do
- DRIVER="${DUT1_DRIVERS[0]}"
+ DRIVER="${DUT1_DRIVERS[${i}]}"
bind_interfaces_to_driver || die
+ ((i++))
done
}
@@ -273,14 +316,24 @@ function get_available_interfaces () {
dut1_netdev=(ens5 enp175)
ports_per_nic=2
;;
- "1n_tx2")
+ "1n_alt")
# Add Intel Corporation XL710/X710 Virtual Function to the
# whitelist.
- pci_id="0x154c"
- tg_netdev=(enp5)
- dut1_netdev=(enp145)
+ # Add MT2892 Family [ConnectX-6 Dx] Virtual Function to the
+ # whitelist.
+ pci_id="0x154c\|0x101e"
+ tg_netdev=(enp1s0f0 enp1s0f1 enP1p1s0f0)
+ dut1_netdev=(enP3p2s0f0 enP3p2s0f1 enP1p1s0f1)
ports_per_nic=2
;;
+ "1n_spr")
+ # Add Intel Corporation E810 Virtual Function to the
+ # whitelist.
+ pci_id="0x1889"
+ tg_netdev=(enp42s0 enp44s0)
+ dut1_netdev=(enp63s0 enp61s0)
+ ports_per_nic=1
+ ;;
"1n_vbox")
# Add Intel Corporation 82545EM Gigabit Ethernet Controller to the
# whitelist.
@@ -415,6 +468,25 @@ function get_mac_addr () {
}
+function get_netdev_name () {
+
+ # Get Linux network device name.
+ #
+ # Variables read:
+ # - PCI_ADDR - PCI address of the device.
+ # Variables set:
+ # - NETDEV - Linux network device name.
+
+ set -exuo pipefail
+
+ if [ -d /sys/bus/pci/devices/${PCI_ADDR}/net ]; then
+ NETDEV="$(basename /sys/bus/pci/devices/${PCI_ADDR}/net/*)" || {
+ die "Failed to get Linux interface name of ${PCI_ADDR}"
+ }
+ fi
+}
+
+
function get_csit_model () {
# Get CSIT model name from linux network device name.
@@ -437,7 +509,10 @@ function get_csit_model () {
"0x1572"|"0x154c")
MODEL="Intel-X710"
;;
- "*")
+ "0x101e")
+ MODEL="Mellanox-CX6DX"
+ ;;
+ *)
MODEL="virtual"
esac
fi
@@ -460,13 +535,33 @@ function get_pci_addr () {
PCI_ADDR=$(basename $(readlink /sys/class/net/${NETDEV}/device)) || {
die "Failed to get PCI address of linux network interface!"
}
- fi
- if [ ! -d /sys/bus/pci/devices/${PCI_ADDR} ]; then
- die "PCI device ${NETDEV} doesn't exist!"
+ if [ ! -d /sys/bus/pci/devices/${PCI_ADDR} ]; then
+ die "PCI device ${PCI_ADDR} doesn't exist!"
+ fi
+ else
+ die "Can't get device info of interface ${NETDEV}!"
fi
}
+function get_vfio_group () {
+
+ # Get the VFIO group of a pci device.
+ #
+ # Variables read:
+ # - PCI_ADDR - PCI address of a device.
+ # Variables set:
+ # - VFIO_GROUP - The VFIO group of the PCI device.
+
+ if [[ -d /sys/bus/pci/devices/${PCI_ADDR}/iommu_group ]]; then
+ VFIO_GROUP="$(basename\
+ $(readlink /sys/bus/pci/devices/${PCI_ADDR}/iommu_group)\
+ )" || {
+ die "PCI device ${PCI_ADDR} does not have an iommu group!"
+ }
+ fi
+}
+
function get_vlan_filter () {
# Get VLAN stripping filter from PF searched by mac adress.
@@ -619,7 +714,7 @@ function set_env_variables () {
CSIT_TG_HOST="$(hostname --all-ip-addresses | awk '{print $1}')" || {
die "Reading hostname IP address failed!"
}
- CSIT_TG_PORT="${DCR_PORTS[tg]#*:}"
+ CSIT_TG_PORT="${DCR_PORTS[tg]##*:}"
CSIT_TG_UUID="${DCR_UUIDS[tg]}"
CSIT_TG_ARCH="$(uname -i)" || {
die "Reading machine architecture failed!"
@@ -627,7 +722,7 @@ function set_env_variables () {
CSIT_DUT1_HOST="$(hostname --all-ip-addresses | awk '{print $1}')" || {
die "Reading hostname IP address failed!"
}
- CSIT_DUT1_PORT="${DCR_PORTS[dut1]#*:}"
+ CSIT_DUT1_PORT="${DCR_PORTS[dut1]##*:}"
CSIT_DUT1_UUID="${DCR_UUIDS[dut1]}"
CSIT_DUT1_ARCH="$(uname -i)" || {
die "Reading machine architecture failed!"
@@ -683,9 +778,19 @@ function start_topology_containers () {
# Override access to PCI bus by attaching a filesystem mount to the
# container.
dcr_stc_params+="--mount type=tmpfs,destination=/sys/bus/pci/devices "
- # Mount vfio to be able to bind to see bound interfaces. We cannot use
- # --device=/dev/vfio as this does not see newly bound interfaces.
- dcr_stc_params+="--volume /dev/vfio:/dev/vfio "
+ # Mount vfio devices to be able to use VFs inside the container.
+ vfio_bound="false"
+ for PCI_ADDR in ${DUT1_PCIDEVS[@]}; do
+ get_krn_driver
+ if [[ ${KRN_DRIVER} == "vfio-pci" ]]; then
+ get_vfio_group
+ dcr_stc_params+="--device /dev/vfio/${VFIO_GROUP} "
+ vfio_bound="true"
+ fi
+ done
+ if ! ${vfio_bound}; then
+ dcr_stc_params+="--volume /dev/vfio:/dev/vfio "
+ fi
# Disable manipulation with hugepages by VPP.
dcr_stc_params+="--volume /dev/null:/etc/sysctl.d/80-vpp.conf "
# Mount docker.sock to be able to use docker deamon of the host.
diff --git a/resources/libraries/bash/function/docs.sh b/resources/libraries/bash/function/docs.sh
deleted file mode 100644
index c589416a37..0000000000
--- a/resources/libraries/bash/function/docs.sh
+++ /dev/null
@@ -1,264 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -exuo pipefail
-
-
-function die_on_docs_error () {
-
- # Source this fragment if you want to abort on any failure.
- #
- # Variables read:
- # - DOCS_EXIT_STATUS - Set by a generation function.
- # Functions called:
- # - die - Print to stderr and exit.
-
- set -exuo pipefail
-
- if [[ "${DOCS_EXIT_STATUS}" != "0" ]]; then
- die "Failed to generate docs!" "${DOCS_EXIT_STATUS}"
- fi
-}
-
-function generate_docs () {
-
- # Generate docs content.
- #
- # Variable read:
- # - ${TOOLS_DIR} - Path to existing resources subdirectory "tools".
- # Variables set:
- # - DOCS_EXIT_STATUS - Exit status of docs generation.
- # Functions called:
- # - die - Print to stderr and exit.
-
- set -exuo pipefail
-
- pushd "${TOOLS_DIR}"/doc_gen || die "Pushd failed!"
-
- BUILD_DIR="_build"
-
- # Remove the old build:
- rm -rf ${BUILD_DIR} || true
- rm -rf /tmp/tmp-csit* || true
-
- export WORKING_DIR=$(mktemp -d /tmp/tmp-csitXXX) || die "export failed"
-
- # Create working directories
- mkdir -p "${BUILD_DIR}" || die "Mkdir failed!"
- mkdir -p "${WORKING_DIR}"/resources/libraries/python/ || die "Mkdir failed!"
- mkdir -p "${WORKING_DIR}"/resources/libraries/robot/ || die "Mkdir failed!"
- mkdir -p "${WORKING_DIR}"/tests/ || die "Mkdir failed!"
-
- # Copy the Sphinx source files:
- cp -r src/* ${WORKING_DIR}/ || die "Copy the Sphinx source files failed!"
-
- # Copy the source files to be processed:
- from_dir="${RESOURCES_DIR}/libraries/python/"
- to_dir="${WORKING_DIR}/resources/libraries/python/"
- dirs="${from_dir} ${to_dir}"
- rsync -ar --include='*/' --include='*.py' --exclude='*' ${dirs} || {
- die "rSync failed!"
- }
-
- from_dir="${RESOURCES_DIR}/libraries/robot/"
- to_dir="${WORKING_DIR}/resources/libraries/robot/"
- dirs="${from_dir} ${to_dir}"
- rsync -ar --include='*/' --include '*.robot' --exclude '*' ${dirs} || {
- die "rSync failed!"
- }
- touch ${to_dir}/index.robot || {
- die "Touch index.robot file failed!"
- }
-
- from_dir="${CSIT_DIR}/tests/"
- to_dir="${WORKING_DIR}/tests/"
- dirs="${from_dir} ${to_dir}"
- rsync -ar --include='*/' --include '*.robot' --exclude '*' ${dirs} || {
- die "rSync failed!"
- }
-
- find ${WORKING_DIR}/ -type d -exec echo {} \; -exec touch {}/__init__.py \;
-
- python3 gen_rst.py || die "Generate .rst files failed!"
-
- # Generate the documentation:
- DATE=$(date -u '+%d-%b-%Y') || die "Get date failed!"
-
- all_options=("-v")
- all_options+=("-c" "${WORKING_DIR}")
- all_options+=("-a")
- all_options+=("-b" "html")
- all_options+=("-E")
- all_options+=("-D" "version="${GERRIT_BRANCH:-master}"")
- all_options+=("${WORKING_DIR}" "${BUILD_DIR}/")
-
- set +e
- sphinx-build "${all_options[@]}"
- DOCS_EXIT_STATUS="$?"
- set -e
-}
-
-function generate_report () {
-
- # Generate report content.
- #
- # Variable read:
- # - ${TOOLS_DIR} - Path to existing resources subdirectory "tools".
- # - ${GERRIT_BRANCH} - Gerrit branch used for release tagging.
- # Variables set:
- # - DOCS_EXIT_STATUS - Exit status of report generation.
- # Functions called:
- # - die - Print to stderr and exit.
-
- set -exuo pipefail
-
- pushd "${TOOLS_DIR}"/presentation || die "Pushd failed!"
-
- # Set default values in config array.
- typeset -A CFG
- typeset -A DIR
-
- DIR[WORKING]="_tmp"
-
- # Create working directories.
- mkdir "${DIR[WORKING]}" || die "Mkdir failed!"
-
- export PYTHONPATH=`pwd`:`pwd`/../../../ || die "Export failed!"
-
- all_options=("pal.py")
- all_options+=("--specification" "specifications/report")
- all_options+=("--release" "${GERRIT_BRANCH:-master}")
- all_options+=("--week" $(date "+%V"))
- all_options+=("--logging" "INFO")
- all_options+=("--force")
-
- set +e
- python "${all_options[@]}"
- DOCS_EXIT_STATUS="$?"
- set -e
-
-}
-
-function generate_report_local () {
-
- # Generate report from local content.
- #
- # Variable read:
- # - ${TOOLS_DIR} - Path to existing resources subdirectory "tools".
- # - ${CSIT_REPORT_FILENAME} - Source filename.
- # - ${CSIT_REPORT_DIRECTORYNAME} - Source directory.
- # - ${CSIT_REPORT_INSTALL_DEPENDENCIES} - Whether to install dependencies.
- # - ${CSIT_REPORT_INSTALL_LATEX} - Whether to install latex.
- # Variables set:
- # - DOCS_EXIT_STATUS - Exit status of report generation.
- # Functions called:
- # - die - Print to stderr and exit.
-
- set -exuo pipefail
-
- pushd "${TOOLS_DIR}"/presentation || die "Pushd failed!"
-
- filename="${CSIT_REPORT_FILENAME-}"
- directoryname="${CSIT_REPORT_DIRECTORYNAME-}"
- install_dependencies="${CSIT_REPORT_INSTALL_DEPENDENCIES:-1}"
- install_latex="${CSIT_REPORT_INSTALL_LATEX:-0}"
-
- # Set default values in config array.
- typeset -A CFG
- typeset -A DIR
-
- DIR[WORKING]="_tmp"
-
- # Install system dependencies.
- if [[ ${install_dependencies} -eq 1 ]] ;
- then
- sudo apt -y update || die "APT update failed!"
- sudo apt -y install libxml2 libxml2-dev libxslt-dev \
- build-essential zlib1g-dev unzip || die "APT install failed!"
- fi
-
- if [[ ${install_latex} -eq 1 ]] ;
- then
- sudo apt -y update || die "APT update failed!"
- sudo apt -y install xvfb texlive-latex-recommended \
- texlive-fonts-recommended texlive-fonts-extra texlive-latex-extra \
- latexmk wkhtmltopdf inkscape || die "APT install failed!"
- target="/usr/share/texlive/texmf-dist/web2c/texmf.cnf"
- sudo sed -i.bak 's/^\(main_memory\s=\s\).*/\110000000/' "${target}" || {
- die "Patching latex failed!"
- }
- fi
-
- # Create working directories.
- mkdir "${DIR[WORKING]}" || die "Mkdir failed!"
-
- export PYTHONPATH=`pwd`:`pwd`/../../../ || die "Export failed!"
-
- all_options=("pal.py")
- all_options+=("--specification" "specifications/report_local")
- all_options+=("--release" "${RELEASE:-master}")
- all_options+=("--week" "${WEEK:-1}")
- all_options+=("--logging" "INFO")
- all_options+=("--force")
- if [[ ${filename} != "" ]]; then
- all_options+=("--input-file" "${filename}")
- fi
- if [[ ${directoryname} != "" ]]; then
- all_options+=("--input-directory" "${directoryname}")
- fi
-
- set +e
- python "${all_options[@]}"
- DOCS_EXIT_STATUS="$?"
- set -e
-
-}
-
-function generate_trending () {
-
- # Generate trending content.
- #
- # Variable read:
- # - ${TOOLS_DIR} - Path to existing resources subdirectory "tools".
- # Variables set:
- # - DOCS_EXIT_STATUS - Exit status of trending generation.
- # Functions called:
- # - die - Print to stderr and exit.
-
- set -exuo pipefail
-
- pushd "${TOOLS_DIR}"/presentation || die "Pushd failed!"
-
- # Set default values in config array.
- typeset -A DIR
-
- DIR[WORKING]="_tmp"
-
- # Create working directories.
- mkdir "${DIR[WORKING]}" || die "Mkdir failed!"
-
- export PYTHONPATH=`pwd`:`pwd`/../../../ || die "Export failed!"
-
- all_options=("pal.py")
- all_options+=("--specification" "specifications/trending")
- all_options+=("--logging" "INFO")
- all_options+=("--force")
-
- set +e
- python "${all_options[@]}"
- DOCS_EXIT_STATUS="$?"
- set -e
-
-}
diff --git a/resources/libraries/bash/function/dpdk.sh b/resources/libraries/bash/function/dpdk.sh
index 491f03eec0..86abb84a02 100644
--- a/resources/libraries/bash/function/dpdk.sh
+++ b/resources/libraries/bash/function/dpdk.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -96,19 +96,8 @@ function dpdk_compile () {
# Configure generic build - the same used by VPP
meson_options="${meson_options} -Dplatform=generic"
- # Patch L3FWD.
- sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128"
- sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 1024/g"
- sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512"
- sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 1024/g"
- sed_file="./main.c"
- pushd examples/l3fwd || die "Pushd failed"
- sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed"
- sed -i "${sed_txd}" "${sed_file}" || die "Patch failed"
- popd || die "Popd failed"
-
# Compile using Meson and Ninja.
- meson ${meson_options} build || {
+ meson setup ${meson_options} build || {
die "Failed to compile DPDK!"
}
ninja -C build || die "Failed to compile DPDK!"
@@ -201,7 +190,6 @@ function dpdk_l3fwd_compile () {
#
# Variables read:
# - DPDK_DIR - Path to DPDK framework.
- # - CSIT_DIR - Path to CSIT framework.
# Functions called:
# - die - Print to stderr and exit.
@@ -209,14 +197,7 @@ function dpdk_l3fwd_compile () {
pushd "${DPDK_DIR}" || die "Pushd failed"
# Patch L3FWD.
- sed_rxd="s/^#define RTE_TEST_RX_DESC_DEFAULT 128"
- sed_rxd+="/#define RTE_TEST_RX_DESC_DEFAULT 2048/g"
- sed_txd="s/^#define RTE_TEST_TX_DESC_DEFAULT 512"
- sed_txd+="/#define RTE_TEST_TX_DESC_DEFAULT 2048/g"
- sed_file="./main.c"
pushd examples/l3fwd || die "Pushd failed"
- sed -i "${sed_rxd}" "${sed_file}" || die "Patch failed"
- sed -i "${sed_txd}" "${sed_file}" || die "Patch failed"
chmod +x ${1} && source ${1} || die "Patch failed"
popd || die "Popd failed"
@@ -245,6 +226,28 @@ function dpdk_l3fwd () {
for attempt in {1..60}; do
echo "Checking if l3fwd is alive, attempt nr ${attempt}"
if fgrep "L3FWD: entering main loop on lcore" screenlog.0; then
+ cat screenlog.0
+ exit 0
+ fi
+ sleep 1
+ done
+ cat screenlog.0
+
+ exit 1
+}
+
+
+function dpdk_l3fwd_check () {
+
+ # DPDK l3fwd check state.
+
+ set -exuo pipefail
+
+ for attempt in {1..60}; do
+ echo "Checking if l3fwd state is ok, attempt nr ${attempt}"
+ if fgrep "Link up" screenlog.0; then
+ cat screenlog.0
+ dpdk_l3fwd_pid
exit 0
fi
sleep 1
@@ -255,6 +258,16 @@ function dpdk_l3fwd () {
}
+function dpdk_l3fwd_pid () {
+ l3fwd_pid="$(pidof dpdk-l3fwd)"
+ if [ ! -z "${l3fwd_pid}" ]; then
+ echo "L3fwd process ID: ${l3fwd_pid}"
+ else
+ echo "L3fwd not running!"
+ fi
+}
+
+
function dpdk_precheck () {
# Precheck system settings (nr_hugepages, max_map_count).
@@ -299,9 +312,10 @@ function dpdk_testpmd () {
for attempt in {1..60}; do
echo "Checking if testpmd is alive, attempt nr ${attempt}"
- if fgrep "Press enter to exit" screenlog.0; then
- cat screenlog.0
- exit 0
+ if fgrep "Press enter to exit" screenlog.0; then
+ cat screenlog.0
+ dpdk_testpmd_pid
+ exit 0
fi
sleep 1
done
@@ -309,3 +323,33 @@ function dpdk_testpmd () {
exit 1
}
+
+
+function dpdk_testpmd_check () {
+
+ # DPDK testpmd check links state.
+
+ set -exuo pipefail
+
+ for attempt in {1..60}; do
+ echo "Checking if testpmd links state changed, attempt nr ${attempt}"
+ if fgrep "link state change event" screenlog.0; then
+ cat screenlog.0
+ exit 0
+ fi
+ sleep 1
+ done
+ cat screenlog.0
+
+ exit 1
+}
+
+
+function dpdk_testpmd_pid () {
+ testpmd_pid="$(pidof dpdk-testpmd)"
+ if [ ! -z "${testpmd_pid}" ]; then
+ echo "Testpmd process ID: ${testpmd_pid}"
+ else
+ echo "Testpmd not running!"
+ fi
+}
diff --git a/resources/libraries/bash/function/eb_version.sh b/resources/libraries/bash/function/eb_version.sh
new file mode 100644
index 0000000000..0393030065
--- /dev/null
+++ b/resources/libraries/bash/function/eb_version.sh
@@ -0,0 +1,159 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -exuo pipefail
+
+
+function die_on_error () {
+
+ # Source this fragment if you want to abort on any failure.
+ #
+ # Variables read:
+ # - ${CODE_EXIT_STATUS} - Exit status of report generation.
+ # Functions called:
+ # - die - Print to stderr and exit.
+
+ set -exuo pipefail
+
+ if [[ "${CODE_EXIT_STATUS}" != "0" ]]; then
+ die "Failed to generate docs!" "${CODE_EXIT_STATUS}"
+ fi
+}
+
+
+function eb_version_deploy () {
+
+ # Deploy Elastic Beanstalk CDash content.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory.
+ # - ${TERRAFORM_OUTPUT_VAL} - Terraform output value.
+ # Variables set:
+ # - ${CODE_EXIT_STATUS} - Exit status of report generation.
+ # - ${TERRAFORM_OUTPUT_VAR} - Register Terraform output variable name.
+ # Functions called:
+ # - eb_version_verify - Build and verify EB version.
+ # - terraform_apply - Apply EB version by Terraform.
+ # - terraform_output - Get the application name string from Terraform.
+ # - die - Print to stderr and exit.
+
+ set -exuo pipefail
+
+ eb_version_build_verify || die "Failed to call Elastic Beanstalk verify!"
+ terraform_apply || die "Failed to call Terraform apply!"
+
+ TERRAFORM_OUTPUT_VAR="application_version"
+ terraform_output || die "Failed to call Terraform output!"
+
+ #aws --region eu-central-1 elasticbeanstalk update-environment \
+ # --environment-name fdio-csit-dash-env \
+ # --version-label "${TERRAFORM_OUTPUT_VAL}"
+}
+
+
+function eb_version_build_verify () {
+
+ # Build and verify Elastic Beanstalk CDash integrity.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory.
+ # Variables set:
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module sub-directory.
+ # Functions called:
+ # - hugo_init_modules - Initialize Hugo modules.
+ # - hugo_build_site - Build static site with Hugo.
+ # - terraform_init - Initialize Terraform modules.
+ # - terraform_validate - Validate Terraform code.
+ # - die - Print to stderr and exit.
+
+ set -exuo pipefail
+
+ if ! installed zip; then
+ die "Please install zip!"
+ fi
+
+ hugo_init_modules || die "Failed to call Hugo initialize!"
+ hugo_build_site || die "Failed to call Hugo build!"
+
+ pushd "${CSIT_DIR}"/csit.infra.dash || die "Pushd failed!"
+ pushd app || die "Pushd failed!"
+ find . -type d -name "__pycache__" -exec rm -rf "{}" \;
+ find . -type d -name ".webassets-cache" -exec rm -rf "{}" \;
+ zip -r ../app.zip . || die "Compress failed!"
+ popd || die "Popd failed!"
+ popd || die "Popd failed!"
+
+ TERRAFORM_MODULE_DIR="terraform-aws-fdio-csit-dash-app-base"
+
+ export TF_VAR_application_version="${BUILD_ID}"
+ terraform_init || die "Failed to call Terraform init!"
+ terraform_validate || die "Failed to call Terraform validate!"
+}
+
+
+function generate_report () {
+
+ # Generate report content.
+ #
+ # Variable read:
+ # - ${TOOLS_DIR} - Path to existing resources subdirectory "tools".
+ # - ${GERRIT_BRANCH} - Gerrit branch used for release tagging.
+ # Variables set:
+ # - ${CODE_EXIT_STATUS} - Exit status of report generation.
+ # Functions called:
+ # - die - Print to stderr and exit.
+
+ set -exuo pipefail
+
+ pushd "${TOOLS_DIR}"/presentation || die "Pushd failed!"
+
+ # Set default values in config array.
+ typeset -A CFG
+ typeset -A DIR
+
+ DIR[WORKING]="_tmp"
+
+ # Create working directories.
+ mkdir "${DIR[WORKING]}" || die "Mkdir failed!"
+
+ export PYTHONPATH=`pwd`:`pwd`/../../../ || die "Export failed!"
+
+ all_options=("pal.py")
+ all_options+=("--specification" "specifications/report")
+ all_options+=("--release" "${GERRIT_BRANCH:-master}")
+ all_options+=("--week" $(date "+%V"))
+ all_options+=("--logging" "INFO")
+ all_options+=("--force")
+
+ set +e
+ python "${all_options[@]}"
+ CODE_EXIT_STATUS="$?"
+ set -e
+}
+
+function installed () {
+
+ # Check if the given utility is installed. Fail if not installed.
+ #
+ # Arguments:
+ # - ${1} - Utility to check.
+ # Returns (implicitly):
+ # - 0 - If command is installed.
+ # - 1 - If command is not installed.
+
+ set -exuo pipefail
+
+ command -v "${1}"
+}
diff --git a/resources/libraries/bash/function/gather.sh b/resources/libraries/bash/function/gather.sh
index 4958e5251b..e432777e32 100644
--- a/resources/libraries/bash/function/gather.sh
+++ b/resources/libraries/bash/function/gather.sh
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2023 PANTHEON.tech and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -26,7 +26,7 @@ function gather_build () {
# Variables read:
# - TEST_CODE - String affecting test selection, usually jenkins job name.
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# Variables set:
# - DUT - CSIT test/ subdirectory containing suites to execute.
# Directories updated:
@@ -92,7 +92,8 @@ function gather_dpdk () {
then
echo "Downloading latest DPDK packages from repo..."
# URL is not in quotes, calling command from variable keeps them.
- wget_command=("wget" "--no-check-certificate" "-nv" "-O" "-")
+ wget_command=("wget" "--no-check-certificate" "--compression=auto")
+ wget_command+=("-nv" "-O" "-")
wget_command+=("${dpdk_repo}")
dpdk_stable_ver="$("${wget_command[@]}" | grep -v "2015"\
| grep -Eo 'dpdk-[^\"]+xz' | tail -1)" || {
@@ -130,7 +131,7 @@ function gather_vpp () {
# Variables read:
# - BASH_FUNCTION_DIR - Bash directory with functions.
# - TEST_CODE - The test selection string from environment or argument.
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# - CSIT_DIR - Path to existing root of local CSIT git repository.
# Variables set:
# - VPP_VERSION - VPP stable version under test.
@@ -173,7 +174,7 @@ function gather_vpp () {
;;
"vpp-csit-"*)
# Shorten line.
- pgks="${PKG_SUFFIX}"
+ pkgs="${PKG_SUFFIX}"
# Use locally built packages.
mv "${DOWNLOAD_DIR}"/../*vpp*."${pkgs}" "${DOWNLOAD_DIR}"/ || {
die "Move command failed."
diff --git a/resources/libraries/bash/function/hugo.sh b/resources/libraries/bash/function/hugo.sh
new file mode 100644
index 0000000000..052e8333fb
--- /dev/null
+++ b/resources/libraries/bash/function/hugo.sh
@@ -0,0 +1,113 @@
+#!/usr/bin/env bash
+
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -exuo pipefail
+
+
+function go_install () {
+
+ # Install Go.
+
+ OS_ARCH=$(uname -m) || die "Failed to get arch."
+ case "${OS_ARCH}" in
+ x86_64) architecture="amd64" ;;
+ aarch64) architecture="arm64" ;;
+ esac
+
+ go_version="go1.20.2.linux-${architecture}.tar.gz"
+ go_url="https://go.dev/dl"
+ wget "${go_url}/${go_version}"
+ rm -rf "/usr/local/go"
+ tar -C "/usr/local" -xzf "go1.20.2.linux-${architecture}.tar.gz"
+ rm "go1.20.2.linux-${architecture}.tar.gz"
+ export PATH=$PATH:/usr/local/go/bin
+}
+
+
+function hugo_build_site () {
+
+ # Build site via Hugo.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory.
+ # Functions called:
+ # - die - Print to stderr and exit.
+
+ if ! installed hugo; then
+ die "Please install Hugo!"
+ fi
+
+ pushd "${CSIT_DIR}"/docs || die "Pushd failed!"
+ hugo || die "Failed to run Hugo build!"
+ popd || die "Popd failed!"
+}
+
+
+function hugo_init_modules () {
+
+ # Initialize Hugo modules.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory.
+ # Functions called:
+ # - die - Print to stderr and exit.
+
+ if ! installed hugo; then
+ die "Please install Hugo!"
+ fi
+
+ hugo_book_url="github.com/alex-shpak/hugo-book"
+ hugo_book_version="v0.0.0-20230424134111-d86d5e70c7c0"
+ hugo_book_link="${hugo_book_url}@${hugo_book_version}"
+ pushd "${CSIT_DIR}"/docs || die "Pushd failed!"
+ export PATH=$PATH:/usr/local/go/bin
+ hugo mod get "${hugo_book_link}" || die "Failed to run Hugo mod!"
+ popd || die "Popd failed!"
+}
+
+
+function hugo_install () {
+
+ # Install Hugo Extended.
+
+ OS_ARCH=$(uname -m) || die "Failed to get arch."
+ case "${OS_ARCH}" in
+ x86_64) architecture="amd64" ;;
+ aarch64) architecture="arm64" ;;
+ esac
+
+ hugo_version="v0.111.3/hugo_extended_0.111.3_linux-${architecture}.deb"
+ hugo_url="https://github.com/gohugoio/hugo/releases/download"
+ hugo_link="${hugo_url}/${hugo_version}"
+ wget -O "hugo.deb" "${hugo_link}" || die "Failed to install Hugo!"
+ dpkg -i "hugo.deb" || die "Failed to install Hugo!"
+ rm "hugo.deb" || die "Failed to install Hugo!"
+}
+
+
+function installed () {
+
+ # Check if the given utility is installed. Fail if not installed.
+ #
+ # Arguments:
+ # - ${1} - Utility to check.
+ # Returns (implicitly):
+ # - 0 - If command is installed.
+ # - 1 - If command is not installed.
+
+ set -exuo pipefail
+
+ command -v "${1}"
+}
diff --git a/resources/libraries/bash/function/nginx.sh b/resources/libraries/bash/function/nginx.sh
index 122af23852..a2cf8e6514 100755
--- a/resources/libraries/bash/function/nginx.sh
+++ b/resources/libraries/bash/function/nginx.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2023 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -21,7 +21,7 @@ function gather_nginx () {
# Ensure stable NGINX archive is downloaded.
#
# Variables read:
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# - NGINX_VER - Version number of Nginx.
set -exuo pipefail
pushd "${DOWNLOAD_DIR}" || die "Pushd failed."
@@ -53,7 +53,7 @@ function common_dirs () {
# Variables set:
# - BASH_FUNCTION_DIR - Path to existing directory this file is located in.
# - CSIT_DIR - Path to CSIT framework.
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# - NGINX_DIR - Path to NGINX framework.
# - NGINX_VER - Version number of Nginx.
# Functions called:
@@ -121,7 +121,7 @@ function nginx_extract () {
# Variables read:
# - NGINX_DIR - Path to NGINX framework.
# - CSIT_DIR - Path to CSIT framework.
- # - DOWNLOAD_DIR - Path to directory pybot takes the build to test from.
+ # - DOWNLOAD_DIR - Path to directory robot takes the build to test from.
# - NGINX_VER - Version number of Nginx.
# Functions called:
# - die - Print to stderr and exit.
diff --git a/resources/libraries/bash/function/per_patch.sh b/resources/libraries/bash/function/per_patch.sh
index 4af3302008..44bd57da80 100644
--- a/resources/libraries/bash/function/per_patch.sh
+++ b/resources/libraries/bash/function/per_patch.sh
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech s.r.o.
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2023 PANTHEON.tech s.r.o.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,59 +18,14 @@ set -exuo pipefail
# Generally, the functions assume "common.sh" library has been sourced already.
# Keep functions ordered alphabetically, please.
-function archive_test_results () {
- # Arguments:
- # - ${1}: Directory to archive to. Required. Parent has to exist.
- # Variable set:
- # - TARGET - Target directory.
- # Variables read:
- # - ARCHIVE_DIR - Path to where robot result files are created in.
- # - VPP_DIR - Path to existing directory, root for to relative paths.
- # Directories updated:
- # - ${1} - Created, and robot and parsing files are moved/created there.
- # Functions called:
- # - die - Print to stderr and exit, defined in common.sh
-
- set -exuo pipefail
-
- cd "${VPP_DIR}" || die "Change directory command failed."
- TARGET="$(readlink -f "$1")"
- mkdir -p "${TARGET}" || die "Directory creation failed."
- for filename in "output.xml" "log.html" "report.html"; do
- mv "${ARCHIVE_DIR}/${filename}" "${TARGET}/${filename}" || {
- die "Attempt to move '${filename}' failed."
- }
- done
-}
-
-
-function archive_parse_test_results () {
-
- # Arguments:
- # - ${1}: Directory to archive to. Required. Parent has to exist.
- # Variables read:
- # - TARGET - Target directory.
- # Functions called:
- # - die - Print to stderr and exit, defined in common.sh
- # - archive_test_results - Archiving results.
- # - parse_bmrr_results - See definition in this file.
-
- set -exuo pipefail
-
- archive_test_results "$1" || die
- parse_bmrr_results "${TARGET}" || {
- die "The function should have died on error."
- }
-}
-
-
-function build_vpp_ubuntu_amd64 () {
+function build_vpp_ubuntu () {
# This function is using make pkg-verify to build VPP with all dependencies
# that is ARCH/OS aware. VPP repo is SSOT for building mechanics and CSIT
# is consuming artifacts. This way if VPP will introduce change in building
# mechanics they will not be blocked by CSIT repo.
+ #
# Arguments:
# - ${1} - String identifier for echo, can be unset.
# Variables read:
@@ -114,7 +69,6 @@ function compare_test_results () {
# of parent build.
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
- # - parse_bmrr_results - See definition in this file.
# Exit code:
# - 0 - If the comparison utility sees no regression (nor data error).
# - 1 - If the comparison utility sees a regression (or data error).
@@ -135,50 +89,109 @@ function initialize_csit_dirs () {
# Variables read:
# - VPP_DIR - Path to WORKSPACE, parent of created directories.
# Directories created:
- # - csit_current - Holding test results of the patch under test (PUT).
- # - csit_parent - Holding test results of parent of PUT.
+ # - csit_{part} - See the caller what it is used for.
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
set -exuo pipefail
cd "${VPP_DIR}" || die "Change directory operation failed."
- rm -rf "csit_current" "csit_parent" || {
- die "Directory deletion failed."
- }
- mkdir -p "csit_current" "csit_parent" || {
- die "Directory creation failed."
- }
+ while true; do
+ if [[ ${#} < 1 ]]; then
+ # All directories created.
+ break
+ fi
+ name_part="${1}" || die
+ shift || die
+ dir_name="csit_${name_part}" || die
+ rm -rf "${dir_name}" || die "Directory deletion failed."
+ mkdir -p "${dir_name}" || die "Directory creation failed."
+ done
}
-function parse_bmrr_results () {
+function main_bisect_loop () {
- # Currently "parsing" is just two greps.
- # TODO: Re-use PAL parsing code, make parsing more general and centralized.
+ # Perform the iterative part of bisect entry script.
+ #
+ # The logic is too complex to remain in the entry script.
#
+ # At the start, the loop assumes git bisect old/new has just been executed,
+ # and verified more iterations are needed.
+ # The iteration cleans the build directory and builds the new mid commit.
+ # Then, testbed is reserved, tests run, and testbed unreserved.
+ # Results are moved from default to archive location
+ # (indexed by iteration number) and analyzed.
+ # The new adjective ("old" or "new") is selected,
+ # and git bisect with the adjective is executed.
+ # The symlinks csit_early and csit_late are updated to tightest bounds.
+ # The git.log file is examined and if the bisect is finished, loop ends.
+
+ iteration=0
+ while true
+ do
+ let iteration+=1
+ git clean -dffx "build"/ "build-root"/ || die
+ build_vpp_ubuntu "MIDDLE" || die
+ select_build "build-root" || die
+ check_download_dir || die
+ reserve_and_cleanup_testbed || die
+ run_robot || die
+ move_test_results "csit_middle/${iteration}" || die
+ untrap_and_unreserve_testbed || die
+ rm -vf "csit_mid" || die
+ ln -s -T "csit_middle/${iteration}" "csit_mid" || die
+ set +e
+ python3 "${TOOLS_DIR}/integrated/compare_bisect.py"
+ bisect_rc="${?}"
+ set -e
+ if [[ "${bisect_rc}" == "3" ]]; then
+ adjective="new"
+ rm -v "csit_late" || die
+ ln -s -T "csit_middle/${iteration}" "csit_late" || die
+ elif [[ "${bisect_rc}" == "0" ]]; then
+ adjective="old"
+ rm -v "csit_early" || die
+ ln -s -T "csit_middle/${iteration}" "csit_early" || die
+ else
+ die "Unexpected return code: ${bisect_rc}"
+ fi
+ git bisect "${adjective}" | tee "git.log" || die
+ git describe || die
+ git status || die
+ if head -n 1 "git.log" | cut -b -11 | fgrep -q "Bisecting:"; then
+ echo "Still bisecting..."
+ else
+ echo "Bisecting done."
+ break
+ fi
+ done
+}
+
+
+function move_test_results () {
+
# Arguments:
- # - ${1} - Path to (existing) directory holding robot output.xml result.
- # Files read:
- # - output.xml - From argument location.
- # Files updated:
- # - results.txt - (Re)created, in argument location.
+ # - ${1}: Directory to archive to. Required. Parent has to exist.
+ # Variable set:
+ # - TARGET - Target archival directory, equivalent to the argument.
+ # Variables read:
+ # - ARCHIVE_DIR - Path to where robot result files are created in.
+ # - VPP_DIR - Path to existing directory, root for to relative paths.
+ # Directories updated:
+ # - ${1} - Created, and robot and parsing files are moved/created there.
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
set -exuo pipefail
- rel_dir="$(readlink -e "${1}")" || die "Readlink failed."
- in_file="${rel_dir}/output.xml"
- out_file="${rel_dir}/results.txt"
- # TODO: Do we need to check echo exit code explicitly?
- echo "Parsing ${in_file} putting results into ${out_file}"
- echo "TODO: Re-use parts of PAL when they support subsample test parsing."
- pattern='Maximum Receive Rate trial results in packets'
- pattern+=' per second: .*\]</status>'
- grep -o "${pattern}" "${in_file}" | grep -o '\[.*\]' > "${out_file}" || {
- die "Some parsing grep command has failed."
- }
+ cd "${VPP_DIR}" || die "Change directory command failed."
+ TARGET="$(readlink -f "$1")"
+ mkdir -p "${TARGET}" || die "Directory creation failed."
+ file_list=("output.xml" "log.html" "report.html" "tests")
+ for filename in "${file_list[@]}"; do
+ mv "${ARCHIVE_DIR}/${filename}" "${TARGET}/${filename}" || die
+ done
}
@@ -207,56 +220,37 @@ function select_build () {
}
-function set_aside_commit_build_artifacts () {
+function set_aside_build_artifacts () {
- # Function is copying VPP built artifacts from actual checkout commit for
- # further use and clean git.
+ # Function used to save VPP .deb artifacts from currently finished build.
+ #
+ # After the artifacts are copied to the target directory,
+ # the main git tree is cleaned up to not interfere with next build.
+ #
+ # Arguments:
+ # - ${1} - String to derive the target directory name from. Required.
# Variables read:
# - VPP_DIR - Path to existing directory, parent to accessed directories.
# Directories read:
# - build-root - Existing directory with built VPP artifacts (also DPDK).
# Directories updated:
# - ${VPP_DIR} - A local git repository, parent commit gets checked out.
- # - build_current - Old contents removed, content of build-root copied here.
+ # - build_${1} - Old contents removed, content of build-root copied here.
# Functions called:
# - die - Print to stderr and exit, defined in common.sh
set -exuo pipefail
cd "${VPP_DIR}" || die "Change directory operation failed."
- rm -rf "build_current" || die "Remove operation failed."
- mkdir -p "build_current" || die "Directory creation failed."
- mv "build-root"/*".deb" "build_current"/ || die "Move operation failed."
+ dir_name="build_${1}" || die
+ rm -rf "${dir_name}" || die "Remove operation failed."
+ mkdir -p "${dir_name}" || die "Directory creation failed."
+ mv "build-root"/*".deb" "${dir_name}"/ || die "Move operation failed."
# The previous build could have left some incompatible leftovers,
# e.g. DPDK artifacts of different version (in build/external).
# Also, there usually is a copy of dpdk artifact in build-root.
git clean -dffx "build"/ "build-root"/ || die "Git clean operation failed."
- # Finally, check out the parent commit.
- git checkout HEAD~ || die "Git checkout operation failed."
- # Display any other leftovers.
- git status || die "Git status operation failed."
-}
-
-
-function set_aside_parent_build_artifacts () {
-
- # Function is copying VPP built artifacts from parent checkout commit for
- # further use. Checkout to parent is not part of this function.
- # Variables read:
- # - VPP_DIR - Path to existing directory, parent of accessed directories.
- # Directories read:
- # - build-root - Existing directory with built VPP artifacts (also DPDK).
- # Directories updated:
- # - build_parent - Old directory removed, build-root debs moved here.
- # Functions called:
- # - die - Print to stderr and exit, defined in common.sh
-
- set -exuo pipefail
-
- cd "${VPP_DIR}" || die "Change directory operation failed."
- rm -rf "build_parent" || die "Remove failed."
- mkdir -p "build_parent" || die "Directory creation operation failed."
- mv "build-root"/*".deb" "build_parent"/ || die "Move operation failed."
+ git status || die
}
diff --git a/resources/libraries/bash/function/terraform.sh b/resources/libraries/bash/function/terraform.sh
index ed3bda32aa..2a0e0ed2be 100644
--- a/resources/libraries/bash/function/terraform.sh
+++ b/resources/libraries/bash/function/terraform.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -22,8 +22,7 @@ function terraform_apply () {
#
# Variable read:
# - ${CSIT_DIR} - CSIT main directory, where terraform modules are located.
- # - ${NODENESS} - Node multiplicity of desired testbed.
- # - ${FLAVOR} - Node flavor string, see common.sh
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module directory.
set -exuo pipefail
@@ -32,24 +31,21 @@ function terraform_apply () {
fi
pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!"
- pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!"
+ pushd "${TERRAFORM_MODULE_DIR}" || die "Pushd failed!"
export TF_LOG=INFO
- trap 'terraform_destroy' ERR || {
- die "Trap attempt failed, please cleanup manually. Aborting!"
- }
terraform apply -no-color -auto-approve || die "Terraform apply failed!"
popd || die "Popd failed!"
popd || die "Popd failed!"
}
+
function terraform_destroy () {
# Run terraform destroy command to prepare module.
#
# Variable read:
# - ${CSIT_DIR} - CSIT main directory, where terraform modules are located.
- # - ${NODENESS} - Node multiplicity of desired testbed.
- # - ${FLAVOR} - Node flavor string, see common.sh
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module directory.
set -exuo pipefail
@@ -58,7 +54,7 @@ function terraform_destroy () {
fi
pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!"
- pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!"
+ pushd "${TERRAFORM_MODULE_DIR}" || die "Pushd failed!"
export TF_LOG=INFO
terraform destroy -auto-approve -no-color || die "Terraform destroy failed!"
popd || die "Popd failed!"
@@ -72,37 +68,100 @@ function terraform_init () {
#
# Variable read:
# - ${CSIT_DIR} - CSIT main directory, where terraform modules are located.
- # - ${NODENESS} - Node multiplicity of desired testbed.
- # - ${FLAVOR} - Node flavor string, see common.sh
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module directory.
set -exuo pipefail
if ! installed terraform; then
- curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
- os="$(lsb_release -cs)" || die "Failed to get OS release!"
- repo="deb [arch=amd64] https://apt.releases.hashicorp.com ${os} main"
- sudo apt-add-repository "${repo}" || die "Failed to add repo!"
- apt update -y
- apt install -y terraform
- #die "Please install terraform!"
+ die "Please install terraform!"
fi
pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!"
- pushd "${NODENESS}_${FLAVOR}_c5n" || die "Pushd failed!"
+ pushd "${TERRAFORM_MODULE_DIR}" || die "Pushd failed!"
- plugin_url="https://github.com/radekg/terraform-provisioner-ansible/"
- plugin_url+="releases/download/v2.5.0/"
- plugin_url+="terraform-provisioner-ansible-linux-amd64_v2.5.0"
- plugin_dir="${HOME}/.terraform.d/plugins/"
- plugin_path+="${plugin_dir}terraform-provisioner-ansible_v2.5.0"
+ #plugin_url="https://github.com/radekg/terraform-provisioner-ansible/"
+ #plugin_url+="releases/download/v2.5.0/"
+ #plugin_url+="terraform-provisioner-ansible-linux-amd64_v2.5.0"
+ #plugin_dir="${HOME}/.terraform.d/plugins/"
+ #plugin_path+="${plugin_dir}terraform-provisioner-ansible_v2.5.0"
- mkdir -p "${plugin_dir}" || die "Failed to create dir!"
- wget -O "${plugin_path}" "${plugin_url}" || die "Failed to download plugin!"
- chmod +x "${plugin_path}" || die "Failed to add execute rights!"
+ #mkdir -p "${plugin_dir}" || die "Failed to create dir!"
+ #wget -O "${plugin_path}" "${plugin_url}" || die "Failed to download plugin!"
+ #chmod +x "${plugin_path}" || die "Failed to add execute rights!"
+ rm -f terraform.tfstate || die "Failed to clear terraform state!"
export TF_LOG=INFO
terraform init || die "Failed to run terraform init!"
+ popd || die "Popd failed!"
+ popd || die "Popd failed!"
+}
+
+function terraform_install () {
+
+ # Install terraform.
+
+ OS_ARCH=$(uname -m) || die "Failed to get arch."
+ case "${OS_ARCH}" in
+ x86_64) architecture="amd64" ;;
+ aarch64) architecture="arm64" ;;
+ esac
+
+ terraform_version="1.4.2/terraform_1.4.2_linux_${architecture}.zip"
+ terraform_url="https://releases.hashicorp.com/terraform"
+ terraform_link="${terraform_url}/${terraform_version}"
+ wget "${terraform_link}" || die "Failed to install Terraform!"
+ unzip "terraform_1.4.2_linux_${architecture}.zip" || {
+ die "Failed to install Terraform!"
+ }
+ mv "terraform" "/usr/local/bin" || die "Failed to install Terraform!"
+ rm "terraform_1.4.2_linux_${architecture}.zip" || {
+ die "Failed to install Terraform!"
+ }
+}
+
+
+function terraform_output () {
+
+ # Run terraform output command to prepare module.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory, where terraform modules are located.
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module directory.
+ # - ${TERRAFORM_OUTPUT_VAR} - Terraform variable to export.
+
+ set -exuo pipefail
+
+ if ! installed terraform; then
+ die "Please install terraform!"
+ fi
+
+ pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!"
+ pushd "${TERRAFORM_MODULE_DIR}" || die "Pushd failed!"
+ TERRAFORM_OUTPUT_VAL=$(terraform output --raw "${TERRAFORM_OUTPUT_VAR}")
+ popd || die "Popd failed!"
+ popd || die "Popd failed!"
+}
+
+
+function terraform_validate () {
+
+ # Run terraform validate command to prepare module.
+ #
+ # Variable read:
+ # - ${CSIT_DIR} - CSIT main directory, where terraform modules are located.
+ # - ${TERRAFORM_MODULE_DIR} - Terraform module directory.
+
+ set -exuo pipefail
+
+ if ! installed terraform; then
+ die "Please install terraform!"
+ fi
+
+ pushd "${CSIT_DIR}"/fdio.infra.terraform || die "Pushd failed!"
+ pushd "${TERRAFORM_MODULE_DIR}" || die "Pushd failed!"
+ export TF_LOG=INFO
+ terraform validate || die "Terraform validate failed!"
popd || die "Popd failed!"
popd || die "Popd failed!"
}
diff --git a/resources/libraries/bash/k8s_setup.sh b/resources/libraries/bash/k8s_setup.sh
deleted file mode 100755
index d1d3a38454..0000000000
--- a/resources/libraries/bash/k8s_setup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -xo pipefail
-
-SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-# Include
-source ${SCRIPT_DIR}/config/defaults
-source ${SCRIPT_DIR}/shell/k8s_utils.sh
-
-trap "k8s_utils.destroy" ERR
-
-case "$1" in
- prepare)
- # Revert any changes made to this host by 'kubeadm init'
- k8s_utils.destroy
- # Sets up the Kubernetes master
- k8s_utils.prepare
- ;;
- deploy_calico)
- # Revert any changes made to this host by 'kubeadm init'
- k8s_utils.destroy
- # Load kernel modules uio/uio_pci_generic
- sudo modprobe uio
- sudo modprobe uio_pci_generic
- sudo modprobe vfio_pci
- # Sets up the Kubernetes master
- k8s_utils.prepare "--pod-network-cidr=192.168.0.0/16"
- # Apply resources
- k8s_utils.calico_deploy ${cfg[K8S_CALICO]}
- # Dump Kubernetes objects ...
- k8s_utils.dump_all
- ;;
- affinity_non_vpp)
- # Set affinity for all non VPP docker containers to CPU 0
- k8s_utils.affinity_non_vpp
- ;;
- destroy)
- # Revert any changes made to this host by 'kubeadm init'
- k8s_utils.destroy
- ;;
- *)
- echo "usage: $0 function"
- echo "function:"
- echo " prepare"
- echo " deploy_calico"
- echo " affinity_non_vpp"
- echo " destroy"
- exit 1
-esac
-shift
-
-echo Kubernetes setup finished
diff --git a/resources/libraries/bash/shell/k8s_utils.sh b/resources/libraries/bash/shell/k8s_utils.sh
deleted file mode 100644
index b96ec8df6c..0000000000
--- a/resources/libraries/bash/shell/k8s_utils.sh
+++ /dev/null
@@ -1,132 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-function k8s_utils.destroy {
- # Destroy existing Kubernetes deployment
- kubectl drain $HOSTNAME --delete-local-data --force --ignore-daemonsets
- kubectl delete node $HOSTNAME
-
- # Revert any changes made to this host by 'kubeadm init' or 'kubeadm join'
- sudo kubeadm reset --force && sudo rm -rf $HOME/.kube || \
- { echo "Failed to reset kubeadm"; exit 1; }
-}
-
-function k8s_utils.prepare {
- # Sets up the Kubernetes master
-
- # Disable swap
- sudo swapoff --all
-
- # Set up the Kubernetes master
- sudo -E kubeadm init --token-ttl 0 ${1} || \
- { echo "Failed to init kubeadm"; exit 1; }
-
- # Make cgroup non-exclusive for CPU and MEM
- sudo cgset -r cpuset.cpu_exclusive=0 /kubepods
- sudo cgset -r cpuset.mem_exclusive=0 /kubepods
-
- rm -rf $HOME/.kube
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
-}
-
-function k8s_utils.taint {
- # Updates the taints
- kubectl taint nodes --all node-role.kubernetes.io/master- || \
- { echo "Failed to taint nodes"; exit 1; }
-}
-
-function k8s_utils.calico_deploy {
- # Calico yaml URL or file
- k8s_calico=$1
-
- # Apply resources
- kubectl apply -f ${k8s_calico} || \
- { echo "Failed to apply ${k8s_calico}"; exit 1; }
-
- # Update the taints
- k8s_utils.taint
-}
-
-function k8s_utils.contiv_vpp_deploy {
- # Contiv yaml URL or file
- k8s_contiv=$1
- k8s_contiv_patch="kubecon.contiv-vpp-yaml-patch.diff"
-
- # Pull the most recent Docker images
- url="https://raw.githubusercontent.com/contiv/vpp/master/k8s/pull-images.sh"
- bash <(curl -s "${url}")
-
- # Apply resources
- wget ${k8s_contiv}
- patch contiv-vpp.yaml -i ${k8s_contiv_patch} -o - | kubectl apply -f - || \
- { echo "Failed to apply Contiv resources"; exit 1; }
- rm contiv-vpp.yaml
-
- # Update the taints
- k8s_utils.taint
-}
-
-function k8s_utils.cri_shim_install {
- # Install the CRI Shim on host
- url"https://raw.githubusercontent.com/contiv/vpp/master/k8s/cri-install.sh"
- sudo su root -c "bash <(curl -s '${url}')"
-}
-
-function k8s_utils.cri_shim_uninstall {
- # Uninstall the CRI Shim on host
- url="https://raw.githubusercontent.com/contiv/vpp/master/k8s/cri-install.sh"
- sudo su root -c "bash <(curl -s '${url}') --uninstall"
-}
-
-function k8s_utils.kube_proxy_install {
- # Installing custom version of Kube-Proxy to enable Kubernetes services
- url="https://raw.githubusercontent.com/contiv/vpp/master/k8s/"
- url+="proxy-install.sh"
- bash <(curl -s "${url}")
-}
-
-function k8s_utils.apply {
- # Resource yaml URL or file
- k8s_resource=$1
-
- # Apply resources
- kubectl apply -f ${k8s_resource} || \
- { echo "Failed to apply ${k8s_resource}"; exit 1; }
-}
-
-function k8s_utils.resource_delete {
- # Resource yaml URL or file
- k8s_resource=$1
-
- # Delete resources
- kubectl delete -f ${k8s_resource} || \
- { echo "Failed to delete ${k8s_resource}"; exit 1; }
-}
-
-function k8s_utils.affinity_non_vpp {
- # Set affinity for all non VPP docker containers to CPU 0
- command='sudo docker ps --format "{{.ID}} {{.Names}}"'
- command+=" | grep -v vpp | cut -d' ' -f1"
- for i in $(${command}); do
- sudo docker update --cpuset-cpus 0 ${i}
- done
-}
-
-function k8s_utils.dump_all {
- # Dumps the kubernetes objects
- kubectl get all --all-namespaces
- kubectl describe nodes
-}
diff --git a/resources/libraries/bash/shell/tc_naming.sh b/resources/libraries/bash/shell/tc_naming.sh
deleted file mode 100644
index f392ad7b9a..0000000000
--- a/resources/libraries/bash/shell/tc_naming.sh
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-set -xeuo pipefail
-
-# This file should be executed from tox, as the assumend working directory
-# is different from where this file is located.
-# This file does not have executable flag nor shebang,
-# to dissuade non-tox callers.
-
-# "set -eu" handles failures from the following two lines.
-BASH_CHECKS_DIR="$(dirname $(readlink -e "${BASH_SOURCE[0]}"))"
-BASH_FUNCTION_DIR="$(readlink -e "${BASH_CHECKS_DIR}/../../function")"
-source "${BASH_FUNCTION_DIR}/common.sh" || {
- echo "Source failed." >&2
- exit 1
-}
-
-# Grep of interest: We want all [0-9]{2,4}B- or IMIX- prefixed.
-# Currently script assumes all variations inside to be part of either
-# auto-generation or not checked at all (VIRL derivates).
-r_grep="([0-9]{2,4}B|IMIX)-"
-# Parse grep of interest (learn path, learn suite, learn testcase name).
-r_parse='(.*)\/(.*).robot.*(([0-9]{2,4}B|IMIX)-.*)'
-
-# CSIT Testcase naming convention rules.
-# https://wiki.fd.io/view/CSIT/csit-test-naming
-# Rules are defined as regular expressions in ordered array and checked in order
-# in a loop, where every iteration is catenated with previous rules. This way we
-# can detect where exactly the naming does not meet criteria and print error
-# from rule string array. This imply that rules are defined in a way of a single
-# string. First rule must start with ^ and last is terminated by $.
-# Rules are written from Left to Right.
-# Bash regular expression logic is used. Once the error is raised the checker is
-# breaked for current Testcase marking the expected fail.
-# One caveat of this solution is that we cannot proceed to check full names now
-# as majority of Testcases does not meet naming criteria.
-s_testc_rules=(
- 'packet size or file size'
- 'core combination'
- 'NIC driver mode'
- 'packet encapsulation on L2 layer'
- 'test type'
- )
-r_testc_rules=(
- '^([[:digit:]]{1,4}B|IMIX)-'
- '([[:digit:]]+c-){0,1}'
- '(avf-|1lbvpplacp-|2lbvpplacp-){0,1}'
- '(eth|dot1q|dot1ad)'
- # TODO: Packet encapsulation (here majority of TC starts failing).
- #'(ip4|ip6|ip6ip6|icmpv4|icmpv6)'
- #'(ipsec[[:digit:]]+tnlhw|ipsec[[:digit:]]+tnlsw|'
- #'srhip6|tcp|udp|lispip6|lispip4|vxlan){0,1}'
- #'(http){0,1}-'
- '(.*)-(scapy|ndrpdr|bps|cps|rps|reconf)$'
- )
-s_suite_rules=(
- 'number of SUT nodes'
- 'NIC card'
- 'NIC driver mode'
- 'packet encapsulation on L2 layer'
- 'test type'
- )
-r_suite_rules=(
- '^(2n1l|2n){0,1}-'
- '(eth2p|10ge2p1x710)-'
- '(avf-|1lbvpplacp-|2lbvpplacp-){0,1}'
- '(eth|dot1q|dot1ad)'
- # TODO: Packet encapsulation (here majority of TC starts failing).
- #'(ip4|ip6|ip6ip6|icmpv4|icmpv6)'
- #'(ipsec[[:digit:]]+tnlhw|ipsec[[:digit:]]+tnlsw|'
- #'srhip6|tcp|udp|lispip6|lispip4|vxlan){0,1}'
- #'(http){0,1}-'
- '(.*)-(scapy|ndrpdr|bps|cps|rps|reconf)$'
- )
-
-rm -f "tc_naming.log" || die
-
-# Disabling -x: Following lines are doing too much garbage output.
-set +x
-
-# Grep interest.
-grep_match=$(grep -RE "${r_grep}" tests/*) || die
-# Extract data from the grep output.
-suites_dirs=($(printf "${grep_match}" | sed -re "s/${r_parse}/\1/")) || die
-suites_names=($(printf "${grep_match}" | sed -re "s/${r_parse}/\2/")) || die
-testcases_names=($(printf "${grep_match}" | sed -re "s/${r_parse}/\3/")) || die
-
-# Naming check.
-total_failed_tc=0
-total_failed_su=0
-for idx in "${!testcases_names[@]}"; do
- for pass in "${!r_suite_rules[@]}"; do
- r_rule=$(printf '%s' "${r_suite_rules[@]:1:pass}")
- if [[ ! "${suites_names[idx]}" =~ ${r_rule} ]]; then
- msg=""
- msg+="${suites_dirs[idx]}/${suites_names[idx]} / "
- msg+="${testcases_names[idx]} ${s_suite_rules[pass]} "
- msg+="is not matching suite naming rule!"
- echo "${msg}" | tee -a "tc_naming.log" || die
- total_failed_su=$((total_failed_su + 1))
- break
- fi
- done
- for pass in "${!r_testc_rules[@]}"; do
- r_rule=$(printf '%s' "${r_testc_rules[@]:1:pass}")
- if [[ ! "${testcases_names[idx]}" =~ ${r_rule} ]]; then
- msg=""
- msg+="${suites_dirs[idx]}/${suites_names[idx]} / "
- msg+="${testcases_names[idx]} ${s_testc_rules[pass]} "
- msg+="is not matching testcase naming rule!"
- echo "${msg}" | tee -a "tc_naming.log" || die
- total_failed_tc=$((total_failed_tc + 1))
- break
- fi
- done
-done
-
-set -x
-
-if [ $((total_failed_tc + total_failed_su)) != "0" ]; then
- warn
- warn "Testcase naming checker: FAIL"
- exit 1
-fi
-
-warn
-warn "Testcase naming checker: PASS"
diff --git a/resources/libraries/python/Constants.py b/resources/libraries/python/Constants.py
index 6de8cb3814..70452e6ff4 100644
--- a/resources/libraries/python/Constants.py
+++ b/resources/libraries/python/Constants.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -39,7 +39,7 @@ def get_str_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: str
"""
- prefixes = (u"FDIO_CSIT_", u"CSIT_", u"")
+ prefixes = ("FDIO_CSIT_", "CSIT_", "")
if not isinstance(env_var_names, (list, tuple)):
env_var_names = [env_var_names]
for name in env_var_names:
@@ -62,7 +62,7 @@ def get_int_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: int
"""
- env_str = get_str_from_env(env_var_names, u"")
+ env_str = get_str_from_env(env_var_names, "")
try:
return int(env_str)
except ValueError:
@@ -81,7 +81,7 @@ def get_float_from_env(env_var_names, default_value):
:returns: The value read, or default value.
:rtype: float
"""
- env_str = get_str_from_env(env_var_names, u"")
+ env_str = get_str_from_env(env_var_names, "")
try:
return float(env_str)
except ValueError:
@@ -98,8 +98,8 @@ def get_pessimistic_bool_from_env(env_var_names):
:returns: The value read, or False.
:rtype: bool
"""
- env_str = get_str_from_env(env_var_names, u"").lower()
- return bool(env_str in (u"true", u"yes", u"y", u"1"))
+ env_str = get_str_from_env(env_var_names, "").lower()
+ return bool(env_str in ("true", "yes", "y", "1"))
def get_optimistic_bool_from_env(env_var_names):
@@ -112,54 +112,54 @@ def get_optimistic_bool_from_env(env_var_names):
:returns: The value read, or True.
:rtype: bool
"""
- env_str = get_str_from_env(env_var_names, u"").lower()
- return bool(env_str not in (u"false", u"no", u"n", u"0"))
+ env_str = get_str_from_env(env_var_names, "").lower()
+ return bool(env_str not in ("false", "no", "n", "0"))
class Constants:
"""Constants used in CSIT."""
+ # Version for CSIT data model. See docs/model/.
+ MODEL_VERSION = "1.5.1"
+
+ # Global off-switch in case JSON export is large or slow.
+ EXPORT_JSON = get_optimistic_bool_from_env("EXPORT_JSON")
+
# OpenVPP testing directory location at topology nodes
- REMOTE_FW_DIR = u"/tmp/openvpp-testing"
+ REMOTE_FW_DIR = "/tmp/openvpp-testing"
# shell scripts location
- RESOURCES_LIB_SH = u"resources/libraries/bash"
+ RESOURCES_LIB_SH = "resources/libraries/bash"
# python scripts location
- RESOURCES_LIB_PY = u"resources/libraries/python"
+ RESOURCES_LIB_PY = "resources/libraries/python"
# shell scripts location
- RESOURCES_TOOLS = u"resources/tools"
+ RESOURCES_TOOLS = "resources/tools"
# Python API provider location
- RESOURCES_PAPI_PROVIDER = u"resources/tools/papi/vpp_papi_provider.py"
+ RESOURCES_PAPI_PROVIDER = "resources/tools/papi/vpp_papi_provider.py"
# Templates location
- RESOURCES_TPL = u"resources/templates"
-
- # vat templates location
- RESOURCES_TPL_VAT = u"resources/templates/vat"
+ RESOURCES_TPL = "resources/templates"
# Kubernetes templates location
- RESOURCES_TPL_K8S = u"resources/templates/kubernetes"
+ RESOURCES_TPL_K8S = "resources/templates/kubernetes"
# Container templates location
- RESOURCES_TPL_CONTAINER = u"resources/templates/container"
+ RESOURCES_TPL_CONTAINER = "resources/templates/container"
# VPP Communications Library templates location
- RESOURCES_TPL_VCL = u"resources/templates/vcl"
+ RESOURCES_TPL_VCL = "resources/templates/vcl"
# VPP Communications Library templates location
- RESOURCES_TPL_TELEMETRY = u"resources/templates/telemetry"
+ RESOURCES_TPL_TELEMETRY = "resources/templates/telemetry"
# VPP Communications Library LD_PRELOAD library
- VCL_LDPRELOAD_LIBRARY = u"/usr/lib/x86_64-linux-gnu/libvcl_ldpreload.so"
-
- # OpenVPP VAT binary name
- VAT_BIN_NAME = u"vpp_api_test"
+ VCL_LDPRELOAD_LIBRARY = "/usr/lib/x86_64-linux-gnu/libvcl_ldpreload.so"
# VPP service unit name
- VPP_UNIT = u"vpp"
+ VPP_UNIT = "vpp"
# Number of system CPU cores.
CPU_CNT_SYSTEM = 1
@@ -168,233 +168,371 @@ class Constants:
CPU_CNT_MAIN = 1
# QEMU binary path
- QEMU_BIN_PATH = u"/usr/bin"
+ QEMU_BIN_PATH = "/usr/bin"
# QEMU VM kernel image path
- QEMU_VM_KERNEL = u"/opt/boot/vmlinuz"
+ QEMU_VM_KERNEL = "/opt/boot/vmlinuz"
# QEMU VM kernel initrd path
- QEMU_VM_KERNEL_INITRD = u"/opt/boot/initrd.img"
+ QEMU_VM_KERNEL_INITRD = "/opt/boot/initrd.img"
# QEMU VM nested image path
- QEMU_VM_IMAGE = u"/var/lib/vm/image.iso"
+ QEMU_VM_IMAGE = "/var/lib/vm/image.iso"
# QEMU VM DPDK path
- QEMU_VM_DPDK = u"/opt/dpdk-21.08"
+ QEMU_VM_DPDK = "/opt/dpdk-23.11"
# Docker container SUT image
- DOCKER_SUT_IMAGE_UBUNTU = u"csit_sut-ubuntu2004:local"
+ DOCKER_SUT_IMAGE_UBUNTU = "csit_sut-ubuntu2204:local"
# Docker container arm SUT image
- DOCKER_SUT_IMAGE_UBUNTU_ARM = u"csit_sut-ubuntu2004:local"
+ DOCKER_SUT_IMAGE_UBUNTU_ARM = "csit_sut-ubuntu2204:local"
- # TRex install directory
- TREX_INSTALL_DIR = u"/opt/trex-core-2.88"
+ # TRex install directory.
+ TREX_INSTALL_DIR = "/opt/trex-core-3.03"
- # TRex pcap files directory
+ # TRex pcap files directory.
TREX_PCAP_DIR = f"{TREX_INSTALL_DIR}/scripts/avl"
# TRex limit memory.
- TREX_LIMIT_MEMORY = get_int_from_env(u"TREX_LIMIT_MEMORY", 8192)
+ TREX_LIMIT_MEMORY = get_int_from_env("TREX_LIMIT_MEMORY", 8192)
- # TRex number of cores
- TREX_CORE_COUNT = get_int_from_env(u"TREX_CORE_COUNT", 8)
+ # TRex limit memory in case multiple dual interfaces configurations.
+ TREX_LIMIT_MEMORY_MULTI = get_int_from_env("TREX_LIMIT_MEMORY_MULTI", 16384)
- # TRex set number of RX/TX descriptors
- # Set to 0 to use default values
+ # TRex number of cores.
+ TREX_CORE_COUNT = get_int_from_env("TREX_CORE_COUNT", 16)
+
+ # TRex number of cores in case multiple dual interface configurations.
+ TREX_CORE_COUNT_MULTI = get_int_from_env("TREX_CORE_COUNT_MULTI", 8)
+
+ # TRex set number of RX/TX descriptors.
+ # Set to 0 to use default values.
TREX_TX_DESCRIPTORS_COUNT = get_int_from_env(
- u"TREX_TX_DESCRIPTORS_COUNT", 0
+ "TREX_TX_DESCRIPTORS_COUNT", 0
)
+
TREX_RX_DESCRIPTORS_COUNT = get_int_from_env(
- u"TREX_RX_DESCRIPTORS_COUNT", 0
+ "TREX_RX_DESCRIPTORS_COUNT", 0
)
- # Trex force start regardless ports state
- TREX_SEND_FORCE = get_pessimistic_bool_from_env(u"TREX_SEND_FORCE")
+ # Trex force start regardless ports state.
+ TREX_SEND_FORCE = get_pessimistic_bool_from_env("TREX_SEND_FORCE")
- # TRex extra commandline arguments
+ # TRex extra commandline arguments.
TREX_EXTRA_CMDLINE = get_str_from_env(
- u"TREX_EXTRA_CMDLINE", u"--mbuf-factor 32")
+ "TREX_EXTRA_CMDLINE", "--mbuf-factor 32"
+ )
+
+ # TRex port driver default vfio-pci or set to igb_uio.
+ TREX_PORT_DRIVER = get_str_from_env(
+ "TREX_PORT_DRIVER", "vfio-pci"
+ )
- # graph node variant value
- GRAPH_NODE_VARIANT = get_str_from_env(
- u"GRAPH_NODE_VARIANT", u"")
+ # Graph node variant value
+ GRAPH_NODE_VARIANT = get_str_from_env("GRAPH_NODE_VARIANT", "")
+
+ # Default memory page size in case multiple configured in system
+ DEFAULT_HUGEPAGE_SIZE = get_str_from_env("DEFAULT_HUGEPAGE_SIZE", "2M")
# Sysctl kernel.core_pattern
- KERNEL_CORE_PATTERN = u"/tmp/%p-%u-%g-%s-%t-%h-%e.core"
+ KERNEL_CORE_PATTERN = "/tmp/%p-%u-%g-%s-%t-%h-%e.core"
# Core dump directory
- CORE_DUMP_DIR = u"/tmp"
+ CORE_DUMP_DIR = "/tmp"
# Perf stat events (comma separated).
PERF_STAT_EVENTS = get_str_from_env(
- u"PERF_STAT_EVENTS",
- u"cpu-clock,context-switches,cpu-migrations,page-faults,"
- u"cycles,instructions,branches,branch-misses,L1-icache-load-misses")
+ "PERF_STAT_EVENTS",
+ "cpu-clock,context-switches,cpu-migrations,page-faults,"
+ "cycles,instructions,branches,branch-misses,L1-icache-load-misses")
# Equivalent to ~0 used in vpp code
BITWISE_NON_ZERO = 0xffffffff
# Default path to VPP API socket.
- SOCKSVR_PATH = u"/run/vpp/api.sock"
+ SOCKSVR_PATH = "/run/vpp/api.sock"
+
+ # Default path to VPP CLI socket.
+ SOCKCLI_PATH = "/run/vpp/cli.sock"
+
+ # Default path to VPP API Stats socket.
+ SOCKSTAT_PATH = "/run/vpp/stats.sock"
+
+ # This MTU value is used to force VPP to fragment 1518B packet into two.
+ MTU_FOR_FRAGMENTATION = 1043
# Number of trials to execute in MRR test.
- PERF_TRIAL_MULTIPLICITY = get_int_from_env(u"PERF_TRIAL_MULTIPLICITY", 10)
+ PERF_TRIAL_MULTIPLICITY = get_int_from_env("PERF_TRIAL_MULTIPLICITY", 10)
# Duration [s] of one trial in MRR test.
- PERF_TRIAL_DURATION = get_float_from_env(u"PERF_TRIAL_DURATION", 1.0)
+ PERF_TRIAL_DURATION = get_float_from_env("PERF_TRIAL_DURATION", 1.0)
# Whether to use latency streams in main search trials.
- PERF_USE_LATENCY = get_pessimistic_bool_from_env(u"PERF_USE_LATENCY")
+ PERF_USE_LATENCY = get_pessimistic_bool_from_env("PERF_USE_LATENCY")
# Duration of one latency-specific trial in NDRPDR test.
PERF_TRIAL_LATENCY_DURATION = get_float_from_env(
- u"PERF_TRIAL_LATENCY_DURATION", 5.0)
+ "PERF_TRIAL_LATENCY_DURATION", 5.0)
# For some testbeds TG takes longer than usual to start sending traffic.
# This constant [s] allows longer wait, without affecting
# the approximate duration. For example, use 0.098 for AWS.
- PERF_TRIAL_STL_DELAY = get_float_from_env(u"PERF_TRIAL_STL_DELAY", 0.0)
+ PERF_TRIAL_STL_DELAY = get_float_from_env("PERF_TRIAL_STL_DELAY", 0.0)
# ASTF usually needs a different value for the delay.
PERF_TRIAL_ASTF_DELAY = get_float_from_env(
- u"PERF_TRIAL_ASTF_DELAY", 0.112
+ "PERF_TRIAL_ASTF_DELAY", 0.112
)
+ # Number of data frames in TPUT transaction, used both by TCP and UDP.
+ # The value should be 33 to keep historic continuity for UDP TPUT tests,
+ # but we are limited by TRex window of 48 KiB, so for 9000B tests
+ # it means we can send only 5 full data frames in a burst.
+ # https://github.com/cisco-system-traffic-generator/
+ # trex-core/blob/v2.88/src/44bsd/tcp_var.h#L896-L903
+ ASTF_N_DATA_FRAMES = get_int_from_env("ASTF_N_DATA_FRAMES", 5)
+
# Extended debug (incl. vpp packet trace, linux perf stat, ...).
# Full list is available as suite variable (__init__.robot) or is
# override by test.
- EXTENDED_DEBUG = get_pessimistic_bool_from_env(u"EXTENDED_DEBUG")
+ EXTENDED_DEBUG = get_pessimistic_bool_from_env("EXTENDED_DEBUG")
# UUID string of DUT1 /tmp volume created outside of the
# DUT1 docker in case of vpp-device test. ${EMPTY} value means that
# /tmp directory is inside the DUT1 docker.
- DUT1_UUID = get_str_from_env(u"DUT1_UUID", u"")
-
- # Default path to VPP API Stats socket.
- SOCKSTAT_PATH = u"/run/vpp/stats.sock"
+ DUT1_UUID = get_str_from_env("DUT1_UUID", "")
# Global "kill switch" for CRC checking during runtime.
FAIL_ON_CRC_MISMATCH = get_pessimistic_bool_from_env(
- u"FAIL_ON_CRC_MISMATCH"
+ "FAIL_ON_CRC_MISMATCH"
)
# Default IP4 prefix length (if not defined in topology file)
- DEFAULT_IP4_PREFIX_LENGTH = u"24"
+ DEFAULT_IP4_PREFIX_LENGTH = "24"
# Maximum number of interfaces in a data path
DATAPATH_INTERFACES_MAX = 100
# Mapping from NIC name to its bps limit.
NIC_NAME_TO_BPS_LIMIT = {
- u"Intel-X520-DA2": 10000000000,
- u"Intel-X553": 10000000000,
- u"Intel-X710": 10000000000,
- u"Intel-XL710": 24500000000,
- u"Intel-XXV710": 24500000000,
- u"Intel-E810CQ": 100000000000,
- u"Mellanox-CX556A": 100000000000,
- u"Amazon-Nitro-50G": 10000000000,
- u"virtual": 100000000,
+ "Intel-X520-DA2": 10000000000,
+ "Intel-X710": 10000000000,
+ "Intel-XL710": 24500000000,
+ "Intel-XXV710": 24500000000,
+ "Intel-E810XXV": 24500000000,
+ "Intel-E822CQ": 24500000000,
+ "Intel-E823C": 24500000000,
+ "Intel-E810CQ": 100000000000,
+ "Mellanox-CX556A": 100000000000,
+ "Mellanox-CX6DX": 100000000000,
+ "Mellanox-CX7VEAT": 200000000000,
+ "Amazon-Nitro-50G": 10000000000,
+ "Amazon-Nitro-100G": 10000000000,
+ "Amazon-Nitro-200G": 16000000000,
+ "virtual": 100000000,
}
# Mapping from NIC name to its pps limit.
NIC_NAME_TO_PPS_LIMIT = {
- u"Intel-X520-DA2": 14880952,
- u"Intel-X553": 14880952,
- u"Intel-X710": 14880952,
- u"Intel-XL710": 18750000,
- u"Intel-XXV710": 18750000,
- u"Intel-E810CQ": 58500000,
- # 2n-clx testbeds show duration stretching on high rates,
- # depending on encapsulation TRex has to generate.
- # 40 Mpps is still too much for dot1q (~8% stretching).
- # 36 Mpps is around the maximal VPP throughput (l2patch 4c8t).
- # Vxlan traffic will still show stretching at 36 Mpps (>12%),
- # but we do not care about those tests that much.
- u"Mellanox-CX556A": 36000000, # 148809523,
- u"Amazon-Nitro-50G": 1200000,
- u"virtual": 14880952,
+ "Intel-X520-DA2": 14880952,
+ "Intel-X710": 14880952,
+ "Intel-XL710": 18750000,
+ "Intel-XXV710": 18750000,
+ "Intel-E810XXV": 29000000,
+ "Intel-E822CQ": 29000000,
+ "Intel-E823C": 29000000,
+ "Intel-E810CQ": 58500000,
+ "Mellanox-CX556A": 148809523,
+ "Mellanox-CX6DX": 148809523,
+ "Mellanox-CX7VEAT": 297619046,
+ "Amazon-Nitro-50G": 1500000,
+ "Amazon-Nitro-100G": 3000000,
+ "Amazon-Nitro-200G": 6000000,
+ "virtual": 14880952,
}
# Suite file names use codes for NICs.
NIC_NAME_TO_CODE = {
- u"Intel-X520-DA2": u"10ge2p1x520",
- u"Intel-X553": u"10ge2p1x553",
- u"Intel-X710": u"10ge2p1x710",
- u"Intel-XL710": u"40ge2p1xl710",
- u"Intel-XXV710": u"25ge2p1xxv710",
- u"Intel-E810CQ": u"100ge2p1e810cq",
- u"Amazon-Nitro-50G": u"50ge1p1ENA",
- u"Mellanox-CX556A": u"100ge2p1cx556a",
+ "Intel-X520-DA2": "10ge2p1x520",
+ "Intel-X710": "10ge2p1x710",
+ "Intel-XL710": "40ge2p1xl710",
+ "Intel-XXV710": "25ge2p1xxv710",
+ "Intel-E810XXV": "25ge2p1e810xxv",
+ "Intel-E822CQ": "25ge2p1e822cq",
+ "Intel-E823C": "25ge2p1e823c",
+ "Intel-E810CQ": "100ge2p1e810cq",
+ "Amazon-Nitro-50G": "50ge1p1ena",
+ "Amazon-Nitro-100G": "100ge1p1ena",
+ "Amazon-Nitro-200G": "200ge1p1ena",
+ "Mellanox-CX556A": "100ge2p1cx556a",
+ "Mellanox-CX6DX": "100ge2p1cx6dx",
+ "Mellanox-CX7VEAT": "200ge2p1cx7veat",
+ "Mellanox-CX7VEAT": "200ge6p3cx7veat",
+ "virtual": "1ge1p82540em",
+ }
+ NIC_CODE_TO_NAME = {
+ "10ge2p1x520": "Intel-X520-DA2",
+ "10ge2p1x710": "Intel-X710",
+ "40ge2p1xl710": "Intel-XL710",
+ "25ge2p1xxv710": "Intel-XXV710",
+ "25ge2p1e810xxv": "Intel-E810XXV",
+ "25ge2p1e822cq": "Intel-E822CQ",
+ "25ge2p1e823c": "Intel-E823C",
+ "100ge2p1e810cq": "Intel-E810CQ",
+ "50ge1p1ena": "Amazon-Nitro-50G",
+ "100ge1p1ena": "Amazon-Nitro-100G",
+ "200ge1p1ena": "Amazon-Nitro-200G",
+ "100ge2p1cx556a": "Mellanox-CX556A",
+ "100ge2p1cx6dx": "Mellanox-CX6DX",
+ "200ge2p1cx7veat": "Mellanox-CX7VEAT",
+ "200ge6p3cx7veat": "Mellanox-CX7VEAT",
+ "1ge1p82540em": "virtual",
+ }
+
+ # Shortened lowercase NIC model name, useful for presentation.
+ NIC_CODE_TO_SHORT_NAME = {
+ "10ge2p1x520": "x520",
+ "10ge2p1x710": "x710",
+ "40ge2p1xl710": "xl710",
+ "25ge2p1xxv710": "xxv710",
+ "25ge2p1e810xxv": "e810xxv",
+ "25ge2p1e822cq": "e822cq",
+ "25ge2p1e823c": "e823c",
+ "100ge2p1e810cq": "e810cq",
+ "50ge1p1ena": "ena",
+ "100ge1p1ena": "ena100",
+ "200ge1p1ena": "ena200",
+ "100ge2p1cx556a": "cx556a",
+ "100ge2p1cx6dx": "cx6dx",
+ "200ge2p1cx7veat": "cx7veat",
+ "200ge6p3cx7veat": "cx7veat",
+ "1ge1p82540em": "82540em",
}
# Not each driver is supported by each NIC.
NIC_NAME_TO_DRIVER = {
- u"Intel-X520-DA2": [u"vfio-pci", u"af_xdp"],
- u"Intel-X553": [u"vfio-pci", u"af_xdp"],
- u"Intel-X710": [u"vfio-pci", u"avf", u"af_xdp"],
- u"Intel-XL710": [u"vfio-pci", u"avf", u"af_xdp"],
- u"Intel-XXV710": [u"vfio-pci", u"avf", u"af_xdp"],
- u"Intel-E810CQ": [u"vfio-pci", u"avf", u"af_xdp"],
- u"Amazon-Nitro-50G": [u"vfio-pci"],
- u"Mellanox-CX556A": [u"rdma-core", u"af_xdp"],
+ "Intel-X520-DA2": ["vfio-pci", "af_xdp"],
+ "Intel-X710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-XL710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-XXV710": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E810XXV": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E822CQ": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E823C": ["vfio-pci", "avf", "af_xdp"],
+ "Intel-E810CQ": ["vfio-pci", "avf", "af_xdp"],
+ "Amazon-Nitro-50G": ["vfio-pci"],
+ "Amazon-Nitro-100G": ["vfio-pci"],
+ "Amazon-Nitro-200G": ["vfio-pci"],
+ "Mellanox-CX556A": ["rdma-core", "mlx5_core", "af_xdp"],
+ "Mellanox-CX6DX": ["rdma-core", "mlx5_core", "af_xdp"],
+ "Mellanox-CX7VEAT": ["rdma-core", "mlx5_core", "af_xdp"],
+ "virtual": ["vfio-pci"],
}
- # Each driver needs different prugin to work.
+ # Each driver needs different plugin to work.
NIC_DRIVER_TO_PLUGINS = {
- u"vfio-pci": u"dpdk_plugin.so",
- u"avf": u"avf_plugin.so",
- u"rdma-core": u"rdma_plugin.so",
- u"af_xdp": u"af_xdp_plugin.so",
+ "vfio-pci": "dpdk_plugin.so",
+ "avf": "avf_plugin.so",
+ "rdma-core": "rdma_plugin.so",
+ "mlx5_core": "dpdk_plugin.so",
+ "af_xdp": "af_xdp_plugin.so",
}
# Tags to differentiate tests for different NIC driver.
NIC_DRIVER_TO_TAG = {
- u"vfio-pci": u"DRV_VFIO_PCI",
- u"avf": u"DRV_AVF",
- u"rdma-core": u"DRV_RDMA_CORE",
- u"af_xdp": u"DRV_AF_XDP",
+ "vfio-pci": "DRV_VFIO_PCI",
+ "avf": "DRV_AVF",
+ "rdma-core": "DRV_RDMA_CORE",
+ "mlx5_core": "DRV_MLX5_CORE",
+ "af_xdp": "DRV_AF_XDP",
}
# Suite names have to be different, add prefix.
NIC_DRIVER_TO_SUITE_PREFIX = {
- u"vfio-pci": u"",
- u"avf": u"avf-",
- u"rdma-core": u"rdma-",
- u"af_xdp": u"af-xdp-",
+ "vfio-pci": "",
+ "avf": "avf-",
+ "rdma-core": "rdma-",
+ "mlx5_core": "mlx5-",
+ "af_xdp": "af-xdp-",
}
# Number of virtual functions of physical nic.
NIC_DRIVER_TO_VFS = {
- u"vfio-pci": u"nic_vfs}= | 0",
- u"avf": u"nic_vfs}= | 1",
- u"rdma-core": u"nic_vfs}= | 0",
- u"af_xdp": u"nic_vfs}= | 0",
+ "vfio-pci": "nic_vfs}= | 0",
+ "avf": "nic_vfs}= | 1",
+ "rdma-core": "nic_vfs}= | 0",
+ "mlx5_core": "nic_vfs}= | 0",
+ "af_xdp": "nic_vfs}= | 0",
+ }
+
+ # Number of physical interfaces of physical nic.
+ NIC_CODE_TO_PFS = {
+ "10ge2p1x520": "nic_pfs}= | 2",
+ "10ge2p1x710": "nic_pfs}= | 2",
+ "40ge2p1xl710": "nic_pfs}= | 2",
+ "25ge2p1xxv710": "nic_pfs}= | 2",
+ "25ge2p1e810xxv": "nic_pfs}= | 2",
+ "25ge2p1e822cq": "nic_pfs}= | 2",
+ "25ge2p1e823c": "nic_pfs}= | 2",
+ "100ge2p1e810cq": "nic_pfs}= | 2",
+ "50ge1p1ena": "nic_pfs}= | 2",
+ "100ge1p1ena": "nic_pfs}= | 2",
+ "200ge1p1ena": "nic_pfs}= | 2",
+ "100ge2p1cx556a": "nic_pfs}= | 2",
+ "100ge2p1cx6dx": "nic_pfs}= | 2",
+ "200ge2p1cx7veat": "nic_pfs}= | 2",
+ "200ge6p3cx7veat": "nic_pfs}= | 6",
+ "1ge1p82540em": "nic_pfs}= | 2",
+ }
+
+ NIC_CODE_TO_CORESCALE = {
+ "10ge2p1x520": 1,
+ "10ge2p1x710": 1,
+ "40ge2p1xl710": 1,
+ "25ge2p1xxv710": 1,
+ "25ge2p1e810xxv": 1,
+ "25ge2p1e822cq": 1,
+ "25ge2p1e823c": 1,
+ "100ge2p1e810cq": 1,
+ "50ge1p1ena": 1,
+ "100ge1p1ena": 1,
+ "200ge1p1ena": 1,
+ "100ge2p1cx556a": 1,
+ "100ge2p1cx6dx": 1,
+ "200ge2p1cx7veat": 1,
+ "200ge6p3cx7veat": 3,
+ "1ge1p82540em": 1,
}
# Not each driver is supported by each NIC.
DPDK_NIC_NAME_TO_DRIVER = {
- u"Intel-X520-DA2": [u"vfio-pci"],
- u"Intel-X553": [u"vfio-pci"],
- u"Intel-X710": [u"vfio-pci"],
- u"Intel-XL710": [u"vfio-pci"],
- u"Intel-XXV710": [u"vfio-pci"],
- u"Intel-E810CQ": [u"vfio-pci"],
- u"Amazon-Nitro-50G": [u"vfio-pci"],
- u"Mellanox-CX556A": [u"mlx5_core"],
+ "Intel-X520-DA2": ["vfio-pci"],
+ "Intel-X710": ["vfio-pci"],
+ "Intel-XL710": ["vfio-pci"],
+ "Intel-XXV710": ["vfio-pci"],
+ "Intel-E810XXV": ["vfio-pci"],
+ "Intel-E822CQ": ["vfio-pci"],
+ "Intel-E823C": ["vfio-pci"],
+ "Intel-E810CQ": ["vfio-pci"],
+ "Amazon-Nitro-50G": ["vfio-pci"],
+ "Amazon-Nitro-100G": ["vfio-pci"],
+ "Amazon-Nitro-200G": ["vfio-pci"],
+ "Mellanox-CX556A": ["mlx5_core"],
+ "Mellanox-CX6DX": ["mlx5_core"],
+ "Mellanox-CX7VEAT": ["mlx5_core"],
+ "virtual": ["vfio-pci"],
}
# Tags to differentiate tests for different NIC driver.
DPDK_NIC_DRIVER_TO_TAG = {
- u"vfio-pci": u"DRV_VFIO_PCI",
- u"mlx5_core": u"DRV_MLX5_CORE",
+ "vfio-pci": "DRV_VFIO_PCI",
+ "mlx5_core": "DRV_MLX5_CORE",
}
# Suite names have to be different, add prefix.
DPDK_NIC_DRIVER_TO_SUITE_PREFIX = {
- u"vfio-pci": u"",
- u"mlx5_core": u"mlx5-",
+ "vfio-pci": "",
+ "mlx5_core": "mlx5-",
}
# Some identifiers constructed from suite names
@@ -410,39 +548,42 @@ class Constants:
# TODO CSIT-1481: Crypto HW should be read from topology file instead.
NIC_NAME_TO_CRYPTO_HW = {
- u"Intel-X553": u"HW_C3xxx",
- u"Intel-X710": u"HW_DH895xcc",
- u"Intel-XL710": u"HW_DH895xcc",
+ "Intel-E810CQ": "HW_4xxx",
+ "Intel-E822CQ": "HW_C4xxx",
+ "Intel-E823C": "HW_C4xxx",
+ "Intel-X710": "HW_DH895xcc",
+ "Intel-XL710": "HW_DH895xcc",
}
DEVICE_TYPE_TO_KEYWORD = {
- u"scapy": None
+ "scapy": None
}
PERF_TYPE_TO_KEYWORD = {
- u"mrr": u"Traffic should pass with maximum rate",
- u"ndrpdr": u"Find NDR and PDR intervals using optimized search",
- u"soak": u"Find critical load using PLRsearch",
+ "mrr": "Traffic should pass with maximum rate",
+ "ndrpdr": "Find NDR and PDR intervals using optimized search",
+ "soak": "Find critical load using PLRsearch",
}
PERF_TYPE_TO_SUITE_DOC_VER = {
- u"mrr": u'''fication:* In MaxReceivedRate tests TG sends traffic\\
-| ... | at line rate and reports total received packets over trial period.\\''',
- u"ndrpdr": u'''ication:* TG finds and reports throughput NDR (Non Drop\\
-| ... | Rate) with zero packet loss tolerance and throughput PDR (Partial Drop\\
-| ... | Rate) with non-zero packet loss tolerance (LT) expressed in percentage\\
-| ... | of packets transmitted. NDR and PDR are discovered for different\\
-| ... | Ethernet L2 frame sizes using MLRsearch library.\\''',
- u"soak": u'''fication:* TG sends traffic at dynamically computed\\
-| ... | rate as PLRsearch algorithm gathers data and improves its estimate\\
-| ... | of a rate at which a prescribed small fraction of packets\\
-| ... | would be lost. After set time, the serarch stops\\
-| ... | and the algorithm reports its current estimate.\\''',
+ "mrr": u'''fication:** In MaxReceivedRate tests TG sends traffic at \\
+| ... | line rate and reports total received packets over trial period. \\''',
+ "ndrpdr": u'''rification:** TG finds and reports throughput NDR (Non \\
+| ... | Drop Rate) with zero packet loss tolerance and throughput PDR \\
+| ... | (Partial Drop Rate) with non-zero packet loss tolerance (LT) \\
+| ... | expressed in percentage of packets transmitted. NDR and PDR are \\
+| ... | discovered for different Ethernet L2 frame sizes using MLRsearch \\
+| ... | library.''',
+ "soak": u'''rification:** TG sends traffic at dynamically computed \\
+| ... | rate as PLRsearch algorithm gathers data and improves its estimate \\
+| ... | of a rate at which a prescribed small fraction of packets \\
+| ... | would be lost. After set time, the serarch stops \\
+| ... | and the algorithm reports its current estimate. \\''',
}
PERF_TYPE_TO_TEMPLATE_DOC_VER = {
- u"mrr": u'''Measure MaxReceivedRate for ${frame_size}B frames\\
-| | ... | using burst trials throughput test.\\''',
- u"ndrpdr": u"Measure NDR and PDR values using MLRsearch algorithm.\\",
- u"soak": u"Estimate critical rate using PLRsearch algorithm.\\",
+ "mrr": u'''Measure MaxReceivedRate for ${frame_size}B frames \\
+| | ... | using burst trials throughput test. \\''',
+ "ndrpdr": "Measure NDR and PDR values using MLRsearch algorithm.",
+ "soak": "Estimate critical rate using PLRsearch algorithm. \\",
}
diff --git a/resources/libraries/python/ContainerUtils.py b/resources/libraries/python/ContainerUtils.py
index 75acf0027a..fc32248f6b 100644
--- a/resources/libraries/python/ContainerUtils.py
+++ b/resources/libraries/python/ContainerUtils.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -205,8 +205,8 @@ class ContainerManager:
dut_cnt = len(
Counter(
[
- self.containers[container].node[u"host"]
- for container in self.containers
+ f"{container.node['host']}{container.node['port']}"
+ for container in self.containers.values()
]
)
)
@@ -256,6 +256,11 @@ class ContainerManager:
self._configure_vpp_chain_ipsec(
mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
guest_dir=guest_dir, nf_instance=idx, **kwargs)
+ elif chain_topology == u"chain_dma":
+ self._configure_vpp_chain_dma(
+ mid1=mid1, mid2=mid2, sid1=sid1, sid2=sid2,
+ guest_dir=guest_dir, **kwargs
+ )
else:
raise RuntimeError(
f"Container topology {chain_topology} not implemented"
@@ -278,6 +283,25 @@ class ContainerManager:
f"{self.engine.container.name}-{kwargs[u'sid2']}"
)
+ def _configure_vpp_chain_dma(self, **kwargs):
+ """Configure VPP in chain topology with l2xc (dma).
+
+ :param kwargs: Named parameters.
+ :type kwargs: dict
+ """
+ dma_wqs = kwargs[f"dma_wqs"]
+ self.engine.create_vpp_startup_config_dma(dma_wqs)
+
+ self.engine.create_vpp_exec_config(
+ u"memif_create_chain_dma.exec",
+ mid1=kwargs[u"mid1"], mid2=kwargs[u"mid2"],
+ sid1=kwargs[u"sid1"], sid2=kwargs[u"sid2"],
+ socket1=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid1']}",
+ socket2=f"{kwargs[u'guest_dir']}/memif-"
+ f"{self.engine.container.name}-{kwargs[u'sid2']}"
+ )
+
def _configure_vpp_cross_horiz(self, **kwargs):
"""Configure VPP in cross horizontal topology (single memif).
@@ -581,14 +605,19 @@ class ContainerEngine:
def start_vpp(self, verify=True):
"""Start VPP inside a container."""
self.execute(
- u"setsid /usr/bin/vpp -c /etc/vpp/startup.conf "
- u">/tmp/vppd.log 2>&1 < /dev/null &")
+ u"/usr/bin/vpp -c /etc/vpp/startup.conf")
topo_instance = BuiltIn().get_library_instance(
u"resources.libraries.python.topology.Topology"
)
topo_instance.add_new_socket(
self.container.node,
+ SocketType.CLI,
+ self.container.name,
+ self.container.cli_socket,
+ )
+ topo_instance.add_new_socket(
+ self.container.node,
SocketType.PAPI,
self.container.name,
self.container.api_socket,
@@ -630,7 +659,7 @@ class ContainerEngine:
# Execute puts the command into single quotes,
# so inner arguments are enclosed in qouble quotes here.
self.execute(
- u'vppctl show pci 2>&1 | '
+ u'/usr/bin/vppctl show pci 2>&1 | '
u'fgrep -v "Connection refused" | '
u'fgrep -v "No such file or directory"'
)
@@ -688,7 +717,6 @@ class ContainerEngine:
vpp_config = VppConfigGenerator()
vpp_config.set_node(self.container.node)
vpp_config.add_unix_cli_listen()
- vpp_config.add_unix_nodaemon()
vpp_config.add_unix_exec(u"/tmp/running.exec")
vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH)
if cpuset_cpus:
@@ -702,9 +730,10 @@ class ContainerEngine:
vpp_config.add_plugin(u"enable", u"memif_plugin.so")
vpp_config.add_plugin(u"enable", u"perfmon_plugin.so")
vpp_config.add_main_heap_size(u"2G")
- vpp_config.add_main_heap_page_size(u"2M")
+ vpp_config.add_main_heap_page_size(self.container.page_size)
+ vpp_config.add_default_hugepage_size(self.container.page_size)
vpp_config.add_statseg_size(u"2G")
- vpp_config.add_statseg_page_size(u"2M")
+ vpp_config.add_statseg_page_size(self.container.page_size)
vpp_config.add_statseg_per_node_counters(u"on")
return vpp_config
@@ -763,6 +792,22 @@ class ContainerEngine:
f'echo "{vpp_config.get_config_str()}" | tee /etc/vpp/startup.conf'
)
+ def create_vpp_startup_config_dma(self, dma_devices):
+ """Create startup configuration of VPP DMA.
+
+ :param dma_devices: DMA devices list.
+ :type dma_devices: list
+ """
+ vpp_config = self.create_base_vpp_startup_config()
+ vpp_config.add_plugin(u"enable", u"dma_intel_plugin.so")
+ vpp_config.add_dma_dev(dma_devices)
+
+ # Apply configuration
+ self.execute(u"mkdir -p /etc/vpp/")
+ self.execute(
+ f'echo "{vpp_config.get_config_str()}" | tee /etc/vpp/startup.conf'
+ )
+
def create_vpp_exec_config(self, template_file, **kwargs):
"""Create VPP exec configuration on container.
@@ -801,31 +846,19 @@ class ContainerEngine:
:raises RuntimeError: If applying cgroup settings via cgset failed.
"""
ret, _, _ = self.container.ssh.exec_command_sudo(
- u"cgset -r cpuset.cpu_exclusive=0 /"
- )
- if int(ret) != 0:
- raise RuntimeError(u"Failed to apply cgroup settings.")
-
- ret, _, _ = self.container.ssh.exec_command_sudo(
- u"cgset -r cpuset.mem_exclusive=0 /"
- )
- if int(ret) != 0:
- raise RuntimeError(u"Failed to apply cgroup settings.")
-
- ret, _, _ = self.container.ssh.exec_command_sudo(
f"cgcreate -g cpuset:/{name}"
)
if int(ret) != 0:
raise RuntimeError(u"Failed to copy cgroup settings from root.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- f"cgset -r cpuset.cpu_exclusive=0 /{name}"
+ f"cgset -r cpuset.cpus=0 /{name}"
)
if int(ret) != 0:
raise RuntimeError(u"Failed to apply cgroup settings.")
ret, _, _ = self.container.ssh.exec_command_sudo(
- f"cgset -r cpuset.mem_exclusive=0 /{name}"
+ f"cgset -r cpuset.mems=0 /{name}"
)
if int(ret) != 0:
raise RuntimeError(u"Failed to apply cgroup settings.")
@@ -856,7 +889,7 @@ class LXC(ContainerEngine):
else u"amd64"
image = self.container.image if self.container.image \
- else f"-d ubuntu -r focal -a {target_arch}"
+ else f"-d ubuntu -r jammy -a {target_arch}"
cmd = f"lxc-create -t download --name {self.container.name} " \
f"-- {image} --no-validate"
@@ -1121,8 +1154,8 @@ class Docker(ContainerEngine):
if self.container.mnt else u""
cmd = f"docker run --privileged --detach --interactive --tty --rm " \
- f"--cgroup-parent docker {cpuset_cpus} {cpuset_mems} {publish} " \
- f"{env} {volume} --name {self.container.name} " \
+ f"--cgroup-parent docker.slice {cpuset_cpus} {cpuset_mems} " \
+ f"{publish} {env} {volume} --name {self.container.name} " \
f"{self.container.image} {command}"
ret, _, _ = self.container.ssh.exec_command_sudo(cmd)
@@ -1276,6 +1309,7 @@ class Container:
path = f"/tmp/vpp_sockets/{value}"
self.__dict__[u"socket_dir"] = path
self.__dict__[u"api_socket"] = f"{path}/api.sock"
+ self.__dict__[u"cli_socket"] = f"{path}/cli.sock"
self.__dict__[u"stats_socket"] = f"{path}/stats.sock"
self.__dict__[attr] = value
else:
diff --git a/resources/libraries/python/CoreDumpUtil.py b/resources/libraries/python/CoreDumpUtil.py
index 97948ad28a..b70afa858e 100644
--- a/resources/libraries/python/CoreDumpUtil.py
+++ b/resources/libraries/python/CoreDumpUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -139,11 +139,11 @@ class CoreDumpUtil:
for node in nodes.values():
if node[u"type"] == NodeType.DUT:
command = (
- f"for f in {Constants.CORE_DUMP_DIR}/*.core; do "
- f"sudo gdb /usr/bin/vpp ${{f}} "
- f"-ex 'source -v {Constants.REMOTE_FW_DIR}"
- f"/resources/tools/scripts/gdb-commands' -ex quit; "
- f"sudo rm -f ${{f}}; done"
+ f"for f in {Constants.CORE_DUMP_DIR}/*.core; do"
+ f" sleep 10; sudo gdb /usr/bin/vpp ${{f}}"
+ f" -ex 'source -v {Constants.REMOTE_FW_DIR}"
+ f"/resources/tools/scripts/gdb-commands' -ex quit;"
+ f" sudo rm -f ${{f}}; done"
)
try:
exec_cmd_no_error(node, command, timeout=3600)
diff --git a/resources/libraries/python/CpuUtils.py b/resources/libraries/python/CpuUtils.py
index 5805ba7787..c77d0f83b1 100644
--- a/resources/libraries/python/CpuUtils.py
+++ b/resources/libraries/python/CpuUtils.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,11 +13,13 @@
"""CPU utilities library."""
+from random import choice
+
from robot.libraries.BuiltIn import BuiltIn
from resources.libraries.python.Constants import Constants
from resources.libraries.python.ssh import exec_cmd_no_error
-from resources.libraries.python.topology import Topology
+from resources.libraries.python.topology import Topology, NodeType
__all__ = [u"CpuUtils"]
@@ -388,25 +390,25 @@ class CpuUtils:
@staticmethod
def get_affinity_trex(
- node, if1_pci, if2_pci, tg_mtc=1, tg_dtc=1, tg_ltc=1):
+ node, if_key, tg_mtc=1, tg_dtc=1, tg_ltc=1, tg_dtc_offset=0):
"""Get affinity for T-Rex. Result will be used to pin T-Rex threads.
:param node: TG node.
- :param if1_pci: TG first interface.
- :param if2_pci: TG second interface.
+ :param if_key: TG first interface.
:param tg_mtc: TG main thread count.
:param tg_dtc: TG dataplane thread count.
:param tg_ltc: TG latency thread count.
+ :param tg_dtc_offset: TG dataplane thread offset.
:type node: dict
- :type if1_pci: str
- :type if2_pci: str
+ :type if_key: str
:type tg_mtc: int
:type tg_dtc: int
:type tg_ltc: int
+ :type tg_dtc_offset: int
:returns: List of CPUs allocated to T-Rex including numa node.
:rtype: int, int, int, list
"""
- interface_list = [if1_pci, if2_pci]
+ interface_list = [if_key]
cpu_node = Topology.get_interfaces_numa_node(node, *interface_list)
master_thread_id = CpuUtils.cpu_slice_of_list_per_node(
@@ -414,12 +416,11 @@ class CpuUtils:
smt_used=False)
threads = CpuUtils.cpu_slice_of_list_per_node(
- node, cpu_node, skip_cnt=tg_mtc, cpu_cnt=tg_dtc,
- smt_used=False)
+ node, cpu_node, skip_cnt=tg_mtc + tg_ltc + tg_dtc_offset,
+ cpu_cnt=tg_dtc, smt_used=False)
latency_thread_id = CpuUtils.cpu_slice_of_list_per_node(
- node, cpu_node, skip_cnt=tg_mtc + tg_dtc, cpu_cnt=tg_ltc,
- smt_used=False)
+ node, cpu_node, skip_cnt=tg_mtc, cpu_cnt=tg_ltc, smt_used=False)
return master_thread_id[0], latency_thread_id[0], cpu_node, threads
@@ -501,17 +502,15 @@ class CpuUtils:
@staticmethod
def get_affinity_vswitch(
- nodes, node, phy_cores, rx_queues=None, rxd=None, txd=None):
- """Get affinity for vswitch.
+ nodes, phy_cores, rx_queues=None, rxd=None, txd=None):
+ """Get affinity for vswitch on all DUTs.
:param nodes: Topology nodes.
- :param node: Topology node string.
:param phy_cores: Number of physical cores to allocate.
:param rx_queues: Number of RX queues. (Optional, Default: None)
:param rxd: Number of RX descriptors. (Optional, Default: None)
:param txd: Number of TX descriptors. (Optional, Default: None)
:type nodes: dict
- :type node: str
:type phy_cores: int
:type rx_queues: int
:type rxd: int
@@ -519,76 +518,83 @@ class CpuUtils:
:returns: Compute resource information dictionary.
:rtype: dict
"""
- # Number of Data Plane physical cores.
- dp_cores_count = BuiltIn().get_variable_value(
- f"${{dp_cores_count}}", phy_cores
- )
- # Number of Feature Plane physical cores.
- fp_cores_count = BuiltIn().get_variable_value(
- f"${{fp_cores_count}}", phy_cores - dp_cores_count
- )
- # Ratio between RX queues and data plane threads.
- rxq_ratio = BuiltIn().get_variable_value(
- f"${{rxq_ratio}}", 1
- )
-
- dut_pf_keys = BuiltIn().get_variable_value(
- f"${{{node}_pf_keys}}"
- )
- # SMT override in case of non standard test cases.
- smt_used = BuiltIn().get_variable_value(
- f"${{smt_used}}", CpuUtils.is_smt_enabled(nodes[node][u"cpuinfo"])
- )
-
- cpu_node = Topology.get_interfaces_numa_node(nodes[node], *dut_pf_keys)
- skip_cnt = Constants.CPU_CNT_SYSTEM
- cpu_main = CpuUtils.cpu_list_per_node_str(
- nodes[node], cpu_node,
- skip_cnt=skip_cnt,
- cpu_cnt=Constants.CPU_CNT_MAIN,
- smt_used=False
- )
- skip_cnt += Constants.CPU_CNT_MAIN
- cpu_dp = CpuUtils.cpu_list_per_node_str(
- nodes[node], cpu_node,
- skip_cnt=skip_cnt,
- cpu_cnt=int(dp_cores_count),
- smt_used=smt_used
- ) if int(dp_cores_count) else u""
- skip_cnt = skip_cnt + int(dp_cores_count)
- cpu_fp = CpuUtils.cpu_list_per_node_str(
- nodes[node], cpu_node,
- skip_cnt=skip_cnt,
- cpu_cnt=int(fp_cores_count),
- smt_used=smt_used
- ) if int(fp_cores_count) else u""
-
- fp_count_int = \
- int(fp_cores_count) * CpuUtils.NR_OF_THREADS if smt_used \
- else int(fp_cores_count)
- dp_count_int = \
- int(dp_cores_count) * CpuUtils.NR_OF_THREADS if smt_used \
- else int(dp_cores_count)
-
- rxq_count_int = rx_queues if rx_queues else int(dp_count_int/rxq_ratio)
- rxq_count_int = 1 if not rxq_count_int else rxq_count_int
-
compute_resource_info = dict()
- compute_resource_info[u"buffers_numa"] = 215040 if smt_used else 107520
- compute_resource_info[u"smt_used"] = smt_used
- compute_resource_info[u"cpu_main"] = cpu_main
- compute_resource_info[u"cpu_dp"] = cpu_dp
- compute_resource_info[u"cpu_fp"] = cpu_fp
- compute_resource_info[u"cpu_wt"] = \
- u",".join(filter(None, [cpu_dp, cpu_fp]))
- compute_resource_info[u"cpu_alloc_str"] = \
- u",".join(filter(None, [cpu_main, cpu_dp, cpu_fp]))
- compute_resource_info[u"cpu_count_int"] = \
- int(dp_cores_count) + int(fp_cores_count)
- compute_resource_info[u"rxd_count_int"] = rxd
- compute_resource_info[u"txd_count_int"] = txd
- compute_resource_info[u"rxq_count_int"] = rxq_count_int
- compute_resource_info[u"fp_count_int"] = fp_count_int
- compute_resource_info[u"dp_count_int"] = dp_count_int
+ for node_name, node in nodes.items():
+ if node["type"] != NodeType.DUT:
+ continue
+ # Number of Data Plane physical cores.
+ dp_cores_count = BuiltIn().get_variable_value(
+ "${dp_cores_count}", phy_cores
+ )
+ # Number of Feature Plane physical cores.
+ fp_cores_count = BuiltIn().get_variable_value(
+ "${fp_cores_count}", phy_cores - dp_cores_count
+ )
+ # Ratio between RX queues and data plane threads.
+ rxq_ratio = BuiltIn().get_variable_value(
+ "${rxq_ratio}", 1
+ )
+
+ dut_pf_keys = BuiltIn().get_variable_value(
+ f"${{{node_name}_pf_keys}}"
+ )
+ # SMT override in case of non standard test cases.
+ smt_used = BuiltIn().get_variable_value(
+ "${smt_used}", CpuUtils.is_smt_enabled(node["cpuinfo"])
+ )
+
+ cpu_node = Topology.get_interfaces_numa_node(node, *dut_pf_keys)
+ skip_cnt = Constants.CPU_CNT_SYSTEM
+ cpu_main = CpuUtils.cpu_list_per_node_str(
+ node, cpu_node,
+ skip_cnt=skip_cnt,
+ cpu_cnt=Constants.CPU_CNT_MAIN if phy_cores else 0,
+ smt_used=False
+ )
+ cpu_main = cpu_main if phy_cores else choice(cpu_main.split(","))
+ skip_cnt += Constants.CPU_CNT_MAIN
+ cpu_dp = CpuUtils.cpu_list_per_node_str(
+ node, cpu_node,
+ skip_cnt=skip_cnt,
+ cpu_cnt=int(dp_cores_count),
+ smt_used=smt_used
+ ) if int(dp_cores_count) else ""
+ skip_cnt = skip_cnt + int(dp_cores_count)
+ cpu_fp = CpuUtils.cpu_list_per_node_str(
+ node, cpu_node,
+ skip_cnt=skip_cnt,
+ cpu_cnt=int(fp_cores_count),
+ smt_used=smt_used
+ ) if int(fp_cores_count) else ""
+
+ fp_count_int = \
+ int(fp_cores_count) * CpuUtils.NR_OF_THREADS if smt_used \
+ else int(fp_cores_count)
+ dp_count_int = \
+ int(dp_cores_count) * CpuUtils.NR_OF_THREADS if smt_used \
+ else int(dp_cores_count)
+
+ rxq_count_int = \
+ int(rx_queues) if rx_queues \
+ else int(dp_count_int/rxq_ratio)
+ rxq_count_int = 1 if not rxq_count_int else rxq_count_int
+
+ compute_resource_info["buffers_numa"] = \
+ 215040 if smt_used else 107520
+ compute_resource_info["smt_used"] = smt_used
+ compute_resource_info[f"{node_name}_cpu_main"] = cpu_main
+ compute_resource_info[f"{node_name}_cpu_dp"] = cpu_dp
+ compute_resource_info[f"{node_name}_cpu_fp"] = cpu_fp
+ compute_resource_info[f"{node_name}_cpu_wt"] = \
+ ",".join(filter(None, [cpu_dp, cpu_fp]))
+ compute_resource_info[f"{node_name}_cpu_alloc_str"] = \
+ ",".join(filter(None, [cpu_main, cpu_dp, cpu_fp]))
+ compute_resource_info["cpu_count_int"] = \
+ int(dp_cores_count) + int(fp_cores_count)
+ compute_resource_info["rxd_count_int"] = rxd
+ compute_resource_info["txd_count_int"] = txd
+ compute_resource_info["rxq_count_int"] = rxq_count_int
+ compute_resource_info["fp_count_int"] = fp_count_int
+ compute_resource_info["dp_count_int"] = dp_count_int
return compute_resource_info
diff --git a/resources/libraries/python/DMAUtil.py b/resources/libraries/python/DMAUtil.py
new file mode 100644
index 0000000000..f904ea4e3d
--- /dev/null
+++ b/resources/libraries/python/DMAUtil.py
@@ -0,0 +1,213 @@
+# Copyright (c) 2024 Intel and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""DMA util library."""
+
+from re import search
+from resources.libraries.python.topology import NodeType, Topology
+from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
+
+
+class DMAUtil:
+ """Common DMA utilities"""
+
+ @staticmethod
+ def get_dma_resource(node, dma_device):
+ """Get DMA resource from DMA device.
+
+ :param node: Topology node.
+ :param dma_device: DMA device.
+ :type node: dict
+ :type dma_device: str
+ :returns: DMA resource.
+ :rtype: dict
+ """
+
+ cmd = f"grep -H . /sys/bus/pci/devices/{dma_device}/dsa*/*"
+ _, stdout, stderr = exec_cmd(node, cmd, sudo=True)
+
+ dma_info = dict()
+ dma_info["dma_device"] = dma_device
+ dma_info["engine"] = list()
+ dma_info["wq"] = list()
+ dma_info["group"] = list()
+
+ for line in stdout.split():
+ g1 = search(r"/(dsa\d+)/(.+):(.+)", line)
+ if g1 is not None:
+ dma_info["dma_name"] = g1.group(1)
+ dma_info[f"{g1.group(2)}"] = g1.group(3)
+
+ for line in stderr.split():
+ g2 = search(r"/(dsa\d+)/((engine|group|wq)\d+\.\d+)", line)
+ if g2 is not None:
+ dev_type = g2.group(3)
+ dev = g2.group(2)
+ dma_info[dev_type].append(dev)
+
+ return dma_info
+
+ @staticmethod
+ def disable_dma_device(node, dma_name):
+ """Disable DMA device.
+
+ :param node: Topology node.
+ :param dma_name: DMA name.
+ :type node: dict
+ :type dma_name: str
+ """
+ cmd = f"cat /sys/bus/dsa/devices/{dma_name}/state"
+ stdout, _ = exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to get dma state.")
+ if stdout.strip() == "disabled":
+ return
+
+ cmd = f"accel-config disable-device -f {dma_name}"
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to disable DMA on DUT.")
+
+ @staticmethod
+ def enable_dma_device(node, dma_name, groups, engines, wqs, wq_size,
+ max_batch_size, max_transfer_size):
+ """Enable DMA device.
+
+ :param node: Topology node.
+ :param dma_name: DMA name.
+ :param groups: DMA groups.
+ :param engines: DMA engines.
+ :param wqs: DMA work queues.
+ :param wq_size: DMA work queue size.
+ :param max_batch_size: Wq max batch size.
+ :param max_transfer_size: Wq max transfer size.
+ :type node: dict
+ :type dma_name: str
+ :type groups: list
+ :type engines: list
+ :type wqs: list
+ :type wq_size: int
+ :type max_batch_size: int
+ :type max_transfer_size: int
+ """
+
+ # Configure Device
+ cmd = f"accel-config config-device {dma_name}"
+
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to configure DMA device on DUT.")
+
+ # Configure DMA group
+ for i, group in enumerate(groups):
+ cmd = f"accel-config config-group " \
+ f"{dma_name}/{group} --read-buffers-reserved=0"
+
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to configure DMA group on DUT.")
+
+ # Configure DMA engine
+ for i, engine in enumerate(engines):
+ cmd = f"accel-config config-engine " \
+ f"{dma_name}/{engine} --group-id={i}"
+
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to configure DMA engine on DUT.")
+
+ # Configure DMA work queue
+ for i, wq in enumerate(wqs):
+ cmd = f"accel-config config-wq {dma_name}/{wq} " \
+ f" --group-id={i%len(engines)} --type=user " \
+ f" --priority=10 --block-on-fault=1 " \
+ f" --wq-size={wq_size} --mode=dedicated " \
+ f" --name={dma_name}_{i} " \
+ f" --max-batch-size={max_batch_size} " \
+ f" --max-transfer-size={max_transfer_size} "
+
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to configure DMA work queue on DUT.")
+
+ # Enable DMA and work queues
+ cmd = f"accel-config enable-device {dma_name}"
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to enable DMA device on DUT.")
+
+ dma_wqs = [f"{dma_name}/{wq}" for wq in wqs]
+ cmd = f"accel-config enable-wq {' '.join(dma_wqs)}"
+ exec_cmd_no_error(
+ node, cmd, sudo=True,
+ message="Failed to enable DMA work queue on DUT.")
+
+ @staticmethod
+ def enable_dmas_and_wqs_on_dut(node, wq_num):
+ """Enable DMAs and work queues on DUT.
+
+ :param node: Topology node.
+ :param wq_num: Number of work queues.
+ :type node: dict
+ :type wq_num: int
+ :returns: DMA work queues enabled.
+ :rtype: list
+ """
+ if node["type"] == NodeType.DUT:
+ dma_devs = Topology.get_bus(node)
+
+ enabled_wqs = list()
+
+ for dev in dma_devs.values():
+ if "Intel-DSA" not in dev["model"]:
+ continue
+
+ dev_pci = dev["pci_address"]
+ dma_info = DMAUtil.get_dma_resource(node, dev_pci)
+
+ dma_name = dma_info["dma_name"]
+ groups = dma_info["group"]
+ engines = dma_info["engine"]
+ wqs = dma_info["wq"]
+ wq_num_per_dma = wq_num//len(dma_devs) if wq_num > 1 else 1
+ max_transfer_size = \
+ int(dma_info["max_transfer_size"])//wq_num_per_dma
+ wq_size = int(dma_info["max_work_queues_size"])//wq_num_per_dma
+ max_batch_size = int(dma_info["max_batch_size"])
+
+ DMAUtil.disable_dma_device(node, dma_name)
+
+ DMAUtil.enable_dma_device(node,
+ dma_name,
+ groups[:wq_num_per_dma],
+ engines[:wq_num_per_dma],
+ wqs[:wq_num_per_dma],
+ wq_size,
+ max_batch_size,
+ max_transfer_size
+ )
+ enabled_wqs += wqs[:wq_num_per_dma]
+
+ cmd = f"lspci -vvv -s {dev_pci}"
+ exec_cmd_no_error(
+ node, cmd, sudo=True, message="Failed")
+
+ cmd = "accel-config list"
+ exec_cmd_no_error(
+ node, cmd, sudo=True, message="Failed")
+
+ cmd = "cat /proc/cmdline"
+ exec_cmd_no_error(
+ node, cmd, sudo=True, message="Failed")
+
+ return enabled_wqs
diff --git a/resources/libraries/python/DPDK/DPDKTools.py b/resources/libraries/python/DPDK/DPDKTools.py
index b403c3a5f9..83ddae8b4a 100644
--- a/resources/libraries/python/DPDK/DPDKTools.py
+++ b/resources/libraries/python/DPDK/DPDKTools.py
@@ -80,6 +80,25 @@ class DPDKTools:
exec_cmd_no_error(node, command, timeout=1200, message=message)
@staticmethod
+ def get_dpdk_version(node):
+ """Log and return the installed DPDK version.
+
+ The logged string ends with newline, the returned one is stripped.
+
+ :param node: Node from topology file.
+ :type node: dict
+ :returns: Stripped DPDK version string.
+ :rtype: str
+ :raises RuntimeError: If command returns nonzero return code.
+ """
+ command = f"cat {Constants.REMOTE_FW_DIR}/dpdk*/VERSION"
+ message = u"Get DPDK version failed!"
+ stdout, _ = exec_cmd_no_error(node, command, message=message)
+ # TODO: PAL should already tolerate stripped value in the log.
+ logger.info(f"DPDK Version: {stdout}")
+ return stdout.strip()
+
+ @staticmethod
def install_dpdk_framework(node):
"""
Prepare the DPDK framework on the DUT node.
@@ -92,12 +111,7 @@ class DPDKTools:
f"/entry/install_dpdk.sh"
message = u"Install the DPDK failed!"
exec_cmd_no_error(node, command, timeout=3600, message=message)
-
- command = f"cat {Constants.REMOTE_FW_DIR}/dpdk*/VERSION"
- message = u"Get DPDK version failed!"
- stdout, _ = exec_cmd_no_error(node, command, message=message)
-
- logger.info(f"DPDK Version: {stdout}")
+ DPDKTools.get_dpdk_version(node)
@staticmethod
def install_dpdk_framework_on_all_duts(nodes):
diff --git a/resources/libraries/python/DPDK/L3fwdTest.py b/resources/libraries/python/DPDK/L3fwdTest.py
index fd3e51978f..178c747da5 100644
--- a/resources/libraries/python/DPDK/L3fwdTest.py
+++ b/resources/libraries/python/DPDK/L3fwdTest.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -12,27 +12,100 @@
# limitations under the License.
"""
-This module exists to provide the l3fwd test for DPDK on topology nodes.
+This module exists to start l3fwd on topology nodes.
"""
+from robot.libraries.BuiltIn import BuiltIn
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
from resources.libraries.python.DpdkUtil import DpdkUtil
from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
from resources.libraries.python.topology import NodeType, Topology
-
NB_PORTS = 2
+
class L3fwdTest:
- """Test the DPDK l3fwd performance."""
+ """This class start l3fwd on topology nodes and check if properly started.
+ """
+
+ @staticmethod
+ def start_l3fwd_on_all_duts(
+ nodes, topology_info, phy_cores, rx_queues=None, jumbo_frames=False,
+ rxd=None, txd=None):
+ """
+ Execute the l3fwd on all dut nodes.
+
+ :param nodes: All the nodes info from the topology file.
+ :param topology_info: All the info from the topology file.
+ :param phy_cores: Number of physical cores to use.
+ :param rx_queues: Number of RX queues.
+ :param jumbo_frames: Jumbo frames on/off.
+ :param rxd: Number of RX descriptors.
+ :param txd: Number of TX descriptors.
+
+ :type nodes: dict
+ :type topology_info: dict
+ :type phy_cores: int
+ :type rx_queues: int
+ :type jumbo_frames: bool
+ :type rxd: int
+ :type txd: int
+ :raises RuntimeError: If bash return code is not 0.
+ """
+ cpu_count_int = dp_count_int = int(phy_cores)
+ dp_cores = cpu_count_int+1
+ tg_flip = topology_info[f"tg_if1_pci"] > topology_info[f"tg_if2_pci"]
+ compute_resource_info = CpuUtils.get_affinity_vswitch(
+ nodes, phy_cores, rx_queues=rx_queues, rxd=rxd, txd=txd
+ )
+ for node_name, node in nodes.items():
+ if node["type"] == NodeType.DUT:
+ if dp_count_int > 1:
+ BuiltIn().set_tags('MTHREAD')
+ else:
+ BuiltIn().set_tags('STHREAD')
+ BuiltIn().set_tags(
+ f"{dp_count_int}T{cpu_count_int}C"
+ )
+
+ cpu_dp = compute_resource_info[f"{node_name}_cpu_dp"]
+ rxq_count_int = compute_resource_info["rxq_count_int"]
+ if1 = topology_info[f"{node_name}_pf1"][0]
+ if2 = topology_info[f"{node_name}_pf2"][0]
+ L3fwdTest.start_l3fwd(
+ nodes, node, if1=if1, if2=if2, lcores_list=cpu_dp,
+ nb_cores=dp_count_int, queue_nums=rxq_count_int,
+ jumbo_frames=jumbo_frames, tg_flip=tg_flip
+ )
+ for node in nodes:
+ if u"DUT" in node:
+ for i in range(3):
+ try:
+ L3fwdTest.check_l3fwd(nodes[node])
+ break
+ except RuntimeError:
+ L3fwdTest.start_l3fwd(
+ nodes, nodes[node], if1=if1, if2=if2,
+ lcores_list=cpu_dp, nb_cores=dp_count_int,
+ queue_nums=rxq_count_int, jumbo_frames=jumbo_frames,
+ tg_flip=tg_flip
+ )
+ else:
+ message = f"Failed to start l3fwd at node {node}"
+ raise RuntimeError(message)
@staticmethod
def start_l3fwd(
nodes, node, if1, if2, lcores_list, nb_cores, queue_nums,
- jumbo_frames):
+ jumbo_frames, tg_flip):
"""
Execute the l3fwd on the dut_node.
+ L3fwd uses default IP forwarding table, but sorts ports by API address.
+ When that does not match the traffic profile (depends on topology),
+ the only way to fix is is to latch and recompile l3fwd app.
+
:param nodes: All the nodes info in the topology file.
:param node: DUT node.
:param if1: The test link interface 1.
@@ -42,6 +115,7 @@ class L3fwdTest:
:param queue_nums: The queues number for the NIC
:param jumbo_frames: Indication if the jumbo frames are used (True) or
not (False).
+ :param tg_flip: Whether TG ports are reordered.
:type nodes: dict
:type node: dict
:type if1: str
@@ -50,10 +124,11 @@ class L3fwdTest:
:type nb_cores: str
:type queue_nums: str
:type jumbo_frames: bool
+ :type tg_flip: bool
"""
if node[u"type"] == NodeType.DUT:
adj_mac0, adj_mac1, if_pci0, if_pci1 = L3fwdTest.get_adj_mac(
- nodes, node, if1, if2
+ nodes, node, if1, if2, tg_flip
)
lcores = [int(item) for item in lcores_list.split(u",")]
@@ -80,7 +155,6 @@ class L3fwdTest:
pmd_eth_dest_0=f"\\\"0,{adj_mac0}\\\"",
pmd_eth_dest_1=f"\\\"1,{adj_mac1}\\\"",
pmd_parse_ptype=True,
- pmd_enable_jumbo=jumbo_frames,
pmd_max_pkt_len=jumbo_frames
)
else:
@@ -101,20 +175,40 @@ class L3fwdTest:
message = f"Failed to execute l3fwd test at node {node['host']}"
exec_cmd_no_error(node, command, timeout=1800, message=message)
+ @staticmethod
+ def check_l3fwd(node):
+ """
+ Execute the l3fwd check on the DUT node.
+
+ :param node: DUT node.
+ :type node: dict
+ :raises RuntimeError: If the script "check_l3fwd.sh" fails.
+ """
+ if node[u"type"] == NodeType.DUT:
+ command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
+ f"/entry/check_l3fwd.sh"
+ message = "L3fwd not started properly"
+ exec_cmd_no_error(node, command, timeout=1800, message=message)
@staticmethod
- def get_adj_mac(nodes, node, if1, if2):
+ def get_adj_mac(nodes, node, if1, if2, tg_flip):
"""
Get adjacency MAC addresses of the DUT node.
+ Interfaces are re-ordered according to PCI address,
+ but the need to patch and recompile also depends on TG port order.
+ "tg_flip" signals whether TG ports are reordered.
+
:param nodes: All the nodes info in the topology file.
:param node: DUT node.
:param if1: The test link interface 1.
:param if2: The test link interface 2.
+ :param tg_flip: Whether tg ports are reordered.
:type nodes: dict
:type node: dict
:type if1: str
:type if2: str
+ :type tg_flip: bool
:returns: Returns MAC addresses of adjacency DUT nodes and PCI
addresses.
:rtype: str
@@ -124,9 +218,19 @@ class L3fwdTest:
if_pci0 = Topology.get_interface_pci_addr(node, if_key0)
if_pci1 = Topology.get_interface_pci_addr(node, if_key1)
+ # Flipping routes logic:
+ # If TG and DUT ports are reordered -> flip
+ # If TG reordered and DUT not reordered -> don't flip
+ # If DUT reordered and TG not reordered -> don't flip
+ # If DUT and TG not reordered -> flip
+
# Detect which is the port 0.
- if min(if_pci0, if_pci1) != if_pci0:
+ dut_flip = if_pci0 > if_pci1
+ if dut_flip:
if_key0, if_key1 = if_key1, if_key0
+ if tg_flip:
+ L3fwdTest.patch_l3fwd(node, u"patch_l3fwd_flip_routes")
+ elif not tg_flip:
L3fwdTest.patch_l3fwd(node, u"patch_l3fwd_flip_routes")
adj_node0, adj_if_key0 = Topology.get_adjacent_node_and_interface(
diff --git a/resources/libraries/python/DPDK/TestpmdTest.py b/resources/libraries/python/DPDK/TestpmdTest.py
index ed53acb0b5..3baba30715 100644
--- a/resources/libraries/python/DPDK/TestpmdTest.py
+++ b/resources/libraries/python/DPDK/TestpmdTest.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -11,18 +11,100 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""This module implements functionality which sets L2 forwarding for DPDK on
-DUT nodes.
+"""
+This module exists to start testpmd on topology nodes.
"""
+from robot.libraries.BuiltIn import BuiltIn
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
from resources.libraries.python.DpdkUtil import DpdkUtil
from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
class TestpmdTest:
- """Setup the DPDK for testpmd performance test."""
+ """
+ This class start testpmd on topology nodes and check if properly started.
+ """
+
+ @staticmethod
+ def start_testpmd_on_all_duts(
+ nodes, topology_info, phy_cores, rx_queues=None, jumbo_frames=False,
+ rxd=None, txd=None, nic_rxq_size=None, nic_txq_size=None):
+ """
+ Start the testpmd with M worker threads and rxqueues N and jumbo
+ support frames on/off on all DUTs.
+
+ :param nodes: All the nodes info from the topology file.
+ :param topology_info: All the info from the topology file.
+ :param phy_cores: Number of physical cores to use.
+ :param rx_queues: Number of RX queues.
+ :param jumbo_frames: Jumbo frames on/off.
+ :param rxd: Number of RX descriptors.
+ :param txd: Number of TX descriptors.
+ :param nic_rxq_size: RX queue size.
+ :param nic_txq_size: TX queue size.
+
+ :type nodes: dict
+ :type topology_info: dict
+ :type phy_cores: int
+ :type rx_queues: int
+ :type jumbo_frames: bool
+ :type rxd: int
+ :type txd: int
+ :type nic_rxq_size: int
+ :type nic_txq_size: int
+ :raises RuntimeError: If bash return code is not 0.
+ """
+
+ cpu_count_int = dp_count_int = int(phy_cores)
+ dp_cores = cpu_count_int+1
+ compute_resource_info = CpuUtils.get_affinity_vswitch(
+ nodes, phy_cores, rx_queues=rx_queues, rxd=rxd, txd=txd
+ )
+ for node_name, node in nodes.items():
+ if node["type"] == NodeType.DUT:
+ if dp_count_int > 1:
+ BuiltIn().set_tags('MTHREAD')
+ else:
+ BuiltIn().set_tags('STHREAD')
+ BuiltIn().set_tags(
+ f"{dp_count_int}T{cpu_count_int}C"
+ )
+
+ cpu_dp = compute_resource_info[f"{node_name}_cpu_dp"]
+ rxq_count_int = compute_resource_info["rxq_count_int"]
+ if1 = topology_info[f"{node_name}_pf1"][0]
+ if2 = topology_info[f"{node_name}_pf2"][0]
+ TestpmdTest.start_testpmd(
+ node, if1=if1, if2=if2, lcores_list=cpu_dp,
+ nb_cores=dp_count_int, queue_nums=rxq_count_int,
+ jumbo_frames=jumbo_frames, rxq_size=nic_rxq_size,
+ txq_size=nic_txq_size
+ )
+ for node in nodes:
+ if u"DUT" in node:
+ for i in range(3):
+ try:
+ nic_model = nodes[node]["interfaces"][if1]["model"]
+ if "Mellanox-CX7VEAT" in nic_model:
+ break
+ if "Mellanox-CX6DX" in nic_model:
+ break
+ TestpmdTest.check_testpmd(nodes[node])
+ break
+ except RuntimeError:
+ TestpmdTest.start_testpmd(
+ nodes[node], if1=if1, if2=if2,
+ lcores_list=cpu_dp, nb_cores=dp_count_int,
+ queue_nums=rxq_count_int,
+ jumbo_frames=jumbo_frames,
+ rxq_size=nic_rxq_size, txq_size=nic_txq_size
+ )
+ else:
+ message = f"Failed to start testpmd at node {node}"
+ raise RuntimeError(message)
@staticmethod
def start_testpmd(
@@ -45,7 +127,7 @@ class TestpmdTest:
:type if1: str
:type if2: str
:type lcores_list: str
- :type nb_cores: str
+ :type nb_cores: int
:type queue_nums: str
:type jumbo_frames: bool
:type rxq_size: int
@@ -74,7 +156,7 @@ class TestpmdTest:
pmd_rxq=queue_nums,
pmd_txq=queue_nums,
pmd_nb_cores=nb_cores,
- pmd_disable_link_check=True,
+ pmd_disable_link_check=False,
pmd_auto_start=True,
pmd_numa=True
)
@@ -83,3 +165,18 @@ class TestpmdTest:
f"/entry/run_testpmd.sh \"{testpmd_args}\""
message = f"Failed to execute testpmd at node {node['host']}"
exec_cmd_no_error(node, command, timeout=1800, message=message)
+
+ @staticmethod
+ def check_testpmd(node):
+ """
+ Execute the testpmd check on the DUT node.
+
+ :param node: DUT node.
+ :type node: dict
+ :raises RuntimeError: If the script "check_testpmd.sh" fails.
+ """
+ if node[u"type"] == NodeType.DUT:
+ command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}"\
+ f"/entry/check_testpmd.sh"
+ message = "Testpmd not started properly"
+ exec_cmd_no_error(node, command, timeout=1800, message=message)
diff --git a/resources/libraries/python/DUTSetup.py b/resources/libraries/python/DUTSetup.py
index 16acfba7ad..f9758c5f9f 100644
--- a/resources/libraries/python/DUTSetup.py
+++ b/resources/libraries/python/DUTSetup.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -16,8 +16,7 @@
from time import sleep
from robot.api import logger
-from resources.libraries.python.Constants import Constants
-from resources.libraries.python.ssh import SSH, exec_cmd, exec_cmd_no_error
+from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
@@ -33,11 +32,12 @@ class DUTSetup:
:type node: dict
:type service: str
"""
- command = u"cat /tmp/*supervisor*.log"\
- if DUTSetup.running_in_container(node) \
- else f"journalctl --no-pager _SYSTEMD_INVOCATION_ID=$(systemctl " \
+ if DUTSetup.running_in_container(node):
+ return
+ command = (
+ f"journalctl --no-pager _SYSTEMD_INVOCATION_ID=$(systemctl "
f"show -p InvocationID --value {service})"
-
+ )
message = f"Node {node[u'host']} failed to get logs from unit {service}"
exec_cmd_no_error(
@@ -66,9 +66,10 @@ class DUTSetup:
:type node: dict
:type service: str
"""
- command = f"supervisorctl restart {service}" \
- if DUTSetup.running_in_container(node) \
- else f"service {service} restart"
+ if DUTSetup.running_in_container(node):
+ command = f"supervisorctl restart {service}"
+ else:
+ command = f"systemctl restart {service}"
message = f"Node {node[u'host']} failed to restart service {service}"
exec_cmd_no_error(
@@ -99,10 +100,10 @@ class DUTSetup:
:type node: dict
:type service: str
"""
- # TODO: change command to start once all parent function updated.
- command = f"supervisorctl restart {service}" \
- if DUTSetup.running_in_container(node) \
- else f"service {service} restart"
+ if DUTSetup.running_in_container(node):
+ command = f"supervisorctl restart {service}"
+ else:
+ command = f"systemctl restart {service}"
message = f"Node {node[u'host']} failed to start service {service}"
exec_cmd_no_error(
@@ -135,9 +136,10 @@ class DUTSetup:
"""
DUTSetup.get_service_logs(node, service)
- command = f"supervisorctl stop {service}" \
- if DUTSetup.running_in_container(node) \
- else f"service {service} stop"
+ if DUTSetup.running_in_container(node):
+ command = f"supervisorctl stop {service}"
+ else:
+ command = f"systemctl stop {service}"
message = f"Node {node[u'host']} failed to stop service {service}"
exec_cmd_no_error(
@@ -207,42 +209,25 @@ class DUTSetup:
exec_cmd_no_error(node, cmd, message=f"{program} is not installed")
@staticmethod
- def get_pid(node, process):
+ def get_pid(node, process, retries=3):
"""Get PID of running process.
:param node: DUT node.
:param process: process name.
+ :param retries: How many times to retry on failure.
:type node: dict
:type process: str
+ :type retries: int
:returns: PID
:rtype: int
:raises RuntimeError: If it is not possible to get the PID.
"""
- ssh = SSH()
- ssh.connect(node)
-
- retval = None
- for i in range(3):
- logger.trace(f"Try {i}: Get {process} PID")
- ret_code, stdout, stderr = ssh.exec_command(f"pidof {process}")
-
- if int(ret_code):
- raise RuntimeError(
- f"Not possible to get PID of {process} process on node: "
- f"{node[u'host']}\n {stdout + stderr}"
- )
-
- pid_list = stdout.split()
- if len(pid_list) == 1:
- return [int(stdout)]
- if not pid_list:
- logger.debug(f"No {process} PID found on node {node[u'host']}")
- continue
- logger.debug(f"More than one {process} PID found " \
- f"on node {node[u'host']}")
- retval = [int(pid) for pid in pid_list]
-
- return retval
+ cmd = f"pidof {process}"
+ stdout, _ = exec_cmd_no_error(
+ node, cmd, retries=retries,
+ message=f"No {process} PID found on node {node[u'host']}")
+ pid_list = stdout.split()
+ return [int(pid) for pid in pid_list]
@staticmethod
def get_vpp_pids(nodes):
@@ -260,81 +245,6 @@ class DUTSetup:
return pids
@staticmethod
- def crypto_device_verify(node, crypto_type, numvfs, force_init=False):
- """Verify if Crypto QAT device virtual functions are initialized on all
- DUTs. If parameter force initialization is set to True, then try to
- initialize or remove VFs on QAT.
-
- :param node: DUT node.
- :crypto_type: Crypto device type - HW_DH895xcc or HW_C3xxx.
- :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
- :param force_init: If True then try to initialize to specific value.
- :type node: dict
- :type crypto_type: string
- :type numvfs: int
- :type force_init: bool
- :returns: nothing
- :raises RuntimeError: If QAT VFs are not created and force init is set
- to False.
- """
- pci_addr = Topology.get_cryptodev(node)
- sriov_numvfs = DUTSetup.get_sriov_numvfs(node, pci_addr)
-
- if sriov_numvfs != numvfs:
- if force_init:
- # QAT is not initialized and we want to initialize with numvfs
- DUTSetup.crypto_device_init(node, crypto_type, numvfs)
- else:
- raise RuntimeError(
- f"QAT device failed to create VFs on {node[u'host']}"
- )
-
- @staticmethod
- def crypto_device_init(node, crypto_type, numvfs):
- """Init Crypto QAT device virtual functions on DUT.
-
- :param node: DUT node.
- :crypto_type: Crypto device type - HW_DH895xcc or HW_C3xxx.
- :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
- :type node: dict
- :type crypto_type: string
- :type numvfs: int
- :returns: nothing
- :raises RuntimeError: If failed to stop VPP or QAT failed to initialize.
- """
- if crypto_type == u"HW_DH895xcc":
- kernel_mod = u"qat_dh895xcc"
- kernel_drv = u"dh895xcc"
- elif crypto_type == u"HW_C3xxx":
- kernel_mod = u"qat_c3xxx"
- kernel_drv = u"c3xxx"
- else:
- raise RuntimeError(
- f"Unsupported crypto device type on {node[u'host']}"
- )
-
- pci_addr = Topology.get_cryptodev(node)
-
- # QAT device must be re-bound to kernel driver before initialization.
- DUTSetup.verify_kernel_module(node, kernel_mod, force_load=True)
-
- # Stop VPP to prevent deadlock.
- DUTSetup.stop_service(node, Constants.VPP_UNIT)
-
- current_driver = DUTSetup.get_pci_dev_driver(
- node, pci_addr.replace(u":", r"\:")
- )
- if current_driver is not None:
- DUTSetup.pci_driver_unbind(node, pci_addr)
-
- # Bind to kernel driver.
- DUTSetup.pci_driver_bind(node, pci_addr, kernel_drv)
-
- # Initialize QAT VFs.
- if numvfs > 0:
- DUTSetup.set_sriov_numvfs(node, pci_addr, numvfs)
-
- @staticmethod
def get_virtfn_pci_addr(node, pf_pci_addr, vf_id):
"""Get PCI address of Virtual Function.
@@ -388,19 +298,21 @@ class DUTSetup:
return sriov_numvfs
@staticmethod
- def set_sriov_numvfs(node, pf_pci_addr, numvfs=0):
+ def set_sriov_numvfs(node, pf_pci_addr, path="devices", numvfs=0):
"""Init or reset SR-IOV virtual functions by setting its number on PCI
device on DUT. Setting to zero removes all VFs.
:param node: DUT node.
:param pf_pci_addr: Physical Function PCI device address.
+ :param path: Either device or driver.
:param numvfs: Number of VFs to initialize, 0 - removes the VFs.
:type node: dict
:type pf_pci_addr: str
+ :type path: str
:type numvfs: int
:raises RuntimeError: Failed to create VFs on PCI.
"""
- cmd = f"test -f /sys/bus/pci/devices/{pf_pci_addr}/sriov_numvfs"
+ cmd = f"test -f /sys/bus/pci/{path}/{pf_pci_addr}/sriov_numvfs"
sriov_unsupported, _, _ = exec_cmd(node, cmd)
# if sriov_numvfs doesn't exist, then sriov_unsupported != 0
if int(sriov_unsupported):
@@ -416,7 +328,7 @@ class DUTSetup:
pci = pf_pci_addr.replace(u":", r"\:")
command = f"sh -c \"echo {numvfs} | " \
- f"tee /sys/bus/pci/devices/{pci}/sriov_numvfs\""
+ f"tee /sys/bus/pci/{path}/{pci}/sriov_numvfs\""
message = f"Failed to create {numvfs} VFs on {pf_pci_addr} device " \
f"on {node[u'host']}"
@@ -444,16 +356,23 @@ class DUTSetup:
)
@staticmethod
- def pci_driver_unbind_list(node, *pci_addrs):
- """Unbind PCI devices from current driver on node.
+ def unbind_pci_devices_from_other_driver(node, driver, *pci_addrs):
+ """Unbind PCI devices from driver other than input driver on node.
:param node: DUT node.
+ :param driver: Driver to not unbind from. If None or empty string,
+ will attempt to unbind from the current driver.
:param pci_addrs: PCI device addresses.
:type node: dict
+ :type driver: str
:type pci_addrs: list
"""
for pci_addr in pci_addrs:
- DUTSetup.pci_driver_unbind(node, pci_addr)
+ cur_driver = DUTSetup.get_pci_dev_driver(node, pci_addr)
+ if not cur_driver:
+ return
+ if not driver or cur_driver != driver:
+ DUTSetup.pci_driver_unbind(node, pci_addr)
@staticmethod
def pci_driver_bind(node, pci_addr, driver):
@@ -650,60 +569,6 @@ class DUTSetup:
exec_cmd_no_error(node, command, timeout=30, sudo=True, message=message)
@staticmethod
- def install_vpp_on_all_duts(nodes, vpp_pkg_dir):
- """Install VPP on all DUT nodes. Start the VPP service in case of
- systemd is not available or does not support autostart.
-
- :param nodes: Nodes in the topology.
- :param vpp_pkg_dir: Path to directory where VPP packages are stored.
- :type nodes: dict
- :type vpp_pkg_dir: str
- :raises RuntimeError: If failed to remove or install VPP.
- """
- for node in nodes.values():
- message = f"Failed to install VPP on host {node[u'host']}!"
- if node[u"type"] == NodeType.DUT:
- command = u"ln -s /dev/null /etc/sysctl.d/80-vpp.conf || true"
- exec_cmd_no_error(node, command, sudo=True)
-
- command = u". /etc/lsb-release; echo \"${DISTRIB_ID}\""
- stdout, _ = exec_cmd_no_error(node, command)
-
- if stdout.strip() == u"Ubuntu":
- exec_cmd_no_error(
- node, u"apt-get purge -y '*vpp*' || true",
- timeout=120, sudo=True
- )
- # workaround to avoid installation of vpp-api-python
- exec_cmd_no_error(
- node, f"rm -f {vpp_pkg_dir}vpp-api-python.deb",
- timeout=120, sudo=True
- )
- exec_cmd_no_error(
- node, f"dpkg -i --force-all {vpp_pkg_dir}*.deb",
- timeout=120, sudo=True, message=message
- )
- exec_cmd_no_error(node, u"dpkg -l | grep vpp", sudo=True)
- if DUTSetup.running_in_container(node):
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
- else:
- exec_cmd_no_error(
- node, u"yum -y remove '*vpp*' || true",
- timeout=120, sudo=True
- )
- # workaround to avoid installation of vpp-api-python
- exec_cmd_no_error(
- node, f"rm -f {vpp_pkg_dir}vpp-api-python.rpm",
- timeout=120, sudo=True
- )
- exec_cmd_no_error(
- node, f"rpm -ivh {vpp_pkg_dir}*.rpm",
- timeout=120, sudo=True, message=message
- )
- exec_cmd_no_error(node, u"rpm -qai '*vpp*'", sudo=True)
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
-
- @staticmethod
def running_in_container(node):
"""This method tests if topology node is running inside container.
@@ -713,18 +578,15 @@ class DUTSetup:
to detect.
:rtype: bool
"""
- command = u"fgrep docker /proc/1/cgroup"
- message = u"Failed to get cgroup settings."
+ command = "cat /.dockerenv"
try:
- exec_cmd_no_error(
- node, command, timeout=30, sudo=False, message=message
- )
+ exec_cmd_no_error(node, command, timeout=30)
except RuntimeError:
return False
return True
@staticmethod
- def get_docker_mergeddir(node, uuid):
+ def get_docker_mergeddir(node, uuid=None):
"""Get Docker overlay for MergedDir diff.
:param node: DUT node.
@@ -735,8 +597,15 @@ class DUTSetup:
:rtype: str
:raises RuntimeError: If getting output failed.
"""
- command = f"docker inspect " \
+ if not uuid:
+ command = 'fgrep "hostname" /proc/self/mountinfo | cut -f 4 -d" "'
+ message = "Failed to get UUID!"
+ stdout, _ = exec_cmd_no_error(node, command, message=message)
+ uuid = stdout.split(sep="/")[-2]
+ command = (
+ f"docker inspect "
f"--format='{{{{.GraphDriver.Data.MergedDir}}}}' {uuid}"
+ )
message = f"Failed to get directory of {uuid} on host {node[u'host']}"
stdout, _ = exec_cmd_no_error(node, command, sudo=True, message=message)
diff --git a/resources/libraries/python/DpdkUtil.py b/resources/libraries/python/DpdkUtil.py
index 4a5983affb..8ee0dde850 100644
--- a/resources/libraries/python/DpdkUtil.py
+++ b/resources/libraries/python/DpdkUtil.py
@@ -37,10 +37,10 @@ class DpdkUtil:
)
# Add a PCI device in white list.
options.add_with_value_from_dict(
- u"w", u"eal_pci_whitelist0", kwargs
+ u"a", u"eal_pci_whitelist0", kwargs
)
options.add_with_value_from_dict(
- u"w", u"eal_pci_whitelist1", kwargs
+ u"a", u"eal_pci_whitelist1", kwargs
)
# Load an external driver. Multiple -d options are allowed.
options.add_with_value_if_from_dict(
@@ -219,10 +219,6 @@ class DpdkUtil:
options.add_equals_from_dict(
u"config", u"pmd_config", kwargs
)
- # Enables jumbo frames.
- options.add_if_from_dict(
- u"enable-jumbo", u"pmd_enable_jumbo", kwargs, False
- )
# Set the max packet length.
options.add_with_value_if_from_dict(
u"max-pkt-len", u"9200", u"pmd_max_pkt_len", kwargs, False
diff --git a/resources/libraries/python/FlowUtil.py b/resources/libraries/python/FlowUtil.py
index 3eb3b99519..054356b9a2 100644
--- a/resources/libraries/python/FlowUtil.py
+++ b/resources/libraries/python/FlowUtil.py
@@ -1,4 +1,4 @@
-# copyright (c) 2021 Intel and/or its affiliates.
+# copyright (c) 2023 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,12 +13,41 @@
"""Flow Utilities Library."""
+from enum import IntEnum
from ipaddress import ip_address
from resources.libraries.python.topology import Topology
from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+class FlowType(IntEnum):
+ """Flow types."""
+ FLOW_TYPE_ETHERNET = 1
+ FLOW_TYPE_IP4 = 2
+ FLOW_TYPE_IP6 = 3
+ FLOW_TYPE_IP4_L2TPV3OIP = 4
+ FLOW_TYPE_IP4_IPSEC_ESP = 5
+ FLOW_TYPE_IP4_IPSEC_AH = 6
+ FLOW_TYPE_IP4_N_TUPLE = 7
+ FLOW_TYPE_IP6_N_TUPLE = 8
+ FLOW_TYPE_IP4_VXLAN = 11
+ FLOW_TYPE_IP6_VXLAN = 12
+ FLOW_TYPE_IP4_GTPU = 14
+
+class FlowProto(IntEnum):
+ """Flow protocols."""
+ IP_API_PROTO_TCP = 6
+ IP_API_PROTO_UDP = 17
+ IP_API_PROTO_ESP = 50
+ IP_API_PROTO_AH = 51
+ IP_API_PROTO_L2TP = 115
+
+class FlowAction(IntEnum):
+ """Flow actions."""
+ FLOW_ACTION_MARK = 2
+ FLOW_ACTION_REDIRECT_TO_QUEUE = 16
+ FLOW_ACTION_DROP = 64
+
class FlowUtil:
"""Utilities for flow configuration."""
@@ -48,15 +77,13 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip4_n_tuple"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_N_TUPLE
+ flow_type = FlowType.FLOW_TYPE_IP4_N_TUPLE
if proto == u"TCP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_TCP
+ flow_proto = FlowProto.IP_API_PROTO_TCP
elif proto == u"UDP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_proto = FlowProto.IP_API_PROTO_UDP
else:
raise ValueError(f"proto error: {proto}")
@@ -99,15 +126,13 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip6_n_tuple"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP6_N_TUPLE
+ flow_type = FlowType.FLOW_TYPE_IP6_N_TUPLE
if proto == u"TCP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_TCP
+ flow_proto = FlowProto.IP_API_PROTO_TCP
elif proto == u"UDP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_proto = FlowProto.IP_API_PROTO_UDP
else:
raise ValueError(f"proto error: {proto}")
@@ -147,15 +172,13 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip4"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4
+ flow_type = FlowType.FLOW_TYPE_IP4
if proto == u"TCP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_TCP
+ flow_proto = FlowProto.IP_API_PROTO_TCP
elif proto == u"UDP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_proto = FlowProto.IP_API_PROTO_UDP
else:
raise ValueError(f"proto error: {proto}")
@@ -191,15 +214,13 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip6"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP6
+ flow_type = FlowType.FLOW_TYPE_IP6
if proto == u"TCP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_TCP
+ flow_proto = FlowProto.IP_API_PROTO_TCP
elif proto == u"UDP":
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_proto = FlowProto.IP_API_PROTO_UDP
else:
raise ValueError(f"proto error: {proto}")
@@ -237,11 +258,9 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip4_gtpu"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_GTPU
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_type = FlowType.FLOW_TYPE_IP4_GTPU
+ flow_proto = FlowProto.IP_API_PROTO_UDP
pattern = {
u'src_addr': {u'addr': src_ip, u'mask': u"255.255.255.255"},
@@ -273,16 +292,14 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
if proto == u"ESP":
flow = u"ip4_ipsec_esp"
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_ESP
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_IPSEC_ESP
+ flow_proto = FlowProto.IP_API_PROTO_ESP
+ flow_type = FlowType.FLOW_TYPE_IP4_IPSEC_ESP
elif proto == u"AH":
flow = u"ip4_ipsec_ah"
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_AH
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_IPSEC_AH
+ flow_proto = FlowProto.IP_API_PROTO_AH
+ flow_type = FlowType.FLOW_TYPE_IP4_IPSEC_AH
else:
raise ValueError(f"proto error: {proto}")
@@ -312,11 +329,9 @@ class FlowUtil:
:returns: flow_index.
:rtype: int
"""
- from vpp_papi import VppEnum
-
flow = u"ip4_l2tpv3oip"
- flow_proto = 115 # IP_API_PROTO_L2TP
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_L2TPV3OIP
+ flow_proto = FlowProto.IP_API_PROTO_L2TP
+ flow_type = FlowType.FLOW_TYPE_IP4_L2TPV3OIP
pattern = {
u'protocol': {u'prot': flow_proto},
@@ -347,11 +362,9 @@ class FlowUtil:
:type value: int
:returns: flow_index.
"""
- from vpp_papi import VppEnum
-
flow = u"ip4_vxlan"
- flow_type = VppEnum.vl_api_flow_type_t.FLOW_TYPE_IP4_VXLAN
- flow_proto = VppEnum.vl_api_ip_proto_t.IP_API_PROTO_UDP
+ flow_type = FlowType.FLOW_TYPE_IP4_VXLAN
+ flow_proto = FlowProto.IP_API_PROTO_UDP
pattern = {
u'src_addr': {u'addr': src_ip, u'mask': u"255.255.255.255"},
@@ -387,29 +400,26 @@ class FlowUtil:
:rtype: int
:raises ValueError: If action type is not supported.
"""
- from vpp_papi import VppEnum
-
- cmd = u"flow_add"
+ cmd = u"flow_add_v2"
if action == u"redirect-to-queue":
flow_rule = {
u'type': flow_type,
- u'actions': VppEnum.vl_api_flow_action_t.\
- FLOW_ACTION_REDIRECT_TO_QUEUE,
+ u'actions': FlowAction.FLOW_ACTION_REDIRECT_TO_QUEUE,
u'redirect_queue': value,
u'flow': {flow : pattern}
}
elif action == u"mark":
flow_rule = {
u'type': flow_type,
- u'actions': VppEnum.vl_api_flow_action_t.FLOW_ACTION_MARK,
+ u'actions': FlowAction.FLOW_ACTION_MARK,
u'mark_flow_id': value,
u'flow': {flow : pattern}
}
elif action == u"drop":
flow_rule = {
u'type': flow_type,
- u'actions': VppEnum.vl_api_flow_action_t.FLOW_ACTION_DROP,
+ u'actions': FlowAction.FLOW_ACTION_DROP,
u'flow': {flow : pattern}
}
else:
@@ -437,8 +447,6 @@ class FlowUtil:
:type flow_index: int
:returns: Nothing.
"""
- from vpp_papi import VppEnum
-
cmd = u"flow_enable"
sw_if_index = Topology.get_interface_sw_index(node, interface)
args = dict(
@@ -446,7 +454,7 @@ class FlowUtil:
hw_if_index=int(sw_if_index)
)
- err_msg = u"Failed to enable flow on host {node[u'host']}"
+ err_msg = f"Failed to enable flow on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@@ -463,8 +471,6 @@ class FlowUtil:
:type flow_index: int
:returns: Nothing.
"""
- from vpp_papi import VppEnum
-
cmd = u"flow_disable"
sw_if_index = Topology.get_interface_sw_index(node, interface)
args = dict(
@@ -487,8 +493,6 @@ class FlowUtil:
:type flow_index: int
:returns: Nothing.
"""
- from vpp_papi import VppEnum
-
cmd = u"flow_del"
args = dict(
flow_index=int(flow_index)
@@ -508,8 +512,6 @@ class FlowUtil:
:returns: flow entry.
:rtype: str
"""
- from vpp_papi import VppEnum
-
cmd = u"vppctl show flow entry"
err_msg = u"Failed to show flow on host {node[u'host']}"
@@ -545,8 +547,6 @@ class FlowUtil:
:raises RuntimeError: If the verification of flow action fails.
:raises ValueError: If action type is not supported.
"""
- from vpp_papi import VppEnum
-
err_msg = f"Failed to show trace on host {node[u'host']}"
cmd = u"vppctl show trace"
stdout, _ = exec_cmd_no_error(
diff --git a/resources/libraries/python/HoststackUtil.py b/resources/libraries/python/HoststackUtil.py
index 7e6ba56913..399395d41a 100644
--- a/resources/libraries/python/HoststackUtil.py
+++ b/resources/libraries/python/HoststackUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,9 +17,12 @@ from time import sleep
from robot.api import logger
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
-from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.DUTSetup import DUTSetup
+from resources.libraries.python.model.ExportResult import (
+ export_hoststack_results
+)
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
class HoststackUtil():
"""Utilities for Host Stack tests."""
@@ -41,7 +44,7 @@ class HoststackUtil():
vpp_echo_cmd = {}
vpp_echo_cmd[u"name"] = u"vpp_echo"
vpp_echo_cmd[u"args"] = f"{vpp_echo_attributes[u'role']} " \
- f"socket-name {vpp_echo_attributes[u'vpp_api_socket']} " \
+ f"socket-name {vpp_echo_attributes[u'app_api_socket']} " \
f"{vpp_echo_attributes[u'json_output']} " \
f"uri {proto}://{addr}/{port} " \
f"nthreads {vpp_echo_attributes[u'nthreads']} " \
@@ -56,6 +59,8 @@ class HoststackUtil():
vpp_echo_cmd[u"args"] += u" rx-results-diff"
if vpp_echo_attributes[u"tx_results_diff"]:
vpp_echo_cmd[u"args"] += u" tx-results-diff"
+ if vpp_echo_attributes[u"use_app_socket_api"]:
+ vpp_echo_cmd[u"args"] += u" use-app-socket-api"
return vpp_echo_cmd
@staticmethod
@@ -84,7 +89,6 @@ class HoststackUtil():
ip_address = f" {iperf3_attributes[u'ip_address']}" if u"ip_address" \
in iperf3_attributes else u""
iperf3_cmd[u"name"] = u"iperf3"
- # TODO: Use OptionString library.
iperf3_cmd[u"args"] = f"--{iperf3_attributes[u'role']}{ip_address} " \
f"--interval 0{json_results} " \
f"--version{iperf3_attributes[u'ip_version']}"
@@ -152,15 +156,14 @@ class HoststackUtil():
raise
@staticmethod
- def get_hoststack_test_program_logs(node, program):
+ def _get_hoststack_test_program_logs(node, program_name):
"""Get HostStack test program stdout log.
:param node: DUT node.
- :param program: test program.
+ :param program_name: test program.
:type node: dict
- :type program: dict
+ :type program_name: str
"""
- program_name = program[u"name"]
cmd = f"sh -c \'cat /tmp/{program_name}_stdout.log\'"
stdout_log, _ = exec_cmd_no_error(node, cmd, sudo=True, \
message=f"Get {program_name} stdout log failed!")
@@ -168,9 +171,30 @@ class HoststackUtil():
cmd = f"sh -c \'cat /tmp/{program_name}_stderr.log\'"
stderr_log, _ = exec_cmd_no_error(node, cmd, sudo=True, \
message=f"Get {program_name} stderr log failed!")
+
return stdout_log, stderr_log
@staticmethod
+ def get_hoststack_test_program_logs(node, program):
+ """Get HostStack test program stdout log.
+
+ :param node: DUT node.
+ :param program: test program.
+ :type node: dict
+ :type program: dict
+ """
+ program_name = program[u"name"]
+ program_stdout_log, program_stderr_log = \
+ HoststackUtil._get_hoststack_test_program_logs(node,
+ program_name)
+ if len(program_stdout_log) == 0 and len(program_stderr_log) == 0:
+ logger.trace(f"Retrying {program_name} log retrieval")
+ program_stdout_log, program_stderr_log = \
+ HoststackUtil._get_hoststack_test_program_logs(node,
+ program_name)
+ return program_stdout_log, program_stderr_log
+
+ @staticmethod
def get_nginx_command(nginx_attributes, nginx_version, nginx_ins_dir):
"""Construct the NGINX command using the specified attributes.
@@ -274,22 +298,69 @@ class HoststackUtil():
exec_cmd_no_error(node, cmd, message=errmsg, sudo=True)
@staticmethod
- def hoststack_test_program_finished(node, program_pid):
+ def hoststack_test_program_finished(node, program_pid, program,
+ other_node, other_program):
"""Wait for the specified HostStack test program process to complete.
:param node: DUT node.
:param program_pid: test program pid.
+ :param program: test program
+ :param other_node: DUT node of other hoststack program
+ :param other_program: other test program
:type node: dict
:type program_pid: str
+ :type program: dict
+ :type other_node: dict
+ :type other_program: dict
:raises RuntimeError: If node subtype is not a DUT.
"""
if node[u"type"] != u"DUT":
raise RuntimeError(u"Node type is not a DUT!")
+ if other_node[u"type"] != u"DUT":
+ raise RuntimeError(u"Other node type is not a DUT!")
cmd = f"sh -c 'strace -qqe trace=none -p {program_pid}'"
- exec_cmd(node, cmd, sudo=True)
+ try:
+ exec_cmd(node, cmd, sudo=True)
+ except:
+ sleep(180)
+ if u"client" in program[u"args"]:
+ role = u"client"
+ else:
+ role = u"server"
+ program_stdout, program_stderr = \
+ HoststackUtil.get_hoststack_test_program_logs(node, program)
+ if len(program_stdout) > 0:
+ logger.debug(f"{program[u'name']} {role} stdout log:\n"
+ f"{program_stdout}")
+ else:
+ logger.debug(f"Empty {program[u'name']} {role} stdout log :(")
+ if len(program_stderr) > 0:
+ logger.debug(f"{program[u'name']} stderr log:\n"
+ f"{program_stderr}")
+ else:
+ logger.debug(f"Empty {program[u'name']} stderr log :(")
+ if u"client" in other_program[u"args"]:
+ role = u"client"
+ else:
+ role = u"server"
+ program_stdout, program_stderr = \
+ HoststackUtil.get_hoststack_test_program_logs(other_node,
+ other_program)
+ if len(program_stdout) > 0:
+ logger.debug(f"{other_program[u'name']} {role} stdout log:\n"
+ f"{program_stdout}")
+ else:
+ logger.debug(f"Empty {other_program[u'name']} "
+ f"{role} stdout log :(")
+ if len(program_stderr) > 0:
+ logger.debug(f"{other_program[u'name']} {role} stderr log:\n"
+ f"{program_stderr}")
+ else:
+ logger.debug(f"Empty {other_program[u'name']} "
+ f"{role} stderr log :(")
+ raise
# Wait a bit for stdout/stderr to be flushed to log files
- # TODO: see if sub-second sleep works e.g. sleep(0.1)
sleep(1)
@staticmethod
@@ -323,10 +394,6 @@ class HoststackUtil():
program_name = program[u"name"]
program_stdout, program_stderr = \
HoststackUtil.get_hoststack_test_program_logs(node, program)
- if len(program_stdout) == 0 and len(program_stderr) == 0:
- logger.trace(f"Retrying {program_name} log retrieval")
- program_stdout, program_stderr = \
- HoststackUtil.get_hoststack_test_program_logs(node, program)
env_vars = f"{program[u'env_vars']} " if u"env_vars" in program else u""
program_cmd = f"{env_vars}{program_name} {program[u'args']}"
@@ -346,7 +413,6 @@ class HoststackUtil():
f"bits/sec, pkt-drop-rate {nsim_attr[u'packets_per_drop']} " \
f"pkts/drop\n"
- # TODO: Incorporate show error stats into results analysis
test_results += \
f"\n{role} VPP 'show errors' on host {node[u'host']}:\n" \
f"{PapiSocketExecutor.run_cli_cmd(node, u'show error')}\n"
@@ -364,18 +430,28 @@ class HoststackUtil():
if u"JSON stats" in program_stdout and \
u'"has_failed": "0"' in program_stdout:
json_start = program_stdout.find(u"{")
- #TODO: Fix parsing once vpp_echo produces valid
- # JSON output. Truncate for now.
json_end = program_stdout.find(u',\n "closing"')
json_results = f"{program_stdout[json_start:json_end]}\n}}"
program_json = json.loads(json_results)
+ export_hoststack_results(
+ bandwidth=program_json["rx_bits_per_second"],
+ duration=float(program_json["time"])
+ )
else:
test_results += u"Invalid test data output!\n" + program_stdout
return (True, test_results)
elif program[u"name"] == u"iperf3":
test_results += program_stdout
- iperf3_json = json.loads(program_stdout)
- program_json = iperf3_json[u"intervals"][0][u"sum"]
+ program_json = json.loads(program_stdout)[u"intervals"][0][u"sum"]
+ try:
+ retransmits = program_json["retransmits"]
+ except KeyError:
+ retransmits = None
+ export_hoststack_results(
+ bandwidth=program_json["bits_per_second"],
+ duration=program_json["seconds"],
+ retransmits=retransmits
+ )
else:
test_results += u"Unknown HostStack Test Program!\n" + \
program_stdout
diff --git a/resources/libraries/python/IPTopology.py b/resources/libraries/python/IPTopology.py
new file mode 100644
index 0000000000..3b459cd156
--- /dev/null
+++ b/resources/libraries/python/IPTopology.py
@@ -0,0 +1,177 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""IP Topology Library."""
+
+from robot.libraries.BuiltIn import BuiltIn
+
+from resources.libraries.python.IPUtil import IPUtil
+
+
+class IPTopology:
+ """IP Topology Library."""
+
+ @staticmethod
+ def initialize_ipv4_forwarding(count=1, pfs=2, route_prefix=32):
+ """
+ Custom setup of IPv4 forwarding with scalability of IP routes on all
+ DUT nodes in 2-node / 3-node circular topology.
+
+ :param count: Number of routes to configure.
+ :param pfs: Number of physical interfaces to configure.
+ :param route_prefix: Route prefix to configure.
+ :type count: int
+ :type pfs: int
+ :type route_prefix: int
+ """
+ topology = BuiltIn().get_variable_value("&{topology_info}")
+ dut = topology["duts"][-1]
+ ifl = BuiltIn().get_variable_value("${int}")
+
+ for l, i in zip(range(pfs // 2), range(1, pfs, 2)):
+ dut1_int1 = BuiltIn().get_variable_value(f"${{DUT1_{ifl}{i}}}[0]")
+ dut1_int2 = BuiltIn().get_variable_value(f"${{DUT1_{ifl}{i+1}}}[0]")
+ dut_int1 = BuiltIn().get_variable_value(f"${{{dut}_{ifl}{i}}}[0]")
+ dut_int2 = BuiltIn().get_variable_value(f"${{{dut}_{ifl}{i+1}}}[0]")
+
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT1"], dut1_int1, f"1.{l}.1.1",
+ topology[f"TG_pf{i}_mac"][0]
+ )
+ if dut == "DUT2":
+ dut_mac1 = BuiltIn().get_variable_value(
+ f"${{{dut}_{ifl}{i}_mac}}[0]"
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT1"], dut1_int2, f"3.{l}.3.2", dut_mac1
+ )
+ dut_mac2 = BuiltIn().get_variable_value(
+ f"${{DUT1_{ifl}{i+1}_mac}}[0]"
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT2"], dut_int1, f"3.{l}.3.1", dut_mac2
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology[dut], dut_int2, f"2.{l}.2.1",
+ topology[f"TG_pf{i+1}_mac"][0]
+ )
+
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT1"], dut1_int1, f"1.{l}.1.2", 30
+ )
+ if dut == "DUT2":
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT1"], dut1_int2, f"3.{l}.3.1", 30
+ )
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT2"], dut_int1, f"3.{l}.3.2", 30
+ )
+ IPUtil.vpp_interface_set_ip_address(
+ topology[dut], dut_int2, f"2.{l}.2.2", 30
+ )
+
+ IPUtil.vpp_route_add(
+ topology["DUT1"], f"{i}0.0.0.0", route_prefix,
+ gateway=f"1.{l}.1.1", interface=dut1_int1, count=count
+ )
+ if dut == "DUT2":
+ IPUtil.vpp_route_add(
+ topology["DUT1"], f"{i+1}0.0.0.0", route_prefix,
+ gateway=f"3.{l}.3.2", interface=dut1_int2, count=count
+ )
+ IPUtil.vpp_route_add(
+ topology["DUT2"], f"{i}0.0.0.0", route_prefix,
+ gateway=f"3.{l}.3.1", interface=dut_int1, count=count
+ )
+ IPUtil.vpp_route_add(
+ topology[dut], f"{i+1}0.0.0.0", route_prefix,
+ gateway=f"2.{l}.2.1", interface=dut_int2, count=count
+ )
+
+
+ @staticmethod
+ def initialize_ipv6_forwarding(count=1, pfs=2, route_prefix=128):
+ """
+ Custom setup of IPv6 forwarding with scalability of IP routes on all
+ DUT nodes in 2-node / 3-node circular topology.
+
+ :param count: Number of routes to configure.
+ :param pfs: Number of physical interfaces to configure.
+ :param route_prefix: Route prefix to configure.
+ :type count: int
+ :type pfs: int
+ :type route_prefix: int
+ """
+ topology = BuiltIn().get_variable_value("&{topology_info}")
+ dut = topology["duts"][-1]
+ ifl = BuiltIn().get_variable_value("${int}")
+
+ for l, i in zip(range(pfs // 2), range(1, pfs, 2)):
+ dut1_int1 = BuiltIn().get_variable_value(f"${{DUT1_{ifl}{i}}}[0]")
+ dut1_int2 = BuiltIn().get_variable_value(f"${{DUT1_{ifl}{i+1}}}[0]")
+ dut_int1 = BuiltIn().get_variable_value(f"${{{dut}_{ifl}{i}}}[0]")
+ dut_int2 = BuiltIn().get_variable_value(f"${{{dut}_{ifl}{i+1}}}[0]")
+
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT1"], dut1_int1, f"2001:{l}::1",
+ topology[f"TG_pf{i}_mac"][0]
+ )
+ if dut == "DUT2":
+ dut_mac1 = BuiltIn().get_variable_value(
+ f"${{{dut}_{ifl}{i}_mac}}[0]"
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT1"], dut1_int2, f"2003:{l}::2", dut_mac1
+ )
+ dut_mac2 = BuiltIn().get_variable_value(
+ f"${{DUT1_{ifl}{i+1}_mac}}[0]"
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology["DUT2"], dut_int1, f"2003:{l}::1", dut_mac2
+ )
+ IPUtil.vpp_add_ip_neighbor(
+ topology[dut], dut_int2, f"2002:{l}::1",
+ topology[f"TG_pf{i+1}_mac"][0]
+ )
+
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT1"], dut1_int1, f"2001:{l}::2", 64
+ )
+ if dut == "DUT2":
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT1"], dut1_int2, f"2003:{l}::1", 64
+ )
+ IPUtil.vpp_interface_set_ip_address(
+ topology["DUT2"], dut_int1, f"2003:{l}::2", 64
+ )
+ IPUtil.vpp_interface_set_ip_address(
+ topology[dut], dut_int2, f"2002:{l}::2", 64
+ )
+
+ IPUtil.vpp_route_add(
+ topology["DUT1"], f"2{i}00::0", route_prefix,
+ gateway=f"2001:{l}::1", interface=dut1_int1, count=count
+ )
+ if dut == "DUT2":
+ IPUtil.vpp_route_add(
+ topology["DUT1"], f"2{i+1}00::0", route_prefix,
+ gateway=f"2003:{l}::2", interface=dut1_int2, count=count
+ )
+ IPUtil.vpp_route_add(
+ topology["DUT2"], f"2{i}00::0", route_prefix,
+ gateway=f"2003:{l}::1", interface=dut_int1, count=count
+ )
+ IPUtil.vpp_route_add(
+ topology[dut], f"2{i+1}00::0", route_prefix,
+ gateway=f"2002:{l}::1", interface=dut_int2, count=count
+ )
diff --git a/resources/libraries/python/IPUtil.py b/resources/libraries/python/IPUtil.py
index 4a5a413fc8..933fa34211 100644
--- a/resources/libraries/python/IPUtil.py
+++ b/resources/libraries/python/IPUtil.py
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech s.r.o.
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2023 PANTHEON.tech s.r.o.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -15,7 +15,6 @@
"""Common IP utilities library."""
import re
-import os
from enum import IntEnum
@@ -28,7 +27,6 @@ from resources.libraries.python.IPAddress import IPAddress
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
from resources.libraries.python.topology import Topology
-from resources.libraries.python.VatExecutor import VatExecutor
from resources.libraries.python.Namespaces import Namespaces
@@ -738,52 +736,6 @@ class IPUtil:
"""
count = kwargs.get(u"count", 1)
- if count > 100:
- if not kwargs.get(u"multipath", True):
- raise RuntimeError(u"VAT exec supports only multipath behavior")
- gateway = kwargs.get(u"gateway", u"")
- interface = kwargs.get(u"interface", u"")
- local = kwargs.get(u"local", u"")
- if interface:
- interface = InterfaceUtil.vpp_get_interface_name(
- node, InterfaceUtil.get_interface_index(
- node, interface
- )
- )
- vrf = kwargs.get(u"vrf", None)
- trailers = list()
- if vrf:
- trailers.append(f"table {vrf}")
- if gateway:
- trailers.append(f"via {gateway}")
- if interface:
- trailers.append(interface)
- elif interface:
- trailers.append(f"via {interface}")
- if local:
- if gateway or interface:
- raise RuntimeError(u"Unsupported combination with local.")
- trailers.append(u"local")
- trailer = u" ".join(trailers)
- command_parts = [u"exec ip route add", u"network goes here"]
- if trailer:
- command_parts.append(trailer)
- netiter = NetworkIncrement(
- ip_network(f"{network}/{prefix_len}", strict=strict),
- format=u"slash"
- )
- tmp_filename = u"/tmp/routes.config"
- with open(tmp_filename, u"w") as tmp_file:
- for _ in range(count):
- command_parts[1] = netiter.inc_fmt()
- print(u" ".join(command_parts), file=tmp_file)
- VatExecutor().execute_script(
- tmp_filename, node, timeout=1800, json_out=False,
- copy_on_execute=True, history=False
- )
- os.remove(tmp_filename)
- return
-
cmd = u"ip_route_add_del"
args = dict(
is_add=True,
@@ -796,7 +748,7 @@ class IPUtil:
ip_network(f"{network}/{prefix_len}", strict=strict),
format=u"addr"
)
- with PapiSocketExecutor(node) as papi_exec:
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(count):
args[u"route"] = IPUtil.compose_vpp_route_structure(
node, netiter.inc_fmt(), prefix_len, **kwargs
diff --git a/resources/libraries/python/IPsecUtil.py b/resources/libraries/python/IPsecUtil.py
index e455dd7a88..59374ab73f 100644
--- a/resources/libraries/python/IPsecUtil.py
+++ b/resources/libraries/python/IPsecUtil.py
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech s.r.o.
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Copyright (c) 2024 PANTHEON.tech s.r.o.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -14,32 +14,41 @@
"""IPsec utilities library."""
-import os
-
from enum import Enum, IntEnum
-from io import open
-from ipaddress import ip_network, ip_address
+from io import open, TextIOWrapper
+from ipaddress import ip_network, ip_address, IPv4Address, IPv6Address
from random import choice
from string import ascii_letters
+from typing import Iterable, List, Optional, Sequence, Tuple, Union
+
+from robot.libraries.BuiltIn import BuiltIn
from resources.libraries.python.Constants import Constants
+from resources.libraries.python.enum_util import get_enum_instance
from resources.libraries.python.IncrementUtil import ObjIncrement
-from resources.libraries.python.InterfaceUtil import InterfaceUtil, \
- InterfaceStatusFlags
+from resources.libraries.python.InterfaceUtil import (
+ InterfaceUtil,
+ InterfaceStatusFlags,
+)
from resources.libraries.python.IPAddress import IPAddress
-from resources.libraries.python.IPUtil import IPUtil, IpDscp, \
- MPLS_LABEL_INVALID, NetworkIncrement
+from resources.libraries.python.IPUtil import (
+ IPUtil,
+ IpDscp,
+ MPLS_LABEL_INVALID,
+ NetworkIncrement,
+)
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.ssh import scp_node
from resources.libraries.python.topology import Topology, NodeType
-from resources.libraries.python.VatExecutor import VatExecutor
from resources.libraries.python.VPPUtil import VPPUtil
+from resources.libraries.python.FlowUtil import FlowUtil
-IPSEC_UDP_PORT_NONE = 0xffff
+IPSEC_UDP_PORT_DEFAULT = 4500
+IPSEC_REPLAY_WINDOW_DEFAULT = 64
-def gen_key(length):
+def gen_key(length: int) -> bytes:
"""Generate random string as a key.
:param length: Length of generated payload.
@@ -47,63 +56,110 @@ def gen_key(length):
:returns: The generated payload.
:rtype: bytes
"""
- return u"".join(
- choice(ascii_letters) for _ in range(length)
- ).encode(encoding=u"utf-8")
+ return "".join(choice(ascii_letters) for _ in range(length)).encode(
+ encoding="utf-8"
+ )
-class PolicyAction(Enum):
- """Policy actions."""
- BYPASS = (u"bypass", 0)
- DISCARD = (u"discard", 1)
- PROTECT = (u"protect", 3)
+# TODO: Introduce a metaclass that adds .find and .InputType automatically?
+class IpsecSpdAction(Enum):
+ """IPsec SPD actions.
+
+ Mirroring VPP: src/vnet/ipsec/ipsec_types.api enum ipsec_spd_action.
+ """
- def __init__(self, policy_name, policy_int_repr):
- self.policy_name = policy_name
- self.policy_int_repr = policy_int_repr
+ BYPASS = NONE = ("bypass", 0)
+ DISCARD = ("discard", 1)
+ RESOLVE = ("resolve", 2)
+ PROTECT = ("protect", 3)
- def __str__(self):
- return self.policy_name
+ def __init__(self, action_name: str, action_int_repr: int):
+ self.action_name = action_name
+ self.action_int_repr = action_int_repr
- def __int__(self):
- return self.policy_int_repr
+ def __str__(self) -> str:
+ return self.action_name
+
+ def __int__(self) -> int:
+ return self.action_int_repr
class CryptoAlg(Enum):
"""Encryption algorithms."""
- AES_CBC_128 = (u"aes-cbc-128", 1, u"AES-CBC", 16)
- AES_CBC_256 = (u"aes-cbc-256", 3, u"AES-CBC", 32)
- AES_GCM_128 = (u"aes-gcm-128", 7, u"AES-GCM", 16)
- AES_GCM_256 = (u"aes-gcm-256", 9, u"AES-GCM", 32)
- def __init__(self, alg_name, alg_int_repr, scapy_name, key_len):
+ NONE = ("none", 0, "none", 0)
+ AES_CBC_128 = ("aes-cbc-128", 1, "AES-CBC", 16)
+ AES_CBC_256 = ("aes-cbc-256", 3, "AES-CBC", 32)
+ AES_GCM_128 = ("aes-gcm-128", 7, "AES-GCM", 16)
+ AES_GCM_256 = ("aes-gcm-256", 9, "AES-GCM", 32)
+
+ def __init__(
+ self, alg_name: str, alg_int_repr: int, scapy_name: str, key_len: int
+ ):
self.alg_name = alg_name
self.alg_int_repr = alg_int_repr
self.scapy_name = scapy_name
self.key_len = key_len
+ # TODO: Investigate if __int__ works with PAPI. It was not enough for "if".
+ def __bool__(self):
+ """A shorthand to enable "if crypto_alg:" constructs."""
+ return self.alg_int_repr != 0
+
class IntegAlg(Enum):
"""Integrity algorithm."""
- SHA_256_128 = (u"sha-256-128", 4, u"SHA2-256-128", 32)
- SHA_512_256 = (u"sha-512-256", 6, u"SHA2-512-256", 64)
- def __init__(self, alg_name, alg_int_repr, scapy_name, key_len):
+ NONE = ("none", 0, "none", 0)
+ SHA_256_128 = ("sha-256-128", 4, "SHA2-256-128", 32)
+ SHA_512_256 = ("sha-512-256", 6, "SHA2-512-256", 64)
+
+ def __init__(
+ self, alg_name: str, alg_int_repr: int, scapy_name: str, key_len: int
+ ):
self.alg_name = alg_name
self.alg_int_repr = alg_int_repr
self.scapy_name = scapy_name
self.key_len = key_len
+ def __bool__(self):
+ """A shorthand to enable "if integ_alg:" constructs."""
+ return self.alg_int_repr != 0
+
+# TODO: Base on Enum, so str values can be defined as in alg enums?
class IPsecProto(IntEnum):
- """IPsec protocol."""
- IPSEC_API_PROTO_ESP = 50
- IPSEC_API_PROTO_AH = 51
+ """IPsec protocol.
+
+ Mirroring VPP: src/vnet/ipsec/ipsec_types.api enum ipsec_proto.
+ """
+
+ ESP = 50
+ AH = 51
+ NONE = 255
+
+ def __str__(self) -> str:
+ """Return string suitable for CLI commands.
+ None is not supported.
+ :returns: Lowercase name of the proto.
+ :rtype: str
+ :raises: ValueError if the numeric value is not recognized.
+ """
+ num = int(self)
+ if num == 50:
+ return "esp"
+ if num == 51:
+ return "ah"
+ raise ValueError(f"String form not defined for IPsecProto {num}")
+
+
+# The rest of enums do not appear outside this file, so no no change needed yet.
class IPsecSadFlags(IntEnum):
"""IPsec Security Association Database flags."""
- IPSEC_API_SAD_FLAG_NONE = 0
+
+ IPSEC_API_SAD_FLAG_NONE = NONE = 0
# Enable extended sequence numbers
IPSEC_API_SAD_FLAG_USE_ESN = 0x01
# Enable Anti - replay
@@ -121,7 +177,8 @@ class IPsecSadFlags(IntEnum):
class TunnelEncpaDecapFlags(IntEnum):
"""Flags controlling tunnel behaviour."""
- TUNNEL_API_ENCAP_DECAP_FLAG_NONE = 0
+
+ TUNNEL_API_ENCAP_DECAP_FLAG_NONE = NONE = 0
# at encap, copy the DF bit of the payload into the tunnel header
TUNNEL_API_ENCAP_DECAP_FLAG_ENCAP_COPY_DF = 1
# at encap, set the DF bit in the tunnel header
@@ -136,186 +193,104 @@ class TunnelEncpaDecapFlags(IntEnum):
class TunnelMode(IntEnum):
"""Tunnel modes."""
+
# point-to-point
- TUNNEL_API_MODE_P2P = 0
+ TUNNEL_API_MODE_P2P = NONE = 0
# multi-point
TUNNEL_API_MODE_MP = 1
-class IPsecUtil:
- """IPsec utilities."""
-
- @staticmethod
- def policy_action_bypass():
- """Return policy action bypass.
+# Derived types for type hints, based on capabilities of get_enum_instance.
+IpsecSpdAction.InputType = Union[IpsecSpdAction, str, None]
+CryptoAlg.InputType = Union[CryptoAlg, str, None]
+IntegAlg.InputType = Union[IntegAlg, str, None]
+IPsecProto.InputType = Union[IPsecProto, str, int, None]
+# TODO: Introduce a metaclass that adds .find and .InputType automatically?
- :returns: PolicyAction enum BYPASS object.
- :rtype: PolicyAction
- """
- return PolicyAction.BYPASS
- @staticmethod
- def policy_action_discard():
- """Return policy action discard.
-
- :returns: PolicyAction enum DISCARD object.
- :rtype: PolicyAction
- """
- return PolicyAction.DISCARD
-
- @staticmethod
- def policy_action_protect():
- """Return policy action protect.
-
- :returns: PolicyAction enum PROTECT object.
- :rtype: PolicyAction
- """
- return PolicyAction.PROTECT
-
- @staticmethod
- def crypto_alg_aes_cbc_128():
- """Return encryption algorithm aes-cbc-128.
-
- :returns: CryptoAlg enum AES_CBC_128 object.
- :rtype: CryptoAlg
- """
- return CryptoAlg.AES_CBC_128
-
- @staticmethod
- def crypto_alg_aes_cbc_256():
- """Return encryption algorithm aes-cbc-256.
-
- :returns: CryptoAlg enum AES_CBC_256 object.
- :rtype: CryptoAlg
- """
- return CryptoAlg.AES_CBC_256
-
- @staticmethod
- def crypto_alg_aes_gcm_128():
- """Return encryption algorithm aes-gcm-128.
-
- :returns: CryptoAlg enum AES_GCM_128 object.
- :rtype: CryptoAlg
- """
- return CryptoAlg.AES_GCM_128
-
- @staticmethod
- def crypto_alg_aes_gcm_256():
- """Return encryption algorithm aes-gcm-256.
+class IPsecUtil:
+ """IPsec utilities."""
- :returns: CryptoAlg enum AES_GCM_128 object.
- :rtype: CryptoAlg
- """
- return CryptoAlg.AES_GCM_256
+ # The following 4 methods are Python one-liners,
+ # but they are useful when called as a Robot keyword.
@staticmethod
- def get_crypto_alg_key_len(crypto_alg):
+ def get_crypto_alg_key_len(crypto_alg: CryptoAlg.InputType) -> int:
"""Return encryption algorithm key length.
+ This is a Python one-liner, but useful when called as a Robot keyword.
+
:param crypto_alg: Encryption algorithm.
- :type crypto_alg: CryptoAlg
+ :type crypto_alg: CryptoAlg.InputType
:returns: Key length.
:rtype: int
"""
- return crypto_alg.key_len
+ return get_enum_instance(CryptoAlg, crypto_alg).key_len
@staticmethod
- def get_crypto_alg_scapy_name(crypto_alg):
+ def get_crypto_alg_scapy_name(crypto_alg: CryptoAlg.InputType) -> str:
"""Return encryption algorithm scapy name.
+ This is a Python one-liner, but useful when called as a Robot keyword.
+
:param crypto_alg: Encryption algorithm.
- :type crypto_alg: CryptoAlg
+ :type crypto_alg: CryptoAlg.InputType
:returns: Algorithm scapy name.
:rtype: str
"""
- return crypto_alg.scapy_name
+ return get_enum_instance(CryptoAlg, crypto_alg).scapy_name
+ # The below to keywords differ only by enum type conversion from str.
@staticmethod
- def integ_alg_sha_256_128():
- """Return integrity algorithm SHA-256-128.
-
- :returns: IntegAlg enum SHA_256_128 object.
- :rtype: IntegAlg
- """
- return IntegAlg.SHA_256_128
-
- @staticmethod
- def integ_alg_sha_512_256():
- """Return integrity algorithm SHA-512-256.
-
- :returns: IntegAlg enum SHA_512_256 object.
- :rtype: IntegAlg
- """
- return IntegAlg.SHA_512_256
-
- @staticmethod
- def get_integ_alg_key_len(integ_alg):
+ def get_integ_alg_key_len(integ_alg: IntegAlg.InputType) -> int:
"""Return integrity algorithm key length.
- None argument is accepted, returning zero.
-
:param integ_alg: Integrity algorithm.
- :type integ_alg: Optional[IntegAlg]
+ :type integ_alg: IntegAlg.InputType
:returns: Key length.
:rtype: int
"""
- return 0 if integ_alg is None else integ_alg.key_len
+ return get_enum_instance(IntegAlg, integ_alg).key_len
@staticmethod
- def get_integ_alg_scapy_name(integ_alg):
+ def get_integ_alg_scapy_name(integ_alg: IntegAlg.InputType) -> str:
"""Return integrity algorithm scapy name.
:param integ_alg: Integrity algorithm.
- :type integ_alg: IntegAlg
+ :type integ_alg: IntegAlg.InputType
:returns: Algorithm scapy name.
:rtype: str
"""
- return integ_alg.scapy_name
+ return get_enum_instance(IntegAlg, integ_alg).scapy_name
@staticmethod
- def ipsec_proto_esp():
- """Return IPSec protocol ESP.
-
- :returns: IPsecProto enum ESP object.
- :rtype: IPsecProto
- """
- return int(IPsecProto.IPSEC_API_PROTO_ESP)
-
- @staticmethod
- def ipsec_proto_ah():
- """Return IPSec protocol AH.
-
- :returns: IPsecProto enum AH object.
- :rtype: IPsecProto
- """
- return int(IPsecProto.IPSEC_API_PROTO_AH)
-
- @staticmethod
- def vpp_ipsec_select_backend(node, protocol, index=1):
+ def vpp_ipsec_select_backend(
+ node: dict, proto: IPsecProto.InputType, index: int = 1
+ ) -> None:
"""Select IPsec backend.
:param node: VPP node to select IPsec backend on.
- :param protocol: IPsec protocol.
+ :param proto: IPsec protocol.
:param index: Backend index.
:type node: dict
- :type protocol: IPsecProto
+ :type proto: IPsecProto.InputType
:type index: int
:raises RuntimeError: If failed to select IPsec backend or if no API
reply received.
"""
- cmd = u"ipsec_select_backend"
- err_msg = f"Failed to select IPsec backend on host {node[u'host']}"
- args = dict(
- protocol=protocol,
- index=index
- )
+ proto = get_enum_instance(IPsecProto, proto)
+ cmd = "ipsec_select_backend"
+ err_msg = f"Failed to select IPsec backend on host {node['host']}"
+ args = dict(protocol=proto, index=index)
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def vpp_ipsec_set_async_mode(node, async_enable=1):
+ def vpp_ipsec_set_async_mode(node: dict, async_enable: int = 1) -> None:
"""Set IPsec async mode on|off.
+ Unconditionally, attempt to switch crypto dispatch into polling mode.
+
:param node: VPP node to set IPsec async mode.
:param async_enable: Async mode on or off.
:type node: dict
@@ -323,17 +298,26 @@ class IPsecUtil:
:raises RuntimeError: If failed to set IPsec async mode or if no API
reply received.
"""
- cmd = u"ipsec_set_async_mode"
- err_msg = f"Failed to set IPsec async mode on host {node[u'host']}"
- args = dict(
- async_enable=async_enable
- )
with PapiSocketExecutor(node) as papi_exec:
+ cmd = "ipsec_set_async_mode"
+ err_msg = f"Failed to set IPsec async mode on host {node['host']}"
+ args = dict(async_enable=async_enable)
papi_exec.add(cmd, **args).get_reply(err_msg)
+ cmd = "crypto_set_async_dispatch_v2"
+ err_msg = "Failed to set dispatch mode."
+ args = dict(mode=0, adaptive=False)
+ try:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
+ except (AttributeError, RuntimeError):
+ # Expected when VPP build does not have the _v2 yet
+ # (after and before the first CRC check).
+ # TODO: Fail here when testing of pre-23.10 builds is over.
+ pass
@staticmethod
def vpp_ipsec_crypto_sw_scheduler_set_worker(
- node, workers, crypto_enable=False):
+ node: dict, workers: Iterable[int], crypto_enable: bool = False
+ ) -> None:
"""Enable or disable crypto on specific vpp worker threads.
:param node: VPP node to enable or disable crypto for worker threads.
@@ -346,39 +330,40 @@ class IPsecUtil:
thread or if no API reply received.
"""
for worker in workers:
- cmd = u"crypto_sw_scheduler_set_worker"
- err_msg = f"Failed to disable/enable crypto for worker thread " \
- f"on host {node[u'host']}"
- args = dict(
- worker_index=worker - 1,
- crypto_enable=crypto_enable
+ cmd = "crypto_sw_scheduler_set_worker"
+ err_msg = (
+ "Failed to disable/enable crypto for worker thread"
+ f" on host {node['host']}"
)
+ args = dict(worker_index=worker - 1, crypto_enable=crypto_enable)
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
def vpp_ipsec_crypto_sw_scheduler_set_worker_on_all_duts(
- nodes, workers, crypto_enable=False):
+ nodes: dict, crypto_enable: bool = False
+ ) -> None:
"""Enable or disable crypto on specific vpp worker threads.
:param node: VPP node to enable or disable crypto for worker threads.
- :param workers: List of VPP thread numbers.
:param crypto_enable: Disable or enable crypto work.
:type node: dict
- :type workers: Iterable[int]
:type crypto_enable: bool
:raises RuntimeError: If failed to enable or disable crypto for worker
thread or if no API reply received.
"""
- for node in nodes.values():
- if node[u"type"] == NodeType.DUT:
+ for node_name, node in nodes.items():
+ if node["type"] == NodeType.DUT:
thread_data = VPPUtil.vpp_show_threads(node)
worker_cnt = len(thread_data) - 1
if not worker_cnt:
- return None
+ return
worker_ids = list()
+ workers = BuiltIn().get_variable_value(
+ f"${{{node_name}_cpu_dp}}"
+ )
for item in thread_data:
- if str(item.cpu_id) in workers.split(u","):
+ if str(item.cpu_id) in workers.split(","):
worker_ids.append(item.id)
IPsecUtil.vpp_ipsec_crypto_sw_scheduler_set_worker(
@@ -387,8 +372,16 @@ class IPsecUtil:
@staticmethod
def vpp_ipsec_add_sad_entry(
- node, sad_id, spi, crypto_alg, crypto_key, integ_alg=None,
- integ_key=u"", tunnel_src=None, tunnel_dst=None):
+ node: dict,
+ sad_id: int,
+ spi: int,
+ crypto_alg: CryptoAlg.InputType = None,
+ crypto_key: str = "",
+ integ_alg: IntegAlg.InputType = None,
+ integ_key: str = "",
+ tunnel_src: Optional[str] = None,
+ tunnel_dst: Optional[str] = None,
+ ) -> None:
"""Create Security Association Database entry on the VPP node.
:param node: VPP node to add SAD entry on.
@@ -405,25 +398,21 @@ class IPsecUtil:
:type node: dict
:type sad_id: int
:type spi: int
- :type crypto_alg: CryptoAlg
+ :type crypto_alg: CryptoAlg.InputType
:type crypto_key: str
- :type integ_alg: Optional[IntegAlg]
+ :type integ_alg: IntegAlg.InputType
:type integ_key: str
- :type tunnel_src: str
- :type tunnel_dst: str
+ :type tunnel_src: Optional[str]
+ :type tunnel_dst: Optional[str]
"""
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
if isinstance(crypto_key, str):
- crypto_key = crypto_key.encode(encoding=u"utf-8")
+ crypto_key = crypto_key.encode(encoding="utf-8")
if isinstance(integ_key, str):
- integ_key = integ_key.encode(encoding=u"utf-8")
- ckey = dict(
- length=len(crypto_key),
- data=crypto_key
- )
- ikey = dict(
- length=len(integ_key),
- data=integ_key if integ_key else 0
- )
+ integ_key = integ_key.encode(encoding="utf-8")
+ ckey = dict(length=len(crypto_key), data=crypto_key)
+ ikey = dict(length=len(integ_key), data=integ_key if integ_key else 0)
flags = int(IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE)
if tunnel_src and tunnel_dst:
@@ -431,21 +420,24 @@ class IPsecUtil:
src_addr = ip_address(tunnel_src)
dst_addr = ip_address(tunnel_dst)
if src_addr.version == 6:
- flags = \
- flags | int(IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6)
+ flags = flags | int(
+ IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6
+ )
else:
- src_addr = u""
- dst_addr = u""
+ src_addr = ""
+ dst_addr = ""
- cmd = u"ipsec_sad_entry_add_del_v3"
- err_msg = f"Failed to add Security Association Database entry " \
- f"on host {node[u'host']}"
+ cmd = "ipsec_sad_entry_add_v2"
+ err_msg = (
+ "Failed to add Security Association Database entry"
+ f" on host {node['host']}"
+ )
sad_entry = dict(
sad_id=int(sad_id),
spi=int(spi),
crypto_algorithm=crypto_alg.alg_int_repr,
crypto_key=ckey,
- integrity_algorithm=integ_alg.alg_int_repr if integ_alg else 0,
+ integrity_algorithm=integ_alg.alg_int_repr,
integrity_key=ikey,
flags=flags,
tunnel=dict(
@@ -457,21 +449,29 @@ class IPsecUtil:
),
dscp=int(IpDscp.IP_API_DSCP_CS0),
),
- protocol=int(IPsecProto.IPSEC_API_PROTO_ESP),
- udp_src_port=4500, # default value in api
- udp_dst_port=4500 # default value in api
- )
- args = dict(
- is_add=True,
- entry=sad_entry
+ protocol=IPsecProto.ESP,
+ udp_src_port=IPSEC_UDP_PORT_DEFAULT,
+ udp_dst_port=IPSEC_UDP_PORT_DEFAULT,
+ anti_replay_window_size=IPSEC_REPLAY_WINDOW_DEFAULT,
)
+ args = dict(entry=sad_entry)
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
def vpp_ipsec_add_sad_entries(
- node, n_entries, sad_id, spi, crypto_alg, crypto_key,
- integ_alg=None, integ_key=u"", tunnel_src=None, tunnel_dst=None):
+ node: dict,
+ n_entries: int,
+ sad_id: int,
+ spi: int,
+ crypto_alg: CryptoAlg.InputType = None,
+ crypto_key: str = "",
+ integ_alg: IntegAlg.InputType = None,
+ integ_key: str = "",
+ tunnel_src: Optional[str] = None,
+ tunnel_dst: Optional[str] = None,
+ tunnel_addr_incr: bool = True,
+ ) -> None:
"""Create multiple Security Association Database entries on VPP node.
:param node: VPP node to add SAD entry on.
@@ -488,63 +488,42 @@ class IPsecUtil:
specified ESP transport mode is used.
:param tunnel_dst: Tunnel header destination IPv4 or IPv6 address. If
not specified ESP transport mode is used.
+ :param tunnel_addr_incr: Enable or disable tunnel IP address
+ incremental step.
:type node: dict
:type n_entries: int
:type sad_id: int
:type spi: int
- :type crypto_alg: CryptoAlg
+ :type crypto_alg: CryptoAlg.InputType
:type crypto_key: str
- :type integ_alg: Optional[IntegAlg]
+ :type integ_alg: IntegAlg.InputType
:type integ_key: str
- :type tunnel_src: str
- :type tunnel_dst: str
+ :type tunnel_src: Optional[str]
+ :type tunnel_dst: Optional[str]
+ :type tunnel_addr_incr: bool
"""
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
if isinstance(crypto_key, str):
- crypto_key = crypto_key.encode(encoding=u"utf-8")
+ crypto_key = crypto_key.encode(encoding="utf-8")
if isinstance(integ_key, str):
- integ_key = integ_key.encode(encoding=u"utf-8")
+ integ_key = integ_key.encode(encoding="utf-8")
if tunnel_src and tunnel_dst:
src_addr = ip_address(tunnel_src)
dst_addr = ip_address(tunnel_dst)
else:
- src_addr = u""
- dst_addr = u""
-
- addr_incr = 1 << (128 - 96) if src_addr.version == 6 \
- else 1 << (32 - 24)
+ src_addr = ""
+ dst_addr = ""
- if int(n_entries) > 10:
- tmp_filename = f"/tmp/ipsec_sad_{sad_id}_add_del_entry.script"
-
- with open(tmp_filename, 'w') as tmp_file:
- for i in range(n_entries):
- integ = f"integ-alg {integ_alg.alg_name} " \
- f"integ-key {integ_key.hex()}" \
- if integ_alg else u""
- tunnel = f"tunnel src {src_addr + i * addr_incr} " \
- f"tunnel dst {dst_addr + i * addr_incr}" \
- if tunnel_src and tunnel_dst else u""
- conf = f"exec ipsec sa add {sad_id + i} esp spi {spi + i} "\
- f"crypto-alg {crypto_alg.alg_name} " \
- f"crypto-key {crypto_key.hex()} " \
- f"{integ} {tunnel}\n"
- tmp_file.write(conf)
- vat = VatExecutor()
- vat.execute_script(
- tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True
+ if tunnel_addr_incr:
+ addr_incr = (
+ 1 << (128 - 96) if src_addr.version == 6 else 1 << (32 - 24)
)
- os.remove(tmp_filename)
- return
+ else:
+ addr_incr = 0
- ckey = dict(
- length=len(crypto_key),
- data=crypto_key
- )
- ikey = dict(
- length=len(integ_key),
- data=integ_key if integ_key else 0
- )
+ ckey = dict(length=len(crypto_key), data=crypto_key)
+ ikey = dict(length=len(integ_key), data=integ_key if integ_key else 0)
flags = int(IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE)
if tunnel_src and tunnel_dst:
@@ -554,16 +533,18 @@ class IPsecUtil:
IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_TUNNEL_V6
)
- cmd = u"ipsec_sad_entry_add_del_v3"
- err_msg = f"Failed to add Security Association Database entry " \
- f"on host {node[u'host']}"
+ cmd = "ipsec_sad_entry_add_v2"
+ err_msg = (
+ "Failed to add Security Association Database entry"
+ f" on host {node['host']}"
+ )
sad_entry = dict(
sad_id=int(sad_id),
spi=int(spi),
crypto_algorithm=crypto_alg.alg_int_repr,
crypto_key=ckey,
- integrity_algorithm=integ_alg.alg_int_repr if integ_alg else 0,
+ integrity_algorithm=integ_alg.alg_int_repr,
integrity_key=ikey,
flags=flags,
tunnel=dict(
@@ -575,25 +556,25 @@ class IPsecUtil:
),
dscp=int(IpDscp.IP_API_DSCP_CS0),
),
- protocol=int(IPsecProto.IPSEC_API_PROTO_ESP),
- udp_src_port=4500, # default value in api
- udp_dst_port=4500 # default value in api
- )
- args = dict(
- is_add=True,
- entry=sad_entry
+ protocol=IPsecProto.ESP,
+ udp_src_port=IPSEC_UDP_PORT_DEFAULT,
+ udp_dst_port=IPSEC_UDP_PORT_DEFAULT,
+ anti_replay_window_size=IPSEC_REPLAY_WINDOW_DEFAULT,
)
- with PapiSocketExecutor(node) as papi_exec:
+ args = dict(entry=sad_entry)
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(n_entries):
- args[u"entry"][u"sad_id"] = int(sad_id) + i
- args[u"entry"][u"spi"] = int(spi) + i
- args[u"entry"][u"tunnel"][u"src"] = (
+ args["entry"]["sad_id"] = int(sad_id) + i
+ args["entry"]["spi"] = int(spi) + i
+ args["entry"]["tunnel"]["src"] = (
str(src_addr + i * addr_incr)
- if tunnel_src and tunnel_dst else src_addr
+ if tunnel_src and tunnel_dst
+ else src_addr
)
- args[u"entry"][u"tunnel"][u"dst"] = (
+ args["entry"]["tunnel"]["dst"] = (
str(dst_addr + i * addr_incr)
- if tunnel_src and tunnel_dst else dst_addr
+ if tunnel_src and tunnel_dst
+ else dst_addr
)
history = bool(not 1 < i < n_entries - 2)
papi_exec.add(cmd, history=history, **args)
@@ -601,8 +582,15 @@ class IPsecUtil:
@staticmethod
def vpp_ipsec_set_ip_route(
- node, n_tunnels, tunnel_src, traffic_addr, tunnel_dst, interface,
- raddr_range, dst_mac=None):
+ node: dict,
+ n_tunnels: int,
+ tunnel_src: str,
+ traffic_addr: str,
+ tunnel_dst: str,
+ interface: str,
+ raddr_range: int,
+ dst_mac: Optional[str] = None,
+ ) -> None:
"""Set IP address and route on interface.
:param node: VPP node to add config on.
@@ -622,88 +610,80 @@ class IPsecUtil:
:type tunnel_dst: str
:type interface: str
:type raddr_range: int
- :type dst_mac: str
+ :type dst_mac: Optional[str]
"""
tunnel_src = ip_address(tunnel_src)
tunnel_dst = ip_address(tunnel_dst)
traffic_addr = ip_address(traffic_addr)
- addr_incr = 1 << (128 - raddr_range) if tunnel_src.version == 6 \
+ tunnel_dst_prefix = 128 if tunnel_dst.version == 6 else 32
+ addr_incr = (
+ 1 << (128 - raddr_range)
+ if tunnel_src.version == 6
else 1 << (32 - raddr_range)
+ )
- if int(n_tunnels) > 10:
- tmp_filename = u"/tmp/ipsec_set_ip.script"
-
- with open(tmp_filename, 'w') as tmp_file:
- if_name = Topology.get_interface_name(node, interface)
- for i in range(n_tunnels):
- conf = f"exec set interface ip address {if_name} " \
- f"{tunnel_src + i * addr_incr}/{raddr_range}\n" \
- f"exec ip route add {traffic_addr + i}/" \
- f"{128 if traffic_addr.version == 6 else 32} " \
- f"via {tunnel_dst + i * addr_incr} {if_name}\n"
- if dst_mac:
- conf = f"{conf}exec set ip neighbor {if_name} " \
- f"{tunnel_dst + i * addr_incr} {dst_mac}\n"
- tmp_file.write(conf)
-
- VatExecutor().execute_script(
- tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True
- )
- os.remove(tmp_filename)
- return
-
- cmd1 = u"sw_interface_add_del_address"
+ cmd1 = "sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
is_add=True,
del_all=False,
- prefix=None
- )
- cmd2 = u"ip_route_add_del"
- args2 = dict(
- is_add=1,
- is_multipath=0,
- route=None
+ prefix=None,
)
- cmd3 = u"ip_neighbor_add_del"
+ cmd2 = "ip_route_add_del"
+ args2 = dict(is_add=1, is_multipath=0, route=None)
+ cmd3 = "ip_neighbor_add_del"
args3 = dict(
is_add=True,
neighbor=dict(
sw_if_index=Topology.get_interface_sw_index(node, interface),
flags=0,
mac_address=str(dst_mac),
- ip_address=None
- )
+ ip_address=None,
+ ),
+ )
+ err_msg = (
+ "Failed to configure IP addresses, IP routes and"
+ f" IP neighbor on interface {interface} on host {node['host']}"
+ if dst_mac
+ else "Failed to configure IP addresses and IP routes"
+ f" on interface {interface} on host {node['host']}"
)
- err_msg = f"Failed to configure IP addresses, IP routes and " \
- f"IP neighbor on interface {interface} on host {node[u'host']}" \
- if dst_mac \
- else f"Failed to configure IP addresses and IP routes " \
- f"on interface {interface} on host {node[u'host']}"
- with PapiSocketExecutor(node) as papi_exec:
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(n_tunnels):
- args1[u"prefix"] = IPUtil.create_prefix_object(
+ tunnel_dst_addr = tunnel_dst + i * addr_incr
+ args1["prefix"] = IPUtil.create_prefix_object(
tunnel_src + i * addr_incr, raddr_range
)
- args2[u"route"] = IPUtil.compose_vpp_route_structure(
- node, traffic_addr + i,
- prefix_len=128 if traffic_addr.version == 6 else 32,
- interface=interface, gateway=tunnel_dst + i * addr_incr
+ args2["route"] = IPUtil.compose_vpp_route_structure(
+ node,
+ traffic_addr + i,
+ prefix_len=tunnel_dst_prefix,
+ interface=interface,
+ gateway=tunnel_dst_addr,
)
history = bool(not 1 < i < n_tunnels - 2)
- papi_exec.add(cmd1, history=history, **args1).\
- add(cmd2, history=history, **args2)
+ papi_exec.add(cmd1, history=history, **args1)
+ papi_exec.add(cmd2, history=history, **args2)
+
+ args2["route"] = IPUtil.compose_vpp_route_structure(
+ node,
+ tunnel_dst_addr,
+ prefix_len=tunnel_dst_prefix,
+ interface=interface,
+ gateway=tunnel_dst_addr,
+ )
+ papi_exec.add(cmd2, history=history, **args2)
+
if dst_mac:
- args3[u"neighbor"][u"ip_address"] = ip_address(
- tunnel_dst + i * addr_incr
+ args3["neighbor"]["ip_address"] = ip_address(
+ tunnel_dst_addr
)
papi_exec.add(cmd3, history=history, **args3)
papi_exec.get_replies(err_msg)
@staticmethod
- def vpp_ipsec_add_spd(node, spd_id):
+ def vpp_ipsec_add_spd(node: dict, spd_id: int) -> None:
"""Create Security Policy Database on the VPP node.
:param node: VPP node to add SPD on.
@@ -711,18 +691,18 @@ class IPsecUtil:
:type node: dict
:type spd_id: int
"""
- cmd = u"ipsec_spd_add_del"
- err_msg = f"Failed to add Security Policy Database " \
- f"on host {node[u'host']}"
- args = dict(
- is_add=True,
- spd_id=int(spd_id)
+ cmd = "ipsec_spd_add_del"
+ err_msg = (
+ f"Failed to add Security Policy Database on host {node['host']}"
)
+ args = dict(is_add=True, spd_id=int(spd_id))
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def vpp_ipsec_spd_add_if(node, spd_id, interface):
+ def vpp_ipsec_spd_add_if(
+ node: dict, spd_id: int, interface: Union[str, int]
+ ) -> None:
"""Add interface to the Security Policy Database.
:param node: VPP node.
@@ -732,22 +712,31 @@ class IPsecUtil:
:type spd_id: int
:type interface: str or int
"""
- cmd = u"ipsec_interface_add_del_spd"
- err_msg = f"Failed to add interface {interface} to Security Policy " \
- f"Database {spd_id} on host {node[u'host']}"
+ cmd = "ipsec_interface_add_del_spd"
+ err_msg = (
+ f"Failed to add interface {interface} to Security Policy"
+ f" Database {spd_id} on host {node['host']}"
+ )
args = dict(
is_add=True,
sw_if_index=InterfaceUtil.get_interface_index(node, interface),
- spd_id=int(spd_id)
+ spd_id=int(spd_id),
)
with PapiSocketExecutor(node) as papi_exec:
papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
def vpp_ipsec_create_spds_match_nth_entry(
- node, dir1_interface, dir2_interface, entry_amount,
- local_addr_range, remote_addr_range, action=PolicyAction.BYPASS,
- inbound=False, bidirectional=True):
+ node: dict,
+ dir1_interface: Union[str, int],
+ dir2_interface: Union[str, int],
+ entry_amount: int,
+ local_addr_range: Union[str, IPv4Address, IPv6Address],
+ remote_addr_range: Union[str, IPv4Address, IPv6Address],
+ action: IpsecSpdAction.InputType = IpsecSpdAction.BYPASS,
+ inbound: bool = False,
+ bidirectional: bool = True,
+ ) -> None:
"""Create one matching SPD entry for inbound or outbound traffic on
a DUT for each traffic direction and also create entry_amount - 1
non-matching SPD entries. Create a Security Policy Database on each
@@ -771,27 +760,29 @@ class IPsecUtil:
:param remote_addr_range: Matching remote address range in
direction 1 in format IP/prefix or IP/mask. If no mask is
provided, it's considered to be /32.
- :param action: Policy action.
+ :param action: IPsec SPD action.
:param inbound: If True policy is for inbound traffic, otherwise
outbound.
:param bidirectional: When True, will create SPDs in both directions
of traffic. When False, only in one direction.
:type node: dict
- :type dir1_interface: Union[string, int]
- :type dir2_interface: Union[string, int]
+ :type dir1_interface: Union[str, int]
+ :type dir2_interface: Union[str, int]
:type entry_amount: int
:type local_addr_range:
- Union[string, ipaddress.IPv4Address, ipaddress.IPv6Address]
+ Union[str, IPv4Address, IPv6Address]
:type remote_addr_range:
- Union[string, ipaddress.IPv4Address, ipaddress.IPv6Address]
- :type action: IPsecUtil.PolicyAction
+ Union[str, IPv4Address, IPv6Address]
+ :type action: IpsecSpdAction.InputType
:type inbound: bool
:type bidirectional: bool
- :raises NotImplementedError: When the action is PolicyAction.PROTECT.
+ :raises NotImplementedError: When the action is IpsecSpdAction.PROTECT.
"""
-
- if action == PolicyAction.PROTECT:
- raise NotImplementedError('Policy action PROTECT is not supported.')
+ action = get_enum_instance(IpsecSpdAction, action)
+ if action == IpsecSpdAction.PROTECT:
+ raise NotImplementedError(
+ "IPsec SPD action PROTECT is not supported."
+ )
spd_id_dir1 = 1
spd_id_dir2 = 2
@@ -801,9 +792,13 @@ class IPsecUtil:
IPsecUtil.vpp_ipsec_spd_add_if(node, spd_id_dir1, dir1_interface)
# matching entry direction 1
IPsecUtil.vpp_ipsec_add_spd_entry(
- node, spd_id_dir1, matching_priority, action,
- inbound=inbound, laddr_range=local_addr_range,
- raddr_range=remote_addr_range
+ node,
+ spd_id_dir1,
+ matching_priority,
+ action,
+ inbound=inbound,
+ laddr_range=local_addr_range,
+ raddr_range=remote_addr_range,
)
if bidirectional:
@@ -812,9 +807,13 @@ class IPsecUtil:
# matching entry direction 2, the address ranges are switched
IPsecUtil.vpp_ipsec_add_spd_entry(
- node, spd_id_dir2, matching_priority, action,
- inbound=inbound, laddr_range=remote_addr_range,
- raddr_range=local_addr_range
+ node,
+ spd_id_dir2,
+ matching_priority,
+ action,
+ inbound=inbound,
+ laddr_range=remote_addr_range,
+ raddr_range=local_addr_range,
)
# non-matching entries
@@ -834,10 +833,14 @@ class IPsecUtil:
# non-matching entries direction 1
IPsecUtil.vpp_ipsec_add_spd_entries(
- node, no_match_entry_amount, spd_id_dir1,
- ObjIncrement(matching_priority + 1, 1), action,
- inbound=inbound, laddr_range=no_match_local_addr_range,
- raddr_range=no_match_remote_addr_range
+ node,
+ no_match_entry_amount,
+ spd_id_dir1,
+ ObjIncrement(matching_priority + 1, 1),
+ action,
+ inbound=inbound,
+ laddr_range=no_match_local_addr_range,
+ raddr_range=no_match_remote_addr_range,
)
if bidirectional:
@@ -854,28 +857,46 @@ class IPsecUtil:
next(no_match_local_addr_range)
# non-matching entries direction 2
IPsecUtil.vpp_ipsec_add_spd_entries(
- node, no_match_entry_amount, spd_id_dir2,
- ObjIncrement(matching_priority + 1, 1), action,
- inbound=inbound, laddr_range=no_match_local_addr_range,
- raddr_range=no_match_remote_addr_range
+ node,
+ no_match_entry_amount,
+ spd_id_dir2,
+ ObjIncrement(matching_priority + 1, 1),
+ action,
+ inbound=inbound,
+ laddr_range=no_match_local_addr_range,
+ raddr_range=no_match_remote_addr_range,
)
IPsecUtil.vpp_ipsec_show_all(node)
@staticmethod
- def vpp_ipsec_add_spd_entry(
- node, spd_id, priority, action, inbound=True, sa_id=None,
- proto=None, laddr_range=None, raddr_range=None, lport_range=None,
- rport_range=None, is_ipv6=False):
- """Create Security Policy Database entry on the VPP node.
-
- :param node: VPP node to add SPD entry on.
+ def _vpp_ipsec_add_spd_entry_internal(
+ executor: PapiSocketExecutor,
+ spd_id: int,
+ priority: int,
+ action: IpsecSpdAction.InputType,
+ inbound: bool = True,
+ sa_id: Optional[int] = None,
+ proto: IPsecProto.InputType = None,
+ laddr_range: Optional[str] = None,
+ raddr_range: Optional[str] = None,
+ lport_range: Optional[str] = None,
+ rport_range: Optional[str] = None,
+ is_ipv6: bool = False,
+ ) -> None:
+ """Prepare to create Security Policy Database entry on the VPP node.
+
+ This just adds one more command to the executor.
+ The call site shall get replies once all entries are added,
+ to get speed benefit from async PAPI.
+
+ :param executor: Open PAPI executor (async handling) to add commands to.
:param spd_id: SPD ID to add entry on.
:param priority: SPD entry priority, higher number = higher priority.
- :param action: Policy action.
+ :param action: IPsec SPD action.
:param inbound: If True policy is for inbound traffic, otherwise
outbound.
- :param sa_id: SAD entry ID for action PolicyAction.PROTECT.
+ :param sa_id: SAD entry ID for action IpsecSpdAction.PROTECT.
:param proto: Policy selector next layer protocol number.
:param laddr_range: Policy selector local IPv4 or IPv6 address range
in format IP/prefix or IP/mask. If no mask is provided,
@@ -889,31 +910,31 @@ class IPsecUtil:
<port_start>-<port_end>.
:param is_ipv6: True in case of IPv6 policy when IPv6 address range is
not defined so it will default to address ::/0, otherwise False.
- :type node: dict
+ :type executor: PapiSocketExecutor
:type spd_id: int
:type priority: int
- :type action: IPsecUtil.PolicyAction
+ :type action: IpsecSpdAction.InputType
:type inbound: bool
- :type sa_id: int
- :type proto: int
- :type laddr_range: string
- :type raddr_range: string
- :type lport_range: string
- :type rport_range: string
+ :type sa_id: Optional[int]
+ :type proto: IPsecProto.InputType
+ :type laddr_range: Optional[str]
+ :type raddr_range: Optional[str]
+ :type lport_range: Optional[str]
+ :type rport_range: Optional[str]
:type is_ipv6: bool
"""
+ action = get_enum_instance(IpsecSpdAction, action)
+ proto = get_enum_instance(IPsecProto, proto)
if laddr_range is None:
- laddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
+ laddr_range = "::/0" if is_ipv6 else "0.0.0.0/0"
if raddr_range is None:
- raddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
+ raddr_range = "::/0" if is_ipv6 else "0.0.0.0/0"
local_net = ip_network(laddr_range, strict=False)
remote_net = ip_network(raddr_range, strict=False)
- cmd = u"ipsec_spd_entry_add_del"
- err_msg = f"Failed to add entry to Security Policy Database " \
- f"{spd_id} on host {node[u'host']}"
+ cmd = "ipsec_spd_entry_add_del_v2"
spd_entry = dict(
spd_id=int(spd_id),
@@ -921,7 +942,7 @@ class IPsecUtil:
is_outbound=not inbound,
sa_id=int(sa_id) if sa_id else 0,
policy=int(action),
- protocol=int(proto) if proto else 0,
+ protocol=proto,
remote_address_start=IPAddress.create_ip_address_object(
remote_net.network_address
),
@@ -934,37 +955,121 @@ class IPsecUtil:
local_address_stop=IPAddress.create_ip_address_object(
local_net.broadcast_address
),
- remote_port_start=int(rport_range.split(u"-")[0]) if rport_range
- else 0,
- remote_port_stop=int(rport_range.split(u"-")[1]) if rport_range
- else 65535,
- local_port_start=int(lport_range.split(u"-")[0]) if lport_range
- else 0,
- local_port_stop=int(lport_range.split(u"-")[1]) if rport_range
- else 65535
+ remote_port_start=(
+ int(rport_range.split("-")[0]) if rport_range else 0
+ ),
+ remote_port_stop=(
+ int(rport_range.split("-")[1]) if rport_range else 65535
+ ),
+ local_port_start=(
+ int(lport_range.split("-")[0]) if lport_range else 0
+ ),
+ local_port_stop=(
+ int(lport_range.split("-")[1]) if rport_range else 65535
+ ),
)
- args = dict(
- is_add=True,
- entry=spd_entry
+ args = dict(is_add=True, entry=spd_entry)
+ executor.add(cmd, **args)
+
+ @staticmethod
+ def vpp_ipsec_add_spd_entry(
+ node: dict,
+ spd_id: int,
+ priority: int,
+ action: IpsecSpdAction.InputType,
+ inbound: bool = True,
+ sa_id: Optional[int] = None,
+ proto: IPsecProto.InputType = None,
+ laddr_range: Optional[str] = None,
+ raddr_range: Optional[str] = None,
+ lport_range: Optional[str] = None,
+ rport_range: Optional[str] = None,
+ is_ipv6: bool = False,
+ ) -> None:
+ """Create Security Policy Database entry on the VPP node.
+
+ :param node: VPP node to add SPD entry on.
+ :param spd_id: SPD ID to add entry on.
+ :param priority: SPD entry priority, higher number = higher priority.
+ :param action: IPsec SPD action.
+ :param inbound: If True policy is for inbound traffic, otherwise
+ outbound.
+ :param sa_id: SAD entry ID for action IpsecSpdAction.PROTECT.
+ :param proto: Policy selector next layer protocol number.
+ :param laddr_range: Policy selector local IPv4 or IPv6 address range
+ in format IP/prefix or IP/mask. If no mask is provided,
+ it's considered to be /32.
+ :param raddr_range: Policy selector remote IPv4 or IPv6 address range
+ in format IP/prefix or IP/mask. If no mask is provided,
+ it's considered to be /32.
+ :param lport_range: Policy selector local TCP/UDP port range in format
+ <port_start>-<port_end>.
+ :param rport_range: Policy selector remote TCP/UDP port range in format
+ <port_start>-<port_end>.
+ :param is_ipv6: True in case of IPv6 policy when IPv6 address range is
+ not defined so it will default to address ::/0, otherwise False.
+ :type node: dict
+ :type spd_id: int
+ :type priority: int
+ :type action: IpsecSpdAction.InputType
+ :type inbound: bool
+ :type sa_id: Optional[int]
+ :type proto: IPsecProto.InputType
+ :type laddr_range: Optional[str]
+ :type raddr_range: Optional[str]
+ :type lport_range: Optional[str]
+ :type rport_range: Optional[str]
+ :type is_ipv6: bool
+ """
+ action = get_enum_instance(IpsecSpdAction, action)
+ proto = get_enum_instance(IPsecProto, proto)
+ err_msg = (
+ "Failed to add entry to Security Policy Database"
+ f" {spd_id} on host {node['host']}"
)
- with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd, **args).get_reply(err_msg)
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
+ IPsecUtil._vpp_ipsec_add_spd_entry_internal(
+ papi_exec,
+ spd_id,
+ priority,
+ action,
+ inbound,
+ sa_id,
+ proto,
+ laddr_range,
+ raddr_range,
+ lport_range,
+ rport_range,
+ is_ipv6,
+ )
+ papi_exec.get_replies(err_msg)
@staticmethod
def vpp_ipsec_add_spd_entries(
- node, n_entries, spd_id, priority, action, inbound, sa_id=None,
- proto=None, laddr_range=None, raddr_range=None, lport_range=None,
- rport_range=None, is_ipv6=False):
+ node: dict,
+ n_entries: int,
+ spd_id: int,
+ priority: Optional[ObjIncrement],
+ action: IpsecSpdAction.InputType,
+ inbound: bool,
+ sa_id: Optional[ObjIncrement] = None,
+ proto: IPsecProto.InputType = None,
+ laddr_range: Optional[NetworkIncrement] = None,
+ raddr_range: Optional[NetworkIncrement] = None,
+ lport_range: Optional[str] = None,
+ rport_range: Optional[str] = None,
+ is_ipv6: bool = False,
+ ) -> None:
"""Create multiple Security Policy Database entries on the VPP node.
:param node: VPP node to add SPD entries on.
:param n_entries: Number of SPD entries to be added.
:param spd_id: SPD ID to add entries on.
:param priority: SPD entries priority, higher number = higher priority.
- :param action: Policy action.
+ :param action: IPsec SPD action.
:param inbound: If True policy is for inbound traffic, otherwise
outbound.
- :param sa_id: SAD entry ID for action PolicyAction.PROTECT.
+ :param sa_id: SAD entry ID for action IpsecSpdAction.PROTECT.
:param proto: Policy selector next layer protocol number.
:param laddr_range: Policy selector local IPv4 or IPv6 address range
in format IP/prefix or IP/mask. If no mask is provided,
@@ -981,298 +1086,53 @@ class IPsecUtil:
:type node: dict
:type n_entries: int
:type spd_id: int
- :type priority: IPsecUtil.ObjIncrement
- :type action: IPsecUtil.PolicyAction
+ :type priority: Optional[ObjIncrement]
+ :type action: IpsecSpdAction.InputType
:type inbound: bool
- :type sa_id: IPsecUtil.ObjIncrement
- :type proto: int
- :type laddr_range: IPsecUtil.NetworkIncrement
- :type raddr_range: IPsecUtil.NetworkIncrement
- :type lport_range: string
- :type rport_range: string
+ :type sa_id: Optional[ObjIncrement]
+ :type proto: IPsecProto.InputType
+ :type laddr_range: Optional[NetworkIncrement]
+ :type raddr_range: Optional[NetworkIncrement]
+ :type lport_range: Optional[str]
+ :type rport_range: Optional[str]
:type is_ipv6: bool
"""
+ action = get_enum_instance(IpsecSpdAction, action)
+ proto = get_enum_instance(IPsecProto, proto)
if laddr_range is None:
- laddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
+ laddr_range = "::/0" if is_ipv6 else "0.0.0.0/0"
laddr_range = NetworkIncrement(ip_network(laddr_range), 0)
if raddr_range is None:
- raddr_range = u"::/0" if is_ipv6 else u"0.0.0.0/0"
+ raddr_range = "::/0" if is_ipv6 else "0.0.0.0/0"
raddr_range = NetworkIncrement(ip_network(raddr_range), 0)
- lport_range_start = 0
- lport_range_stop = 65535
- if lport_range:
- lport_range_start, lport_range_stop = lport_range.split('-')
-
- rport_range_start = 0
- rport_range_stop = 65535
- if rport_range:
- rport_range_start, rport_range_stop = rport_range.split('-')
-
- if int(n_entries) > 10:
- tmp_filename = f"/tmp/ipsec_spd_{spd_id}_add_del_entry.script"
-
- with open(tmp_filename, 'w') as tmp_file:
- for _ in range(n_entries):
- direction = u'inbound' if inbound else u'outbound'
- sa = f' sa {sa_id.inc_fmt()}' if sa_id is not None else ''
- protocol = f' protocol {protocol}' if proto else ''
- local_port_range = f' local-port-range ' \
- f'{lport_range_start} - {lport_range_stop}' \
- if lport_range else ''
- remote_port_range = f' remote-port-range ' \
- f'{rport_range_start} - {rport_range_stop}' \
- if rport_range else ''
-
- spd_cfg = f"exec ipsec policy add spd {spd_id} " \
- f"priority {priority.inc_fmt()} {direction}" \
- f"{protocol} action {action}{sa} " \
- f"local-ip-range {laddr_range.inc_fmt()} " \
- f"remote-ip-range {raddr_range.inc_fmt()}" \
- f"{local_port_range}{remote_port_range}\n"
-
- tmp_file.write(spd_cfg)
-
- VatExecutor().execute_script(
- tmp_filename, node, timeout=300, json_out=False,
- copy_on_execute=True
- )
- os.remove(tmp_filename)
- return
-
- for _ in range(n_entries):
- IPsecUtil.vpp_ipsec_add_spd_entry(
- node, spd_id, next(priority), action, inbound,
- next(sa_id) if sa_id is not None else sa_id,
- proto, next(laddr_range), next(raddr_range), lport_range,
- rport_range, is_ipv6
- )
-
- @staticmethod
- def _ipsec_create_tunnel_interfaces_dut1_vat(
- nodes, tun_ips, if1_key, if2_key, n_tunnels, crypto_alg, integ_alg,
- raddr_ip2, addr_incr, spi_d, existing_tunnels=0):
- """Create multiple IPsec tunnel interfaces on DUT1 node using VAT.
-
- Generate random keys and return them (so DUT2 or TG can decrypt).
-
- :param nodes: VPP nodes to create tunnel interfaces.
- :param tun_ips: Dictionary with VPP node 1 ipsec tunnel interface
- IPv4/IPv6 address (ip1) and VPP node 2 ipsec tunnel interface
- IPv4/IPv6 address (ip2).
- :param if1_key: VPP node 1 interface key from topology file.
- :param if2_key: VPP node 2 / TG node (in case of 2-node topology)
- interface key from topology file.
- :param n_tunnels: Number of tunnel interfaces to be there at the end.
- :param crypto_alg: The encryption algorithm name.
- :param integ_alg: The integrity algorithm name.
- :param raddr_ip2: Policy selector remote IPv4/IPv6 start address for the
- first tunnel in direction node2->node1.
- :param spi_d: Dictionary with SPIs for VPP node 1 and VPP node 2.
- :param addr_incr: IP / IPv6 address incremental step.
- :param existing_tunnels: Number of tunnel interfaces before creation.
- Useful mainly for reconf tests. Default 0.
- :type nodes: dict
- :type tun_ips: dict
- :type if1_key: str
- :type if2_key: str
- :type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type integ_alg: Optional[IntegAlg]
- :type raddr_ip2: IPv4Address or IPv6Address
- :type addr_incr: int
- :type spi_d: dict
- :type existing_tunnels: int
- :returns: Generated ckeys and ikeys.
- :rtype: List[bytes], List[bytes]
- """
- tmp_fn1 = u"/tmp/ipsec_create_tunnel_dut1.config"
- if1_n = Topology.get_interface_name(nodes[u"DUT1"], if1_key)
-
- ckeys = [bytes()] * existing_tunnels
- ikeys = [bytes()] * existing_tunnels
-
- vat = VatExecutor()
- with open(tmp_fn1, u"w") as tmp_f1:
- rmac = Topology.get_interface_mac(nodes[u"DUT2"], if2_key) \
- if u"DUT2" in nodes.keys() \
- else Topology.get_interface_mac(nodes[u"TG"], if2_key)
- if not existing_tunnels:
- tmp_f1.write(
- f"exec create loopback interface\n"
- f"exec set interface state loop0 up\n"
- f"exec set interface ip address {if1_n} "
- f"{tun_ips[u'ip2'] - 1}/"
- f"{len(tun_ips[u'ip2'].packed)*8*3//4}\n"
- f"exec set ip neighbor {if1_n} {tun_ips[u'ip2']} {rmac} "
- f"static\n"
- )
- for i in range(existing_tunnels, n_tunnels):
- ckeys.append(
- gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg))
- )
- ikeys.append(
- gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg))
- )
- if integ_alg:
- integ = f"integ-alg {integ_alg.alg_name} " \
- f"integ-key {ikeys[i].hex()} "
- else:
- integ = u""
- tmp_f1.write(
- f"exec set interface ip address loop0 "
- f"{tun_ips[u'ip1'] + i * addr_incr}/32\n"
- f"exec create ipip tunnel "
- f"src {tun_ips[u'ip1'] + i * addr_incr} "
- f"dst {tun_ips[u'ip2']} "
- f"p2p\n"
- f"exec ipsec sa add {i} "
- f"spi {spi_d[u'spi_1'] + i} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"crypto-key {ckeys[i].hex()} "
- f"{integ}"
- f"esp\n"
- f"exec ipsec sa add {100000 + i} "
- f"spi {spi_d[u'spi_2'] + i} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"crypto-key {ckeys[i].hex()} "
- f"{integ}"
- f"esp\n"
- f"exec ipsec tunnel protect ipip{i} "
- f"sa-out {i} "
- f"sa-in {100000 + i} "
- f"add\n"
- )
- vat.execute_script(
- tmp_fn1, nodes[u"DUT1"], timeout=1800, json_out=False,
- copy_on_execute=True,
- history=bool(n_tunnels < 100)
- )
- os.remove(tmp_fn1)
-
- with open(tmp_fn1, 'w') as tmp_f1:
- for i in range(existing_tunnels, n_tunnels):
- tmp_f1.write(
- f"exec set interface unnumbered ipip{i} use {if1_n}\n"
- f"exec set interface state ipip{i} up\n"
- f"exec ip route add "
- f"{raddr_ip2 + i}/{len(raddr_ip2.packed)*8} "
- f"via ipip{i}\n"
- )
- vat.execute_script(
- tmp_fn1, nodes[u"DUT1"], timeout=1800, json_out=False,
- copy_on_execute=True,
- history=bool(n_tunnels < 100)
- )
- os.remove(tmp_fn1)
-
- return ckeys, ikeys
-
- @staticmethod
- def _ipsec_create_tunnel_interfaces_dut2_vat(
- nodes, tun_ips, if2_key, n_tunnels, crypto_alg, ckeys, integ_alg,
- ikeys, raddr_ip1, addr_incr, spi_d, existing_tunnels=0):
- """Create multiple IPsec tunnel interfaces on DUT2 node using VAT.
-
- This method accesses keys generated by DUT1 method
- and does not return anything.
-
- :param nodes: VPP nodes to create tunnel interfaces.
- :param tun_ips: Dictionary with VPP node 1 ipsec tunnel interface
- IPv4/IPv6 address (ip1) and VPP node 2 ipsec tunnel interface
- IPv4/IPv6 address (ip2).
- :param if2_key: VPP node 2 / TG node (in case of 2-node topology)
- interface key from topology file.
- :param n_tunnels: Number of tunnel interfaces to be there at the end.
- :param crypto_alg: The encryption algorithm name.
- :param ckeys: List of encryption keys.
- :param integ_alg: The integrity algorithm name.
- :param ikeys: List of integrity keys.
- :param spi_d: Dictionary with SPIs for VPP node 1 and VPP node 2.
- :param addr_incr: IP / IPv6 address incremental step.
- :param existing_tunnels: Number of tunnel interfaces before creation.
- Useful mainly for reconf tests. Default 0.
- :type nodes: dict
- :type tun_ips: dict
- :type if2_key: str
- :type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type ckeys: Sequence[bytes]
- :type integ_alg: Optional[IntegAlg]
- :type ikeys: Sequence[bytes]
- :type addr_incr: int
- :type spi_d: dict
- :type existing_tunnels: int
- """
- tmp_fn2 = u"/tmp/ipsec_create_tunnel_dut2.config"
- if2_n = Topology.get_interface_name(nodes[u"DUT2"], if2_key)
-
- vat = VatExecutor()
- with open(tmp_fn2, 'w') as tmp_f2:
- if not existing_tunnels:
- tmp_f2.write(
- f"exec set interface ip address {if2_n}"
- f" {tun_ips[u'ip2']}/{len(tun_ips[u'ip2'].packed)*8*3/4}\n"
- )
- for i in range(existing_tunnels, n_tunnels):
- if integ_alg:
- integ = f"integ-alg {integ_alg.alg_name} " \
- f"integ-key {ikeys[i].hex()} "
- else:
- integ = u""
- tmp_f2.write(
- f"exec create ipip tunnel "
- f"src {tun_ips[u'ip2']} "
- f"dst {tun_ips[u'ip1'] + i * addr_incr} "
- f"p2p\n"
- f"exec ipsec sa add {100000 + i} "
- f"spi {spi_d[u'spi_2'] + i} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"crypto-key {ckeys[i].hex()} "
- f"{integ}"
- f"esp\n"
- f"exec ipsec sa add {i} "
- f"spi {spi_d[u'spi_1'] + i} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"crypto-key {ckeys[i].hex()} "
- f"{integ}"
- f"esp\n"
- f"exec ipsec tunnel protect ipip{i} "
- f"sa-out {100000 + i} "
- f"sa-in {i} "
- f"add\n"
- )
- vat.execute_script(
- tmp_fn2, nodes[u"DUT2"], timeout=1800, json_out=False,
- copy_on_execute=True,
- history=bool(n_tunnels < 100)
+ err_msg = (
+ "Failed to add entry to Security Policy Database"
+ f" {spd_id} on host {node['host']}"
)
- os.remove(tmp_fn2)
-
- with open(tmp_fn2, 'w') as tmp_f2:
- if not existing_tunnels:
- tmp_f2.write(
- f"exec ip route add {tun_ips[u'ip1']}/8 "
- f"via {tun_ips[u'ip2'] - 1} {if2_n}\n"
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
+ for _ in range(n_entries):
+ IPsecUtil._vpp_ipsec_add_spd_entry_internal(
+ papi_exec,
+ spd_id,
+ next(priority),
+ action,
+ inbound,
+ next(sa_id) if sa_id is not None else sa_id,
+ proto,
+ next(laddr_range),
+ next(raddr_range),
+ lport_range,
+ rport_range,
+ is_ipv6,
)
- for i in range(existing_tunnels, n_tunnels):
- tmp_f2.write(
- f"exec set interface unnumbered ipip{i} use {if2_n}\n"
- f"exec set interface state ipip{i} up\n"
- f"exec ip route add "
- f"{raddr_ip1 + i}/{len(raddr_ip1.packed)*8} "
- f"via ipip{i}\n"
- )
- vat.execute_script(
- tmp_fn2, nodes[u"DUT2"], timeout=1800, json_out=False,
- copy_on_execute=True,
- history=bool(n_tunnels < 100)
- )
- os.remove(tmp_fn2)
+ papi_exec.get_replies(err_msg)
@staticmethod
- def _ipsec_create_loopback_dut1_papi(nodes, tun_ips, if1_key, if2_key):
+ def _ipsec_create_loopback_dut1_papi(
+ nodes: dict, tun_ips: dict, if1_key: str, if2_key: str
+ ) -> int:
"""Create loopback interface and set IP address on VPP node 1 interface
using PAPI.
@@ -1287,60 +1147,66 @@ class IPsecUtil:
:type tun_ips: dict
:type if1_key: str
:type if2_key: str
+ :returns: sw_if_idx Of the created loopback interface.
+ :rtype: int
"""
- with PapiSocketExecutor(nodes[u"DUT1"]) as papi_exec:
+ with PapiSocketExecutor(nodes["DUT1"]) as papi_exec:
# Create loopback interface on DUT1, set it to up state
- cmd = u"create_loopback_instance"
+ cmd = "create_loopback_instance"
args = dict(
mac_address=0,
is_specified=False,
user_instance=0,
)
- err_msg = f"Failed to create loopback interface " \
- f"on host {nodes[u'DUT1'][u'host']}"
- loop_sw_if_idx = papi_exec.add(cmd, **args). \
- get_sw_if_index(err_msg)
- cmd = u"sw_interface_set_flags"
+ err_msg = (
+ "Failed to create loopback interface"
+ f" on host {nodes['DUT1']['host']}"
+ )
+ papi_exec.add(cmd, **args)
+ loop_sw_if_idx = papi_exec.get_sw_if_index(err_msg)
+ cmd = "sw_interface_set_flags"
args = dict(
sw_if_index=loop_sw_if_idx,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value,
+ )
+ err_msg = (
+ "Failed to set loopback interface state up"
+ f" on host {nodes['DUT1']['host']}"
)
- err_msg = f"Failed to set loopback interface state up " \
- f"on host {nodes[u'DUT1'][u'host']}"
papi_exec.add(cmd, **args).get_reply(err_msg)
# Set IP address on VPP node 1 interface
- cmd = u"sw_interface_add_del_address"
+ cmd = "sw_interface_add_del_address"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(
- nodes[u"DUT1"], if1_key
+ nodes["DUT1"], if1_key
),
is_add=True,
del_all=False,
prefix=IPUtil.create_prefix_object(
- tun_ips[u"ip2"] - 1, 96 if tun_ips[u"ip2"].version == 6
- else 24
- )
+ tun_ips["ip2"] - 1,
+ 96 if tun_ips["ip2"].version == 6 else 24,
+ ),
+ )
+ err_msg = (
+ f"Failed to set IP address on interface {if1_key}"
+ f" on host {nodes['DUT1']['host']}"
)
- err_msg = f"Failed to set IP address on interface {if1_key} " \
- f"on host {nodes[u'DUT1'][u'host']}"
papi_exec.add(cmd, **args).get_reply(err_msg)
- cmd2 = u"ip_neighbor_add_del"
+ cmd2 = "ip_neighbor_add_del"
args2 = dict(
is_add=1,
neighbor=dict(
sw_if_index=Topology.get_interface_sw_index(
- nodes[u"DUT1"], if1_key
+ nodes["DUT1"], if1_key
),
flags=1,
mac_address=str(
- Topology.get_interface_mac(nodes[u"DUT2"], if2_key)
- if u"DUT2" in nodes.keys()
- else Topology.get_interface_mac(
- nodes[u"TG"], if2_key
- )
+ Topology.get_interface_mac(nodes["DUT2"], if2_key)
+ if "DUT2" in nodes.keys()
+ else Topology.get_interface_mac(nodes["TG"], if2_key)
),
- ip_address=tun_ips[u"ip2"].compressed
- )
+ ip_address=tun_ips["ip2"].compressed,
+ ),
)
err_msg = f"Failed to add IP neighbor on interface {if1_key}"
papi_exec.add(cmd2, **args2).get_reply(err_msg)
@@ -1349,8 +1215,18 @@ class IPsecUtil:
@staticmethod
def _ipsec_create_tunnel_interfaces_dut1_papi(
- nodes, tun_ips, if1_key, if2_key, n_tunnels, crypto_alg, integ_alg,
- raddr_ip2, addr_incr, spi_d, existing_tunnels=0):
+ nodes: dict,
+ tun_ips: dict,
+ if1_key: str,
+ if2_key: str,
+ n_tunnels: int,
+ crypto_alg: CryptoAlg.InputType,
+ integ_alg: IntegAlg.InputType,
+ raddr_ip2: Union[IPv4Address, IPv6Address],
+ addr_incr: int,
+ spi_d: dict,
+ existing_tunnels: int = 0,
+ ) -> Tuple[List[bytes], List[bytes]]:
"""Create multiple IPsec tunnel interfaces on DUT1 node using PAPI.
Generate random keys and return them (so DUT2 or TG can decrypt).
@@ -1376,42 +1252,44 @@ class IPsecUtil:
:type if1_key: str
:type if2_key: str
:type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type integ_alg: Optional[IntegAlg]
- :type raddr_ip2: IPv4Address or IPv6Address
+ :type crypto_alg: CryptoAlg.InputType
+ :type integ_alg: IntegAlg.InputType
+ :type raddr_ip2: Union[IPv4Address, IPv6Address]
:type addr_incr: int
:type spi_d: dict
:type existing_tunnels: int
:returns: Generated ckeys and ikeys.
:rtype: List[bytes], List[bytes]
"""
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
if not existing_tunnels:
loop_sw_if_idx = IPsecUtil._ipsec_create_loopback_dut1_papi(
nodes, tun_ips, if1_key, if2_key
)
else:
loop_sw_if_idx = InterfaceUtil.vpp_get_interface_sw_index(
- nodes[u"DUT1"], u"loop0"
+ nodes["DUT1"], "loop0"
)
- with PapiSocketExecutor(nodes[u"DUT1"]) as papi_exec:
+ with PapiSocketExecutor(nodes["DUT1"], is_async=True) as papi_exec:
# Configure IP addresses on loop0 interface
- cmd = u"sw_interface_add_del_address"
+ cmd = "sw_interface_add_del_address"
args = dict(
sw_if_index=loop_sw_if_idx,
is_add=True,
del_all=False,
- prefix=None
+ prefix=None,
)
for i in range(existing_tunnels, n_tunnels):
- args[u"prefix"] = IPUtil.create_prefix_object(
- tun_ips[u"ip1"] + i * addr_incr,
- 128 if tun_ips[u"ip1"].version == 6 else 32
+ args["prefix"] = IPUtil.create_prefix_object(
+ tun_ips["ip1"] + i * addr_incr,
+ 128 if tun_ips["ip1"].version == 6 else 32,
)
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
# Configure IPIP tunnel interfaces
- cmd = u"ipip_add_tunnel"
+ cmd = "ipip_add_tunnel"
ipip_tunnel = dict(
instance=Constants.BITWISE_NON_ZERO,
src=None,
@@ -1421,52 +1299,47 @@ class IPsecUtil:
TunnelEncpaDecapFlags.TUNNEL_API_ENCAP_DECAP_FLAG_NONE
),
mode=int(TunnelMode.TUNNEL_API_MODE_P2P),
- dscp=int(IpDscp.IP_API_DSCP_CS0)
- )
- args = dict(
- tunnel=ipip_tunnel
+ dscp=int(IpDscp.IP_API_DSCP_CS0),
)
+ args = dict(tunnel=ipip_tunnel)
ipip_tunnels = [None] * existing_tunnels
for i in range(existing_tunnels, n_tunnels):
- args[u"tunnel"][u"src"] = IPAddress.create_ip_address_object(
- tun_ips[u"ip1"] + i * addr_incr
+ ipip_tunnel["src"] = IPAddress.create_ip_address_object(
+ tun_ips["ip1"] + i * addr_incr
)
- args[u"tunnel"][u"dst"] = IPAddress.create_ip_address_object(
- tun_ips[u"ip2"]
+ ipip_tunnel["dst"] = IPAddress.create_ip_address_object(
+ tun_ips["ip2"]
)
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IPIP tunnel interfaces on host" \
- f" {nodes[u'DUT1'][u'host']}"
+ err_msg = (
+ "Failed to add IPIP tunnel interfaces on host"
+ f" {nodes['DUT1']['host']}"
+ )
ipip_tunnels.extend(
[
- reply[u"sw_if_index"]
+ reply["sw_if_index"]
for reply in papi_exec.get_replies(err_msg)
- if u"sw_if_index" in reply
+ if "sw_if_index" in reply
]
)
# Configure IPSec SAD entries
ckeys = [bytes()] * existing_tunnels
ikeys = [bytes()] * existing_tunnels
- cmd = u"ipsec_sad_entry_add_del_v3"
- c_key = dict(
- length=0,
- data=None
- )
- i_key = dict(
- length=0,
- data=None
- )
+ cmd = "ipsec_sad_entry_add_v2"
+ c_key = dict(length=0, data=None)
+ i_key = dict(length=0, data=None)
+ common_flags = IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE
sad_entry = dict(
sad_id=None,
spi=None,
- protocol=int(IPsecProto.IPSEC_API_PROTO_ESP),
+ protocol=IPsecProto.ESP,
crypto_algorithm=crypto_alg.alg_int_repr,
crypto_key=c_key,
- integrity_algorithm=integ_alg.alg_int_repr if integ_alg else 0,
+ integrity_algorithm=integ_alg.alg_int_repr,
integrity_key=i_key,
- flags=None,
+ flags=common_flags,
tunnel=dict(
src=0,
dst=0,
@@ -1477,133 +1350,127 @@ class IPsecUtil:
dscp=int(IpDscp.IP_API_DSCP_CS0),
),
salt=0,
- udp_src_port=IPSEC_UDP_PORT_NONE,
- udp_dst_port=IPSEC_UDP_PORT_NONE,
- )
- args = dict(
- is_add=True,
- entry=sad_entry
+ udp_src_port=IPSEC_UDP_PORT_DEFAULT,
+ udp_dst_port=IPSEC_UDP_PORT_DEFAULT,
+ anti_replay_window_size=IPSEC_REPLAY_WINDOW_DEFAULT,
)
+ args = dict(entry=sad_entry)
for i in range(existing_tunnels, n_tunnels):
- ckeys.append(
- gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg))
- )
- ikeys.append(
- gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg))
- )
+ ckeys.append(gen_key(crypto_alg.key_len))
+ ikeys.append(gen_key(integ_alg.key_len))
# SAD entry for outband / tx path
- args[u"entry"][u"sad_id"] = i
- args[u"entry"][u"spi"] = spi_d[u"spi_1"] + i
+ sad_entry["sad_id"] = i
+ sad_entry["spi"] = spi_d["spi_1"] + i
- args[u"entry"][u"crypto_key"][u"length"] = len(ckeys[i])
- args[u"entry"][u"crypto_key"][u"data"] = ckeys[i]
+ sad_entry["crypto_key"]["length"] = len(ckeys[i])
+ sad_entry["crypto_key"]["data"] = ckeys[i]
if integ_alg:
- args[u"entry"][u"integrity_key"][u"length"] = len(ikeys[i])
- args[u"entry"][u"integrity_key"][u"data"] = ikeys[i]
- args[u"entry"][u"flags"] = int(
- IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE
- )
+ sad_entry["integrity_key"]["length"] = len(ikeys[i])
+ sad_entry["integrity_key"]["data"] = ikeys[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
+ sad_entry["flags"] |= IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_INBOUND
+ for i in range(existing_tunnels, n_tunnels):
# SAD entry for inband / rx path
- args[u"entry"][u"sad_id"] = 100000 + i
- args[u"entry"][u"spi"] = spi_d[u"spi_2"] + i
+ sad_entry["sad_id"] = 100000 + i
+ sad_entry["spi"] = spi_d["spi_2"] + i
- args[u"entry"][u"crypto_key"][u"length"] = len(ckeys[i])
- args[u"entry"][u"crypto_key"][u"data"] = ckeys[i]
+ sad_entry["crypto_key"]["length"] = len(ckeys[i])
+ sad_entry["crypto_key"]["data"] = ckeys[i]
if integ_alg:
- args[u"entry"][u"integrity_key"][u"length"] = len(ikeys[i])
- args[u"entry"][u"integrity_key"][u"data"] = ikeys[i]
- args[u"entry"][u"flags"] = int(
- IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE |
- IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_INBOUND
- )
+ sad_entry["integrity_key"]["length"] = len(ikeys[i])
+ sad_entry["integrity_key"]["data"] = ikeys[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IPsec SAD entries on host" \
- f" {nodes[u'DUT1'][u'host']}"
+ err_msg = (
+ "Failed to add IPsec SAD entries on host"
+ f" {nodes['DUT1']['host']}"
+ )
papi_exec.get_replies(err_msg)
# Add protection for tunnels with IPSEC
- cmd = u"ipsec_tunnel_protect_update"
+ cmd = "ipsec_tunnel_protect_update"
n_hop = dict(
address=0,
via_label=MPLS_LABEL_INVALID,
- obj_id=Constants.BITWISE_NON_ZERO
+ obj_id=Constants.BITWISE_NON_ZERO,
)
ipsec_tunnel_protect = dict(
- sw_if_index=None,
- nh=n_hop,
- sa_out=None,
- n_sa_in=1,
- sa_in=None
- )
- args = dict(
- tunnel=ipsec_tunnel_protect
+ sw_if_index=None, nh=n_hop, sa_out=None, n_sa_in=1, sa_in=None
)
+ args = dict(tunnel=ipsec_tunnel_protect)
for i in range(existing_tunnels, n_tunnels):
- args[u"tunnel"][u"sw_if_index"] = ipip_tunnels[i]
- args[u"tunnel"][u"sa_out"] = i
- args[u"tunnel"][u"sa_in"] = [100000 + i]
+ args["tunnel"]["sw_if_index"] = ipip_tunnels[i]
+ args["tunnel"]["sa_out"] = i
+ args["tunnel"]["sa_in"] = [100000 + i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add protection for tunnels with IPSEC " \
- f"on host {nodes[u'DUT1'][u'host']}"
+ err_msg = (
+ "Failed to add protection for tunnels with IPSEC"
+ f" on host {nodes['DUT1']['host']}"
+ )
papi_exec.get_replies(err_msg)
# Configure unnumbered interfaces
- cmd = u"sw_interface_set_unnumbered"
+ cmd = "sw_interface_set_unnumbered"
args = dict(
is_add=True,
sw_if_index=InterfaceUtil.get_interface_index(
- nodes[u"DUT1"], if1_key
+ nodes["DUT1"], if1_key
),
- unnumbered_sw_if_index=0
+ unnumbered_sw_if_index=0,
)
for i in range(existing_tunnels, n_tunnels):
- args[u"unnumbered_sw_if_index"] = ipip_tunnels[i]
+ args["unnumbered_sw_if_index"] = ipip_tunnels[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
# Set interfaces up
- cmd = u"sw_interface_set_flags"
+ cmd = "sw_interface_set_flags"
args = dict(
sw_if_index=0,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value,
)
for i in range(existing_tunnels, n_tunnels):
- args[u"sw_if_index"] = ipip_tunnels[i]
+ args["sw_if_index"] = ipip_tunnels[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
# Configure IP routes
- cmd = u"ip_route_add_del"
- args = dict(
- is_add=1,
- is_multipath=0,
- route=None
- )
+ cmd = "ip_route_add_del"
+ args = dict(is_add=1, is_multipath=0, route=None)
for i in range(existing_tunnels, n_tunnels):
- args[u"route"] = IPUtil.compose_vpp_route_structure(
- nodes[u"DUT1"], (raddr_ip2 + i).compressed,
+ args["route"] = IPUtil.compose_vpp_route_structure(
+ nodes["DUT1"],
+ (raddr_ip2 + i).compressed,
prefix_len=128 if raddr_ip2.version == 6 else 32,
- interface=ipip_tunnels[i]
+ interface=ipip_tunnels[i],
)
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IP routes on host " \
- f"{nodes[u'DUT1'][u'host']}"
+ err_msg = f"Failed to add IP routes on host {nodes['DUT1']['host']}"
papi_exec.get_replies(err_msg)
return ckeys, ikeys
@staticmethod
def _ipsec_create_tunnel_interfaces_dut2_papi(
- nodes, tun_ips, if2_key, n_tunnels, crypto_alg, ckeys, integ_alg,
- ikeys, raddr_ip1, addr_incr, spi_d, existing_tunnels=0):
+ nodes: dict,
+ tun_ips: dict,
+ if2_key: str,
+ n_tunnels: int,
+ crypto_alg: CryptoAlg.InputType,
+ ckeys: Sequence[bytes],
+ integ_alg: IntegAlg.InputType,
+ ikeys: Sequence[bytes],
+ raddr_ip1: Union[IPv4Address, IPv6Address],
+ addr_incr: int,
+ spi_d: dict,
+ existing_tunnels: int = 0,
+ ) -> None:
"""Create multiple IPsec tunnel interfaces on DUT2 node using PAPI.
This method accesses keys generated by DUT1 method
@@ -1620,6 +1487,8 @@ class IPsecUtil:
:param ckeys: List of encryption keys.
:param integ_alg: The integrity algorithm name.
:param ikeys: List of integrity keys.
+ :param raddr_ip1: Policy selector remote IPv4/IPv6 start address for the
+ first tunnel in direction node1->node2.
:param spi_d: Dictionary with SPIs for VPP node 1 and VPP node 2.
:param addr_incr: IP / IPv6 address incremental step.
:param existing_tunnels: Number of tunnel interfaces before creation.
@@ -1628,34 +1497,39 @@ class IPsecUtil:
:type tun_ips: dict
:type if2_key: str
:type n_tunnels: int
- :type crypto_alg: CryptoAlg
+ :type crypto_alg: CryptoAlg.InputType
:type ckeys: Sequence[bytes]
- :type integ_alg: Optional[IntegAlg]
+ :type integ_alg: IntegAlg.InputType
:type ikeys: Sequence[bytes]
+ :type raddr_ip1: Union[IPv4Address, IPv6Address]
:type addr_incr: int
:type spi_d: dict
:type existing_tunnels: int
"""
- with PapiSocketExecutor(nodes[u"DUT2"]) as papi_exec:
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
+ with PapiSocketExecutor(nodes["DUT2"], is_async=True) as papi_exec:
if not existing_tunnels:
# Set IP address on VPP node 2 interface
- cmd = u"sw_interface_add_del_address"
+ cmd = "sw_interface_add_del_address"
args = dict(
sw_if_index=InterfaceUtil.get_interface_index(
- nodes[u"DUT2"], if2_key
+ nodes["DUT2"], if2_key
),
is_add=True,
del_all=False,
prefix=IPUtil.create_prefix_object(
- tun_ips[u"ip2"], 96 if tun_ips[u"ip2"].version == 6
- else 24
- )
+ tun_ips["ip2"],
+ 96 if tun_ips["ip2"].version == 6 else 24,
+ ),
)
- err_msg = f"Failed to set IP address on interface {if2_key} " \
- f"on host {nodes[u'DUT2'][u'host']}"
- papi_exec.add(cmd, **args).get_reply(err_msg)
+ err_msg = (
+ f"Failed to set IP address on interface {if2_key}"
+ f" on host {nodes['DUT2']['host']}"
+ )
+ papi_exec.add(cmd, **args).get_replies(err_msg)
# Configure IPIP tunnel interfaces
- cmd = u"ipip_add_tunnel"
+ cmd = "ipip_add_tunnel"
ipip_tunnel = dict(
instance=Constants.BITWISE_NON_ZERO,
src=None,
@@ -1665,50 +1539,45 @@ class IPsecUtil:
TunnelEncpaDecapFlags.TUNNEL_API_ENCAP_DECAP_FLAG_NONE
),
mode=int(TunnelMode.TUNNEL_API_MODE_P2P),
- dscp=int(IpDscp.IP_API_DSCP_CS0)
- )
- args = dict(
- tunnel=ipip_tunnel
+ dscp=int(IpDscp.IP_API_DSCP_CS0),
)
+ args = dict(tunnel=ipip_tunnel)
ipip_tunnels = [None] * existing_tunnels
for i in range(existing_tunnels, n_tunnels):
- args[u"tunnel"][u"src"] = IPAddress.create_ip_address_object(
- tun_ips[u"ip2"]
+ ipip_tunnel["src"] = IPAddress.create_ip_address_object(
+ tun_ips["ip2"]
)
- args[u"tunnel"][u"dst"] = IPAddress.create_ip_address_object(
- tun_ips[u"ip1"] + i * addr_incr
+ ipip_tunnel["dst"] = IPAddress.create_ip_address_object(
+ tun_ips["ip1"] + i * addr_incr
)
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IPIP tunnel interfaces on host" \
- f" {nodes[u'DUT2'][u'host']}"
+ err_msg = (
+ "Failed to add IPIP tunnel interfaces on host"
+ f" {nodes['DUT2']['host']}"
+ )
ipip_tunnels.extend(
[
- reply[u"sw_if_index"]
+ reply["sw_if_index"]
for reply in papi_exec.get_replies(err_msg)
- if u"sw_if_index" in reply
+ if "sw_if_index" in reply
]
)
# Configure IPSec SAD entries
- cmd = u"ipsec_sad_entry_add_del_v3"
- c_key = dict(
- length=0,
- data=None
- )
- i_key = dict(
- length=0,
- data=None
- )
+ cmd = "ipsec_sad_entry_add_v2"
+ c_key = dict(length=0, data=None)
+ i_key = dict(length=0, data=None)
+ common_flags = IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE
sad_entry = dict(
sad_id=None,
spi=None,
- protocol=int(IPsecProto.IPSEC_API_PROTO_ESP),
+ protocol=IPsecProto.ESP,
crypto_algorithm=crypto_alg.alg_int_repr,
crypto_key=c_key,
- integrity_algorithm=integ_alg.alg_int_repr if integ_alg else 0,
+ integrity_algorithm=integ_alg.alg_int_repr,
integrity_key=i_key,
- flags=None,
+ flags=common_flags,
tunnel=dict(
src=0,
dst=0,
@@ -1719,147 +1588,138 @@ class IPsecUtil:
dscp=int(IpDscp.IP_API_DSCP_CS0),
),
salt=0,
- udp_src_port=IPSEC_UDP_PORT_NONE,
- udp_dst_port=IPSEC_UDP_PORT_NONE,
- )
- args = dict(
- is_add=True,
- entry=sad_entry
+ udp_src_port=IPSEC_UDP_PORT_DEFAULT,
+ udp_dst_port=IPSEC_UDP_PORT_DEFAULT,
+ anti_replay_window_size=IPSEC_REPLAY_WINDOW_DEFAULT,
)
+ args = dict(entry=sad_entry)
for i in range(existing_tunnels, n_tunnels):
- ckeys.append(
- gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg))
- )
- ikeys.append(
- gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg))
- )
+ ckeys.append(gen_key(crypto_alg.key_len))
+ ikeys.append(gen_key(integ_alg.key_len))
# SAD entry for outband / tx path
- args[u"entry"][u"sad_id"] = 100000 + i
- args[u"entry"][u"spi"] = spi_d[u"spi_2"] + i
+ sad_entry["sad_id"] = 100000 + i
+ sad_entry["spi"] = spi_d["spi_2"] + i
- args[u"entry"][u"crypto_key"][u"length"] = len(ckeys[i])
- args[u"entry"][u"crypto_key"][u"data"] = ckeys[i]
+ sad_entry["crypto_key"]["length"] = len(ckeys[i])
+ sad_entry["crypto_key"]["data"] = ckeys[i]
if integ_alg:
- args[u"entry"][u"integrity_key"][u"length"] = len(ikeys[i])
- args[u"entry"][u"integrity_key"][u"data"] = ikeys[i]
- args[u"entry"][u"flags"] = int(
- IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE
- )
+ sad_entry["integrity_key"]["length"] = len(ikeys[i])
+ sad_entry["integrity_key"]["data"] = ikeys[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
+ sad_entry["flags"] |= IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_INBOUND
+ for i in range(existing_tunnels, n_tunnels):
# SAD entry for inband / rx path
- args[u"entry"][u"sad_id"] = i
- args[u"entry"][u"spi"] = spi_d[u"spi_1"] + i
+ sad_entry["sad_id"] = i
+ sad_entry["spi"] = spi_d["spi_1"] + i
- args[u"entry"][u"crypto_key"][u"length"] = len(ckeys[i])
- args[u"entry"][u"crypto_key"][u"data"] = ckeys[i]
+ sad_entry["crypto_key"]["length"] = len(ckeys[i])
+ sad_entry["crypto_key"]["data"] = ckeys[i]
if integ_alg:
- args[u"entry"][u"integrity_key"][u"length"] = len(ikeys[i])
- args[u"entry"][u"integrity_key"][u"data"] = ikeys[i]
- args[u"entry"][u"flags"] = int(
- IPsecSadFlags.IPSEC_API_SAD_FLAG_NONE |
- IPsecSadFlags.IPSEC_API_SAD_FLAG_IS_INBOUND
- )
+ sad_entry["integrity_key"]["length"] = len(ikeys[i])
+ sad_entry["integrity_key"]["data"] = ikeys[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IPsec SAD entries on host" \
- f" {nodes[u'DUT2'][u'host']}"
+ err_msg = (
+ f"Failed to add IPsec SAD entries on host"
+ f" {nodes['DUT2']['host']}"
+ )
papi_exec.get_replies(err_msg)
# Add protection for tunnels with IPSEC
- cmd = u"ipsec_tunnel_protect_update"
+ cmd = "ipsec_tunnel_protect_update"
n_hop = dict(
address=0,
via_label=MPLS_LABEL_INVALID,
- obj_id=Constants.BITWISE_NON_ZERO
+ obj_id=Constants.BITWISE_NON_ZERO,
)
ipsec_tunnel_protect = dict(
- sw_if_index=None,
- nh=n_hop,
- sa_out=None,
- n_sa_in=1,
- sa_in=None
- )
- args = dict(
- tunnel=ipsec_tunnel_protect
+ sw_if_index=None, nh=n_hop, sa_out=None, n_sa_in=1, sa_in=None
)
+ args = dict(tunnel=ipsec_tunnel_protect)
for i in range(existing_tunnels, n_tunnels):
- args[u"tunnel"][u"sw_if_index"] = ipip_tunnels[i]
- args[u"tunnel"][u"sa_out"] = 100000 + i
- args[u"tunnel"][u"sa_in"] = [i]
+ args["tunnel"]["sw_if_index"] = ipip_tunnels[i]
+ args["tunnel"]["sa_out"] = 100000 + i
+ args["tunnel"]["sa_in"] = [i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add protection for tunnels with IPSEC " \
- f"on host {nodes[u'DUT2'][u'host']}"
+ err_msg = (
+ "Failed to add protection for tunnels with IPSEC"
+ f" on host {nodes['DUT2']['host']}"
+ )
papi_exec.get_replies(err_msg)
if not existing_tunnels:
# Configure IP route
- cmd = u"ip_route_add_del"
+ cmd = "ip_route_add_del"
route = IPUtil.compose_vpp_route_structure(
- nodes[u"DUT2"], tun_ips[u"ip1"].compressed,
- prefix_len=32 if tun_ips[u"ip1"].version == 6 else 8,
+ nodes["DUT2"],
+ tun_ips["ip1"].compressed,
+ prefix_len=32 if tun_ips["ip1"].version == 6 else 8,
interface=if2_key,
- gateway=(tun_ips[u"ip2"] - 1).compressed
- )
- args = dict(
- is_add=1,
- is_multipath=0,
- route=route
+ gateway=(tun_ips["ip2"] - 1).compressed,
)
+ args = dict(is_add=1, is_multipath=0, route=route)
papi_exec.add(cmd, **args)
# Configure unnumbered interfaces
- cmd = u"sw_interface_set_unnumbered"
+ cmd = "sw_interface_set_unnumbered"
args = dict(
is_add=True,
sw_if_index=InterfaceUtil.get_interface_index(
- nodes[u"DUT2"], if2_key
+ nodes["DUT2"], if2_key
),
- unnumbered_sw_if_index=0
+ unnumbered_sw_if_index=0,
)
for i in range(existing_tunnels, n_tunnels):
- args[u"unnumbered_sw_if_index"] = ipip_tunnels[i]
+ args["unnumbered_sw_if_index"] = ipip_tunnels[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
# Set interfaces up
- cmd = u"sw_interface_set_flags"
+ cmd = "sw_interface_set_flags"
args = dict(
sw_if_index=0,
- flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
+ flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value,
)
for i in range(existing_tunnels, n_tunnels):
- args[u"sw_if_index"] = ipip_tunnels[i]
+ args["sw_if_index"] = ipip_tunnels[i]
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
# Configure IP routes
- cmd = u"ip_route_add_del"
- args = dict(
- is_add=1,
- is_multipath=0,
- route=None
- )
+ cmd = "ip_route_add_del"
+ args = dict(is_add=1, is_multipath=0, route=None)
for i in range(existing_tunnels, n_tunnels):
- args[u"route"] = IPUtil.compose_vpp_route_structure(
- nodes[u"DUT1"], (raddr_ip1 + i).compressed,
+ args["route"] = IPUtil.compose_vpp_route_structure(
+ nodes["DUT1"],
+ (raddr_ip1 + i).compressed,
prefix_len=128 if raddr_ip1.version == 6 else 32,
- interface=ipip_tunnels[i]
+ interface=ipip_tunnels[i],
)
papi_exec.add(
cmd, history=bool(not 1 < i < n_tunnels - 2), **args
)
- err_msg = f"Failed to add IP routes " \
- f"on host {nodes[u'DUT2'][u'host']}"
+ err_msg = f"Failed to add IP routes on host {nodes['DUT2']['host']}"
papi_exec.get_replies(err_msg)
@staticmethod
def vpp_ipsec_create_tunnel_interfaces(
- nodes, tun_if1_ip_addr, tun_if2_ip_addr, if1_key, if2_key,
- n_tunnels, crypto_alg, integ_alg, raddr_ip1, raddr_ip2, raddr_range,
- existing_tunnels=0, return_keys=False):
+ nodes: dict,
+ tun_if1_ip_addr: str,
+ tun_if2_ip_addr: str,
+ if1_key: str,
+ if2_key: str,
+ n_tunnels: int,
+ crypto_alg: CryptoAlg.InputType,
+ integ_alg: IntegAlg.InputType,
+ raddr_ip1: str,
+ raddr_ip2: str,
+ raddr_range: int,
+ existing_tunnels: int = 0,
+ return_keys: bool = False,
+ ) -> Optional[Tuple[List[bytes], List[bytes], int, int]]:
"""Create multiple IPsec tunnel interfaces between two VPP nodes.
Some deployments (e.g. devicetest) need to know the generated keys.
@@ -1893,85 +1753,97 @@ class IPsecUtil:
:type if1_key: str
:type if2_key: str
:type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type integ_alg: Optonal[IntegAlg]
- :type raddr_ip1: string
- :type raddr_ip2: string
+ :type crypto_alg: CryptoAlg.InputType
+ :type integ_alg: IntegAlg.InputType
+ :type raddr_ip1: str
+ :type raddr_ip2: str
:type raddr_range: int
:type existing_tunnels: int
:type return_keys: bool
:returns: Ckeys, ikeys, spi_1, spi_2.
- :rtype: Optional[List[bytes], List[bytes], int, int]
+ :rtype: Optional[Tuple[List[bytes], List[bytes], int, int]]
"""
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
n_tunnels = int(n_tunnels)
existing_tunnels = int(existing_tunnels)
- spi_d = dict(
- spi_1=100000,
- spi_2=200000
- )
+ spi_d = dict(spi_1=100000, spi_2=200000)
tun_ips = dict(
- ip1=ip_address(tun_if1_ip_addr),
- ip2=ip_address(tun_if2_ip_addr)
+ ip1=ip_address(tun_if1_ip_addr), ip2=ip_address(tun_if2_ip_addr)
)
raddr_ip1 = ip_address(raddr_ip1)
raddr_ip2 = ip_address(raddr_ip2)
- addr_incr = 1 << (128 - raddr_range) if tun_ips[u"ip1"].version == 6 \
+ addr_incr = (
+ 1 << (128 - raddr_range)
+ if tun_ips["ip1"].version == 6
else 1 << (32 - raddr_range)
+ )
- if n_tunnels - existing_tunnels > 10:
- ckeys, ikeys = IPsecUtil._ipsec_create_tunnel_interfaces_dut1_vat(
- nodes, tun_ips, if1_key, if2_key, n_tunnels, crypto_alg,
- integ_alg, raddr_ip2, addr_incr, spi_d, existing_tunnels
- )
- if u"DUT2" in nodes.keys():
- IPsecUtil._ipsec_create_tunnel_interfaces_dut2_vat(
- nodes, tun_ips, if2_key, n_tunnels, crypto_alg, ckeys,
- integ_alg, ikeys, raddr_ip1, addr_incr, spi_d,
- existing_tunnels
- )
- else:
- ckeys, ikeys = IPsecUtil._ipsec_create_tunnel_interfaces_dut1_papi(
- nodes, tun_ips, if1_key, if2_key, n_tunnels, crypto_alg,
- integ_alg, raddr_ip2, addr_incr, spi_d, existing_tunnels
+ ckeys, ikeys = IPsecUtil._ipsec_create_tunnel_interfaces_dut1_papi(
+ nodes,
+ tun_ips,
+ if1_key,
+ if2_key,
+ n_tunnels,
+ crypto_alg,
+ integ_alg,
+ raddr_ip2,
+ addr_incr,
+ spi_d,
+ existing_tunnels,
+ )
+ if "DUT2" in nodes.keys():
+ IPsecUtil._ipsec_create_tunnel_interfaces_dut2_papi(
+ nodes,
+ tun_ips,
+ if2_key,
+ n_tunnels,
+ crypto_alg,
+ ckeys,
+ integ_alg,
+ ikeys,
+ raddr_ip1,
+ addr_incr,
+ spi_d,
+ existing_tunnels,
)
- if u"DUT2" in nodes.keys():
- IPsecUtil._ipsec_create_tunnel_interfaces_dut2_papi(
- nodes, tun_ips, if2_key, n_tunnels, crypto_alg, ckeys,
- integ_alg, ikeys, raddr_ip1, addr_incr, spi_d,
- existing_tunnels
- )
if return_keys:
- return ckeys, ikeys, spi_d[u"spi_1"], spi_d[u"spi_2"]
+ return ckeys, ikeys, spi_d["spi_1"], spi_d["spi_2"]
return None
@staticmethod
- def _create_ipsec_script_files(dut, instances):
+ def _create_ipsec_script_files(
+ dut: str, instances: int
+ ) -> List[TextIOWrapper]:
"""Create script files for configuring IPsec in containers
:param dut: DUT node on which to create the script files
:param instances: number of containers on DUT node
- :type dut: string
+ :type dut: str
:type instances: int
+ :returns: Created opened file handles.
+ :rtype: List[TextIOWrapper]
"""
scripts = []
for cnf in range(0, instances):
script_filename = (
f"/tmp/ipsec_create_tunnel_cnf_{dut}_{cnf + 1}.config"
)
- scripts.append(open(script_filename, 'w'))
+ scripts.append(open(script_filename, "w", encoding="utf-8"))
return scripts
@staticmethod
def _close_and_copy_ipsec_script_files(
- dut, nodes, instances, scripts):
+ dut: str, nodes: dict, instances: int, scripts: Sequence[TextIOWrapper]
+ ) -> None:
"""Close created scripts and copy them to containers
:param dut: DUT node on which to create the script files
:param nodes: VPP nodes
:param instances: number of containers on DUT node
:param scripts: dictionary holding the script files
- :type dut: string
+ :type dut: str
:type nodes: dict
:type instances: int
:type scripts: dict
@@ -1983,124 +1855,21 @@ class IPsecUtil:
)
scp_node(nodes[dut], script_filename, script_filename)
-
- @staticmethod
- def vpp_ipsec_create_tunnel_interfaces_in_containers(
- nodes, if1_ip_addr, if2_ip_addr, n_tunnels, crypto_alg, integ_alg,
- raddr_ip1, raddr_ip2, raddr_range, n_instances):
- """Create multiple IPsec tunnel interfaces between two VPP nodes.
-
- :param nodes: VPP nodes to create tunnel interfaces.
- :param if1_ip_addr: VPP node 1 interface IP4 address.
- :param if2_ip_addr: VPP node 2 interface IP4 address.
- :param n_tunnels: Number of tunnell interfaces to create.
- :param crypto_alg: The encryption algorithm name.
- :param integ_alg: The integrity algorithm name.
- :param raddr_ip1: Policy selector remote IPv4 start address for the
- first tunnel in direction node1->node2.
- :param raddr_ip2: Policy selector remote IPv4 start address for the
- first tunnel in direction node2->node1.
- :param raddr_range: Mask specifying range of Policy selector Remote
- IPv4 addresses. Valid values are from 1 to 32.
- :param n_instances: Number of containers.
- :type nodes: dict
- :type if1_ip_addr: str
- :type if2_ip_addr: str
- :type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type integ_alg: Optional[IntegAlg]
- :type raddr_ip1: string
- :type raddr_ip2: string
- :type raddr_range: int
- :type n_instances: int
- """
- spi_1 = 100000
- spi_2 = 200000
- addr_incr = 1 << (32 - raddr_range)
-
- dut1_scripts = IPsecUtil._create_ipsec_script_files(
- u"DUT1", n_instances
- )
- dut2_scripts = IPsecUtil._create_ipsec_script_files(
- u"DUT2", n_instances
- )
-
- for cnf in range(0, n_instances):
- dut1_scripts[cnf].write(
- u"create loopback interface\n"
- u"set interface state loop0 up\n\n"
- )
- dut2_scripts[cnf].write(
- f"ip route add {if1_ip_addr}/8 via "
- f"{ip_address(if2_ip_addr) + cnf + 100} memif1/{cnf + 1}\n\n"
- )
-
- for tnl in range(0, n_tunnels):
- cnf = tnl % n_instances
- ckey = getattr(
- gen_key(IPsecUtil.get_crypto_alg_key_len(crypto_alg)), u"hex"
- )
- integ = u""
- ikey = getattr(
- gen_key(IPsecUtil.get_integ_alg_key_len(integ_alg)), u"hex"
- )
- if integ_alg:
- integ = (
- f"integ-alg {integ_alg.alg_name} "
- f"local-integ-key {ikey} "
- f"remote-integ-key {ikey} "
- )
- # Configure tunnel end point(s) on left side
- dut1_scripts[cnf].write(
- u"set interface ip address loop0 "
- f"{ip_address(if1_ip_addr) + tnl * addr_incr}/32\n"
- f"create ipsec tunnel "
- f"local-ip {ip_address(if1_ip_addr) + tnl * addr_incr} "
- f"local-spi {spi_1 + tnl} "
- f"remote-ip {ip_address(if2_ip_addr) + cnf} "
- f"remote-spi {spi_2 + tnl} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"local-crypto-key {ckey} "
- f"remote-crypto-key {ckey} "
- f"instance {tnl // n_instances} "
- f"salt 0x0 "
- f"{integ} \n"
- f"set interface unnumbered ipip{tnl // n_instances} use loop0\n"
- f"set interface state ipip{tnl // n_instances} up\n"
- f"ip route add {ip_address(raddr_ip2)+tnl}/32 "
- f"via ipip{tnl // n_instances}\n\n"
- )
- # Configure tunnel end point(s) on right side
- dut2_scripts[cnf].write(
- f"set ip neighbor memif1/{cnf + 1} "
- f"{ip_address(if1_ip_addr) + tnl * addr_incr} "
- f"02:02:00:00:{17:02X}:{cnf:02X} static\n"
- f"create ipsec tunnel local-ip {ip_address(if2_ip_addr) + cnf} "
- f"local-spi {spi_2 + tnl} "
- f"remote-ip {ip_address(if1_ip_addr) + tnl * addr_incr} "
- f"remote-spi {spi_1 + tnl} "
- f"crypto-alg {crypto_alg.alg_name} "
- f"local-crypto-key {ckey} "
- f"remote-crypto-key {ckey} "
- f"instance {tnl // n_instances} "
- f"salt 0x0 "
- f"{integ}\n"
- f"set interface unnumbered ipip{tnl // n_instances} "
- f"use memif1/{cnf + 1}\n"
- f"set interface state ipip{tnl // n_instances} up\n"
- f"ip route add {ip_address(raddr_ip1) + tnl}/32 "
- f"via ipip{tnl // n_instances}\n\n"
- )
-
- IPsecUtil._close_and_copy_ipsec_script_files(
- u"DUT1", nodes, n_instances, dut1_scripts)
- IPsecUtil._close_and_copy_ipsec_script_files(
- u"DUT2", nodes, n_instances, dut2_scripts)
-
@staticmethod
def vpp_ipsec_add_multiple_tunnels(
- nodes, interface1, interface2, n_tunnels, crypto_alg, integ_alg,
- tunnel_ip1, tunnel_ip2, raddr_ip1, raddr_ip2, raddr_range):
+ nodes: dict,
+ interface1: Union[str, int],
+ interface2: Union[str, int],
+ n_tunnels: int,
+ crypto_alg: CryptoAlg.InputType,
+ integ_alg: IntegAlg.InputType,
+ tunnel_ip1: str,
+ tunnel_ip2: str,
+ raddr_ip1: str,
+ raddr_ip2: str,
+ raddr_range: int,
+ tunnel_addr_incr: bool = True,
+ ) -> None:
"""Create multiple IPsec tunnels between two VPP nodes.
:param nodes: VPP nodes to create tunnels.
@@ -2117,18 +1886,24 @@ class IPsecUtil:
first tunnel in direction node2->node1.
:param raddr_range: Mask specifying range of Policy selector Remote
IPv4 addresses. Valid values are from 1 to 32.
+ :param tunnel_addr_incr: Enable or disable tunnel IP address
+ incremental step.
:type nodes: dict
- :type interface1: str or int
- :type interface2: str or int
+ :type interface1: Union[str, int]
+ :type interface2: Union[str, int]
:type n_tunnels: int
- :type crypto_alg: CryptoAlg
- :type integ_alg: Optional[IntegAlg]
+ :type crypto_alg: CryptoAlg.InputType
+ :type integ_alg: IntegAlg.InputType
:type tunnel_ip1: str
:type tunnel_ip2: str
- :type raddr_ip1: string
- :type raddr_ip2: string
+ :type raddr_ip1: str
+ :type raddr_ip2: str
:type raddr_range: int
+ :type tunnel_addr_incr: bool
"""
+ crypto_alg = get_enum_instance(CryptoAlg, crypto_alg)
+ integ_alg = get_enum_instance(IntegAlg, integ_alg)
+
spd_id = 1
p_hi = 100
p_lo = 10
@@ -2137,113 +1912,279 @@ class IPsecUtil:
spi_1 = 300000
spi_2 = 400000
- crypto_key = gen_key(
- IPsecUtil.get_crypto_alg_key_len(crypto_alg)
- ).decode()
- integ_key = gen_key(
- IPsecUtil.get_integ_alg_key_len(integ_alg)
- ).decode() if integ_alg else u""
-
- rmac = Topology.get_interface_mac(nodes[u"DUT2"], interface2) \
- if u"DUT2" in nodes.keys() \
- else Topology.get_interface_mac(nodes[u"TG"], interface2)
+ crypto_key = gen_key(crypto_alg.key_len).decode()
+ integ_key = gen_key(integ_alg.key_len).decode()
+ rmac = (
+ Topology.get_interface_mac(nodes["DUT2"], interface2)
+ if "DUT2" in nodes.keys()
+ else Topology.get_interface_mac(nodes["TG"], interface2)
+ )
IPsecUtil.vpp_ipsec_set_ip_route(
- nodes[u"DUT1"], n_tunnels, tunnel_ip1, raddr_ip2, tunnel_ip2,
- interface1, raddr_range, rmac)
-
- IPsecUtil.vpp_ipsec_add_spd(nodes[u"DUT1"], spd_id)
- IPsecUtil.vpp_ipsec_spd_add_if(nodes[u"DUT1"], spd_id, interface1)
- IPsecUtil.vpp_ipsec_add_spd_entry(
- nodes[u"DUT1"], spd_id, p_hi, PolicyAction.BYPASS, inbound=False,
- proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+ nodes["DUT1"],
+ n_tunnels,
+ tunnel_ip1,
+ raddr_ip2,
+ tunnel_ip2,
+ interface1,
+ raddr_range,
+ rmac,
)
- IPsecUtil.vpp_ipsec_add_spd_entry(
- nodes[u"DUT1"], spd_id, p_hi, PolicyAction.BYPASS, inbound=True,
- proto=50, laddr_range=u"100.0.0.0/8", raddr_range=u"100.0.0.0/8"
+
+ IPsecUtil.vpp_ipsec_add_spd(nodes["DUT1"], spd_id)
+ IPsecUtil.vpp_ipsec_spd_add_if(nodes["DUT1"], spd_id, interface1)
+
+ addr_incr = (
+ 1 << (128 - 96)
+ if ip_address(tunnel_ip1).version == 6
+ else 1 << (32 - 24)
)
+ for i in range(n_tunnels // (addr_incr**2) + 1):
+ dut1_local_outbound_range = ip_network(
+ f"{ip_address(tunnel_ip1) + i*(addr_incr**3)}/8", False
+ ).with_prefixlen
+ dut1_remote_outbound_range = ip_network(
+ f"{ip_address(tunnel_ip2) + i*(addr_incr**3)}/8", False
+ ).with_prefixlen
+
+ IPsecUtil.vpp_ipsec_add_spd_entry(
+ nodes["DUT1"],
+ spd_id,
+ p_hi,
+ IpsecSpdAction.BYPASS,
+ inbound=False,
+ proto=IPsecProto.ESP,
+ laddr_range=dut1_local_outbound_range,
+ raddr_range=dut1_remote_outbound_range,
+ )
+ IPsecUtil.vpp_ipsec_add_spd_entry(
+ nodes["DUT1"],
+ spd_id,
+ p_hi,
+ IpsecSpdAction.BYPASS,
+ inbound=True,
+ proto=IPsecProto.ESP,
+ laddr_range=dut1_remote_outbound_range,
+ raddr_range=dut1_local_outbound_range,
+ )
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes[u"DUT1"], n_tunnels, sa_id_1, spi_1, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip1, tunnel_ip2
+ nodes["DUT1"],
+ n_tunnels,
+ sa_id_1,
+ spi_1,
+ crypto_alg,
+ crypto_key,
+ integ_alg,
+ integ_key,
+ tunnel_ip1,
+ tunnel_ip2,
+ tunnel_addr_incr,
)
IPsecUtil.vpp_ipsec_add_spd_entries(
- nodes[u"DUT1"], n_tunnels, spd_id, priority=ObjIncrement(p_lo, 0),
- action=PolicyAction.PROTECT, inbound=False,
+ nodes["DUT1"],
+ n_tunnels,
+ spd_id,
+ priority=ObjIncrement(p_lo, 0),
+ action=IpsecSpdAction.PROTECT,
+ inbound=False,
sa_id=ObjIncrement(sa_id_1, 1),
- raddr_range=NetworkIncrement(ip_network(raddr_ip2))
+ raddr_range=NetworkIncrement(ip_network(raddr_ip2)),
)
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes[u"DUT1"], n_tunnels, sa_id_2, spi_2, crypto_alg, crypto_key,
- integ_alg, integ_key, tunnel_ip2, tunnel_ip1
+ nodes["DUT1"],
+ n_tunnels,
+ sa_id_2,
+ spi_2,
+ crypto_alg,
+ crypto_key,
+ integ_alg,
+ integ_key,
+ tunnel_ip2,
+ tunnel_ip1,
+ tunnel_addr_incr,
)
IPsecUtil.vpp_ipsec_add_spd_entries(
- nodes[u"DUT1"], n_tunnels, spd_id, priority=ObjIncrement(p_lo, 0),
- action=PolicyAction.PROTECT, inbound=True,
+ nodes["DUT1"],
+ n_tunnels,
+ spd_id,
+ priority=ObjIncrement(p_lo, 0),
+ action=IpsecSpdAction.PROTECT,
+ inbound=True,
sa_id=ObjIncrement(sa_id_2, 1),
- raddr_range=NetworkIncrement(ip_network(raddr_ip1))
+ raddr_range=NetworkIncrement(ip_network(raddr_ip1)),
)
- if u"DUT2" in nodes.keys():
+ if "DUT2" in nodes.keys():
+ rmac = Topology.get_interface_mac(nodes["DUT1"], interface1)
IPsecUtil.vpp_ipsec_set_ip_route(
- nodes[u"DUT2"], n_tunnels, tunnel_ip2, raddr_ip1, tunnel_ip1,
- interface2, raddr_range)
-
- IPsecUtil.vpp_ipsec_add_spd(nodes[u"DUT2"], spd_id)
- IPsecUtil.vpp_ipsec_spd_add_if(nodes[u"DUT2"], spd_id, interface2)
- IPsecUtil.vpp_ipsec_add_spd_entry(
- nodes[u"DUT2"], spd_id, p_hi, PolicyAction.BYPASS,
- inbound=False, proto=50, laddr_range=u"100.0.0.0/8",
- raddr_range=u"100.0.0.0/8"
- )
- IPsecUtil.vpp_ipsec_add_spd_entry(
- nodes[u"DUT2"], spd_id, p_hi, PolicyAction.BYPASS,
- inbound=True, proto=50, laddr_range=u"100.0.0.0/8",
- raddr_range=u"100.0.0.0/8"
+ nodes["DUT2"],
+ n_tunnels,
+ tunnel_ip2,
+ raddr_ip1,
+ tunnel_ip1,
+ interface2,
+ raddr_range,
+ rmac,
)
+ IPsecUtil.vpp_ipsec_add_spd(nodes["DUT2"], spd_id)
+ IPsecUtil.vpp_ipsec_spd_add_if(nodes["DUT2"], spd_id, interface2)
+ for i in range(n_tunnels // (addr_incr**2) + 1):
+ dut2_local_outbound_range = ip_network(
+ f"{ip_address(tunnel_ip1) + i*(addr_incr**3)}/8", False
+ ).with_prefixlen
+ dut2_remote_outbound_range = ip_network(
+ f"{ip_address(tunnel_ip2) + i*(addr_incr**3)}/8", False
+ ).with_prefixlen
+
+ IPsecUtil.vpp_ipsec_add_spd_entry(
+ nodes["DUT2"],
+ spd_id,
+ p_hi,
+ IpsecSpdAction.BYPASS,
+ inbound=False,
+ proto=IPsecProto.ESP,
+ laddr_range=dut2_remote_outbound_range,
+ raddr_range=dut2_local_outbound_range,
+ )
+ IPsecUtil.vpp_ipsec_add_spd_entry(
+ nodes["DUT2"],
+ spd_id,
+ p_hi,
+ IpsecSpdAction.BYPASS,
+ inbound=True,
+ proto=IPsecProto.ESP,
+ laddr_range=dut2_local_outbound_range,
+ raddr_range=dut2_remote_outbound_range,
+ )
+
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes[u"DUT2"], n_tunnels, sa_id_1, spi_1, crypto_alg,
- crypto_key, integ_alg, integ_key, tunnel_ip1, tunnel_ip2
+ nodes["DUT2"],
+ n_tunnels,
+ sa_id_1,
+ spi_1,
+ crypto_alg,
+ crypto_key,
+ integ_alg,
+ integ_key,
+ tunnel_ip1,
+ tunnel_ip2,
+ tunnel_addr_incr,
)
IPsecUtil.vpp_ipsec_add_spd_entries(
- nodes[u"DUT2"], n_tunnels, spd_id,
+ nodes["DUT2"],
+ n_tunnels,
+ spd_id,
priority=ObjIncrement(p_lo, 0),
- action=PolicyAction.PROTECT, inbound=True,
+ action=IpsecSpdAction.PROTECT,
+ inbound=True,
sa_id=ObjIncrement(sa_id_1, 1),
- raddr_range=NetworkIncrement(ip_network(raddr_ip2))
+ raddr_range=NetworkIncrement(ip_network(raddr_ip2)),
)
IPsecUtil.vpp_ipsec_add_sad_entries(
- nodes[u"DUT2"], n_tunnels, sa_id_2, spi_2, crypto_alg,
- crypto_key, integ_alg, integ_key, tunnel_ip2, tunnel_ip1
+ nodes["DUT2"],
+ n_tunnels,
+ sa_id_2,
+ spi_2,
+ crypto_alg,
+ crypto_key,
+ integ_alg,
+ integ_key,
+ tunnel_ip2,
+ tunnel_ip1,
+ tunnel_addr_incr,
)
IPsecUtil.vpp_ipsec_add_spd_entries(
- nodes[u"DUT2"], n_tunnels, spd_id,
+ nodes["DUT2"],
+ n_tunnels,
+ spd_id,
priority=ObjIncrement(p_lo, 0),
- action=PolicyAction.PROTECT, inbound=False,
+ action=IpsecSpdAction.PROTECT,
+ inbound=False,
sa_id=ObjIncrement(sa_id_2, 1),
- raddr_range=NetworkIncrement(ip_network(raddr_ip1))
+ raddr_range=NetworkIncrement(ip_network(raddr_ip1)),
)
@staticmethod
- def vpp_ipsec_show_all(node):
+ def vpp_ipsec_show_all(node: dict) -> None:
"""Run "show ipsec all" debug CLI command.
:param node: Node to run command on.
:type node: dict
"""
- PapiSocketExecutor.run_cli_cmd(node, u"show ipsec all")
+ PapiSocketExecutor.run_cli_cmd(node, "show ipsec all")
@staticmethod
- def show_ipsec_security_association(node):
+ def show_ipsec_security_association(node: dict) -> None:
"""Show IPSec security association.
:param node: DUT node.
:type node: dict
"""
- cmds = [
- u"ipsec_sa_v3_dump"
- ]
- PapiSocketExecutor.dump_and_log(node, cmds)
+ cmd = "ipsec_sa_v5_dump"
+ PapiSocketExecutor.dump_and_log(node, [cmd])
+
+ @staticmethod
+ def vpp_ipsec_flow_enable_rss(
+ node: dict,
+ proto: str = "IPSEC_ESP",
+ rss_type: str = "esp",
+ function: str = "default",
+ ) -> int:
+ """Ipsec flow enable rss action.
+
+ :param node: DUT node.
+ :param proto: The flow protocol.
+ :param rss_type: RSS type.
+ :param function: RSS function.
+ :type node: dict
+ :type proto: IPsecProto.InputType
+ :type rss_type: str
+ :type function: str
+ :returns: flow_index.
+ :rtype: int
+ """
+ # The proto argument does not correspond to IPsecProto.
+ # The allowed values come from src/vnet/ip/protocols.def
+ # and we do not have a good enum for that yet.
+ # FlowUti. and FlowUtil. are close but not exactly the same.
+
+ # TODO: to be fixed to use full PAPI when it is ready in VPP
+ cmd = (
+ f"test flow add src-ip any proto {proto} rss function"
+ f" {function} rss types {rss_type}"
+ )
+ stdout = PapiSocketExecutor.run_cli_cmd(node, cmd)
+ flow_index = stdout.split()[1]
+
+ return flow_index
+
+ @staticmethod
+ def vpp_create_ipsec_flows_on_dut(
+ node: dict, n_flows: int, rx_queues: int, spi_start: int, interface: str
+ ) -> None:
+ """Create mutiple ipsec flows and enable flows onto interface.
+
+ :param node: DUT node.
+ :param n_flows: Number of flows to create.
+ :param rx_queues: NUmber of RX queues.
+ :param spi_start: The start spi.
+ :param interface: Name of the interface.
+
+ :type node: dict
+ :type n_flows: int
+ :type rx_queues: int
+ :type spi_start: int
+ :type interface: str
+ """
+
+ for i in range(0, n_flows):
+ rx_queue = i % rx_queues
+ spi = spi_start + i
+ flow_index = FlowUtil.vpp_create_ip4_ipsec_flow(
+ node, "ESP", spi, "redirect-to-queue", value=rx_queue
+ )
+ FlowUtil.vpp_flow_enable(node, interface, flow_index)
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index 7e474abf8d..ff013307bc 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,18 +13,19 @@
"""Interface util library."""
+from json import loads
from time import sleep
from enum import IntEnum
from ipaddress import ip_address
from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
from resources.libraries.python.Constants import Constants
from resources.libraries.python.DUTSetup import DUTSetup
from resources.libraries.python.IPAddress import IPAddress
from resources.libraries.python.L2Util import L2Util
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
-from resources.libraries.python.parsers.JsonParser import JsonParser
from resources.libraries.python.ssh import SSH, exec_cmd, exec_cmd_no_error
from resources.libraries.python.topology import NodeType, Topology
from resources.libraries.python.VPPUtil import VPPUtil
@@ -295,6 +296,21 @@ class InterfaceUtil:
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
+ def set_interface_xdp_off(node, pf_pcis):
+ """Detaches any currently attached XDP/BPF program from the specified
+ interfaces.
+
+ :param node: Topology node.
+ :param pf_pcis: List of node's interfaces PCI addresses.
+ :type nodes: dict
+ :type pf_pcis: list
+ """
+ for pf_pci in pf_pcis:
+ pf_eth = InterfaceUtil.pci_to_eth(node, pf_pci)
+ cmd = f"ip link set dev {pf_eth} xdp off"
+ exec_cmd_no_error(node, cmd, sudo=True)
+
+ @staticmethod
def set_interface_flow_control(node, pf_pcis, rxf=u"off", txf=u"off"):
"""Set Ethernet flow control for specified interfaces.
@@ -332,11 +348,13 @@ class InterfaceUtil:
exec_cmd_no_error(node, cmd, sudo=True)
@staticmethod
- def vpp_set_interface_mtu(node, interface, mtu=9200):
- """Set Ethernet MTU on interface.
+ def vpp_set_interface_mtu(node, interface, mtu):
+ """Apply new MTU value to a VPP hardware interface.
+
+ The interface should be down when this is called.
:param node: VPP node.
- :param interface: Interface to setup MTU. Default: 9200.
+ :param interface: Interface to set MTU on.
:param mtu: Ethernet MTU size in Bytes.
:type node: dict
:type interface: str or int
@@ -346,43 +364,11 @@ class InterfaceUtil:
sw_if_index = Topology.get_interface_sw_index(node, interface)
else:
sw_if_index = interface
-
cmd = u"hw_interface_set_mtu"
err_msg = f"Failed to set interface MTU on host {node[u'host']}"
- args = dict(
- sw_if_index=sw_if_index,
- mtu=int(mtu)
- )
- try:
- with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd, **args).get_reply(err_msg)
- except AssertionError as err:
- logger.debug(f"Setting MTU failed.\n{err}")
-
- @staticmethod
- def vpp_set_interfaces_mtu_on_node(node, mtu=9200):
- """Set Ethernet MTU on all interfaces.
-
- :param node: VPP node.
- :param mtu: Ethernet MTU size in Bytes. Default: 9200.
- :type node: dict
- :type mtu: int
- """
- for interface in node[u"interfaces"]:
- InterfaceUtil.vpp_set_interface_mtu(node, interface, mtu)
-
- @staticmethod
- def vpp_set_interfaces_mtu_on_all_duts(nodes, mtu=9200):
- """Set Ethernet MTU on all interfaces on all DUTs.
-
- :param nodes: VPP nodes.
- :param mtu: Ethernet MTU size in Bytes. Default: 9200.
- :type nodes: dict
- :type mtu: int
- """
- for node in nodes.values():
- if node[u"type"] == NodeType.DUT:
- InterfaceUtil.vpp_set_interfaces_mtu_on_node(node, mtu)
+ args = dict(sw_if_index=sw_if_index, mtu=int(mtu))
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
def vpp_node_interfaces_ready_wait(node, retries=15):
@@ -737,9 +723,8 @@ class InterfaceUtil:
ret_code, stdout, _ = ssh.exec_command(cmd)
if int(ret_code) != 0:
raise RuntimeError(u"Get interface name and MAC failed")
- tmp = u"{" + stdout.rstrip().replace(u"\n", u",") + u"}"
- interfaces = JsonParser().parse_data(tmp)
+ interfaces = loads("{" + stdout.rstrip().replace("\n", ",") + "}")
for interface in node[u"interfaces"].values():
name = interfaces.get(interface[u"mac_address"])
if name is None:
@@ -907,7 +892,7 @@ class InterfaceUtil:
err_msg = f"Failed to set VXLAN bypass on interface " \
f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd, **args).get_replies(err_msg)
+ papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
def vxlan_dump(node, interface=None):
@@ -1081,7 +1066,7 @@ class InterfaceUtil:
:raises RuntimeError: if it is unable to create GTPU interface on the
node.
"""
- cmd = u"gtpu_add_del_tunnel"
+ cmd = u"gtpu_add_del_tunnel_v2"
args = dict(
is_add=True,
src_address=IPAddress.create_ip_address_object(
@@ -1092,8 +1077,10 @@ class InterfaceUtil:
),
mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
encap_vrf_id=0,
- decap_next_index=2,
- teid=teid
+ decap_next_index=2, # ipv4
+ teid=teid,
+ # pdu_extension: Unused, false by default.
+ # qfi: Irrelevant when pdu_extension is not used.
)
err_msg = f"Failed to create GTPU tunnel interface " \
f"on host {node[u'host']}"
@@ -1108,6 +1095,31 @@ class InterfaceUtil:
return sw_if_index
@staticmethod
+ def vpp_enable_gtpu_offload_rx(node, interface, gtpu_if_index):
+ """Enable GTPU offload RX onto interface.
+
+ :param node: Node to run command on.
+ :param interface: Name of the specific interface.
+ :param gtpu_if_index: Index of GTPU tunnel interface.
+
+ :type node: dict
+ :type interface: str
+ :type gtpu_interface: int
+ """
+ sw_if_index = Topology.get_interface_sw_index(node, interface)
+
+ cmd = u"gtpu_offload_rx"
+ args = dict(
+ hw_if_index=sw_if_index,
+ sw_if_index=gtpu_if_index,
+ enable=True
+ )
+
+ err_msg = f"Failed to enable GTPU offload RX on host {node[u'host']}"
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
+
+ @staticmethod
def vpp_create_loopback(node, mac=None):
"""Create loopback interface on VPP node.
@@ -1311,7 +1323,7 @@ class InterfaceUtil:
node, u"set logging class af_xdp level debug"
)
- cmd = u"af_xdp_create"
+ cmd = u"af_xdp_create_v3"
pci_addr = Topology.get_interface_pci_addr(node, if_key)
args = dict(
name=InterfaceUtil.pci_to_eth(node, pci_addr),
@@ -1363,7 +1375,7 @@ class InterfaceUtil:
node, u"set logging class rdma level debug"
)
- cmd = u"rdma_create_v3"
+ cmd = u"rdma_create_v4"
pci_addr = Topology.get_interface_pci_addr(node, if_key)
args = dict(
name=InterfaceUtil.pci_to_eth(node, pci_addr),
@@ -1376,6 +1388,8 @@ class InterfaceUtil:
no_multi_seg=False,
max_pktlen=0,
# TODO: Apply desired RSS flags.
+ # rss4 kept 0 (auto) as API default.
+ # rss6 kept 0 (auto) as API default.
)
err_msg = f"Failed to create RDMA interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
@@ -1840,7 +1854,7 @@ class InterfaceUtil:
DUTSetup.pci_driver_bind(node, pf_pci_addr, kernel_driver)
# Initialize PCI VFs.
- DUTSetup.set_sriov_numvfs(node, pf_pci_addr, numvfs)
+ DUTSetup.set_sriov_numvfs(node, pf_pci_addr, numvfs=numvfs)
if not numvfs:
if osi_layer == u"L2":
@@ -1869,12 +1883,20 @@ class InterfaceUtil:
node, pf_dev, state=u"up"
)
- DUTSetup.pci_vf_driver_unbind(node, pf_pci_addr, vf_id)
- DUTSetup.pci_vf_driver_bind(node, pf_pci_addr, vf_id, uio_driver)
+ vf_pci_addr = DUTSetup.get_virtfn_pci_addr(node, pf_pci_addr, vf_id)
+ current_driver = DUTSetup.get_pci_dev_driver(
+ node, vf_pci_addr.replace(":", r"\:")
+ )
+ if current_driver:
+ DUTSetup.pci_vf_driver_unbind(
+ node, pf_pci_addr, vf_id
+ )
+ DUTSetup.pci_vf_driver_bind(
+ node, pf_pci_addr, vf_id, uio_driver
+ )
# Add newly created ports into topology file
vf_ifc_name = f"{ifc_key}_vif"
- vf_pci_addr = DUTSetup.get_virtfn_pci_addr(node, pf_pci_addr, vf_id)
vf_ifc_key = Topology.add_new_port(node, vf_ifc_name)
Topology.update_interface_name(
node, vf_ifc_key, vf_ifc_name+str(vf_id+1)
@@ -1971,7 +1993,7 @@ class InterfaceUtil:
thread_data = VPPUtil.vpp_show_threads(node)
worker_cnt = len(thread_data) - 1
if not worker_cnt:
- return None
+ return
worker_ids = list()
if workers:
for item in thread_data:
@@ -1995,7 +2017,7 @@ class InterfaceUtil:
@staticmethod
def vpp_round_robin_rx_placement_on_all_duts(
- nodes, prefix, workers=None):
+ nodes, prefix, use_dp_cores=False):
"""Set Round Robin interface RX placement on worker threads
on all DUTs.
@@ -2006,14 +2028,18 @@ class InterfaceUtil:
:param nodes: Topology nodes.
:param prefix: Interface name prefix.
- :param workers: Comma separated worker index numbers intended for
- dataplane work.
+ :param use_dp_cores: Limit to dataplane cores.
:type nodes: dict
:type prefix: str
- :type workers: str
+ :type use_dp_cores: bool
"""
- for node in nodes.values():
- if node[u"type"] == NodeType.DUT:
+ for node_name, node in nodes.items():
+ if node["type"] == NodeType.DUT:
+ workers = None
+ if use_dp_cores:
+ workers = BuiltIn().get_variable_value(
+ f"${{{node_name}_cpu_dp}}"
+ )
InterfaceUtil.vpp_round_robin_rx_placement(
node, prefix, workers
)
diff --git a/resources/libraries/python/Iperf3.py b/resources/libraries/python/Iperf3.py
index ed186f0757..a881ec9f06 100644
--- a/resources/libraries/python/Iperf3.py
+++ b/resources/libraries/python/Iperf3.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -33,6 +33,29 @@ class Iperf3:
# Computed affinity for iPerf client.
self._c_affinity = None
+ @staticmethod
+ def get_iperf_type():
+ """Log and return the installed traffic generator type.
+
+ :returns: Traffic generator type string.
+ :rtype: str
+ """
+ return "IPERF"
+
+ @staticmethod
+ def get_iperf_version(node):
+ """Log and return the installed traffic generator version.
+
+ :param node: Node from topology file.
+ :type node: dict
+ :returns: Traffic generator version string.
+ :rtype: str
+ """
+ command = f"iperf3 --version | head -1"
+ message = u"Get iPerf version failed!"
+ stdout, _ = exec_cmd_no_error(node, command, message=message)
+ return stdout.strip()
+
def initialize_iperf_server(
self, node, pf_key, interface, bind, bind_gw, bind_mask,
namespace=None, cpu_skip_cnt=0, cpu_cnt=1, instances=1):
diff --git a/resources/libraries/python/L2Util.py b/resources/libraries/python/L2Util.py
index 0f00787bd4..92c93ed9dd 100644
--- a/resources/libraries/python/L2Util.py
+++ b/resources/libraries/python/L2Util.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -156,7 +156,7 @@ class L2Util:
:type learn: bool
:type arp_term: bool
"""
- cmd = u"bridge_domain_add_del"
+ cmd = u"bridge_domain_add_del_v2"
err_msg = f"Failed to create L2 bridge domain on host {node[u'host']}"
args = dict(
bd_id=int(bd_id),
@@ -222,7 +222,7 @@ class L2Util:
sw_if_index1 = Topology.get_interface_sw_index(node, port_1)
sw_if_index2 = Topology.get_interface_sw_index(node, port_2)
- cmd1 = u"bridge_domain_add_del"
+ cmd1 = u"bridge_domain_add_del_v2"
args1 = dict(
bd_id=int(bd_id),
flood=True,
@@ -254,8 +254,10 @@ class L2Util:
f"on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd1, **args1).add(cmd2, **args2).add(cmd2, **args3)
- papi_exec.get_replies(err_msg)
+ # Cannot use get_replies due to VPP-2203.
+ papi_exec.add(cmd1, **args1).get_reply(err_msg)
+ papi_exec.add(cmd2, **args2).get_reply(err_msg)
+ papi_exec.add(cmd2, **args3).get_reply(err_msg)
@staticmethod
def vpp_setup_bidirectional_cross_connect(node, interface1, interface2):
@@ -293,7 +295,9 @@ class L2Util:
f"on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd, **args1).add(cmd, **args2).get_replies(err_msg)
+ # Cannot use get_replies due to VPP-2203.
+ papi_exec.add(cmd, **args1).get_reply(err_msg)
+ papi_exec.add(cmd, **args2).get_reply(err_msg)
@staticmethod
def vpp_setup_bidirectional_l2_patch(node, interface1, interface2):
@@ -331,7 +335,9 @@ class L2Util:
f"on host {node['host']}"
with PapiSocketExecutor(node) as papi_exec:
- papi_exec.add(cmd, **args1).add(cmd, **args2).get_replies(err_msg)
+ # Cannot use get_replies due to VPP-2203.
+ papi_exec.add(cmd, **args1).get_reply(err_msg)
+ papi_exec.add(cmd, **args2).get_reply(err_msg)
@staticmethod
def linux_add_bridge(node, br_name, if_1, if_2, set_up=True):
diff --git a/resources/libraries/python/LispSetup.py b/resources/libraries/python/LispSetup.py
index 6579764596..9e3ef97aa3 100644
--- a/resources/libraries/python/LispSetup.py
+++ b/resources/libraries/python/LispSetup.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2016-2020 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/libraries/python/LoadBalancerUtil.py b/resources/libraries/python/LoadBalancerUtil.py
index 6810122257..471bc87e80 100644
--- a/resources/libraries/python/LoadBalancerUtil.py
+++ b/resources/libraries/python/LoadBalancerUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2023 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -108,9 +108,10 @@ class LoadBalancerUtil:
target_port = kwargs.pop(u"target_port", 0)
node_port = kwargs.pop(u"node_port", 0)
new_len = kwargs.pop(u"new_len", 1024)
+ src_ip_sticky = kwargs.pop(u"src_ip_sticky", 0)
is_del = kwargs.pop(u"is_del", 0)
- cmd = u"lb_add_del_vip"
+ cmd = u"lb_add_del_vip_v2"
err_msg = f"Failed to add vip on host {node[u'host']}"
vip_addr = ip_address(vip_addr).packed
@@ -127,7 +128,8 @@ class LoadBalancerUtil:
target_port=target_port,
node_port=node_port,
new_flows_table_length=int(new_len),
- is_del=is_del
+ src_ip_sticky=src_ip_sticky,
+ is_del=is_del,
)
with PapiSocketExecutor(node) as papi_exec:
diff --git a/resources/libraries/python/MLRsearch/AbstractMeasurer.py b/resources/libraries/python/MLRsearch/AbstractMeasurer.py
deleted file mode 100644
index da66b4e174..0000000000
--- a/resources/libraries/python/MLRsearch/AbstractMeasurer.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining AbstractMeasurer class."""
-
-from abc import ABCMeta, abstractmethod
-
-
-class AbstractMeasurer(metaclass=ABCMeta):
- """Abstract class defining common API for measurement providers."""
-
- @abstractmethod
- def measure(self, duration, transmit_rate):
- """Perform trial measurement and return the result.
-
- :param duration: Trial duration [s].
- :param transmit_rate: Target transmit rate [tps].
- :type duration: float
- :type transmit_rate: float
- :returns: Structure containing the result of the measurement.
- :rtype: ReceiveRateMeasurement.ReceiveRateMeasurement
- """
diff --git a/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py b/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py
deleted file mode 100644
index cca48ef798..0000000000
--- a/resources/libraries/python/MLRsearch/AbstractSearchAlgorithm.py
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining AbstractSearchAlgorithm class."""
-
-from abc import ABCMeta, abstractmethod
-
-
-class AbstractSearchAlgorithm(metaclass=ABCMeta):
- """Abstract class defining common API for search algorithms."""
-
- def __init__(self, measurer):
- """Store the rate provider.
-
- :param measurer: Object able to perform trial or composite measurements.
- :type measurer: AbstractMeasurer.AbstractMeasurer
- """
- self.measurer = measurer
-
- @abstractmethod
- def narrow_down_intervals(
- self, min_rate, max_rate, packet_loss_ratios):
- """Perform measurements to narrow down intervals, return them.
-
- :param min_rate: Minimal target transmit rate [tps].
- Usually, tests are set to fail if search reaches this or below.
- :param max_rate: Maximal target transmit rate [tps].
- Usually computed from line rate and various other limits,
- to prevent failures or duration stretching in Traffic Generator.
- :param packet_loss_ratios: Ratios of packet loss to search for,
- e.g. [0.0, 0.005] for NDR and PDR.
- :type min_rate: float
- :type max_rate: float
- :type packet_loss_ratios: Iterable[float]
- :returns: Structure containing narrowed down intervals
- and their measurements.
- :rtype: List[ReceiveRateInterval.ReceiveRateInterval]
- """
diff --git a/resources/libraries/python/MLRsearch/MeasurementDatabase.py b/resources/libraries/python/MLRsearch/MeasurementDatabase.py
deleted file mode 100644
index 2f601d6260..0000000000
--- a/resources/libraries/python/MLRsearch/MeasurementDatabase.py
+++ /dev/null
@@ -1,157 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining MeasurementDatabase class."""
-
-from .ReceiveRateInterval import ReceiveRateInterval
-from .PerDurationDatabase import PerDurationDatabase
-
-
-class MeasurementDatabase:
- """A structure holding measurement results.
-
- The implementation uses a dict from duration values
- to PerDurationDatabase instances.
-
- Several utility methods are added, accomplishing tasks useful for MLRsearch.
-
- This class contains the "find tightest bounds" parts of logic required
- by MLRsearch. One exception is lack of any special handling for maximal
- or minimal rates.
- """
-
- def __init__(self, measurements):
- """Store measurement results in per-duration databases.
-
- TODO: Move processing to a factory method,
- keep constructor only to store (presumably valid) values.
-
- If the measurements argument contains is a dict,
- the constructor assumes it contains the processed databases.
-
- :param measurements: The measurement results to store.
- :type measurements: Iterable[ReceiveRateMeasurement]
- """
- if isinstance(measurements, dict):
- self.data_for_duration = measurements
- else:
- self.data_for_duration = dict()
- # TODO: There is overlap with add() code. Worth extracting?
- for measurement in measurements:
- duration = measurement.duration
- if duration in self.data_for_duration:
- self.data_for_duration[duration].add(measurement)
- else:
- self.data_for_duration[duration] = PerDurationDatabase(
- duration, [measurement]
- )
- durations = sorted(self.data_for_duration.keys())
- self.current_duration = durations[-1] if duration else None
- self.previous_duration = durations[-2] if len(durations) > 1 else None
-
- def __repr__(self):
- """Return string executable to get equivalent instance.
-
- :returns: Code to construct equivalent instance.
- :rtype: str
- """
- return f"MeasurementDatabase(measurements={self.data_for_duration!r})"
-
- def set_current_duration(self, duration):
- """Remember what MLRsearch considers the current duration.
-
- Setting the same duration is allowed, setting smaller is not allowed.
-
- :param duration: Target trial duration of current phase, in seconds.
- :type duration: float
- :raises ValueError: If the duration is smaller than previous.
- """
- if duration < self.current_duration:
- raise ValueError(
- f"Duration {duration} shorter than current duration"
- f" {self.current_duration}"
- )
- if duration > self.current_duration:
- self.previous_duration = self.current_duration
- self.current_duration = duration
- self.data_for_duration[duration] = PerDurationDatabase(
- duration, list()
- )
- # Else no-op.
-
- def add(self, measurement):
- """Add a measurement. Duration has to match the set one.
-
- :param measurement: Measurement result to add to the database.
- :type measurement: ReceiveRateMeasurement
- """
- duration = measurement.duration
- if duration != self.current_duration:
- raise ValueError(
- f"{measurement!r} duration different than"
- f" {self.current_duration}"
- )
- self.data_for_duration[duration].add(measurement)
-
- def get_bounds(self, ratio):
- """Return 6 bounds: lower/upper, current/previous, tightest/second.
-
- Second tightest bounds are only returned for current duration.
- None instead of a measurement if there is no measurement of that type.
-
- The result cotains bounds in this order:
- 1. Tightest lower bound for current duration.
- 2. Tightest upper bound for current duration.
- 3. Tightest lower bound for previous duration.
- 4. Tightest upper bound for previous duration.
- 5. Second tightest lower bound for current duration.
- 6. Second tightest upper bound for current duration.
-
- :param ratio: Target ratio, valid has to be lower or equal.
- :type ratio: float
- :returns: Measurements acting as various bounds.
- :rtype: 6-tuple of Optional[PerDurationDatabase]
- """
- cur_lo1, cur_hi1, pre_lo, pre_hi, cur_lo2, cur_hi2 = [None] * 6
- duration = self.current_duration
- if duration is not None:
- data = self.data_for_duration[duration]
- cur_lo1, cur_hi1, cur_lo2, cur_hi2 = data.get_valid_bounds(ratio)
- duration = self.previous_duration
- if duration is not None:
- data = self.data_for_duration[duration]
- pre_lo, pre_hi, _, _ = data.get_valid_bounds(ratio)
- return cur_lo1, cur_hi1, pre_lo, pre_hi, cur_lo2, cur_hi2
-
- def get_results(self, ratio_list):
- """Return list of intervals for given ratios, from current duration.
-
- Attempt to construct valid intervals. If a valid bound is missing,
- use smallest/biggest target_tr for lower/upper bound.
- This can result in degenerate intervals.
-
- :param ratio_list: Ratios to create intervals for.
- :type ratio_list: Iterable[float]
- :returns: List of intervals.
- :rtype: List[ReceiveRateInterval]
- """
- ret_list = list()
- current_data = self.data_for_duration[self.current_duration]
- for ratio in ratio_list:
- lower_bound, upper_bound, _, _, _, _ = self.get_bounds(ratio)
- if lower_bound is None:
- lower_bound = current_data.measurements[0]
- if upper_bound is None:
- upper_bound = current_data.measurements[-1]
- ret_list.append(ReceiveRateInterval(lower_bound, upper_bound))
- return ret_list
diff --git a/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py b/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py
deleted file mode 100644
index 0e6c8cfa58..0000000000
--- a/resources/libraries/python/MLRsearch/MultipleLossRatioSearch.py
+++ /dev/null
@@ -1,485 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining MultipleLossRatioSearch class."""
-
-import logging
-import math
-import time
-
-from .MeasurementDatabase import MeasurementDatabase
-from .ProgressState import ProgressState
-from .ReceiveRateInterval import ReceiveRateInterval
-from .WidthArithmetics import (
- multiply_relative_width,
- step_down,
- step_up,
- multiple_step_down,
- multiple_step_up,
- half_step_up,
-)
-
-
-class MultipleLossRatioSearch:
- """Optimized binary search algorithm for finding bounds for multiple ratios.
-
- This is unofficially a subclass of AbstractSearchAlgorithm,
- but constructor signature is different.
-
- Traditional binary search algorithm needs initial interval
- (lower and upper bound), and returns final interval after bisecting
- (until some exit condition is met).
- The exit condition is usually related to the interval width,
- (upper bound value minus lower bound value).
-
- The optimized algorithm contains several improvements
- aimed to reduce overall search time.
-
- One improvement is searching for multiple intervals at once.
- The intervals differ by the target loss ratio. Lower bound
- has to have equal or smaller loss ratio, upper bound has to have larger.
-
- Next improvement is that the initial interval does not need to be valid.
- Imagine initial interval (10, 11) where loss at 11 is smaller
- than the searched ratio.
- The algorithm will try (11, 13) interval next, and if 13 is still smaller,
- (13, 17) and so on, doubling width until the upper bound is valid.
- The part when interval expands is called external search,
- the part when interval is bisected is called internal search.
-
- Next improvement is that trial measurements at small trial duration
- can be used to find a reasonable interval for full trial duration search.
- This results in more trials performed, but smaller overall duration
- in general.
-
- Next improvement is bisecting in logarithmic quantities,
- so that exit criteria can be independent of measurement units.
-
- Next improvement is basing the initial interval on receive rates.
-
- Final improvement is exiting early if the minimal value
- is not a valid lower bound.
-
- The complete search consist of several phases,
- each phase performing several trial measurements.
- Initial phase creates initial interval based on receive rates
- at maximum rate and at maximum receive rate (MRR).
- Final phase and preceding intermediate phases are performing
- external and internal search steps,
- each resulting interval is the starting point for the next phase.
- The resulting intervals of final phase is the result of the whole algorithm.
-
- Each non-initial phase uses its own trial duration.
- Any non-initial phase stops searching (for all ratios independently)
- when minimum is not a valid lower bound (at current duration),
- or all of the following is true:
- Both bounds are valid, bounds are measured at the current phase
- trial duration, interval width is less than the width goal
- for current phase.
-
- TODO: Review and update this docstring according to rst docs.
- """
-
- def __init__(
- self, measurer, final_relative_width=0.005,
- final_trial_duration=30.0, initial_trial_duration=1.0,
- number_of_intermediate_phases=2, timeout=600.0, debug=None,
- expansion_coefficient=2.0):
- """Store the measurer object and additional arguments.
-
- :param measurer: Rate provider to use by this search object.
- :param final_relative_width: Final lower bound transmit rate
- cannot be more distant that this multiple of upper bound [1].
- :param final_trial_duration: Trial duration for the final phase [s].
- :param initial_trial_duration: Trial duration for the initial phase
- and also for the first intermediate phase [s].
- :param number_of_intermediate_phases: Number of intermediate phases
- to perform before the final phase [1].
- :param timeout: The search will fail itself when not finished
- before this overall time [s].
- :param debug: Callable to use instead of logging.debug().
- :param expansion_coefficient: External search multiplies width by this.
- :type measurer: AbstractMeasurer.AbstractMeasurer
- :type final_relative_width: float
- :type final_trial_duration: float
- :type initial_trial_duration: float
- :type number_of_intermediate_phases: int
- :type timeout: float
- :type debug: Optional[Callable[[str], None]]
- :type expansion_coefficient: float
- """
- self.measurer = measurer
- self.final_trial_duration = float(final_trial_duration)
- self.final_relative_width = float(final_relative_width)
- self.number_of_intermediate_phases = int(number_of_intermediate_phases)
- self.initial_trial_duration = float(initial_trial_duration)
- self.timeout = float(timeout)
- self.state = None
- self.debug = logging.debug if debug is None else debug
- self.expansion_coefficient = float(expansion_coefficient)
-
- def narrow_down_intervals(self, min_rate, max_rate, packet_loss_ratios):
- """Perform initial phase, create state object, proceed with next phases.
-
- The current implementation requires the ratios so be unique and sorted.
- Also non-empty.
-
- :param min_rate: Minimal target transmit rate [tps].
- :param max_rate: Maximal target transmit rate [tps].
- :param packet_loss_ratios: Target ratios of packets loss to locate.
- :type min_rate: float
- :type max_rate: float
- :type packet_loss_ratios: Iterable[float]
- :returns: Structure containing narrowed down intervals
- and their measurements.
- :rtype: List[ReceiveRateInterval]
- :raises RuntimeError: If total duration is larger than timeout.
- Or if ratios list is (empty or) not sorted or unique.
- """
- min_rate = float(min_rate)
- max_rate = float(max_rate)
- packet_loss_ratios = [float(ratio) for ratio in packet_loss_ratios]
- if len(packet_loss_ratios) < 1:
- raise RuntimeError(u"At least one ratio is required!")
- if packet_loss_ratios != sorted(set(packet_loss_ratios)):
- raise RuntimeError(u"Input ratios have to be sorted and unique!")
- measurements = list()
- self.debug(f"First measurement at max rate: {max_rate}")
- measured = self.measurer.measure(
- duration=self.initial_trial_duration,
- transmit_rate=max_rate,
- )
- measurements.append(measured)
- initial_width_goal = self.final_relative_width
- for _ in range(self.number_of_intermediate_phases):
- initial_width_goal = multiply_relative_width(
- initial_width_goal, 2.0
- )
- max_lo = step_down(max_rate, initial_width_goal)
- mrr = max(min_rate, min(max_lo, measured.relative_receive_rate))
- self.debug(f"Second measurement at mrr: {mrr}")
- measured = self.measurer.measure(
- duration=self.initial_trial_duration,
- transmit_rate=mrr,
- )
- measurements.append(measured)
- # Attempt to get narrower width.
- if measured.loss_ratio > packet_loss_ratios[0]:
- max_lo = step_down(mrr, initial_width_goal)
- mrr2 = min(max_lo, measured.relative_receive_rate)
- else:
- mrr2 = step_up(mrr, initial_width_goal)
- if min_rate < mrr2 < max_rate:
- self.debug(f"Third measurement at mrr2: {mrr2}")
- measured = self.measurer.measure(
- duration=self.initial_trial_duration,
- transmit_rate=mrr2,
- )
- measurements.append(measured)
- # If mrr2 > mrr and mrr2 got zero loss,
- # it is better to do external search from mrr2 up.
- # To prevent bisection between mrr2 and max_rate,
- # we simply remove the max_rate measurement.
- # Similar logic applies to higher loss ratio goals.
- # Overall, with mrr2 measurement done, we never need
- # the first measurement done at max rate.
- measurements = measurements[1:]
- database = MeasurementDatabase(measurements)
- stop_time = time.monotonic() + self.timeout
- self.state = ProgressState(
- database, self.number_of_intermediate_phases,
- self.final_trial_duration, self.final_relative_width,
- packet_loss_ratios, min_rate, max_rate, stop_time
- )
- self.ndrpdr()
- return self.state.database.get_results(ratio_list=packet_loss_ratios)
-
- def ndrpdr(self):
- """Perform trials for this phase. State is updated in-place.
-
- Recursion to smaller durations is performed (if not performed yet).
-
- :raises RuntimeError: If total duration is larger than timeout.
- """
- state = self.state
- if state.phases > 0:
- # We need to finish preceding intermediate phases first.
- saved_phases = state.phases
- state.phases -= 1
- # Preceding phases have shorter duration.
- saved_duration = state.duration
- duration_multiplier = state.duration / self.initial_trial_duration
- phase_exponent = float(state.phases) / saved_phases
- state.duration = self.initial_trial_duration * math.pow(
- duration_multiplier, phase_exponent
- )
- # Shorter durations do not need that narrow widths.
- saved_width = state.width_goal
- state.width_goal = multiply_relative_width(saved_width, 2.0)
- # Recurse.
- self.ndrpdr()
- # Restore the state for current phase.
- state.width_goal = saved_width
- state.duration = saved_duration
- state.phases = saved_phases # Not needed, but just in case.
- self.debug(
- f"Starting phase with {state.duration} duration"
- f" and {state.width_goal} relative width goal."
- )
- failing_fast = False
- database = state.database
- database.set_current_duration(state.duration)
- while time.monotonic() < state.stop_time:
- for index, ratio in enumerate(state.packet_loss_ratios):
- new_tr = self._select_for_ratio(ratio)
- if new_tr is None:
- # Either this ratio is fine, or min rate got invalid result.
- # If fine, we will continue to handle next ratio.
- if index > 0:
- # First ratio passed, all next have a valid lower bound.
- continue
- lower_bound, _, _, _, _, _ = database.get_bounds(ratio)
- if lower_bound is None:
- failing_fast = True
- self.debug(u"No valid lower bound for this iteration.")
- break
- # First ratio is fine.
- continue
- # We have transmit rate to measure at.
- # We do not check duration versus stop_time here,
- # as some measurers can be unpredictably faster
- # than what duration suggests.
- measurement = self.measurer.measure(
- duration=state.duration,
- transmit_rate=new_tr,
- )
- database.add(measurement)
- # Restart ratio handling on updated database.
- break
- else:
- # No ratio needs measuring, we are done with this phase.
- self.debug(u"Phase done.")
- break
- # We have broken out of the for loop.
- if failing_fast:
- # Abort the while loop early.
- break
- # Not failing fast but database got updated, restart the while loop.
- else:
- # Time is up.
- raise RuntimeError(u"Optimized search takes too long.")
- # Min rate is not valid, but returning what we have
- # so next duration can recover.
-
- @staticmethod
- def improves(new_bound, lower_bound, upper_bound):
- """Return whether new bound improves upon old bounds.
-
- To improve, new_bound has to be not None,
- and between the old bounds (where the bound is not None).
-
- This piece of logic is commonly used, when we know old bounds
- from a primary source (e.g. current duration database)
- and new bound from a secondary source (e.g. previous duration database).
- Having a function allows "if improves(..):" construction to save space.
-
- :param new_bound: The bound we consider applying.
- :param lower_bound: Known bound, new_bound has to be higher to apply.
- :param upper_bound: Known bound, new_bound has to be lower to apply.
- :type new_bound: Optional[ReceiveRateMeasurement]
- :type lower_bound: Optional[ReceiveRateMeasurement]
- :type upper_bound: Optional[ReceiveRateMeasurement]
- :returns: Whether we can apply the new bound.
- :rtype: bool
- """
- if new_bound is None:
- return False
- if lower_bound is not None:
- if new_bound.target_tr <= lower_bound.target_tr:
- return False
- if upper_bound is not None:
- if new_bound.target_tr >= upper_bound.target_tr:
- return False
- return True
-
- def _select_for_ratio(self, ratio):
- """Return None or new target_tr to measure at.
-
- Returning None means either we have narrow enough valid interval
- for this ratio, or we are hitting min rate and should fail early.
-
- :param ratio: Loss ratio to ensure narrow valid bounds for.
- :type ratio: float
- :returns: The next target transmit rate to measure at.
- :rtype: Optional[float]
- :raises RuntimeError: If database inconsistency is detected.
- """
- state = self.state
- data = state.database
- bounds = data.get_bounds(ratio)
- cur_lo1, cur_hi1, pre_lo, pre_hi, cur_lo2, cur_hi2 = bounds
- pre_lo_improves = self.improves(pre_lo, cur_lo1, cur_hi1)
- pre_hi_improves = self.improves(pre_hi, cur_lo1, cur_hi1)
- # TODO: Detect also the other case for initial bisect, see below.
- if pre_lo_improves and pre_hi_improves:
- # We allowed larger width for previous phase
- # as single bisect here guarantees only one re-measurement.
- new_tr = self._bisect(pre_lo, pre_hi)
- if new_tr is not None:
- self.debug(f"Initial bisect for {ratio}, tr: {new_tr}")
- return new_tr
- if pre_lo_improves:
- new_tr = pre_lo.target_tr
- self.debug(f"Re-measuring lower bound for {ratio}, tr: {new_tr}")
- return new_tr
- if pre_hi_improves:
- # This can also happen when we did not do initial bisect
- # for this ratio yet, but the previous duration lower bound
- # for this ratio got already re-measured as previous duration
- # upper bound for previous ratio.
- new_tr = pre_hi.target_tr
- self.debug(f"Re-measuring upper bound for {ratio}, tr: {new_tr}")
- return new_tr
- if cur_lo1 is None and cur_hi1 is None:
- raise RuntimeError(u"No results found in databases!")
- if cur_lo1 is None:
- # Upper bound exists (cur_hi1).
- # We already tried previous lower bound.
- # So, we want to extend down.
- new_tr = self._extend_down(
- cur_hi1, cur_hi2, pre_hi, second_needed=False
- )
- self.debug(
- f"Extending down for {ratio}:"
- f" old {cur_hi1.target_tr} new {new_tr}"
- )
- return new_tr
- if cur_hi1 is None:
- # Lower bound exists (cur_lo1).
- # We already tried previous upper bound.
- # So, we want to extend up.
- new_tr = self._extend_up(cur_lo1, cur_lo2, pre_lo)
- self.debug(
- f"Extending up for {ratio}:"
- f" old {cur_lo1.target_tr} new {new_tr}"
- )
- return new_tr
- # Both bounds exist (cur_lo1 and cur_hi1).
- # cur_lo1 might have been selected for this ratio (we are bisecting)
- # or for previous ratio (we are extending down for this ratio).
- # Compute both estimates and choose the higher value.
- bisected_tr = self._bisect(cur_lo1, cur_hi1)
- extended_tr = self._extend_down(
- cur_hi1, cur_hi2, pre_hi, second_needed=True
- )
- # Only if both are not None we need to decide.
- if bisected_tr and extended_tr and extended_tr > bisected_tr:
- self.debug(
- f"Extending down for {ratio}:"
- f" old {cur_hi1.target_tr} new {extended_tr}"
- )
- new_tr = extended_tr
- else:
- self.debug(
- f"Bisecting for {ratio}: lower {cur_lo1.target_tr},"
- f" upper {cur_hi1.target_tr}, new {bisected_tr}"
- )
- new_tr = bisected_tr
- return new_tr
-
- def _extend_down(self, cur_hi1, cur_hi2, pre_hi, second_needed=False):
- """Return extended width below, or None if hitting min rate.
-
- If no second tightest (nor previous) upper bound is available,
- the behavior is governed by second_needed argument.
- If true, return None. If false, start from width goal.
- This is useful, as if a bisect is possible,
- we want to give it a chance.
-
- :param cur_hi1: Tightest upper bound for current duration. Has to exist.
- :param cur_hi2: Second tightest current upper bound, may not exist.
- :param pre_hi: Tightest upper bound, previous duration, may not exist.
- :param second_needed: Whether second tightest bound is required.
- :type cur_hi1: ReceiveRateMeasurement
- :type cur_hi2: Optional[ReceiveRateMeasurement]
- :type pre_hi: Optional[ReceiveRateMeasurement]
- :type second_needed: bool
- :returns: The next target transmit rate to measure at.
- :rtype: Optional[float]
- """
- state = self.state
- old_tr = cur_hi1.target_tr
- if state.min_rate >= old_tr:
- self.debug(u"Extend down hits min rate.")
- return None
- next_bound = cur_hi2
- if self.improves(pre_hi, cur_hi1, cur_hi2):
- next_bound = pre_hi
- if next_bound is None and second_needed:
- return None
- old_width = state.width_goal
- if next_bound is not None:
- old_width = ReceiveRateInterval(cur_hi1, next_bound).rel_tr_width
- old_width = max(old_width, state.width_goal)
- new_tr = multiple_step_down(
- old_tr, old_width, self.expansion_coefficient
- )
- new_tr = max(new_tr, state.min_rate)
- return new_tr
-
- def _extend_up(self, cur_lo1, cur_lo2, pre_lo):
- """Return extended width above, or None if hitting max rate.
-
- :param cur_lo1: Tightest lower bound for current duration. Has to exist.
- :param cur_lo2: Second tightest current lower bound, may not exist.
- :param pre_lo: Tightest lower bound, previous duration, may not exist.
- :type cur_lo1: ReceiveRateMeasurement
- :type cur_lo2: Optional[ReceiveRateMeasurement]
- :type pre_lo: Optional[ReceiveRateMeasurement]
- :returns: The next target transmit rate to measure at.
- :rtype: Optional[float]
- """
- state = self.state
- old_tr = cur_lo1.target_tr
- if state.max_rate <= old_tr:
- self.debug(u"Extend up hits max rate.")
- return None
- next_bound = cur_lo2
- if self.improves(pre_lo, cur_lo2, cur_lo1):
- next_bound = pre_lo
- old_width = state.width_goal
- if next_bound is not None:
- old_width = ReceiveRateInterval(cur_lo1, next_bound).rel_tr_width
- old_width = max(old_width, state.width_goal)
- new_tr = multiple_step_up(old_tr, old_width, self.expansion_coefficient)
- new_tr = min(new_tr, state.max_rate)
- return new_tr
-
- def _bisect(self, lower_bound, upper_bound):
- """Return middle rate or None if width is narrow enough.
-
- :param lower_bound: Measurement to use as a lower bound. Has to exist.
- :param upper_bound: Measurement to use as an upper bound. Has to exist.
- :type lower_bound: ReceiveRateMeasurement
- :type upper_bound: ReceiveRateMeasurement
- :returns: The next target transmit rate to measure at.
- :rtype: Optional[float]
- :raises RuntimeError: If database inconsistency is detected.
- """
- state = self.state
- width = ReceiveRateInterval(lower_bound, upper_bound).rel_tr_width
- if width <= state.width_goal:
- self.debug(u"No more bisects needed.")
- return None
- new_tr = half_step_up(lower_bound.target_tr, width, state.width_goal)
- return new_tr
diff --git a/resources/libraries/python/MLRsearch/PerDurationDatabase.py b/resources/libraries/python/MLRsearch/PerDurationDatabase.py
deleted file mode 100644
index afdf48614b..0000000000
--- a/resources/libraries/python/MLRsearch/PerDurationDatabase.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining PerDurationDatabase class."""
-
-import copy
-
-
-class PerDurationDatabase:
- """List-like structure holding measurement results for one duration.
-
- This is a building block for MeasurementDatabase.
-
- This class hold measurements for single target duration value only,
- so the logic is quite simple.
-
- Several utility methods are added, accomplishing tasks useful for MLRsearch
- (to be called by MeasurementDatabase).
- """
-
- def __init__(self, duration, measurements):
- """Store (deep copy of) measurement results and normalize them.
-
- The results have to have the corresponding target duration,
- and there should be no duplicate target_tr values.
- Empty iterable (zero measurements) is an acceptable input.
-
- :param duration: All measurements have to have this target duration [s].
- :param measurements: The measurement results to store.
- :type duration: float
- :type measurements: Iterable[ReceiveRateMeasurement]
- :raises ValueError: If duration does not match or if TR duplicity.
- """
- self.duration = duration
- self.measurements = [copy.deepcopy(meas) for meas in measurements]
- self._normalize()
-
- def __repr__(self):
- """Return string executable to get equivalent instance.
-
- :returns: Code to construct equivalent instance.
- :rtype: str
- """
- return (
- u"PerDurationDatabase("
- f"duration={self.duration!r},"
- f"measurements={self.measurements!r})"
- )
-
- def _normalize(self):
- """Sort by target_tr, fail on detecting duplicate target_tr.
-
- Also set effective loss ratios.
-
- :raises ValueError: If duration does not match or if TR duplicity.
- """
- measurements = self.measurements
- measurements.sort(key=lambda measurement: measurement.target_tr)
- # Detect duplicated TRs.
- previous_tr = None
- for measurement in measurements:
- current_tr = measurement.target_tr
- if current_tr == previous_tr:
- raise ValueError(
- u"Transmit rate conflict:"
- f" {measurement!r} {previous_tr!r}"
- )
- previous_tr = current_tr
- # Update effective ratios.
- ratio_previous = None
- for measurement in measurements:
- if ratio_previous is None:
- ratio_previous = measurement.loss_ratio
- measurement.effective_loss_ratio = ratio_previous
- continue
- ratio_previous = max(ratio_previous, measurement.loss_ratio)
- measurement.effective_loss_ratio = ratio_previous
-
- def add(self, measurement):
- """Add measurement and normalize.
-
- :param measurement: Measurement result to add to the database.
- :type measurement: ReceiveRateMeasurement
- """
- # TODO: We should deepcopy either everywhere or nowhere.
- self.measurements.append(measurement)
- self._normalize()
-
- def get_valid_bounds(self, ratio):
- """Return None or a valid measurement for two tightest bounds.
-
- The validity of a measurement to act as a bound is determined
- by comparing the argument ratio with measurement's effective loss ratio.
-
- Both lower and upper bounds are returned, both tightest and second
- tightest. If some value is not available, None is returned instead.
-
- :param ratio: Target ratio, valid has to be lower or equal.
- :type ratio: float
- :returns: Tightest lower bound, tightest upper bound,
- second tightest lower bound, second tightest upper bound.
- :rtype: 4-tuple of Optional[ReceiveRateMeasurement]
- """
- lower_1, upper_1, lower_2, upper_2 = None, None, None, None
- for measurement in self.measurements:
- if measurement.effective_loss_ratio > ratio:
- if upper_1 is None:
- upper_1 = measurement
- continue
- upper_2 = measurement
- break
- lower_1, lower_2 = measurement, lower_1
- return lower_1, upper_1, lower_2, upper_2
diff --git a/resources/libraries/python/MLRsearch/ProgressState.py b/resources/libraries/python/MLRsearch/ProgressState.py
deleted file mode 100644
index 3610638990..0000000000
--- a/resources/libraries/python/MLRsearch/ProgressState.py
+++ /dev/null
@@ -1,60 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining ProgressState class."""
-
-
-class ProgressState:
- """Structure containing data to be passed around in recursion.
-
- This is basically a private class of MultipleRatioSearch,
- but keeping it in a separate file makes things more readable.
- """
-
- def __init__(
- self, database, phases, duration, width_goal, packet_loss_ratios,
- min_rate, max_rate, stop_time):
- """Convert and store the argument values.
-
- Also initializa the stored width for external search.
-
- :param result: Structure containing measured results.
- :param phases: How many intermediate phases to perform
- before the current one.
- :param duration: Trial duration to use in the current phase [s].
- :param width_goal: The goal relative width for the curreent phase.
- :param packet_loss_ratios: List of ratios for the current search.
- :param min_rate: Minimal target transmit rate available
- for the current search [tps].
- :param max_rate: Maximal target transmit rate available
- for the current search [tps].
- :param stop_time: Monotonic time [s] when we should fail on timeout.
- :type result: MeasurementDatabase
- :type phases: int
- :type duration: float
- :type width_goal: float
- :type packet_loss_ratios: Iterable[float]
- :type min_rate: float
- :type max_rate: float
- :type stop_time: float
- """
- self.database = database
- self.phases = int(phases)
- self.duration = float(duration)
- self.width_goal = float(width_goal)
- self.packet_loss_ratios = [
- float(ratio) for ratio in packet_loss_ratios
- ]
- self.min_rate = float(min_rate)
- self.max_rate = float(max_rate)
- self.stop_time = float(stop_time)
diff --git a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py b/resources/libraries/python/MLRsearch/ReceiveRateInterval.py
deleted file mode 100644
index 993561e396..0000000000
--- a/resources/libraries/python/MLRsearch/ReceiveRateInterval.py
+++ /dev/null
@@ -1,74 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining ReceiveRateInterval class."""
-
-import math
-
-
-class ReceiveRateInterval:
- """Structure defining two Rr measurements, and their relation."""
-
- def __init__(self, measured_low, measured_high):
- """Store the bound measurements and call sort.
-
- :param measured_low: Measurement for the lower bound.
- :param measured_high: Measurement for the upper bound.
- :type measured_low: ReceiveRateMeasurement.ReceiveRateMeasurement
- :type measured_high: ReceiveRateMeasurement.ReceiveRateMeasurement
- """
- self.measured_low = measured_low
- self.measured_high = measured_high
- # Declare secondary quantities to appease pylint.
- self.abs_tr_width = None
- """Absolute width of target transmit rate. Upper minus lower."""
- self.rel_tr_width = None
- """Relative width of target transmit rate. Absolute divided by upper."""
- self.sort()
-
- def sort(self):
- """Sort bounds by target Tr, compute secondary quantities."""
- if self.measured_low.target_tr > self.measured_high.target_tr:
- self.measured_low, self.measured_high = (
- self.measured_high, self.measured_low
- )
- self.abs_tr_width = (
- self.measured_high.target_tr - self.measured_low.target_tr
- )
- self.rel_tr_width = self.abs_tr_width / self.measured_high.target_tr
-
- def __str__(self):
- """Return string as half-open interval."""
- return f"[{self.measured_low!s};{self.measured_high!s})"
-
- def __repr__(self):
- """Return string evaluable as a constructor call."""
- return f"ReceiveRateInterval(measured_low={self.measured_low!r}," \
- f"measured_high={self.measured_high!r})"
-
- def width_in_goals(self, relative_width_goal):
- """Return float value.
-
- Relative width goal is some (negative) value on logarithmic scale.
- Current relative width is another logarithmic value.
- Return the latter divided by the former.
- This is useful when investigating how did surprising widths come to be.
-
- :param relative_width_goal: Upper bound times this is the goal
- difference between upper bound and lower bound.
- :type relative_width_goal: float
- :returns: Current width as logarithmic multiple of goal width [1].
- :rtype: float
- """
- return math.log(1.0 - self.rel_tr_width) / math.log(
- 1.0 - relative_width_goal)
diff --git a/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py b/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py
deleted file mode 100644
index c52934530e..0000000000
--- a/resources/libraries/python/MLRsearch/ReceiveRateMeasurement.py
+++ /dev/null
@@ -1,125 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining ReceiveRateMeasurement class."""
-
-
-class ReceiveRateMeasurement:
- """Structure defining the result of single Rr measurement."""
-
- def __init__(
- self, duration, target_tr, transmit_count, loss_count,
- approximated_duration=0.0, partial_transmit_count=0,
- effective_loss_ratio=None):
- """Constructor, normalize primary and compute secondary quantities.
-
- If approximated_duration is nonzero, it is stored.
- If approximated_duration is zero, duration value is stored.
- Either way, additional secondary quantities are computed
- from the store value.
-
- If there is zero transmit_count, ratios are set to zero.
-
- In some cases, traffic generator does not attempt all the needed
- transactions. In that case, nonzero partial_transmit_count
- holds (an estimate of) count of the actually attempted transactions.
- This is used to populate some secondary quantities.
-
- TODO: Use None instead of zero?
-
- Field effective_loss_ratio is specific for use in MLRsearch,
- where measurements with lower loss ratio at higher target_tr
- cannot be relied upon if there is a measurement with higher loss ratio
- at lower target_tr. In this case, the higher loss ratio from
- other measurement is stored as effective loss ratio in this measurement.
- If None, the computed loss ratio of this measurement is used.
- If not None, the computed ratio can still be apllied if it is larger.
-
- :param duration: Measurement duration [s].
- :param target_tr: Target transmit rate [pps].
- If bidirectional traffic is measured, this is bidirectional rate.
- :param transmit_count: Number of packets transmitted [1].
- :param loss_count: Number of packets transmitted but not received [1].
- :param approximated_duration: Estimate of the actual time of the trial.
- :param partial_transmit_count: Estimate count of actually attempted
- transactions.
- :param effective_loss_ratio: None or highest loss ratio so far.
- :type duration: float
- :type target_tr: float
- :type transmit_count: int
- :type loss_count: int
- :type approximated_duration: float
- :type partial_transmit_count: int
- """
- self.duration = float(duration)
- self.target_tr = float(target_tr)
- self.transmit_count = int(transmit_count)
- self.loss_count = int(loss_count)
- self.receive_count = transmit_count - loss_count
- self.transmit_rate = transmit_count / self.duration
- self.loss_rate = loss_count / self.duration
- self.receive_rate = self.receive_count / self.duration
- self.loss_ratio = (
- float(self.loss_count) / self.transmit_count
- if self.transmit_count > 0 else 1.0
- )
- self.effective_loss_ratio = self.loss_ratio
- if effective_loss_ratio is not None:
- if effective_loss_ratio > self.loss_ratio:
- self.effective_loss_ratio = float(effective_loss_ratio)
- self.receive_ratio = (
- float(self.receive_count) / self.transmit_count
- if self.transmit_count > 0 else 0.0
- )
- self.approximated_duration = (
- float(approximated_duration) if approximated_duration
- else self.duration
- )
- self.approximated_receive_rate = (
- self.receive_count / self.approximated_duration
- if self.approximated_duration > 0.0 else 0.0
- )
- # If the traffic generator is unreliable and sends less packets,
- # the absolute receive rate might be too low for next target.
- self.partial_transmit_count = (
- int(partial_transmit_count) if partial_transmit_count
- else self.transmit_count
- )
- self.partial_receive_ratio = (
- float(self.receive_count) / self.partial_transmit_count
- if self.partial_transmit_count > 0 else 0.0
- )
- self.partial_receive_rate = (
- self.target_tr * self.partial_receive_ratio
- )
- # We use relative packet ratios in order to support cases
- # where target_tr is in transactions per second,
- # but there are multiple packets per transaction.
- self.relative_receive_rate = (
- self.target_tr * self.receive_count / self.transmit_count
- )
-
- def __str__(self):
- """Return string reporting input and loss ratio."""
- return f"d={self.duration!s},Tr={self.target_tr!s}," \
- f"Df={self.loss_ratio!s}"
-
- def __repr__(self):
- """Return string evaluable as a constructor call."""
- return f"ReceiveRateMeasurement(duration={self.duration!r}," \
- f"target_tr={self.target_tr!r}," \
- f"transmit_count={self.transmit_count!r}," \
- f"loss_count={self.loss_count!r}," \
- f"approximated_duration={self.approximated_duration!r}," \
- f"partial_transmit_count={self.partial_transmit_count!r}," \
- f"effective_loss_ratio={self.effective_loss_ratio!r})"
diff --git a/resources/libraries/python/MLRsearch/WidthArithmetics.py b/resources/libraries/python/MLRsearch/WidthArithmetics.py
deleted file mode 100644
index 21316c5441..0000000000
--- a/resources/libraries/python/MLRsearch/WidthArithmetics.py
+++ /dev/null
@@ -1,137 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Module defining utility functions for manipulating intervals."""
-
-import math
-
-
-ROUNDING_CONSTANT = 0.999999
-
-def multiply_relative_width(relative_width, coefficient):
- """Return relative width corresponding to multiplied logarithmic width.
-
- The multiplication happens in logarithmic space,
- so the resulting relative width is always less than 1.
-
- :param relative_width: The base relative width to multiply.
- :param coefficient: Multiply by this in logarithmic space.
- :type relative_width: float
- :type coefficient: float
- :returns: The relative width of multiplied logarithmic size.
- :rtype: float
- """
- old_log_width = math.log(1.0 - relative_width)
- # Slight decrease to prevent rounding errors from prolonging the search.
- # TODO: Make the nines configurable.
- new_log_width = old_log_width * coefficient * ROUNDING_CONSTANT
- return 1.0 - math.exp(new_log_width)
-
-def halve_relative_width(relative_width, goal_width):
- """Return relative width corresponding to half logarithmic width.
-
- The logic attempts to save some halvings in future by performing
- uneven split. If rounding error risk is detected,
- even split is used.
-
- :param relative_width: The base relative width to halve.
- :param goal_width: Width goal for final phase.
- :type relative_width: float
- :type goal_width: float
- :returns: The relative width of half logarithmic size.
- :rtype: float
- """
- fallback_width = 1.0 - math.sqrt(1.0 - relative_width)
- # Wig means Width In Goals.
- wig = math.log(1.0 - relative_width) / math.log(1.0 - goal_width)
- cwig = 2.0 * math.ceil(wig / 2.0)
- fwig = 2.0 * math.ceil(wig * ROUNDING_CONSTANT / 2.0)
- if wig <= 2.0 or cwig != fwig:
- # Avoid too uneven splits.
- return fallback_width
- coefficient = cwig / 2
- new_width = multiply_relative_width(goal_width, coefficient)
- return new_width
-
-def step_down(current_bound, relative_width):
- """Return rate of logarithmic width below.
-
- :param current_bound: The current target transmit rate to move [pps].
- :param relative_width: The base relative width to use.
- :type current_bound: float
- :type relative_width: float
- :returns: Transmit rate smaller by relative width [pps].
- :rtype: float
- """
- return current_bound * (1.0 - relative_width)
-
-def step_up(current_bound, relative_width):
- """Return rate of logarithmic width above.
-
- :param current_bound: The current target transmit rate to move [pps].
- :param relative_width: The base relative width to use.
- :type current_bound: float
- :type relative_width: float
- :returns: Transmit rate larger by logarithmically double width [pps].
- :rtype: float
- """
- return current_bound / (1.0 - relative_width)
-
-def multiple_step_down(current_bound, relative_width, coefficient):
- """Return rate of multiplied logarithmic width below.
-
- The multiplication happens in logarithmic space,
- so the resulting applied relative width is always less than 1.
-
- :param relative_width: The base relative width to double.
- :param current_bound: The current target transmit rate to move [pps].
- :param coefficient: Multiply by this in logarithmic space.
- :type relative_width: float
- :type current_bound: float
- :type coefficient: float
- :returns: Transmit rate smaller by logarithmically multiplied width [pps].
- :rtype: float
- """
- new_width = multiply_relative_width(relative_width, coefficient)
- return step_down(current_bound, new_width)
-
-def multiple_step_up(current_bound, relative_width, coefficient):
- """Return rate of double logarithmic width above.
-
- The multiplication happens in logarithmic space,
- so the resulting applied relative width is always less than 1.
-
- :param current_bound: The current target transmit rate to move [pps].
- :param relative_width: The base relative width to double.
- :param coefficient: Multiply by this in logarithmic space.
- :type current_bound: float
- :type relative_width: float
- :type coefficient: float
- :returns: Transmit rate larger by logarithmically multiplied width [pps].
- :rtype: float
- """
- new_width = multiply_relative_width(relative_width, coefficient)
- return step_up(current_bound, new_width)
-
-def half_step_up(current_bound, relative_width, goal_width):
- """Return rate of half logarithmic width above.
-
- :param relative_width: The base relative width to halve.
- :param current_bound: The current target transmit rate to move [pps].
- :type relative_width: float
- :type current_bound: float
- :returns: Transmit rate larger by logarithmically half width [pps].
- :rtype: float
- """
- new_width = halve_relative_width(relative_width, goal_width)
- return step_up(current_bound, new_width)
diff --git a/resources/libraries/python/MLRsearch/__init__.py b/resources/libraries/python/MLRsearch/__init__.py
index 35ef812179..09ce7e6719 100644
--- a/resources/libraries/python/MLRsearch/__init__.py
+++ b/resources/libraries/python/MLRsearch/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -14,3 +14,17 @@
"""
__init__ file for Python package "MLRsearch".
"""
+
+# TODO: Move submodules to separate modules.
+# Not obvious how to do that from PyPI point of view
+# without affecting the current CSIT global "resources" package root.
+# Probably it can be done by specifying multiple directories
+# in PYTHONPATH used throughout CSIT.
+
+# Import user-facing (API) stuff, so users do not need to know submodules.
+from .config import Config
+from .goal_result import GoalResult
+from .multiple_loss_ratio_search import MultipleLossRatioSearch
+from .pep3140 import Pep3140Dict
+from .search_goal import SearchGoal
+from .trial_measurement import AbstractMeasurer, MeasurementResult
diff --git a/resources/libraries/python/MLRsearch/candidate.py b/resources/libraries/python/MLRsearch/candidate.py
new file mode 100644
index 0000000000..16bbe60bae
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/candidate.py
@@ -0,0 +1,153 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining Candidate class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from functools import total_ordering
+from typing import Optional
+
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+from .selector import Selector
+
+
+@total_ordering
+@dataclass(frozen=True)
+class Candidate:
+ """Class describing next trial inputs, as nominated by a selector.
+
+ As each selector is notified by the controller when its nominated load
+ becomes the winner, a reference to the selector is also included here.
+
+ The rest of the code focuses on defining the ordering between candidates.
+ When two instances are compared, the lesser has higher priority
+ for choosing which trial is actually performed next.
+
+ As Python implicitly converts values to bool in many places
+ (e.g. in "if" statement), any instance is called "truthy" if it converts
+ to True, and "falsy" if it converts to False.
+ To make such places nice and readable, __bool__ method is implemented
+ in a way that a candidate instance is falsy if its load is None.
+ As a falsy candidate never gets measured,
+ other fields of a falsy instance are irrelevant.
+ """
+
+ load: Optional[DiscreteLoad] = None
+ """Measure at this intended load. None if no load nominated by selector."""
+ duration: float = None
+ """Trial duration as chosen by the selector."""
+ width: Optional[DiscreteWidth] = None
+ """Set the global width to this when this candidate becomes the winner."""
+ selector: Selector = None
+ """Reference to the selector instance which nominated this candidate."""
+
+ def __str__(self) -> str:
+ """Convert trial inputs into a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return f"d={self.duration},l={self.load}"
+
+ def __eq__(self, other: Candidate) -> bool:
+ """Return wheter self is identical to the other candidate.
+
+ This is just a pretense for total ordering wrapper to work.
+ In reality, MLRsearch shall never test equivalence,
+ so we save space by just raising RuntimeError if this is ever called.
+
+ :param other: The other instance to compare to.
+ :type other: Candidate
+ :returns: True if the instances are equivalent.
+ :rtype: bool
+ :raises RuntimeError: Always, to prevent unintended usage.
+ """
+ raise RuntimeError("Candidate equality comparison shall not be needed.")
+
+ def __lt__(self, other: Candidate) -> bool:
+ """Return whether self should be measured before other.
+
+ In the decreasing order of importance:
+ Non-None load is preferred.
+ Self is less than other when both loads are None.
+ Lower offered load is preferred.
+ Longer trial duration is preferred.
+ Non-none width is preferred.
+ Larger width is preferred.
+ Self is preferred.
+
+ The logic comes from the desire to save time and being conservative.
+
+ :param other: The other instance to compare to.
+ :type other: Candidate
+ :returns: True if self should be measured sooner.
+ :rtype: bool
+ """
+ if not self.load:
+ if other.load:
+ return False
+ return True
+ if not other.load:
+ return True
+ if self.load < other.load:
+ return True
+ if self.load > other.load:
+ return False
+ if self.duration > other.duration:
+ return True
+ if self.duration < other.duration:
+ return False
+ if not self.width:
+ if other.width:
+ return False
+ return True
+ if not other.width:
+ return True
+ return self.width >= other.width
+
+ def __bool__(self) -> bool:
+ """Does this candidate choose to perform any trial measurement?
+
+ :returns: True if yes, it does choose to perform.
+ :rtype: bool
+ """
+ return bool(self.load)
+
+ @staticmethod
+ def nomination_from(selector: Selector) -> Candidate:
+ """Call nominate on selector, wrap into Candidate instance to return.
+
+ We avoid dependency cycle while letting candidate depend on selector,
+ therefore selector cannot know how to wrap its nomination
+ into a full candidate instance.
+ This factory method finishes the wrapping.
+
+ :param selector: Selector to call.
+ :type selector: Selector
+ :returns: Newly created Candidate instance with nominated trial inputs.
+ :rtype: Candidate
+ """
+ load, duration, width = selector.nominate()
+ return Candidate(
+ load=load,
+ duration=duration,
+ width=width,
+ selector=selector,
+ )
+
+ def won(self) -> None:
+ """Inform selector its candidate became a winner."""
+ self.selector.won(self.load)
diff --git a/resources/libraries/python/MLRsearch/config.py b/resources/libraries/python/MLRsearch/config.py
new file mode 100644
index 0000000000..7aa8ed75a8
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/config.py
@@ -0,0 +1,179 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining Config class."""
+
+from collections.abc import Iterable
+from dataclasses import dataclass
+from typing import Optional
+
+from .dataclass import DataclassProperty
+from .search_goal import SearchGoal
+from .search_goal_tuple import SearchGoalTuple
+
+
+@dataclass
+class Config:
+ """Structure containing several static config items.
+
+ The main MLRsearch algorithm uses multiple customizable values.
+ Pylint complains if the values appear as long argument lists
+ or multiple local variables.
+
+ This class offers a storage for values which do not contain
+ internally mutable state and are set at an unknown time
+ before the search starts. This way users can override only some values,
+ and do it over multiple calls.
+ All "official" user inputs are contained here.
+
+ Properties are defined to enforce the requirements on allowed values.
+ All fields have default values, so instances can be created without any.
+ It is still recommended to set all values after instantiation,
+ as the defaults may change in the next version.
+
+ As some relations between values of different fields are required,
+ users must take care to set them in the correct order.
+
+ For example, min_load has to be set to a value smaller
+ than the current value of max_load.
+ """
+
+ # Externally visible "fields" (but in fact redefined as properties).
+ goals: SearchGoalTuple = SearchGoalTuple((SearchGoal(),))
+ """Container holding search goals."""
+ min_load: float = 9001.0
+ """Each trial measurement must have intended load at least this [tps]."""
+ max_load: float = 1e9
+ """Each trial measurement must have intended load at most this [tps]."""
+ search_duration_max: float = 1200.0
+ """The search will end as a failure this long [s] after it is started."""
+ warmup_duration: float = 1.0
+ """If specified, one trial at max load and this duration is performed
+ before the usual search starts. None converts to zero and means no warmup.
+ The results of that one trial are ignored."""
+
+ @DataclassProperty
+ def goals(self) -> SearchGoalTuple:
+ """Return the reference to the current container of goals.
+
+ :returns: The current container instance.
+ :rtype: SearchGoalTuple
+ """
+ return self._goals
+
+ @goals.setter
+ def goals(self, goals: Iterable[SearchGoal]) -> None:
+ """Create and store the goal container.
+
+ :param goals: Search goals to add to the container to store.
+ :type goals: Iterable[SearchGoal]
+ :raises ValueError: If there are no goals.
+ :raises TypeError: If any of the goals is not a SearchGoal.
+ """
+ self._goals = SearchGoalTuple(goals)
+
+ @DataclassProperty
+ def min_load(self) -> float:
+ """Getter for min load, no logic here.
+
+ :returns: Currently set minimal intended load [tps].
+ :rtype: float
+ """
+ return self._min_load
+
+ @min_load.setter
+ def min_load(self, load: float) -> None:
+ """Set min load after converting type and checking value.
+
+ :param load: Minimal intended load [tps] to set.
+ :type load: float
+ :raises ValueError: If the argument is found invalid.
+ """
+ load = float(load)
+ if load <= 0.0:
+ raise ValueError(f"Min load {load} must be positive.")
+ # At the time init is first called, _max_load is not set yet.
+ if hasattr(self, "_max_load") and load >= self.max_load:
+ raise ValueError(f"Min load {load} must be smaller.")
+ self._min_load = load
+
+ @DataclassProperty
+ def max_load(self) -> float:
+ """Getter for max load, no logic here.
+
+ :returns: Currently set maximal intended load [tps].
+ :rtype: float
+ """
+ return self._max_load
+
+ @max_load.setter
+ def max_load(self, load: float) -> None:
+ """Set max load after converting type and checking value.
+
+ :param load: Minimal intended load [tps] to set.
+ :type load: float
+ :raises ValueError: If the argument is found invalid.
+ """
+ load = float(load)
+ if load <= self.min_load:
+ raise ValueError(f"Max load {load} must be bigger.")
+ self._max_load = load
+
+ @DataclassProperty
+ def search_duration_max(self) -> float:
+ """Getter for max search duration, no logic here.
+
+ :returns: Currently set max search duration [s].
+ :rtype: float
+ """
+ return self._search_duration_max
+
+ @search_duration_max.setter
+ def search_duration_max(self, duration: float) -> None:
+ """Set max search duration after converting and checking value.
+
+ :param duration: Search duration maximum [s] to set.
+ :type duration: float
+ :raises ValueError: If the argument is found invalid.
+ """
+ duration = float(duration)
+ if duration <= 0.0:
+ raise ValueError(f"Search duration max too small: {duration}")
+ self._search_duration_max = duration
+
+ @DataclassProperty
+ def warmup_duration(self) -> float:
+ """Getter for warmup duration, no logic here.
+
+ :returns: Currently set max search duration [s].
+ :rtype: float
+ """
+ return self._warmup_duration
+
+ @warmup_duration.setter
+ def warmup_duration(self, duration: Optional[float]) -> None:
+ """Set warmup duration after converting and checking value.
+
+ Zero duration is treated as None, meaning no warmup trial.
+
+ :param duration: Warmup duration [s] to set.
+ :type duration: Optional(float)
+ :raises ValueError: If the argument is found invalid.
+ """
+ if duration:
+ duration = float(duration)
+ if duration < 0.0:
+ raise ValueError(f"Warmup duration too small: {duration}")
+ else:
+ duration = 0.0
+ self._warmup_duration = duration
diff --git a/resources/libraries/bash/function/README.txt b/resources/libraries/python/MLRsearch/dataclass/__init__.py
index e4eb91565b..e546b090c9 100644
--- a/resources/libraries/bash/function/README.txt
+++ b/resources/libraries/python/MLRsearch/dataclass/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -11,10 +11,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-Files in this directory system are to be executed indirectly,
-sourced from other scripts.
+"""
+__init__ file for Python package "dataclass_property".
+"""
-In fact, the files should only define functions,
-except perhaps some minimal logic needed to import dependencies.
-The originating function calls should be executed from elsewhere,
-typically from entry scripts.
+from .dc_property import DataclassProperty
+from .field import secondary_field
diff --git a/resources/libraries/python/MLRsearch/dataclass/dc_property.py b/resources/libraries/python/MLRsearch/dataclass/dc_property.py
new file mode 100644
index 0000000000..7f3b49aeb8
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/dataclass/dc_property.py
@@ -0,0 +1,173 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining DataclassProperty class.
+
+The main issue that needs support is dataclasses with properties
+(including setters) and with (immutable) default values.
+
+First, this explains how property ends up passed as default constructor value:
+https://florimond.dev/en/posts/2018/10/
+/reconciling-dataclasses-and-properties-in-python/
+TL;DR: By the time __init__ is generated, original class variable (type hint)
+is replaced by property (method definition).
+
+Second, there are ways to deal with that:
+https://stackoverflow.com/a/61480946
+TL;DR: It relies on the underscored field being replaced by the value.
+
+But that does not work for field which use default_factory (or no default)
+(the underscored class field is deleted instead).
+So another way is needed to cover those cases,
+ideally without the need to define both original and underscored field.
+
+This implementation relies on a fact that decorators are executed
+when the class fields do yet exist, and decorated function
+does know its name, so the decorator can get the value stored in
+the class field, and store it as an additional attribute of the getter function.
+Then for setter, the property contains the getter (as an unbound function),
+so it can access the additional attribute to get the value.
+
+This approach circumvents the precautions dataclasses take to prevent mishaps
+when a single mutable object is shared between multiple instances.
+So it is up to setters to create an appropriate copy of the default object
+if the default value is mutable.
+
+The default value cannot be MISSING nor Field nor DataclassProperty,
+otherwise the intended logic breaks.
+"""
+
+from __future__ import annotations
+
+from dataclasses import Field, MISSING
+from functools import wraps
+from inspect import stack
+from typing import Callable, Optional, TypeVar, Union
+
+
+Self = TypeVar("Self")
+"""Type for the dataclass instances being created using properties."""
+Value = TypeVar("Value")
+"""Type for the value the property (getter, setter) handles."""
+
+
+def _calling_scope_variable(name: str) -> Value:
+ """Get a variable from a higher scope.
+
+ This feels dirty, but without this the syntactic sugar
+ would not be sweet enough.
+
+ The implementation is copied from https://stackoverflow.com/a/14694234
+ with the difference of raising RuntimeError (instead of returning None)
+ if no variable of that name is found in any of the scopes.
+
+ :param name: Name of the variable to access.
+ :type name: str
+ :returns: The value of the found variable.
+ :rtype: Value
+ :raises RuntimeError: If the variable is not found in any calling scope.
+ """
+ frame = stack()[1][0]
+ while name not in frame.f_locals:
+ frame = frame.f_back
+ if frame is None:
+ raise RuntimeError(f"Field {name} value not found.")
+ return frame.f_locals[name]
+
+
+class DataclassProperty(property):
+ """Subclass of property, handles default values for dataclass fields.
+
+ If a dataclass field does not specify a default value (nor default_factory),
+ this is not needed, and in fact it will not work (so use built-in property).
+
+ This implementation seemlessly finds and inserts the default value
+ (can be mutable) into a new attribute of the getter function.
+ Before calling a setter function in init (recognized by type),
+ the default value is retrieved and passed transparently to the setter.
+ It is the responsibilty of the setter to appropriately clone the value,
+ in order to prevent multiple instances sharing the same mutable value.
+ """
+
+ def __init__(
+ self,
+ fget: Optional[Callable[[], Value]] = None,
+ fset: Optional[Callable[[Self, Value], None]] = None,
+ fdel: Optional[Callable[[], None]] = None,
+ doc: Optional[str] = None,
+ ):
+ """Find and store the default value, construct the property.
+
+ See this for how the superclass property works:
+ https://docs.python.org/3/howto/descriptor.html#properties
+
+ :param fget: Getter (unbound) function to use, if any.
+ :param fset: Setter (unbound) function to use, if any.
+ :param fdel: Deleter (unbound) function to use, if any.
+ :param doc: Docstring to display when examining the property.
+ :type fget: Optional[Callable[[Self], Value]]
+ :type fset: Optional[Callable[[Self, Value], None]]
+ :type fdel: Optional[Callable[[Self], None]]
+ :type doc: Optional[str]
+ """
+ variable_found = _calling_scope_variable(fget.__name__)
+ if not isinstance(variable_found, DataclassProperty):
+ if isinstance(variable_found, Field):
+ if variable_found.default is not MISSING:
+ fget.default_value = variable_found.default
+ # Else do not store any default value.
+ else:
+ fget.default_value = variable_found
+ # Else this is the second time init is called (when setting setter),
+ # in which case the default is already stored into fget.
+ super().__init__(fget=fget, fset=fset, fdel=fdel, doc=doc)
+
+ def setter(
+ self,
+ fset: Optional[Callable[[Self, Value], None]],
+ ) -> DataclassProperty:
+ """Return new instance with a wrapped setter function set.
+
+ If the argument is None, call superclass method.
+
+ The wrapped function recognizes when it is called in init
+ (by the fact the value argument is of type DataclassProperty)
+ and in that case it extracts the stored default and passes that
+ to the user-defined setter function.
+
+ :param fset: Setter function to wrap and apply.
+ :type fset: Optional[Callable[[Self, Value], None]]
+ :returns: New property instance with correct setter function set.
+ :rtype: DataclassProperty
+ """
+ if fset is None:
+ return super().setter(fset)
+
+ @wraps(fset)
+ def wrapped(sel_: Self, val: Union[Value, DataclassProperty]) -> None:
+ """Extract default from getter if needed, call the user setter.
+
+ The sel_ parameter is listed explicitly, to signify
+ this is an unbound function, not a bounded method yet.
+
+ :param sel_: Instance of dataclass (not of DataclassProperty)
+ to set the value on.
+ :param val: Set this value, or the default value stored there.
+ :type sel_: Self
+ :type val: Union[Value, DataclassProperty]
+ """
+ if isinstance(val, DataclassProperty):
+ val = val.fget.default_value
+ fset(sel_, val)
+
+ return super().setter(wrapped)
diff --git a/resources/libraries/python/MLRsearch/dataclass/field.py b/resources/libraries/python/MLRsearch/dataclass/field.py
new file mode 100644
index 0000000000..55d9d0879f
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/dataclass/field.py
@@ -0,0 +1,44 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining secondary_field function.
+
+Just a shrothand for frequently repeated expression.
+
+The main point is that this dataclass field is not used in init.
+Maybe it is a derived value of a frozen dataclass.
+Maybe it is a cache to help avoiding repeated computation.
+Maybe it is a temporary value stored in one method and read in another method.
+In any case, the caller does not need to know it is here,
+so it is excluded from repr, hashing, ordering and similar.
+"""
+
+from dataclasses import Field, field
+
+
+def secondary_field() -> Field:
+ """Return newly created Field with non-default arguments
+
+ In practice, it seems to be fine to reuse the resulting Field instance
+ when defining multiple dataclass fields,
+ but we keep this as a function to improve readability.
+
+ :returns: A new Field instance useful for secondary fields.
+ :rtype: Field
+ """
+ return field(
+ default=None,
+ init=False,
+ repr=False,
+ compare=False,
+ )
diff --git a/resources/libraries/python/MLRsearch/discrete_interval.py b/resources/libraries/python/MLRsearch/discrete_interval.py
new file mode 100644
index 0000000000..0a3bf443a8
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/discrete_interval.py
@@ -0,0 +1,140 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining DiscreteInterval class."""
+
+from dataclasses import dataclass
+
+from .dataclass import secondary_field
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+
+
+# TODO: Can this be frozen?
+@dataclass
+class DiscreteInterval:
+ """Interval class with more computations available.
+
+ Along discrete form of width,
+ a MLR specific way for halving the interval is also included.
+
+ The two primary field values do not have to be valid relevant bounds,
+ but at the end of the search, they usually are.
+
+ The load values must be round.
+ """
+
+ lower_bound: DiscreteLoad
+ """Value for the lower intended load (or load stats or similar)."""
+ upper_bound: DiscreteLoad
+ """Value for the higher intended load (or load stats or similar)."""
+ # Primary fields above, derived below.
+ discrete_width: DiscreteWidth = secondary_field()
+ """Discrete width between intended loads (upper_bound minus lower_bound)."""
+
+ def __post_init__(self) -> None:
+ """Sort bounds by intended load, compute secondary quantities.
+
+ :raises RuntimeError: If a result used non-rounded load.
+ """
+ if not self.lower_bound.is_round:
+ raise RuntimeError(f"Non-round lower bound: {self.lower_bound!r}")
+ if not self.upper_bound.is_round:
+ raise RuntimeError(f"Non-round upper bound: {self.upper_bound!r}")
+ if self.lower_bound > self.upper_bound:
+ tmp = self.lower_bound
+ self.lower_bound = self.upper_bound
+ self.upper_bound = tmp
+ self.discrete_width = self.upper_bound - self.lower_bound
+
+ def __str__(self) -> str:
+ """Convert to a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return (
+ f"lower_bound=({self.lower_bound}),upper_bound=({self.upper_bound})"
+ )
+
+ # TODO: Use "target" instad of "goal" in argument and variable names.
+
+ def width_in_goals(self, goal: DiscreteWidth) -> float:
+ """Return relative width as a multiple of the given goal (int form).
+
+ Integer forms are used for computation, safe as loads are rounded.
+ The result is a float, as self int may not be divisible by goal int.
+
+ :param goal: A relative width amount to be used as a unit.
+ :type goal: DiscreteWidth
+ :returns: Self width in multiples of (integer form of) goal width.
+ :rtype: float
+ """
+ return int(self.discrete_width) / int(goal)
+
+ def middle(self, goal: DiscreteWidth) -> DiscreteLoad:
+ """Return new intended load (discrete form) in the middle.
+
+ All calculations are based on int forms.
+
+ One of the halfs is rounded to a power-of-two multiple of the goal.
+ The power that leads to most even split is used.
+ Lower width is the smaller one (if not exactly even).
+
+ This approach prefers lower loads (to remain conservative) and can save
+ some measurements (when all middle measurements have high loss).
+ Note that when competing with external search from above,
+ that search is already likely to produce widths that are
+ power-of-two multiples of the target width.
+
+ If the interval width is one goal (or less), RuntimeError is raised.
+ If the interval width is between one and two goals (not including),
+ a more even split is attempted (using half the goal value).
+
+ :param goal: Target width goal to use for uneven halving.
+ :type goal: DiscreteWidth
+ :returns: New load to use for bisecting.
+ :rtype: DiscreteLoad
+ :raises RuntimeError: If an internal inconsistency is detected.
+ """
+ int_self, int_goal = int(self.discrete_width), int(goal)
+ if int_self <= int_goal:
+ raise RuntimeError(f"Do not halve small enough interval: {self!r}")
+ if int_self == 2 * int_goal:
+ # Even split, return here simplifies the while loop below.
+ return self.lower_bound + goal
+ if int_self < 2 * int_goal:
+ # This can only happen when int_goal >= 2.
+ # In this case, we do not have good enough split at this width goal,
+ # but maybe this is not the final target, so we can attempt
+ # a split at half width goal.
+ if not int_goal % 2:
+ return self.middle(goal=goal.half_rounded_down())
+ # Odd int_goal, so this must by the last phase. Do even split.
+ lo_width = self.discrete_width.half_rounded_down()
+ return self.lower_bound + lo_width
+ hi_width = goal
+ lo_width = self.discrete_width - hi_width
+ # We know lo_width > hi_width because we did not do the even split.
+ while 1:
+ hi2_width = hi_width * 2
+ lo2_width = self.discrete_width - hi2_width
+ if lo2_width <= hi2_width:
+ break
+ hi_width, lo_width = hi2_width, lo2_width
+ # Which of the two options is more even? Product decides.
+ if int(hi_width) * int(lo_width) > int(hi2_width) * int(lo2_width):
+ # Previous attempt was more even, but hi_width was the smaller one.
+ lo2_width = hi_width
+ # Else lo2_width is more even and no larger than hi2_width.
+ return self.lower_bound + lo2_width
diff --git a/resources/libraries/python/MLRsearch/discrete_load.py b/resources/libraries/python/MLRsearch/discrete_load.py
new file mode 100644
index 0000000000..a75b4acf96
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/discrete_load.py
@@ -0,0 +1,316 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining DiscreteLoad class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+from functools import total_ordering
+from typing import Callable, Optional, Union
+
+from .load_rounding import LoadRounding
+from .discrete_width import DiscreteWidth
+
+
+@total_ordering
+@dataclass
+class DiscreteLoad:
+ """Structure to store load value together with its rounded integer form.
+
+ LoadRounding instance is needed to enable conversion between two forms.
+ Conversion methods and factories are added for convenience.
+
+ In general, the float form is allowed to differ from conversion from int.
+
+ Comparisons are supported, acting on the float load component.
+ Additive operations are supported, acting on int form.
+ Multiplication by a float constant is supported, acting on float form.
+
+ As for all user defined classes by default, all instances are truthy.
+ That is useful when dealing with Optional values, as None is falsy.
+
+ This dataclass is effectively frozen, but cannot be marked as such
+ as that would prevent LoadStats from being its subclass.
+ """
+
+ # For most debugs, rounding in repr just takes space.
+ rounding: LoadRounding = field(repr=False, compare=False)
+ """Rounding instance to use for conversion."""
+ float_load: float = None
+ """Float form of intended load [tps], usable for measurer."""
+ int_load: int = field(compare=False, default=None)
+ """Integer form, usable for exact computations."""
+
+ def __post_init__(self) -> None:
+ """Ensure types, compute missing information.
+
+ At this point, it is allowed for float load to differ from
+ conversion from int load. MLRsearch should round explicitly later,
+ based on its additional information.
+
+ :raises RuntimeError: If both init arguments are None.
+ """
+ if self.float_load is None and self.int_load is None:
+ raise RuntimeError("Float or int value is needed.")
+ if self.float_load is None:
+ self.int_load = int(self.int_load)
+ self.float_load = self.rounding.int2float(self.int_load)
+ else:
+ self.float_load = float(self.float_load)
+ self.int_load = self.rounding.float2int(self.float_load)
+
+ def __str__(self) -> str:
+ """Convert to a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return f"int_load={int(self)}"
+
+ # Explicit comparison operators.
+ # Those generated with dataclass order=True do not allow subclass instances.
+
+ def __eq__(self, other: Optional[DiscreteLoad]) -> bool:
+ """Return whether the other instance has the same float form.
+
+ None is effectively considered to be an unequal instance.
+
+ :param other: Other instance to compare to, or None.
+ :type other: Optional[DiscreteLoad]
+ :returns: True only if float forms are exactly equal.
+ :rtype: bool
+ """
+ if other is None:
+ return False
+ return float(self) == float(other)
+
+ def __lt__(self, other: DiscreteLoad) -> bool:
+ """Return whether self has smaller float form than the other instance.
+
+ None is not supported, as MLRsearch does not need that
+ (so when None appears we want to raise).
+
+ :param other: Other instance to compare to.
+ :type other: DiscreteLoad
+ :returns: True only if float forms of self is strictly smaller.
+ :rtype: bool
+ """
+ return float(self) < float(other)
+
+ def __hash__(self) -> int:
+ """Return a hash based on the float value.
+
+ With this, the instance can be used as if it was immutable and hashable,
+ e.g. it can be a key in a dict.
+
+ :returns: Hash value for this instance.
+ :rtype: int
+ """
+ return hash(float(self))
+
+ @property
+ def is_round(self) -> bool:
+ """Return whether float load matches converted int load.
+
+ :returns: False if float load is not rounded.
+ :rtype: bool
+ """
+ expected = self.rounding.int2float(self.int_load)
+ return expected == self.float_load
+
+ def __int__(self) -> int:
+ """Return the int value.
+
+ :returns: The int field value.
+ :rtype: int
+ """
+ return self.int_load
+
+ def __float__(self) -> float:
+ """Return the float value.
+
+ :returns: The float field value [tps].
+ :rtype: float
+ """
+ return self.float_load
+
+ @staticmethod
+ def int_conver(rounding: LoadRounding) -> Callable[[int], DiscreteLoad]:
+ """Return a factory that turns an int load into a discrete load.
+
+ :param rounding: Rounding instance needed.
+ :type rounding: LoadRounding
+ :returns: Factory to use when converting from int.
+ :rtype: Callable[[int], DiscreteLoad]
+ """
+
+ def factory_int(int_load: int) -> DiscreteLoad:
+ """Use rounding and int load to create discrete load.
+
+ :param int_load: Intended load in integer form.
+ :type int_load: int
+ :returns: New discrete load instance matching the int load.
+ :rtype: DiscreteLoad
+ """
+ return DiscreteLoad(rounding=rounding, int_load=int_load)
+
+ return factory_int
+
+ @staticmethod
+ def float_conver(rounding: LoadRounding) -> Callable[[float], DiscreteLoad]:
+ """Return a factory that turns a float load into a discrete load.
+
+ :param rounding: Rounding instance needed.
+ :type rounding: LoadRounding
+ :returns: Factory to use when converting from float.
+ :rtype: Callable[[float], DiscreteLoad]
+ """
+
+ def factory_float(float_load: float) -> DiscreteLoad:
+ """Use rounding instance and float load to create discrete load.
+
+ The float form is not rounded yet.
+
+ :param int_load: Intended load in float form [tps].
+ :type int_load: float
+ :returns: New discrete load instance matching the float load.
+ :rtype: DiscreteLoad
+ """
+ return DiscreteLoad(rounding=rounding, float_load=float_load)
+
+ return factory_float
+
+ def rounded_down(self) -> DiscreteLoad:
+ """Create and return new instance with float form matching int.
+
+ :returns: New instance with same int form and float form rounded down.
+ :rtype: DiscreteLoad
+ """
+ return DiscreteLoad(rounding=self.rounding, int_load=int(self))
+
+ def hashable(self) -> DiscreteLoad:
+ """Return new equivalent instance.
+
+ This is mainly useful for conversion from unhashable subclasses,
+ such as LoadStats.
+ Rounding instance (reference) is copied from self.
+
+ :returns: New instance with values based on float form of self.
+ :rtype: DiscreteLoad
+ """
+ return DiscreteLoad(rounding=self.rounding, float_load=float(self))
+
+ def __add__(self, width: DiscreteWidth) -> DiscreteLoad:
+ """Return newly constructed instance with width added to int load.
+
+ Rounding instance (reference) is copied from self.
+
+ Argument type is checked, to avoid caller adding two loads by mistake
+ (or adding int to load and similar).
+
+ :param width: Value to add to int load.
+ :type width: DiscreteWidth
+ :returns: New instance.
+ :rtype: DiscreteLoad
+ :raises RuntimeError: When argument has unexpected type.
+ """
+ if not isinstance(width, DiscreteWidth):
+ raise RuntimeError(f"Not width: {width!r}")
+ return DiscreteLoad(
+ rounding=self.rounding,
+ int_load=self.int_load + int(width),
+ )
+
+ def __sub__(
+ self, other: Union[DiscreteWidth, DiscreteLoad]
+ ) -> Union[DiscreteLoad, DiscreteWidth]:
+ """Return result based on the argument type.
+
+ Load minus load is width, load minus width is load.
+ This allows the same operator to support both operations.
+
+ Rounding instance (reference) is copied from self.
+
+ :param other: Value to subtract from int load.
+ :type other: Union[DiscreteWidth, DiscreteLoad]
+ :returns: Resulting width or load.
+ :rtype: Union[DiscreteLoad, DiscreteWidth]
+ :raises RuntimeError: If the argument type is not supported.
+ """
+ if isinstance(other, DiscreteWidth):
+ return self._minus_width(other)
+ if isinstance(other, DiscreteLoad):
+ return self._minus_load(other)
+ raise RuntimeError(f"Unsupported type {other!r}")
+
+ def _minus_width(self, width: DiscreteWidth) -> DiscreteLoad:
+ """Return newly constructed instance, width subtracted from int load.
+
+ Rounding instance (reference) is copied from self.
+
+ :param width: Value to subtract from int load.
+ :type width: DiscreteWidth
+ :returns: New instance.
+ :rtype: DiscreteLoad
+ """
+ return DiscreteLoad(
+ rounding=self.rounding,
+ int_load=self.int_load - int(width),
+ )
+
+ def _minus_load(self, other: DiscreteLoad) -> DiscreteWidth:
+ """Return newly constructed width instance, difference of int loads.
+
+ Rounding instance (reference) is copied from self.
+
+ :param other: Value to subtract from int load.
+ :type other: DiscreteLoad
+ :returns: New instance.
+ :rtype: DiscreteWidth
+ """
+ return DiscreteWidth(
+ rounding=self.rounding,
+ int_width=self.int_load - int(other),
+ )
+
+ def __mul__(self, coefficient: float) -> DiscreteLoad:
+ """Return newly constructed instance, float load multiplied by argument.
+
+ Rounding instance (reference) is copied from self.
+
+ :param coefficient: Value to multiply float load with.
+ :type coefficient: float
+ :returns: New instance.
+ :rtype: DiscreteLoad
+ :raises RuntimeError: If argument is unsupported.
+ """
+ if not isinstance(coefficient, float):
+ raise RuntimeError(f"Not float: {coefficient!r}")
+ if coefficient <= 0.0:
+ raise RuntimeError(f"Not positive: {coefficient!r}")
+ return DiscreteLoad(
+ rounding=self.rounding,
+ float_load=self.float_load * coefficient,
+ )
+
+ def __truediv__(self, coefficient: float) -> DiscreteLoad:
+ """Call multiplication with inverse argument.
+
+ :param coefficient: Value to divide float load with.
+ :type coefficient: float
+ :returns: New instance.
+ :rtype: DiscreteLoad
+ :raises RuntimeError: If argument is unsupported.
+ """
+ return self * (1.0 / coefficient)
diff --git a/resources/libraries/python/MLRsearch/discrete_result.py b/resources/libraries/python/MLRsearch/discrete_result.py
new file mode 100644
index 0000000000..882b6081c6
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/discrete_result.py
@@ -0,0 +1,76 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining DiscreteResult class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from .discrete_load import DiscreteLoad
+from .trial_measurement import MeasurementResult
+
+
+@dataclass
+class DiscreteResult(MeasurementResult):
+ """A measurement result where intended load is also given as discrete load.
+
+ The discrete load has to be round and has to match the intended load.
+ """
+
+ # Must have default as superclass has fields with default values.
+ discrete_load: DiscreteLoad = None
+ """Intended load [tps]; discrete, round and equal to intended load."""
+
+ def __post_init__(self) -> None:
+ """Call super, verify intended and discrete loads are the same.
+
+ :raises TypeError: If discrete load is not DiscreteLoad.
+ :raises ValueError: If the discrete load is not round.
+ :raises ValueError: If the load does not match intended load.
+ """
+ super().__post_init__()
+ if not isinstance(self.discrete_load, DiscreteLoad):
+ raise TypeError(f"Not a discrete load: {self.discrete_load!r}")
+ if not self.discrete_load.is_round:
+ raise ValueError(f"Discrete load not round: {self.discrete_load!r}")
+ if float(self.discrete_load) != self.intended_load:
+ raise ValueError(f"Load mismatch: {self!r}")
+
+ @staticmethod
+ def with_load(
+ result: MeasurementResult, load: DiscreteLoad
+ ) -> DiscreteResult:
+ """Return result with added load.
+
+ :param result: A result, possibly without discrete load.
+ :param load: Discrete load to add.
+ :type result: MeasurementResult
+ :type load: DiscreteLoad
+ :returns: Equivalent result with matching discrete load.
+ :rtype: DiscreteResult
+ :raises TypeError: If discrete load is not DiscreteLoad.
+ :raises ValueError: If the discrete load is not round.
+ :raises ValueError: If the load does not match intended load.
+ """
+ return DiscreteResult(
+ intended_duration=result.intended_duration,
+ intended_load=result.intended_load,
+ offered_count=result.offered_count,
+ loss_count=result.loss_count,
+ forwarding_count=result.forwarding_count,
+ offered_duration=result.offered_duration,
+ duration_with_overheads=result.duration_with_overheads,
+ intended_count=result.intended_count,
+ discrete_load=load,
+ )
diff --git a/resources/libraries/python/MLRsearch/discrete_width.py b/resources/libraries/python/MLRsearch/discrete_width.py
new file mode 100644
index 0000000000..8a4845a83f
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/discrete_width.py
@@ -0,0 +1,197 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining DiscreteWidth class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+
+from .load_rounding import LoadRounding
+
+
+# TODO: Make properly frozen.
+@dataclass(order=True)
+class DiscreteWidth:
+ """Structure to store float width together with its rounded integer form.
+
+ The width does not have to be positive, i.e. the computed integer width
+ does not have to be larger than zero.
+
+ LoadRounding instance is needed to enable conversion between two forms.
+
+ Conversion and arithmetic methods are added for convenience.
+ Division and non-integer multiplication are intentionally not supported,
+ as MLRsearch should not seek unround widths when round ones are available.
+
+ The instance is effectively immutable, but not hashable as it refers
+ to the rounding instance, which is implemented as mutable
+ (although the mutations are not visible).
+ """
+
+ # For most debugs, rounding in repr just takes space.
+ rounding: LoadRounding = field(repr=False, compare=False)
+ """Rounding instance to use for conversion."""
+ float_width: float = None
+ """Relative width of float intended load.
+ This is treated as a constructor argument, and does not need to match
+ the int width. Int width is computed to be no wider than this."""
+ int_width: int = field(compare=False, default=None)
+ """Integer form, difference of integer loads.
+ This is the primary quantity used by most computations."""
+
+ def __post_init__(self) -> None:
+ """Ensure types, compute missing information.
+
+ At this point, it is allowed for float width to be slightly larger
+ than the implied int width.
+
+ If both forms are specified, the float form is taken as primary
+ (thus the integer form is recomputed to match).
+
+ :raises RuntimeError: If both init arguments are None.
+ """
+ if self.float_width is None and self.int_width is None:
+ raise RuntimeError("Float or int value is needed.")
+ if self.float_width is None:
+ self.int_width = int(self.int_width)
+ min_load = self.rounding.int2float(0)
+ increased_load = self.rounding.int2float(self.int_width)
+ self.float_width = (increased_load - min_load) / increased_load
+ return
+ self.float_width = float(self.float_width)
+ min_load = self.rounding.int2float(0)
+ increased_load = min_load / (1.0 - self.float_width)
+ int_load = self.rounding.float2int(increased_load)
+ verify_load = self.rounding.int2float(int_load)
+ if verify_load > increased_load:
+ int_load -= 1
+ self.int_width = int_load
+
+ def __str__(self) -> str:
+ """Convert into a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return f"int_width={int(self)}"
+
+ def __int__(self) -> int:
+ """Return the integer form.
+
+ :returns: The int field value.
+ :rtype: int
+ """
+ return self.int_width
+
+ def __float__(self) -> float:
+ """Return the float form.
+
+ :returns: The float field value.
+ :rtype: float
+ """
+ return self.float_width
+
+ def __hash__(self) -> int:
+ """Return a hash based on the float value.
+
+ With this, the instance can be used as if it was immutable and hashable,
+ e.g. it can be a key in a dict.
+
+ :returns: Hash value for this instance.
+ :rtype: int
+ """
+ return hash(float(self))
+
+ def rounded_down(self) -> DiscreteWidth:
+ """Create and return new instance with float form matching int.
+
+ :returns: New instance with same int form and float form rounded down.
+ :rtype: DiscreteWidth
+ """
+ return DiscreteWidth(rounding=self.rounding, int_width=int(self))
+
+ def __add__(self, width: DiscreteWidth) -> DiscreteWidth:
+ """Return newly constructed instance with int widths added.
+
+ Rounding instance (reference) is copied from self.
+
+ Argument type is checked, to avoid caller adding something unsupported.
+
+ :param width: Value to add to int width.
+ :type width: DiscreteWidth
+ :returns: New instance.
+ :rtype: DiscreteWidth
+ :raises RuntimeError: When argument has unexpected type.
+ """
+ if not isinstance(width, DiscreteWidth):
+ raise RuntimeError(f"Not width: {width!r}")
+ return DiscreteWidth(
+ rounding=self.rounding,
+ int_width=self.int_width + int(width),
+ )
+
+ def __sub__(self, width: DiscreteWidth) -> DiscreteWidth:
+ """Return newly constructed instance with int widths subtracted.
+
+ Rounding instance (reference) is copied from self.
+
+ Argument type is checked, to avoid caller adding something unsupported.
+ Non-positive results are disallowed by constructor.
+
+ :param width: Value to subtract to int width.
+ :type width: DiscreteWidth
+ :returns: New instance.
+ :rtype: DiscreteWidth
+ :raises RuntimeError: When argument has unexpected type.
+ """
+ if not isinstance(width, DiscreteWidth):
+ raise RuntimeError(f"Not width: {type(width)}")
+ return DiscreteWidth(
+ rounding=self.rounding,
+ int_width=self.int_width - int(width),
+ )
+
+ def __mul__(self, coefficient: int) -> DiscreteWidth:
+ """Construct new instance with int value multiplied.
+
+ Rounding instance (reference) is copied from self.
+
+ :param coefficient: Constant to multiply int width with.
+ :type coefficient: int
+ :returns: New instance with multiplied int width.
+ :rtype: DiscreteWidth
+ :raises RuntimeError: If argument value does not meet requirements.
+ """
+ if not isinstance(coefficient, int):
+ raise RuntimeError(f"Coefficient not int: {coefficient!r}")
+ if coefficient < 1:
+ raise RuntimeError(f"Coefficient not positive: {coefficient!r}")
+ return DiscreteWidth(
+ rounding=self.rounding,
+ int_width=self.int_width * coefficient,
+ )
+
+ def half_rounded_down(self) -> DiscreteWidth:
+ """Contruct new instance of half the integer width.
+
+ If the current integer width is odd, round the half width down.
+
+ :returns: New instance with half int width.
+ :rtype: DiscreteWidth
+ :raises RuntimeError: If the resulting integerl width is not positive.
+ """
+ return DiscreteWidth(
+ rounding=self.rounding,
+ int_width=self.int_width // 2,
+ )
diff --git a/resources/libraries/python/MLRsearch/expander.py b/resources/libraries/python/MLRsearch/expander.py
new file mode 100644
index 0000000000..0e6800477e
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/expander.py
@@ -0,0 +1,102 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining TargetExpander class."""
+
+
+from dataclasses import dataclass, field
+from typing import Callable, Optional
+
+from .dataclass import secondary_field
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+from .global_width import GlobalWidth
+from .limit_handler import LimitHandler
+from .target_spec import TargetSpec
+
+
+@dataclass
+class TargetedExpander:
+ """Utility class to track expanding width during external search.
+
+ One instance per selector but takes into consideration global current width.
+
+ Generally, many strategies may limit next_width immediately,
+ but next_width expands only after measurement
+ when external search fails to find its bound (global width is also bumped).
+ See strategy classes for specific details on external and internal search.
+ """
+
+ target: TargetSpec
+ """The target this strategy is focusing on."""
+ global_width: GlobalWidth
+ """Reference to the global width tracking instance."""
+ initial_lower_load: Optional[DiscreteLoad]
+ """Smaller of the two loads distinguished at instance creation.
+ Can be None if initial upper bound is the min load."""
+ initial_upper_load: Optional[DiscreteLoad]
+ """Larger of the two loads distinguished at instance creation.
+ Can be None if initial lower bound is the max load."""
+ handler: LimitHandler = field(repr=False)
+ """Reference to the class used to avoid too narrow intervals."""
+ debug: Callable[[str], None] = field(repr=False)
+ """Injectable function for debug logging."""
+ # Primary above, derived below.
+ next_width: DiscreteWidth = secondary_field()
+ """This will be used in next search step if no strategy intervenes."""
+
+ def __post_init__(self) -> None:
+ """Prepare next width."""
+ self.next_width = self.target.discrete_width
+ if self.initial_lower_load and self.initial_upper_load:
+ interval_width = self.initial_upper_load - self.initial_lower_load
+ self.next_width = max(self.next_width, interval_width)
+ self.expand(bump_global=False)
+
+ def expand(self, bump_global: bool = True) -> None:
+ """Multiply next width by expansion coefficient.
+
+ The global current width should be bumped when external search
+ is done but load is not the bound we were looking for.
+
+ For global width shrinking, set the field directly.
+
+ :param bump_global: False if called from limit or post init.
+ :type bump_global: bool
+ """
+ self.next_width *= self.target.expansion_coefficient
+ if bump_global:
+ self.global_width.width = self.next_width
+
+ def get_width(self) -> DiscreteWidth:
+ """Return next width corrected by global current width.
+
+ :returns: The width to use, see GlobalWidth.
+ :rtype: DiscreteWidth
+ """
+ return self.global_width.or_larger(self.next_width)
+
+ def limit(self, last_width: DiscreteWidth) -> None:
+ """Decrease the prepared next width.
+
+ This is called by other strategies when bounds are getting narrower.
+
+ Global current width is not updated yet,
+ as the other strategy may not end up becoming the winner
+ and we want to avoid interfering with other selector strategies.
+
+ :param last_width: As applied by other strategy, smaller of two halves.
+ :type last_width: DiscreteWidth
+ """
+ self.next_width = max(last_width, self.target.discrete_width)
+ self.expand(bump_global=False)
diff --git a/resources/libraries/python/MLRsearch/global_width.py b/resources/libraries/python/MLRsearch/global_width.py
new file mode 100644
index 0000000000..6f7df8b894
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/global_width.py
@@ -0,0 +1,70 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining GlobalWidth class."""
+
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+
+
+@dataclass
+class GlobalWidth:
+ """Primarily used to synchronize external search steps across selectors.
+
+ The full name is global current width, but that is too long for identifiers.
+
+ While each selector tracks its "local" (per goal) width using expander,
+ it is important we do not interleave upper external search for two goals.
+ That is why all selector instances refer to a singleton instance of this.
+
+ In general, this value remains constant when main loop iterates over
+ selectors and when selector iterates over strategies.
+ After winner is measured, this width is set to winner width value
+ and for some strategies that width is expanded when external search says so.
+
+ The two methods are not really worth creating a new class,
+ but the main reason is having a name for type hints
+ that distinguish this from various other "width" and "current" values.
+ """
+
+ width: DiscreteWidth
+ """Minimum width to apply at next external search step."""
+ # TODO: Add a setter, so it is easier to add debug logging.
+
+ @staticmethod
+ def from_loads(load0: DiscreteLoad, load1: DiscreteLoad) -> GlobalWidth:
+ """Initialize the value based on two loads from initial trials.
+
+ :param load0: Lower (or equal) load from the two most recent trials.
+ :param load1: Higher (or equal) load from the two most recent trials.
+ :type load0: DiscreteLoad
+ :type load1: DiscreteLoad
+ :returns: Newly created instance with computed width.
+ :rtype: GlobalWidth
+ """
+ return GlobalWidth(load1 - load0)
+
+ def or_larger(self, width: DiscreteWidth) -> DiscreteWidth:
+ """Return width from argument or self, whichever is larger.
+
+ :param width: A selector (strategy) asks if this width is large enough.
+ :type width: DiscreteWidth
+ :returns: Argument or current width.
+ :rtype: DiscreteWidth
+ """
+ return width if width > self.width else self.width
diff --git a/resources/libraries/python/MLRsearch/goal_result.py b/resources/libraries/python/MLRsearch/goal_result.py
new file mode 100644
index 0000000000..91dccec0bb
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/goal_result.py
@@ -0,0 +1,72 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining GoalResult class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import Optional
+
+from .discrete_load import DiscreteLoad
+from .relevant_bounds import RelevantBounds
+from .trimmed_stat import TrimmedStat
+
+
+@dataclass
+class GoalResult:
+ """Composite to be mapped for each search goal at the end of the search.
+
+ The values are stored as trimmed stats,
+ the conditional throughput is returned as a discrete loads.
+ Thus, users interested only in float values have to convert explicitly.
+
+ Irregular goal results are supported as instances with a bound missing.
+ """
+
+ relevant_lower_bound: Optional[TrimmedStat]
+ """The relevant lower bound for the search goal."""
+ relevant_upper_bound: Optional[TrimmedStat]
+ """The relevant lower upper for the search goal."""
+
+ @staticmethod
+ def from_bounds(bounds: RelevantBounds) -> GoalResult:
+ """Factory, so that the call site can be shorter.
+
+ :param bounds: The relevant bounds as found in measurement database.
+ :type bounds: RelevantBounds
+ :returns: Newly created instance based on the bounds.
+ :rtype: GoalResult
+ """
+ return GoalResult(
+ relevant_lower_bound=bounds.clo,
+ relevant_upper_bound=bounds.chi,
+ )
+
+ @property
+ def conditional_throughput(self) -> Optional[DiscreteLoad]:
+ """Compute conditional throughput from the relevant lower bound.
+
+ If the relevant lower bound is missing, None is returned.
+
+ The conditional throughput has the same semantics as load,
+ so if load is unidirectional and user wants bidirectional
+ throughput, the manager has to compensate.
+
+ :return: Conditional throughput at the relevant lower bound.
+ :rtype: Optional[DiscreteLoad]
+ """
+ if not (rlb := self.relevant_lower_bound):
+ return None
+ stat = next(iter(rlb.target_to_stat.values()))
+ return rlb * (1.0 - stat.pessimistic_loss_ratio)
diff --git a/resources/libraries/python/MLRsearch/limit_handler.py b/resources/libraries/python/MLRsearch/limit_handler.py
new file mode 100644
index 0000000000..5919f398f3
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/limit_handler.py
@@ -0,0 +1,198 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining LimitHandler class."""
+
+from dataclasses import dataclass
+from typing import Callable, Optional
+
+from .dataclass import secondary_field
+from .discrete_interval import DiscreteInterval
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+from .load_rounding import LoadRounding
+
+
+@dataclass
+class LimitHandler:
+ """Encapsulated methods for logic around handling limits.
+
+ In multiple places within MLRsearch code, an intended load value
+ is only useful if it is far enough from possible known values.
+ All such places can be served with the handle method
+ with appropriate arguments.
+ """
+
+ rounding: LoadRounding
+ """Rounding instance to use."""
+ debug: Callable[[str], None]
+ """Injectable logging function."""
+ # The two fields below are derived, extracted from rounding as a shortcut.
+ min_load: DiscreteLoad = secondary_field()
+ """Minimal load, as prescribed by Config."""
+ max_load: DiscreteLoad = secondary_field()
+ """Maximal load, as prescribed by Config."""
+
+ def __post_init__(self) -> None:
+ """Initialize derived quantities."""
+ from_float = DiscreteLoad.float_conver(rounding=self.rounding)
+ self.min_load = from_float(self.rounding.min_load)
+ self.max_load = from_float(self.rounding.max_load)
+
+ def handle(
+ self,
+ load: DiscreteLoad,
+ width: DiscreteWidth,
+ clo: Optional[DiscreteLoad],
+ chi: Optional[DiscreteLoad],
+ ) -> Optional[DiscreteLoad]:
+ """Return new intended load after considering limits and bounds.
+
+ Not only we want to avoid measuring outside minmax interval,
+ we also want to avoid measuring too close to known limits and bounds.
+ We either round or return None, depending on hints from bound loads.
+
+ When rounding away from hard limits, we may end up being
+ too close to an already measured bound.
+ In this case, pick a midpoint between the bound and the limit.
+
+ The last two arguments are just loads (not full measurement results)
+ to allow callers to exclude some load without measuring them.
+ As a convenience, full results are also supported,
+ so that callers do not need to care about None when extracting load.
+
+ :param load: Intended load candidate, initial or from a load selector.
+ :param width: Relative width goal, considered narrow enough for now.
+ :param clo: Intended load of current relevant lower bound.
+ :param chi: Intended load of current relevant upper bound.
+ :type load: DiscreteLoad
+ :type width: DiscreteWidth
+ :type clo: Optional[DiscreteLoad]
+ :type chi: Optional[DiscreteLoad]
+ :return: Adjusted load to measure at, or None if narrow enough already.
+ :rtype: Optional[DiscreteLoad]
+ :raises RuntimeError: If unsupported corner case is detected.
+ """
+ if not load:
+ raise RuntimeError("Got None load to handle.")
+ load = load.rounded_down()
+ min_load, max_load = self.min_load, self.max_load
+ if clo and not clo.is_round:
+ raise RuntimeError(f"Clo {clo} should have been round.")
+ if chi and not chi.is_round:
+ raise RuntimeError(f"Chi {chi} should have been round.")
+ if not clo and not chi:
+ load = self._handle_load_with_excludes(
+ load, width, min_load, max_load, min_ex=False, max_ex=False
+ )
+ # The "return load" lines are separate from load computation,
+ # so that logging can be added more easily when debugging.
+ return load
+ if chi and not clo:
+ if chi <= min_load:
+ # Expected when hitting the min load.
+ return None
+ if load >= chi:
+ # This can happen when mrr2 forward rate is rounded to mrr2.
+ return None
+ load = self._handle_load_with_excludes(
+ load, width, min_load, chi, min_ex=False, max_ex=True
+ )
+ return load
+ if clo and not chi:
+ if clo >= max_load:
+ raise RuntimeError("Lower load expected.")
+ if load <= clo:
+ raise RuntimeError("Higher load expected.")
+ load = self._handle_load_with_excludes(
+ load, width, clo, max_load, min_ex=True, max_ex=False
+ )
+ return load
+ # We have both clo and chi defined.
+ if not clo < load < chi:
+ # Happens when bisect compares with bounded extend.
+ return None
+ load = self._handle_load_with_excludes(
+ load, width, clo, chi, min_ex=True, max_ex=True
+ )
+ return load
+
+ def _handle_load_with_excludes(
+ self,
+ load: DiscreteLoad,
+ width: DiscreteWidth,
+ minimum: DiscreteLoad,
+ maximum: DiscreteLoad,
+ min_ex: bool,
+ max_ex: bool,
+ ) -> Optional[DiscreteLoad]:
+ """Adjust load if too close to limits, respecting exclusions.
+
+ This is a reusable block.
+ Limits may come from previous bounds or from hard load limits.
+ When coming from bounds, rounding to that is not allowed.
+ When coming from hard limits, rounding to the limit value
+ is allowed in general (given by the setting the _ex flag).
+
+ :param load: The candidate intended load before accounting for limits.
+ :param width: Relative width of area around the limits to avoid.
+ :param minimum: The lower limit to round around.
+ :param maximum: The upper limit to round around.
+ :param min_ex: If false, rounding to the minimum is allowed.
+ :param max_ex: If false, rounding to the maximum is allowed.
+ :type load: DiscreteLoad
+ :type width: DiscreteWidth
+ :type minimum: DiscreteLoad
+ :type maximum: DiscreteLoad
+ :type min_ex: bool
+ :type max_ex: bool
+ :returns: Adjusted load value, or None if narrow enough.
+ :rtype: Optional[DiscreteLoad]
+ :raises RuntimeError: If internal inconsistency is detected.
+ """
+ if not minimum <= load <= maximum:
+ raise RuntimeError(
+ "Internal error: load outside limits:"
+ f" load {load} min {minimum} max {maximum}"
+ )
+ max_width = maximum - minimum
+ if width >= max_width:
+ self.debug("Warning: Handling called with wide width.")
+ if not min_ex:
+ self.debug("Minimum not excluded, rounding to it.")
+ return minimum
+ if not max_ex:
+ self.debug("Maximum not excluded, rounding to it.")
+ return maximum
+ self.debug("Both limits excluded, narrow enough.")
+ return None
+ soft_min = minimum + width
+ soft_max = maximum - width
+ if soft_min > soft_max:
+ self.debug("Whole interval is less than two goals.")
+ middle = DiscreteInterval(minimum, maximum).middle(width)
+ soft_min = soft_max = middle
+ if load < soft_min:
+ if min_ex:
+ self.debug("Min excluded, rounding to soft min.")
+ return soft_min
+ self.debug("Min not excluded, rounding to minimum.")
+ return minimum
+ if load > soft_max:
+ if max_ex:
+ self.debug("Max excluded, rounding to soft max.")
+ return soft_max
+ self.debug("Max not excluded, rounding to maximum.")
+ return maximum
+ # Far enough from all limits, no additional adjustment is needed.
+ return load
diff --git a/resources/libraries/python/MLRsearch/load_rounding.py b/resources/libraries/python/MLRsearch/load_rounding.py
new file mode 100644
index 0000000000..0ac4487be9
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/load_rounding.py
@@ -0,0 +1,205 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining LoadRounding class."""
+
+import math
+
+from dataclasses import dataclass
+from typing import List, Tuple
+
+from .dataclass import secondary_field
+
+
+@dataclass
+class LoadRounding:
+ """Class encapsulating stateful utilities that round intended load values.
+
+ For MLRsearch algorithm logic to be correct, it is important that
+ interval width expansion and narrowing are exactly reversible,
+ which is not true in general for floating point number arithmetics.
+
+ This class offers conversion to and from an integer quantity.
+ Operations in the integer realm are guaranteed to be reversible,
+ so the only risk is when converting between float and integer realm.
+
+ Which relative width corresponds to the unit integer
+ is computed in initialization from width goals,
+ striking a balance between memory requirements and precision.
+
+ There are two quality knobs. One restricts how far
+ can an integer be from the exact float value.
+ The other restrict how close it can be. That is to make sure
+ even with unpredictable rounding errors during the conversion,
+ the converted integer value is never bigger than the intended float value,
+ to ensure the intervals returned from MLRsearch will always
+ meet the relative width goal.
+
+ An instance of this class is mutable only in the sense it contains
+ a growing cache of previously computed values.
+ """
+
+ # TODO: Hide the cache and present as frozen hashable object.
+
+ min_load: float
+ """Minimal intended load [tps] to support, must be positive."""
+ max_load: float
+ """Maximal intended load [tps] to support, must be bigger than min load."""
+ float_goals: Tuple[float]
+ """Relative width goals to approximate, each must be positive
+ and smaller than one. Deduplicated and sorted in post init."""
+ quality_lower: float = 0.99
+ """Minimal multiple of each goal to be achievable."""
+ quality_upper: float = 0.999999
+ """Maximal multiple of each goal to be achievable."""
+ # Primary fields above, computed fields below.
+ max_int_load: int = secondary_field()
+ """Integer for max load (min load int is zero)."""
+ _int2load: List[Tuple[int, float]] = secondary_field()
+ """Known int values (sorted) and their float equivalents."""
+
+ def __post_init__(self) -> None:
+ """Ensure types, perform checks, initialize conversion structures.
+
+ :raises RuntimeError: If a requirement is not met.
+ """
+ self.min_load = float(self.min_load)
+ self.max_load = float(self.max_load)
+ if not 0.0 < self.min_load < self.max_load:
+ raise RuntimeError("Load limits not supported: {self}")
+ self.quality_lower = float(self.quality_lower)
+ self.quality_upper = float(self.quality_upper)
+ if not 0.0 < self.quality_lower < self.quality_upper < 1.0:
+ raise RuntimeError("Qualities not supported: {self}")
+ goals = []
+ for goal in self.float_goals:
+ goal = float(goal)
+ if not 0.0 < goal < 1.0:
+ raise RuntimeError(f"Goal width {goal} is not supported.")
+ goals.append(goal)
+ self.float_goals = tuple(sorted(set(goals)))
+ self.max_int_load = self._find_ints()
+ self._int2load = []
+ self._int2load.append((0, self.min_load))
+ self._int2load.append((self.max_int_load, self.max_load))
+
+ def _find_ints(self) -> int:
+ """Find and return value for max_int_load.
+
+ Separated out of post init, as this is less conversion and checking,
+ and more math and searching.
+
+ A dumb implementation would start with 1 and kept increasing by 1
+ until all goals are within quality limits.
+ An actual implementation is smarter with the increment,
+ so it is expected to find the resulting values somewhat faster.
+
+ :returns: Value to be stored as max_int_load.
+ :rtype: int
+ """
+ minmax_log_width = math.log(self.max_load) - math.log(self.min_load)
+ log_goals = [-math.log1p(-goal) for goal in self.float_goals]
+ candidate = 1
+ while 1:
+ log_width_unit = minmax_log_width / candidate
+ # Fallback to increment by one if rounding errors make tries bad.
+ next_tries = [candidate + 1]
+ acceptable = True
+ for log_goal in log_goals:
+ units = log_goal / log_width_unit
+ int_units = math.floor(units)
+ quality = int_units / units
+ if not self.quality_lower <= quality <= self.quality_upper:
+ acceptable = False
+ target = (int_units + 1) / self.quality_upper
+ next_try = (target / units) * candidate
+ next_tries.append(next_try)
+ # Else quality acceptable, not bumping the candidate.
+ if acceptable:
+ return candidate
+ candidate = int(math.ceil(max(next_tries)))
+
+ def int2float(self, int_load: int) -> float:
+ """Convert from int to float tps load. Expand internal table as needed.
+
+ Too low or too high ints result in min or max load respectively.
+
+ :param int_load: Integer quantity to turn back into float load.
+ :type int_load: int
+ :returns: Converted load in tps.
+ :rtype: float
+ :raises RuntimeError: If internal inconsistency is detected.
+ """
+ if int_load <= 0:
+ return self.min_load
+ if int_load >= self.max_int_load:
+ return self.max_load
+ lo_index, hi_index = 0, len(self._int2load)
+ lo_int, hi_int = 0, self.max_int_load
+ lo_load, hi_load = self.min_load, self.max_load
+ while hi_int - lo_int >= 2:
+ mid_index = (hi_index + lo_index + 1) // 2
+ if mid_index >= hi_index:
+ mid_int = (hi_int + lo_int) // 2
+ log_coeff = math.log(hi_load) - math.log(lo_load)
+ log_coeff *= (mid_int - lo_int) / (hi_int - lo_int)
+ mid_load = lo_load * math.exp(log_coeff)
+ self._int2load.insert(mid_index, (mid_int, mid_load))
+ hi_index += 1
+ mid_int, mid_load = self._int2load[mid_index]
+ if mid_int < int_load:
+ lo_index, lo_int, lo_load = mid_index, mid_int, mid_load
+ continue
+ if mid_int > int_load:
+ hi_index, hi_int, hi_load = mid_index, mid_int, mid_load
+ continue
+ return mid_load
+ raise RuntimeError("Bisect in int2float failed.")
+
+ def float2int(self, float_load: float) -> int:
+ """Convert and round from tps load to int. Maybe expand internal table.
+
+ Too low or too high load result in zero or max int respectively.
+
+ Result value is rounded down to an integer.
+
+ :param float_load: Tps quantity to convert into int.
+ :type float_load: float
+ :returns: Converted integer value suitable for halving.
+ :rtype: int
+ """
+ if float_load <= self.min_load:
+ return 0
+ if float_load >= self.max_load:
+ return self.max_int_load
+ lo_index, hi_index = 0, len(self._int2load)
+ lo_int, hi_int = 0, self.max_int_load
+ lo_load, hi_load = self.min_load, self.max_load
+ while hi_int - lo_int >= 2:
+ mid_index = (hi_index + lo_index + 1) // 2
+ if mid_index >= hi_index:
+ mid_int = (hi_int + lo_int) // 2
+ log_coeff = math.log(hi_load) - math.log(lo_load)
+ log_coeff *= (mid_int - lo_int) / (hi_int - lo_int)
+ mid_load = lo_load * math.exp(log_coeff)
+ self._int2load.insert(mid_index, (mid_int, mid_load))
+ hi_index += 1
+ mid_int, mid_load = self._int2load[mid_index]
+ if mid_load < float_load:
+ lo_index, lo_int, lo_load = mid_index, mid_int, mid_load
+ continue
+ if mid_load > float_load:
+ hi_index, hi_int, hi_load = mid_index, mid_int, mid_load
+ continue
+ return mid_int
+ return lo_int
diff --git a/resources/libraries/python/MLRsearch/load_stats.py b/resources/libraries/python/MLRsearch/load_stats.py
new file mode 100644
index 0000000000..5f4757f488
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/load_stats.py
@@ -0,0 +1,112 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining LoadStats class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import Dict, Tuple
+
+from .target_spec import TargetSpec
+from .target_stat import TargetStat
+from .discrete_load import DiscreteLoad
+from .discrete_result import DiscreteResult
+
+
+# The eq=False part is needed to make sure comparison is inherited properly.
+@dataclass(eq=False)
+class LoadStats(DiscreteLoad):
+ """An offered load together with stats for all possible targets.
+
+ As LoadStats is frequently passed instead of plan DiscreteLoad,
+ equality and ordering is dictated by the float load.
+ """
+
+ target_to_stat: Dict[TargetSpec, TargetStat] = None
+ """Mapping from target specification to its current stat for this load."""
+
+ def __post_init__(self) -> None:
+ """Initialize load value and check there are targets to track."""
+ super().__post_init__()
+ if not self.target_to_stat:
+ raise ValueError(f"No targets: {self.target_to_stat!r}")
+
+ def __str__(self) -> str:
+ """Convert into a short human-readable string.
+
+ This works well only for trimmed stats,
+ as only the stat for the first target present is shown.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return (
+ f"fl={self.float_load}"
+ f",s=({next(iter(self.target_to_stat.values()))})"
+ )
+
+ def __hash__(self) -> int:
+ """Raise as stats are mutable by definition.
+
+ :returns: Hash value for this instance if possible.
+ :rtype: int
+ :raises TypeError: Not immutable.
+ """
+ raise TypeError("Loadstats are mutable so constant hash is impossible.")
+
+ def add(self, result: DiscreteResult) -> None:
+ """Take into account one more trial measurement result.
+
+ :param result: The result to take into account.
+ :type result: DiscreteResult
+ :raises RuntimeError: If result load does is not equal to the self load.
+ """
+ if result.intended_load != float(self):
+ raise RuntimeError(
+ f"Attempting to add load {result.intended_load}"
+ f" to result set for {float(self)}"
+ )
+ for stat in self.target_to_stat.values():
+ stat.add(result)
+
+ @staticmethod
+ def new_empty(load: DiscreteLoad, targets: Tuple[TargetSpec]) -> LoadStats:
+ """Factory method to initialize mapping for given targets.
+
+ :param load: The intended load value for the new instance.
+ :param targets: The target specifications to track stats for.
+ :type load: DiscreteLoad
+ :type targets: Tuple[TargetSpec]
+ :returns: New instance with empty stats initialized.
+ :rtype: LoadStats
+ :raise ValueError: Is the load is not rounded.
+ """
+ if not load.is_round:
+ raise ValueError(f"Not round: {load!r}")
+ return LoadStats(
+ rounding=load.rounding,
+ int_load=int(load),
+ target_to_stat={target: TargetStat(target) for target in targets},
+ )
+
+ def estimates(self, target: TargetSpec) -> Tuple[bool, bool]:
+ """Classify this load according to given target.
+
+ :param target: According to which target this should be classified.
+ :type target: TargetSpec
+ :returns: Tuple of two estimates whether load can be lower bound.
+ (True, False) means target is not reached yet.
+ :rtype: Tuple[bool, bool]
+ """
+ return self.target_to_stat[target].estimates()
diff --git a/resources/libraries/python/MLRsearch/measurement_database.py b/resources/libraries/python/MLRsearch/measurement_database.py
new file mode 100644
index 0000000000..7a6618c0da
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/measurement_database.py
@@ -0,0 +1,126 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining MeasurementDatabase class."""
+
+from dataclasses import dataclass
+from typing import Dict, Tuple
+
+from .discrete_load import DiscreteLoad
+from .discrete_result import DiscreteResult
+from .load_stats import LoadStats
+from .relevant_bounds import RelevantBounds
+from .target_spec import TargetSpec
+from .trimmed_stat import TrimmedStat
+
+
+@dataclass
+class MeasurementDatabase:
+ """Structure holding measurement results for multiple durations and loads.
+
+ Several utility methods are added, accomplishing tasks useful for MLRsearch.
+
+ While TargetStats can decide when a single load is a lower bound (or upper),
+ it does not deal with loss inversion (higher load with less load).
+
+ This class introduces the concept of relevant bounds.
+ Relevant upper bound is simply the lowest load classified as an upper bound.
+ But relevant lower bound is only chosen from lower bound loads
+ strictly smaller than the relevant upper bound.
+ This way any higher loads with good results are ignored,
+ so relevant bound give conservative estimate of SUT true performance.
+ """
+
+ targets: Tuple[TargetSpec] = None
+ """Targets to track stats for."""
+ load_to_stats: Dict[DiscreteLoad, LoadStats] = None
+ """Mapping from loads to stats."""
+
+ def __post_init__(self) -> None:
+ """Check and sort initial values.
+
+ If no stats yet, initialize empty ones.
+
+ :raises ValueError: If there are no targets.
+ """
+ if not self.targets:
+ raise ValueError(f"Database needs targets: {self.targets!r}")
+ if not self.load_to_stats:
+ self.load_to_stats = {}
+ self._sort()
+
+ def _sort(self) -> None:
+ """Sort keys from low to high load."""
+ self.load_to_stats = dict(sorted(self.load_to_stats.items()))
+
+ def __getitem__(self, key: DiscreteLoad) -> LoadStats:
+ """Allow access to stats as if self was load_to_stats.
+
+ This also accepts LoadStats as key, so callers do not need
+ to care about hashability.
+
+ :param key: The load to get stats for.
+ :type key: DiscreteLoad
+ :returns: Stats for the given load.
+ :rtype LoadStats:
+ """
+ return self.load_to_stats[key.hashable()]
+
+ def add(self, result: DiscreteResult) -> None:
+ """Incorporate given trial measurement result.
+
+ :param result: Measurement result to add to the database.
+ :type result: DiscreteResult
+ """
+ discrete_load = result.discrete_load.hashable()
+ if not discrete_load.is_round:
+ raise ValueError(f"Not round load: {discrete_load!r}")
+ if discrete_load not in self.load_to_stats:
+ self.load_to_stats[discrete_load] = LoadStats.new_empty(
+ load=discrete_load,
+ targets=self.targets,
+ )
+ self._sort()
+ self.load_to_stats[discrete_load].add(result)
+
+ def get_relevant_bounds(self, target: TargetSpec) -> RelevantBounds:
+ """Return None or a valid trimmed stat, for the two relevant bounds.
+
+ A load is valid only if both optimistic and pessimistic estimates agree.
+
+ If some value is not available, None is returned instead.
+ The returned stats are trimmed to the argument target.
+
+ The implementation starts from low loads
+ and the search stops at lowest upper bound,
+ thus conforming to the conservative definition of relevant bounds.
+
+ :param target: Target to classify loads when finding bounds.
+ :type target: TargetSpec
+ :returns: Relevant lower bound, relevant upper bound.
+ :rtype: RelevantBounds
+ """
+ lower_bound, upper_bound = None, None
+ for load_stats in self.load_to_stats.values():
+ opt, pes = load_stats.estimates(target)
+ if opt != pes:
+ continue
+ if not opt:
+ upper_bound = load_stats
+ break
+ lower_bound = load_stats
+ if lower_bound:
+ lower_bound = TrimmedStat.for_target(lower_bound, target)
+ if upper_bound:
+ upper_bound = TrimmedStat.for_target(upper_bound, target)
+ return RelevantBounds(clo=lower_bound, chi=upper_bound)
diff --git a/resources/libraries/python/MLRsearch/multiple_loss_ratio_search.py b/resources/libraries/python/MLRsearch/multiple_loss_ratio_search.py
new file mode 100644
index 0000000000..4d3ff7c4cb
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/multiple_loss_ratio_search.py
@@ -0,0 +1,325 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining MultipleLossRatioSearch class."""
+
+import logging
+import time
+
+from dataclasses import dataclass
+from typing import Callable, Optional, Tuple
+
+from .candidate import Candidate
+from .config import Config
+from .dataclass import secondary_field
+from .discrete_load import DiscreteLoad
+from .discrete_result import DiscreteResult
+from .expander import GlobalWidth
+from .goal_result import GoalResult
+from .limit_handler import LimitHandler
+from .load_rounding import LoadRounding
+from .measurement_database import MeasurementDatabase
+from .pep3140 import Pep3140Dict
+from .search_goal import SearchGoal
+from .selector import Selector
+from .target_scaling import TargetScaling
+from .trial_measurement import AbstractMeasurer
+
+
+@dataclass
+class MultipleLossRatioSearch:
+ """Implementation of the controller part of MLRsearch algorithm.
+
+ The manager part is creating and calling this,
+ the measurer part is injected.
+
+ Traditional binary search algorithm needs initial interval
+ (lower and upper bound), and returns final narrow bounds
+ (related to its search goal) after bisecting
+ (until some exit condition is met).
+ The exit condition is usually related to the interval width,
+ (upper bound value minus lower bound value).
+
+ The optimized algorithm in this class contains several improvements
+ aimed to reduce overall search time.
+
+ One improvement is searching for bounds for multiple search goals at once.
+ Specifically, the trial measurement results influence bounds for all goals,
+ even though the selection of trial inputs for next measurement
+ focuses only on one goal. The focus can switch between goals frequently.
+
+ Next improvement is that results of trial measurements
+ with small trial duration can be used to find a reasonable starting interval
+ for full trial duration search.
+ This results in more trials performed, but smaller overall duration
+ in general.
+ Internally, such shorter trials come from "preceding targets",
+ handled in a same way as a search goal "final target".
+ Related improvement is that the "current" interval does not need to be valid
+ (e.g. one of the bounds is missing).
+ In that case, this algorithm will move and expand the interval,
+ in a process called external search. Only when both bounds are found,
+ the interval bisection (called internal search) starts making it narrow.
+
+ Next improvement is bisecting in logarithmic quantities,
+ so that target relative width is independent of measurement units.
+
+ Next improvement is basing the initial interval on forwarding rates
+ of few initial measurements, starting at max load and using forwarding rates
+ seen so far.
+
+ Next improvement is to allow the use of multiple shorter trials
+ instead one big trial, allowing a percentage of trials
+ to exceed the loss ratio target.
+ This makes the result more stable in practice.
+ Conservative behavior (single long trial, zero exceed ratio)
+ is still available using corresponding goal definitions.
+
+ Final improvement is exiting early if the minimal load
+ is not a valid lower bound (at final duration)
+ and also exiting if the overall search duration is too long.
+
+ There are also subtle optimizations related to candidate selection
+ and uneven splitting of intervals, too numerous to list here.
+
+ The return values describe performance at the relevant lower bound
+ as "conditional throughput", which is based on loss ratio of one of trials
+ selected as a quantile based on exceed ratio parameter.
+ Usually this value may be quite pessimistic, as MLRsearch stops
+ measuring a load as soon as it becomes a lower bound,
+ so conditional throughput is usually based on forwarding rate
+ of the worst on the good long trials.
+ """
+
+ config: Config
+ """Arguments required at construction time."""
+ # End of fields required at intance creation.
+ measurer: AbstractMeasurer = secondary_field()
+ """Measurer to use, set at calling search()."""
+ debug: Callable[[str], None] = secondary_field()
+ """Object to call for logging, None means logging.debug."""
+ # Fields below are computed from data above
+ rounding: LoadRounding = secondary_field()
+ """Derived from goals. Instance to use for intended load rounding."""
+ from_float: Callable[[float], DiscreteLoad] = secondary_field()
+ """Conversion method from float [tps] intended load values."""
+ limit_handler: LimitHandler = secondary_field()
+ """Load post-processing utility based on config and rounding."""
+ scaling: TargetScaling = secondary_field()
+ """Utility for creating target chains for search goals."""
+ database: MeasurementDatabase = secondary_field()
+ """Storage for (stats of) measurement results so far."""
+ stop_time: float = secondary_field()
+ """Monotonic time value at which the search should end with failure."""
+
+ def search(
+ self,
+ measurer: AbstractMeasurer,
+ debug: Optional[Callable[[str], None]] = None,
+ ) -> Pep3140Dict[SearchGoal, GoalResult]:
+ """Perform initial trials, create state object, proceed with main loop.
+
+ Stateful arguments (measurer and debug) are stored.
+ Derived objects are constructed from config.
+
+ :param measurer: Measurement provider to use by this search object.
+ :param debug: Callable to optionally use instead of logging.debug().
+ :type measurer: AbstractMeasurer
+ :type debug: Optional[Callable[[str], None]]
+ :returns: Structure containing conditional throughputs and other stats,
+ one for each search goal. If a value is None it means there is
+ no lower bound (min load turned out to be an upper bound).
+ :rtype: Pep3140Dict[SearchGoal, GoalResult]
+ :raises RuntimeError: If total duration is larger than timeout,
+ or if min load becomes an upper bound for a search goal
+ that has fail fast true.
+ """
+ self.measurer = measurer
+ self.debug = logging.debug if debug is None else debug
+ self.rounding = LoadRounding(
+ min_load=self.config.min_load,
+ max_load=self.config.max_load,
+ float_goals=[goal.relative_width for goal in self.config.goals],
+ )
+ self.from_float = DiscreteLoad.float_conver(rounding=self.rounding)
+ self.limit_handler = LimitHandler(
+ rounding=self.rounding,
+ debug=self.debug,
+ )
+ self.scaling = TargetScaling(
+ goals=self.config.goals,
+ rounding=self.rounding,
+ )
+ self.database = MeasurementDatabase(self.scaling.targets)
+ self.stop_time = time.monotonic() + self.config.search_duration_max
+ result0, result1 = self.run_initial_trials()
+ self.main_loop(result0.discrete_load, result1.discrete_load)
+ ret_dict = Pep3140Dict()
+ for goal in self.config.goals:
+ target = self.scaling.goal_to_final_target[goal]
+ bounds = self.database.get_relevant_bounds(target=target)
+ ret_dict[goal] = GoalResult.from_bounds(bounds=bounds)
+ return ret_dict
+
+ def measure(self, duration: float, load: DiscreteLoad) -> DiscreteResult:
+ """Call measurer and put the result to appropriate form in database.
+
+ Also check the argument types and load roundness,
+ and return the result to the caller.
+
+ :param duration: Intended duration for the trial measurement.
+ :param load: Intended load for the trial measurement:
+ :type duration: float
+ :type load: DiscreteLoad
+ :returns: The trial results.
+ :rtype: DiscreteResult
+ :raises RuntimeError: If an argument doed not have the required type.
+ """
+ if not isinstance(duration, float):
+ raise RuntimeError(f"Duration has to be float: {duration!r}")
+ if not isinstance(load, DiscreteLoad):
+ raise RuntimeError(f"Load has to be discrete: {load!r}")
+ if not load.is_round:
+ raise RuntimeError(f"Told to measure unrounded: {load!r}")
+ self.debug(f"Measuring at d={duration},il={int(load)}")
+ result = self.measurer.measure(
+ intended_duration=duration,
+ intended_load=float(load),
+ )
+ self.debug(f"Measured lr={result.loss_ratio}")
+ result = DiscreteResult.with_load(result=result, load=load)
+ self.database.add(result)
+ return result
+
+ def run_initial_trials(self) -> Tuple[DiscreteResult, DiscreteResult]:
+ """Perform trials to get enough data to start the selectors.
+
+ Measurements are done with all initial targets in mind,
+ based on smallest target loss ratio, largest initial trial duration,
+ and largest initial target width.
+
+ Forwarding rate is used as a hint for next intended load.
+ The relative quantity is used, as load can use different units.
+ When the smallest target loss ratio is non-zero, a correction is needed
+ (forwarding rate is only a good hint for zero loss ratio load).
+ The correction is conservative (all increase in load turns to losses).
+
+ Also, warmup trial (if configured) is performed,
+ all other trials are added to the database.
+
+ This could return the initial width, but from implementation perspective
+ it is easier to return two measurements (or the same one twice) here
+ and compute width later. The "one value twice" happens when max load
+ has small loss, or when min load has big loss.
+
+ :returns: Two last measured values, in any order. Or one value twice.
+ :rtype: Tuple[DiscreteResult, DiscreteResult]
+ """
+ max_load = self.limit_handler.max_load
+ ratio, duration, width = None, None, None
+ for target in self.scaling.targets:
+ if target.preceding:
+ continue
+ if ratio is None or ratio > target.loss_ratio:
+ ratio = target.loss_ratio
+ if not duration or duration < target.trial_duration:
+ duration = target.trial_duration
+ if not width or width < target.discrete_width:
+ width = target.discrete_width
+ self.debug(f"Init ratio {ratio} duration {duration} width {width}")
+ if self.config.warmup_duration:
+ self.debug("Warmup trial.")
+ self.measure(self.config.warmup_duration, max_load)
+ # Warmup should not affect the real results, reset the database.
+ self.database = MeasurementDatabase(self.scaling.targets)
+ self.debug(f"First trial at max rate: {max_load}")
+ result0 = self.measure(duration, max_load)
+ rfr = result0.relative_forwarding_rate
+ corrected_rfr = (self.from_float(rfr) / (1.0 - ratio)).rounded_down()
+ if corrected_rfr >= max_load:
+ self.debug("Small loss, no other initial trials are needed.")
+ return result0, result0
+ mrr = self.limit_handler.handle(corrected_rfr, width, None, max_load)
+ self.debug(f"Second trial at (corrected) mrr: {mrr}")
+ result1 = self.measure(duration, mrr)
+ # Attempt to get narrower width.
+ result_ratio = result1.loss_ratio
+ if result_ratio > ratio:
+ rfr2 = result1.relative_forwarding_rate
+ crfr2 = (self.from_float(rfr2) / (1.0 - ratio)).rounded_down()
+ mrr2 = self.limit_handler.handle(crfr2, width, None, mrr)
+ else:
+ mrr2 = mrr + width
+ mrr2 = self.limit_handler.handle(mrr2, width, mrr, max_load)
+ if not mrr2:
+ self.debug("Close enough, measuring at mrr2 is not needed.")
+ return result1, result1
+ self.debug(f"Third trial at (corrected) mrr2: {mrr2}")
+ result2 = self.measure(duration, mrr2)
+ return result1, result2
+
+ def main_loop(self, load0: DiscreteLoad, load1: DiscreteLoad) -> None:
+ """Initialize selectors and keep measuring the winning candidate.
+
+ Selectors are created, the two input loads are useful starting points.
+
+ The search ends when no selector nominates any candidate,
+ or if the search takes too long (or if a selector raises).
+
+ Winner is selected according to ordering defined in Candidate class.
+ In case of a tie, selectors for earlier goals are preferred.
+
+ As a selector is only allowed to update current width as the winner,
+ the update is done here explicitly.
+
+ :param load0: Discrete load of one of results from run_initial_trials.
+ :param load1: Discrete load of other of results from run_initial_trials.
+ :type load0: DiscreteLoad
+ :type load1: DiscreteLoad
+ :raises RuntimeError: If the search takes too long,
+ or if min load becomes an upper bound for any search goal
+ """
+ if load1 < load0:
+ load0, load1 = load1, load0
+ global_width = GlobalWidth.from_loads(load0, load1)
+ selectors = []
+ for target in self.scaling.goal_to_final_target.values():
+ selector = Selector(
+ final_target=target,
+ global_width=global_width,
+ initial_lower_load=load0,
+ initial_upper_load=load1,
+ database=self.database,
+ handler=self.limit_handler,
+ debug=self.debug,
+ )
+ selectors.append(selector)
+ while time.monotonic() < self.stop_time:
+ winner = Candidate()
+ for selector in selectors:
+ # Order of arguments is important
+ # when two targets nominate the same candidate.
+ winner = min(Candidate.nomination_from(selector), winner)
+ if not winner:
+ break
+ # We do not check duration versus stop_time here,
+ # as some measurers can be unpredictably faster
+ # than their intended duration suggests.
+ self.measure(duration=winner.duration, load=winner.load)
+ # Delayed updates.
+ if winner.width:
+ global_width.width = winner.width
+ winner.won()
+ else:
+ raise RuntimeError("Optimized search takes too long.")
+ self.debug("Search done.")
diff --git a/resources/libraries/python/MLRsearch/pep3140/__init__.py b/resources/libraries/python/MLRsearch/pep3140/__init__.py
new file mode 100644
index 0000000000..f8e2ffaa8f
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/pep3140/__init__.py
@@ -0,0 +1,24 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+__init__ file for Python package "pep3140".
+"""
+
+# TODO: Move submodules to separate modules.
+# Not obvious how to do that from PyPI point of view
+# without affecting the current CSIT global "resources" package root.
+# Probably it can be done by specifying multiple directories
+# in PYTHONPATH used throughout CSIT.
+
+from .classes import Pep3140Dict
diff --git a/resources/libraries/python/MLRsearch/pep3140/classes.py b/resources/libraries/python/MLRsearch/pep3140/classes.py
new file mode 100644
index 0000000000..9ab6e25c7c
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/pep3140/classes.py
@@ -0,0 +1,34 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining a subclass of dict with an alternative str method."""
+
+
+class Pep3140Dict(dict):
+ """A dict with str support as proposed in PEP 3140.
+
+ Python implemented str acting on dict such that the resulting string
+ shows both keys and values in their repr form.
+ Therefore, str() of a dict gives the same result as repr().
+
+ This class shows both keys and values their str form instead.
+ """
+
+ def __str__(self) -> str:
+ """Return comma+space separated str of items in curly brackets.
+
+ :returns: PEP 3140 string form of the dict data.
+ :rtype: str
+ """
+ body = ", ".join(f"{key}: {value}" for key, value in self.items())
+ return f"{{{body}}}"
diff --git a/resources/libraries/python/MLRsearch/relevant_bounds.py b/resources/libraries/python/MLRsearch/relevant_bounds.py
new file mode 100644
index 0000000000..4bc6796f71
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/relevant_bounds.py
@@ -0,0 +1,56 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining RelevantBounds class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+from typing import Optional
+
+from .trimmed_stat import TrimmedStat
+
+
+@dataclass
+class RelevantBounds:
+ """Container for the pair of relevant bounds for a target.
+
+ If there is no valid bound, None is used.
+
+ Relevant upper bound is smallest load acting as an upper bound.
+ Relevant lower bound acts as a lower bound, has to be strictly smaller
+ than the relevant upper bound, and is largest among such loads.
+
+ The short names "clo" and "chi" are also commonly used
+ in logging and technical comments.
+
+ Trimming could be done here, but it needs to known the target explicitly,
+ so it is done in MeasurementDatabase instead.
+ """
+
+ clo: Optional[TrimmedStat]
+ """The relevant lower bound (trimmed) for the current target."""
+ chi: Optional[TrimmedStat]
+ """The relevant upper bound (trimmed) for the current target."""
+
+ # TODO: Check types in post init?
+
+ def __str__(self) -> str:
+ """Convert into a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ clo = int(self.clo) if self.clo else None
+ chi = int(self.chi) if self.chi else None
+ return f"clo={clo},chi={chi}"
diff --git a/resources/libraries/python/MLRsearch/search_goal.py b/resources/libraries/python/MLRsearch/search_goal.py
new file mode 100644
index 0000000000..777ad5b991
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/search_goal.py
@@ -0,0 +1,119 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining SearchGoal class."""
+
+from dataclasses import dataclass
+
+
+@dataclass(frozen=True, eq=True)
+class SearchGoal:
+ """Storage class for search goal attributes.
+
+ This is the part of controller inputs that can be repeated
+ with different values. MLRsearch saves time by searching
+ for conditional throughput for each goal at the same time,
+ compared to repeated calls with separate goals.
+
+ Most fields (called attributes) of this composite
+ are relevant to the definition of conditional throughput.
+ The rest does not, but can affect the overal search time.
+ """
+
+ loss_ratio: float = 0.0
+ """The goal loss ratio.
+ A trial can satisfy the goal only when its trial loss ratio is not higher
+ than this. See MeasurementResult.loss_ratio for details.
+ A trial that does not satisfy this goal is called a bad trial."""
+ exceed_ratio: float = 0.5
+ """What portion of the duration sum can consist of bad trial seconds
+ while still being classified as lower bound (assuming no short trials)."""
+ relative_width: float = 0.005
+ """Target is achieved when the relevant lower bound
+ is no more than this (in units of the tightest upper bound) far
+ from the relevant upper bound."""
+ initial_trial_duration: float = 1.0
+ """Shortest trial duration employed when searching for this goal."""
+ final_trial_duration: float = 1.0
+ """Longest trial duration employed when searching for this goal."""
+ duration_sum: float = 21.0
+ """Minimal sum of durations of relevant trials sufficient to declare a load
+ to be upper or lower bound for this goal."""
+ preceding_targets: int = 2
+ """Number of increasingly coarser search targets to insert,
+ hoping to speed up searching for the final target of this goal."""
+ expansion_coefficient: int = 2
+ """External search multiplies width (in logarithmic space) by this."""
+ fail_fast: bool = True
+ """If true and min load is not an upper bound, raise.
+ If false, search will return None instead of lower bound."""
+
+ def __post_init__(self) -> None:
+ """Convert fields to correct types and call validate."""
+ super().__setattr__("loss_ratio", float(self.loss_ratio))
+ super().__setattr__("exceed_ratio", float(self.exceed_ratio))
+ super().__setattr__("relative_width", float(self.relative_width))
+ super().__setattr__(
+ "final_trial_duration", float(self.final_trial_duration)
+ )
+ super().__setattr__(
+ "initial_trial_duration", float(self.initial_trial_duration)
+ )
+ super().__setattr__("duration_sum", float(self.duration_sum))
+ super().__setattr__("preceding_targets", int(self.preceding_targets))
+ super().__setattr__(
+ "expansion_coefficient", int(self.expansion_coefficient)
+ )
+ super().__setattr__("fail_fast", bool(self.fail_fast))
+ self.validate()
+
+ def validate(self) -> None:
+ """Make sure the initialized values conform to requirements.
+
+ :raises ValueError: If a field value is outside allowed bounds.
+ """
+ if self.loss_ratio < 0.0:
+ raise ValueError(f"Loss ratio cannot be negative: {self}")
+ if self.loss_ratio >= 1.0:
+ raise ValueError(f"Loss ratio must be lower than 1: {self}")
+ if self.exceed_ratio < 0.0:
+ raise ValueError(f"Exceed ratio cannot be negative: {self}")
+ if self.exceed_ratio >= 1.0:
+ raise ValueError(f"Exceed ratio must be lower than 1: {self}")
+ if self.relative_width <= 0.0:
+ raise ValueError(f"Relative width must be positive: {self}")
+ if self.relative_width >= 1.0:
+ raise ValueError(f"Relative width must be less than 1: {self}")
+ if self.initial_trial_duration <= 0.0:
+ raise ValueError(f"Initial trial duration must be positive: {self}")
+ if self.final_trial_duration < self.initial_trial_duration:
+ raise ValueError(
+ f"Single duration max must be at least initial: {self}"
+ )
+ if self.duration_sum < self.final_trial_duration:
+ raise ValueError(
+ "Min duration sum cannot be smaller"
+ f" than final trial duration: {self}"
+ )
+ if self.expansion_coefficient <= 1:
+ raise ValueError(f"Expansion coefficient is too small: {self}")
+ too_small = False
+ if self.preceding_targets < 0:
+ too_small = True
+ elif self.preceding_targets < 1:
+ if self.initial_trial_duration < self.duration_sum:
+ too_small = True
+ if too_small:
+ raise ValueError(
+ f"Number of preceding targets is too small: {self}"
+ )
diff --git a/resources/libraries/python/MLRsearch/search_goal_tuple.py b/resources/libraries/python/MLRsearch/search_goal_tuple.py
new file mode 100644
index 0000000000..d40ba99b4b
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/search_goal_tuple.py
@@ -0,0 +1,60 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining SearchGoalTuple class."""
+
+from collections.abc import Iterator
+from dataclasses import dataclass
+from typing import Tuple
+
+from .search_goal import SearchGoal
+
+
+@dataclass(frozen=True)
+class SearchGoalTuple:
+ """Container class holding multiple search goals.
+
+ Just a convenience for checking their number and types.
+ """
+
+ goals: Tuple[SearchGoal, ...]
+ """Goals extracted from user-provided Iterable of search goals."""
+
+ def __post_init__(self) -> None:
+ """Check type and number of search goals.
+
+ :raises ValueError: If there are no goals.
+ :raises TypeError: If a goal is not a SearchGoal.
+ """
+ super().__setattr__("goals", tuple(self.goals))
+ if not self.goals:
+ raise ValueError(f"Cannot be empty: {self.goals}")
+ for goal in self.goals:
+ if not isinstance(goal, SearchGoal):
+ raise TypeError(f"Must be a SearchGoal instance: {goal}")
+ copied = list(self.goals)
+ deduplicated = set(self.goals)
+ for goal in copied:
+ if goal not in deduplicated:
+ raise ValueError(f"Duplicate goal: {goal}")
+ deduplicated.remove(goal)
+ if deduplicated:
+ raise ValueError(f"Error processing goals: {deduplicated}")
+
+ def __iter__(self) -> Iterator[SearchGoal]:
+ """Enable itertion over goals.
+
+ :returns: Iterator iteratinc over contained goals.
+ :rtype: Iterator[SearchGoal]
+ """
+ return iter(self.goals)
diff --git a/resources/libraries/python/MLRsearch/selector.py b/resources/libraries/python/MLRsearch/selector.py
new file mode 100644
index 0000000000..4a6d2e2574
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/selector.py
@@ -0,0 +1,183 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining Selector class."""
+
+
+from dataclasses import dataclass, field
+from typing import Callable, List, Optional, Tuple
+
+from .dataclass import secondary_field
+from .discrete_load import DiscreteLoad
+from .discrete_width import DiscreteWidth
+from .expander import TargetedExpander
+from .global_width import GlobalWidth
+from .limit_handler import LimitHandler
+from .measurement_database import MeasurementDatabase
+from .relevant_bounds import RelevantBounds
+from .target_spec import TargetSpec
+from .strategy import StrategyBase, STRATEGY_CLASSES
+
+
+@dataclass
+class Selector:
+ """A selector is an abstraction that focuses on only one of search goals.
+
+ While lower-level logic is hidden in strategy classes,
+ the code in this class is responsible for initializing strategies
+ and shifting targets towards the final target.
+
+ While the public methods have the same names and meaning as the ones
+ in strategy classes, their signature is different.
+ Selector adds the current target trial duration to the output of nominate(),
+ and adds the current bounds to the input of won().
+
+ The nominate method does not return a complete Candidate instance,
+ as we need to avoid circular dependencies
+ (candidate will refer to selector).
+ """
+
+ final_target: TargetSpec
+ """The target this selector is trying to ultimately achieve."""
+ global_width: GlobalWidth
+ """Reference to the global width tracking instance."""
+ initial_lower_load: DiscreteLoad
+ """Smaller of the two loads distinguished at instance creation.
+ During operation, this field is reused to store preceding target bound."""
+ initial_upper_load: DiscreteLoad
+ """Larger of the two loads distinguished at instance creation.
+ During operation, this field is reused to store preceding target bound."""
+ database: MeasurementDatabase = field(repr=False)
+ """Reference to the common database used by all selectors."""
+ handler: LimitHandler = field(repr=False)
+ """Reference to the class used to avoid too narrow intervals."""
+ debug: Callable[[str], None] = field(repr=False)
+ """Injectable function for debug logging."""
+ # Primary above, derived below.
+ current_target: TargetSpec = secondary_field()
+ """The target the selector is focusing on currently."""
+ target_stack: List[TargetSpec] = secondary_field()
+ """Stack of targets. When current target is achieved, next is popped."""
+ strategies: Tuple[StrategyBase] = secondary_field()
+ """Instances implementing particular selection strategies."""
+ current_strategy: Optional[StrategyBase] = secondary_field()
+ """Reference to strategy used for last nomination, needed for won()."""
+ # Cache.
+ bounds: RelevantBounds = secondary_field()
+ """New relevant bounds for this round of candidate selection."""
+
+ def __post_init__(self) -> None:
+ """Initialize derived values."""
+ self.target_stack = [self.final_target]
+ while preceding_target := self.target_stack[-1].preceding:
+ self.target_stack.append(preceding_target)
+ self.current_target = self.target_stack.pop()
+ self._recreate_strategies()
+
+ def _recreate_strategies(self) -> None:
+ """Recreate strategies after current target has changed.
+
+ Width expander is recreated as target width is now smaller.
+ For convenience, strategies get injectable debug
+ which prints also the current target.
+ """
+ expander = TargetedExpander(
+ target=self.current_target,
+ global_width=self.global_width,
+ initial_lower_load=self.initial_lower_load,
+ initial_upper_load=self.initial_upper_load,
+ handler=self.handler,
+ debug=self.debug,
+ )
+
+ def wrapped_debug(text: str) -> None:
+ """Call self debug with current target info prepended.
+
+ :param text: Message to log at debug level.
+ :type text: str
+ """
+ self.debug(f"Target {self.current_target}: {text}")
+
+ self.strategies = tuple(
+ cls(
+ target=self.current_target,
+ expander=expander,
+ initial_lower_load=self.initial_lower_load,
+ initial_upper_load=self.initial_upper_load,
+ handler=self.handler,
+ debug=wrapped_debug,
+ )
+ for cls in STRATEGY_CLASSES
+ )
+ self.current_strategy = None
+ self.debug(f"Created strategies for: {self.current_target}")
+
+ def _update_bounds(self) -> None:
+ """Before each iteration, call this to update bounds cache."""
+ self.bounds = self.database.get_relevant_bounds(self.current_target)
+
+ def nominate(
+ self,
+ ) -> Tuple[Optional[DiscreteLoad], float, Optional[DiscreteWidth]]:
+ """Find first strategy that wants to nominate, return trial inputs.
+
+ Returned load is None if no strategy wants to nominate.
+
+ Current target is shifted when (now preceding) target is reached.
+ As each strategy never becomes done before at least one
+ bound relevant to the current target becomes available,
+ it is never needed to revert to the preceding target after the shift.
+
+ As the initial trials had inputs relevant to all initial targets,
+ the only way for this not to nominate a load
+ is when the final target is reached (including hitting min or max load).
+ The case of hitting min load raises, so search fails early.
+
+ :returns: Nominated load, duration, and global width to set if winning.
+ :rtype: Tuple[Optional[DiscreteLoad], float, Optional[DiscreteWidth]]
+ :raises RuntimeError: If internal inconsistency is detected,
+ or if min load becomes an upper bound.
+ """
+ self._update_bounds()
+ self.current_strategy = None
+ while 1:
+ for strategy in self.strategies:
+ load, width = strategy.nominate(self.bounds)
+ if load:
+ self.current_strategy = strategy
+ return load, self.current_target.trial_duration, width
+ if not self.bounds.clo and not self.bounds.chi:
+ raise RuntimeError("Internal error: no clo nor chi.")
+ if not self.target_stack:
+ if not self.bounds.clo and self.current_target.fail_fast:
+ raise RuntimeError(f"No lower bound: {self.bounds.chi!r}")
+ self.debug(f"Goal {self.current_target} reached: {self.bounds}")
+ return None, self.current_target.trial_duration, None
+ # Everything is ready for next target in the chain.
+ self.current_target = self.target_stack.pop()
+ # Debug logs look better if we forget bounds are TrimmedStat.
+ # Abuse rounding (if not None) to convert to pure DiscreteLoad.
+ clo, chi = self.bounds.clo, self.bounds.chi
+ self.initial_lower_load = clo.rounded_down() if clo else clo
+ self.initial_upper_load = chi.rounded_down() if chi else chi
+ self._update_bounds()
+ self._recreate_strategies()
+
+ def won(self, load: DiscreteLoad) -> None:
+ """Update any private info when candidate became a winner.
+
+ :param load: The load previously nominated by current strategy.
+ :type load: DiscreteLoad
+ """
+ self._update_bounds()
+ self.current_strategy.won(bounds=self.bounds, load=load)
diff --git a/resources/libraries/python/MLRsearch/strategy/__init__.py b/resources/libraries/python/MLRsearch/strategy/__init__.py
new file mode 100644
index 0000000000..a1e0225a17
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/__init__.py
@@ -0,0 +1,35 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+__init__ file for Python package "strategy".
+"""
+
+from .base import StrategyBase
+from .bisect import BisectStrategy
+from .extend_hi import ExtendHiStrategy
+from .extend_lo import ExtendLoStrategy
+from .halve import HalveStrategy
+from .refine_hi import RefineHiStrategy
+from .refine_lo import RefineLoStrategy
+
+
+STRATEGY_CLASSES = (
+ HalveStrategy,
+ RefineLoStrategy,
+ RefineHiStrategy,
+ ExtendLoStrategy,
+ ExtendHiStrategy,
+ BisectStrategy,
+)
+"""Tuple of strategy constructors, in order of priority decreasing."""
diff --git a/resources/libraries/python/MLRsearch/strategy/base.py b/resources/libraries/python/MLRsearch/strategy/base.py
new file mode 100644
index 0000000000..0724f882bf
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/base.py
@@ -0,0 +1,132 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining StrategyBase class."""
+
+
+from abc import ABC, abstractmethod
+from dataclasses import dataclass, field
+from typing import Callable, Optional, Tuple
+
+from ..discrete_interval import DiscreteInterval
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..expander import TargetedExpander
+from ..limit_handler import LimitHandler
+from ..relevant_bounds import RelevantBounds
+from ..target_spec import TargetSpec
+
+
+@dataclass
+class StrategyBase(ABC):
+ """Abstract class encompassing data common to most strategies.
+
+ A strategy is one piece of logic a selector may use
+ when nominating a candidate according to its current target.
+
+ The two initial bound arguments may not be bounds at all.
+ For initial targets, the two values are usually mrr and mrr2.
+ For subsequent targets, the initial values are usually
+ the relevant bounds of the preceding target,
+ but one of them may be None if hitting min or max load.
+
+ The initial values are mainly used as stable alternatives
+ to relevant bounds of preceding target,
+ because those bounds may have been unpredictably altered
+ by nominations from unrelated search goals.
+ This greatly simplifies reasoning about strategies making progress.
+ """
+
+ target: TargetSpec
+ """The target this strategy is focusing on."""
+ expander: TargetedExpander
+ """Instance to track width expansion during search (if applicable)."""
+ initial_lower_load: Optional[DiscreteLoad]
+ """Smaller of the two loads distinguished at instance creation.
+ Can be None if upper bound is the min load."""
+ initial_upper_load: Optional[DiscreteLoad]
+ """Larger of the two loads distinguished at instance creation.
+ Can be None if lower bound is the max load."""
+ handler: LimitHandler = field(repr=False)
+ """Reference to the limit handler instance."""
+ debug: Callable[[str], None] = field(repr=False)
+ """Injectable function for debug logging."""
+
+ @abstractmethod
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate a load candidate if the conditions activate this strategy.
+
+ A complete candidate refers also to the nominating selector.
+ To prevent circular dependence (selector refers to nominating strategy),
+ this function returns only duration and width.
+
+ Width should only be non-None if global current width should be updated
+ when the candidate based on this becomes winner.
+ But currently all strategies return non-None width
+ if they return non-None load.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ return None, None
+
+ def won(self, bounds: RelevantBounds, load: DiscreteLoad) -> None:
+ """Notify the strategy its candidate became the winner.
+
+ Most strategies have no use for this information,
+ but some strategies may need to update their private information.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param load: The current load, so strategy does not need to remember.
+ :type bounds: RelevantBounds
+ :type load: DiscreteLoad
+ """
+ return
+
+ def not_worth(self, bounds: RelevantBounds, load: DiscreteLoad) -> bool:
+ """A check on bounds common for multiple strategies.
+
+ The load is worth measuring only if it can create or improve
+ either relevant bound.
+
+ Each strategy is designed to create a relevant bound for current target,
+ which is only needed if that (or better) bound does not exist yet.
+ Conversely, if a strategy does not nominate, it is because
+ the load it would nominate (if any) is found not worth by this method.
+
+ :param bounds: Current relevant bounds.
+ :param load: Load of a possible candidate.
+ :type bounds: RelevantBounds
+ :type load: DiscreteLoad
+ :returns: True if the load should NOT be nominated.
+ :rtype: bool
+ """
+ if bounds.clo and bounds.clo >= load:
+ return True
+ if bounds.chi and bounds.chi <= load:
+ return True
+ if bounds.clo and bounds.chi:
+ # We are not hitting min nor max load.
+ # Measuring at this load will create or improve clo or chi.
+ # The only reason not to nominate is if interval is narrow already.
+ wig = DiscreteInterval(
+ lower_bound=bounds.clo,
+ upper_bound=bounds.chi,
+ ).width_in_goals(self.target.discrete_width)
+ if wig <= 1.0:
+ return True
+ return False
diff --git a/resources/libraries/python/MLRsearch/strategy/bisect.py b/resources/libraries/python/MLRsearch/strategy/bisect.py
new file mode 100644
index 0000000000..894544695e
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/bisect.py
@@ -0,0 +1,193 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining BisectStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_interval import DiscreteInterval
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class BisectStrategy(StrategyBase):
+ """Strategy to use when both bounds relevant to curent target are present.
+
+ Primarily, this strategy is there to perform internal search.
+ As powers of two are fiendly to binary search,
+ this strategy relies on the splitting logic described in DiscreteInterval.
+
+ The main reason why this class is so long is that a mere existence
+ of a valid bound for the current target does not imply
+ that bound is a good approximation of the final conditional throughput.
+ The bound might become valid due to efforts of a strategy
+ focusing on an entirely different search goal.
+
+ On the other hand, initial bounds may be better approximations,
+ but they also may be bad approximations (for example
+ when SUT behavior strongly depends on trial duration).
+
+ Based on comparison of existing current bounds to intial bounds,
+ this strategy also mimics what would external search do
+ (if the one current bound was missing and other initial bound was current).
+ In case that load value is closer to appropriate inital bound
+ (compared to how far the simple bisect between current bounds is),
+ that load is nominated.
+
+ It turns out those "conditional" external search nominations
+ are quite different from unconditional ones,
+ at least when it comes to handling limits
+ and tracking when width expansion should be applied.
+ That is why that logic is here
+ and not in some generic external search class.
+ """
+
+ expand_on_clo: bool = False
+ """If extending up, width should be expanded when load becomes clo."""
+ expand_on_chi: bool = False
+ """If extending down, width should be expanded when load becomes chi."""
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate a load candidate between bounds or extending from them.
+
+ The external search logic is offloaded into private methods.
+ If they return a truthy load, that is returned from here as well.
+
+ Only if the actual bisect is selected,
+ the per-selector expander is limited to the (smaller) new width.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if not bounds.clo or bounds.clo >= self.handler.max_load:
+ return None, None
+ if not bounds.chi or bounds.chi <= self.handler.min_load:
+ return None, None
+ interval = DiscreteInterval(bounds.clo, bounds.chi)
+ if interval.width_in_goals(self.target.discrete_width) <= 1.0:
+ return None, None
+ bisect_load = interval.middle(self.target.discrete_width)
+ load, width = self._extend_lo(bounds, bisect_load)
+ if load:
+ self.expand_on_clo, self.expand_on_chi = False, True
+ self.debug(f"Preferring to extend down: {load}")
+ return load, width
+ load, width = self._extend_hi(bounds, bisect_load)
+ if load:
+ self.expand_on_clo, self.expand_on_chi = True, False
+ self.debug(f"Preferring to extend up: {load}")
+ return load, width
+ load = bisect_load
+ if self.not_worth(bounds=bounds, load=load):
+ return None, None
+ self.expand_on_clo, self.expand_on_chi = False, False
+ self.debug(f"Preferring to bisect: {load}")
+ width_lo = DiscreteInterval(bounds.clo, load).discrete_width
+ width_hi = DiscreteInterval(load, bounds.chi).discrete_width
+ width = min(width_lo, width_hi)
+ self.expander.limit(width)
+ return load, width
+
+ def _extend_lo(
+ self, bounds: RelevantBounds, bisect_load: DiscreteLoad
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Compute load as if extending down, return it if preferred.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param bisect_load: Load when bisection is preferred.
+ :type bounds: RelevantBounds
+ :type bisect_load: DiscreteLoad
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ :raises RuntimeError: If an internal inconsistency is detected.
+ """
+ # TODO: Simplify all the conditions or explain them better.
+ if not self.initial_upper_load:
+ return None, None
+ if bisect_load >= self.initial_upper_load:
+ return None, None
+ width = self.expander.get_width()
+ load = bounds.chi - width
+ load = self.handler.handle(
+ load=load,
+ width=self.target.discrete_width,
+ clo=bounds.clo,
+ chi=bounds.chi,
+ )
+ if not load:
+ return None, None
+ if load <= bisect_load:
+ return None, None
+ if load >= self.initial_upper_load:
+ return None, None
+ if self.not_worth(bounds=bounds, load=load):
+ raise RuntimeError(f"Load not worth: {load}")
+ return load, width
+
+ def _extend_hi(
+ self, bounds: RelevantBounds, bisect_load: DiscreteLoad
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Compute load as if extending up, return it if preferred.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param bisect_load: Load when bisection is preferred.
+ :type bounds: RelevantBounds
+ :type bisect_load: DiscreteLoad
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ :raises RuntimeError: If an internal inconsistency is detected.
+ """
+ # TODO: Simplify all the conditions or explain them better.
+ if not self.initial_lower_load:
+ return None, None
+ if bisect_load <= self.initial_lower_load:
+ return None, None
+ width = self.expander.get_width()
+ load = bounds.clo + width
+ load = self.handler.handle(
+ load=load,
+ width=self.target.discrete_width,
+ clo=bounds.clo,
+ chi=bounds.chi,
+ )
+ if not load:
+ return None, None
+ if load >= bisect_load:
+ return None, None
+ if load <= self.initial_lower_load:
+ return None, None
+ if self.not_worth(bounds=bounds, load=load):
+ raise RuntimeError(f"Load not worth: {load}")
+ return load, width
+
+ def won(self, bounds: RelevantBounds, load: DiscreteLoad) -> None:
+ """Expand width when appropriate.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param load: The current load, so strategy does not need to remember.
+ :type bounds: RelevantBounds
+ :type load: DiscreteLoad
+ """
+ if self.expand_on_clo and load == bounds.clo:
+ self.expander.expand()
+ elif self.expand_on_chi and load == bounds.chi:
+ self.expander.expand()
diff --git a/resources/libraries/python/MLRsearch/strategy/extend_hi.py b/resources/libraries/python/MLRsearch/strategy/extend_hi.py
new file mode 100644
index 0000000000..79c4ad7cf2
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/extend_hi.py
@@ -0,0 +1,76 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining ExtendHiStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class ExtendHiStrategy(StrategyBase):
+ """This strategy is applied when there is no relevant upper bound.
+
+ Typically this is needed after RefineHiStrategy turned initial upper bound
+ into a current relevant lower bound.
+ """
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate current relevant lower bound plus expander width.
+
+ This performs external search in upwards direction,
+ until a valid upper bound for the current target is found,
+ or until max load is hit.
+ Limit handling is used to avoid nominating too close
+ (or above) the max rate.
+
+ Width expansion is only applied if the candidate becomes a lower bound,
+ so that is detected in done method.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if bounds.chi or not bounds.clo or bounds.clo >= self.handler.max_load:
+ return None, None
+ width = self.expander.get_width()
+ load = self.handler.handle(
+ load=bounds.clo + width,
+ width=self.target.discrete_width,
+ clo=bounds.clo,
+ chi=bounds.chi,
+ )
+ if self.not_worth(bounds=bounds, load=load):
+ return None, None
+ self.debug(f"No chi, extending up: {load}")
+ return load, width
+
+ def won(self, bounds: RelevantBounds, load: DiscreteLoad) -> None:
+ """Expand width if the load became the new lower bound.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param load: The current load, so strategy does not need to remember.
+ :type bounds: RelevantBounds
+ :type load: DiscreteLoad
+ """
+ if load == bounds.clo:
+ self.expander.expand()
diff --git a/resources/libraries/python/MLRsearch/strategy/extend_lo.py b/resources/libraries/python/MLRsearch/strategy/extend_lo.py
new file mode 100644
index 0000000000..68d20b6a6a
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/extend_lo.py
@@ -0,0 +1,76 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining ExtendLoStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class ExtendLoStrategy(StrategyBase):
+ """This strategy is applied when there is no relevant lower bound.
+
+ Typically this is needed after RefineLoStrategy turned initial lower bound
+ into a current relevant upper bound.
+ """
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate current relevant upper bound minus expander width.
+
+ This performs external search in downwards direction,
+ until a valid lower bound for the current target is found,
+ or until min load is hit.
+ Limit handling is used to avoid nominating too close
+ (or below) the min rate.
+
+ Width expansion is only applied if the candidate becomes an upper bound,
+ so that is detected in done method.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if bounds.clo or not bounds.chi or bounds.chi <= self.handler.min_load:
+ return None, None
+ width = self.expander.get_width()
+ load = self.handler.handle(
+ load=bounds.chi - width,
+ width=self.target.discrete_width,
+ clo=bounds.clo,
+ chi=bounds.chi,
+ )
+ if self.not_worth(bounds=bounds, load=load):
+ return None, None
+ self.debug(f"No clo, extending down: {load}")
+ return load, width
+
+ def won(self, bounds: RelevantBounds, load: DiscreteLoad) -> None:
+ """Expand width if the load became new upper bound.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :param load: The current load, so strategy does not need to remember.
+ :type bounds: RelevantBounds
+ :type load: DiscreteLoad
+ """
+ if load == bounds.chi:
+ self.expander.expand()
diff --git a/resources/libraries/python/MLRsearch/strategy/halve.py b/resources/libraries/python/MLRsearch/strategy/halve.py
new file mode 100644
index 0000000000..3188a041c6
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/halve.py
@@ -0,0 +1,83 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining HalveStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_interval import DiscreteInterval
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class HalveStrategy(StrategyBase):
+ """First strategy to apply for a new current target.
+
+ Pick a load between initial lower bound and initial upper bound,
+ nominate it if it is (still) worth it.
+
+ In a sense, this can be viewed as an extension of preceding target's
+ bisect strategy. But as the current target may require a different
+ trial duration, it is better to do it for the new target.
+
+ Alternatively, this is a way to save one application
+ of subsequent refine strategy, thus avoiding reducing risk of triggering
+ an external search (slight time saver for highly unstable SUTs).
+ Either way, minor time save is achieved by preceding target
+ only needing to reach double of current target width.
+
+ If the distance between initial bounds is already at or below
+ current target width, the middle point is not nominated.
+ The reasoning is that in this case external search is likely
+ to get triggered by the subsequent refine strategies,
+ so attaining a relevant bound here is not as likely to help.
+ """
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate the middle between initial lower and upper bound.
+
+ The returned width is the target width, even if initial bounds
+ happened to be closer together.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if not self.initial_lower_load or not self.initial_upper_load:
+ return None, None
+ interval = DiscreteInterval(
+ lower_bound=self.initial_lower_load,
+ upper_bound=self.initial_upper_load,
+ )
+ wig = interval.width_in_goals(self.target.discrete_width)
+ if wig > 2.0:
+ # Can happen for initial target.
+ return None, None
+ if wig <= 1.0:
+ # Already was narrow enough, refinements shall be sufficient.
+ return None, None
+ load = interval.middle(self.target.discrete_width)
+ if self.not_worth(bounds, load):
+ return None, None
+ self.debug(f"Halving available: {load}")
+ # TODO: Report possibly smaller width?
+ self.expander.limit(self.target.discrete_width)
+ return load, self.target.discrete_width
diff --git a/resources/libraries/python/MLRsearch/strategy/refine_hi.py b/resources/libraries/python/MLRsearch/strategy/refine_hi.py
new file mode 100644
index 0000000000..caa8fc4a7d
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/refine_hi.py
@@ -0,0 +1,55 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining RefineHiStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class RefineHiStrategy(StrategyBase):
+ """If initial upper bound is still worth it, nominate it.
+
+ This usually happens when halving resulted in relevant lower bound,
+ or if there was no halving (and RefineLoStrategy confirmed initial
+ lower bound became a relevant lower bound for the new current target).
+
+ This either ensures a matching upper bound (target is achieved)
+ or moves the relevant lower bound higher (triggering external search).
+ """
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate the initial upper bound.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if not (load := self.initial_upper_load):
+ return None, None
+ if self.not_worth(bounds=bounds, load=load):
+ return None, None
+ self.debug(f"Upperbound refinement available: {load}")
+ # TODO: Limit to possibly smaller than target width?
+ self.expander.limit(self.target.discrete_width)
+ return load, self.target.discrete_width
diff --git a/resources/libraries/python/MLRsearch/strategy/refine_lo.py b/resources/libraries/python/MLRsearch/strategy/refine_lo.py
new file mode 100644
index 0000000000..7927798505
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/strategy/refine_lo.py
@@ -0,0 +1,53 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining RefineLoStrategy class."""
+
+
+from dataclasses import dataclass
+from typing import Optional, Tuple
+
+from ..discrete_load import DiscreteLoad
+from ..discrete_width import DiscreteWidth
+from ..relevant_bounds import RelevantBounds
+from .base import StrategyBase
+
+
+@dataclass
+class RefineLoStrategy(StrategyBase):
+ """If initial lower bound is still worth it, nominate it.
+
+ This usually happens when halving resulted in relevant upper bound,
+ or if there was no halving.
+ This ensures a relevant bound (upper or lower) for the current target
+ exists.
+ """
+
+ def nominate(
+ self, bounds: RelevantBounds
+ ) -> Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]:
+ """Nominate the initial lower bound.
+
+ :param bounds: Freshly updated bounds relevant for current target.
+ :type bounds: RelevantBounds
+ :returns: Two nones or candidate intended load and duration.
+ :rtype: Tuple[Optional[DiscreteLoad], Optional[DiscreteWidth]]
+ """
+ if not (load := self.initial_lower_load):
+ return None, None
+ if self.not_worth(bounds=bounds, load=load):
+ return None, None
+ self.debug(f"Lowerbound refinement available: {load}")
+ # TODO: Limit to possibly smaller than target width?
+ self.expander.limit(self.target.discrete_width)
+ return load, self.target.discrete_width
diff --git a/resources/libraries/python/MLRsearch/target_scaling.py b/resources/libraries/python/MLRsearch/target_scaling.py
new file mode 100644
index 0000000000..25114c311c
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/target_scaling.py
@@ -0,0 +1,103 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining TargetScaling class."""
+
+from dataclasses import dataclass
+from typing import Dict, Tuple
+
+from .dataclass import secondary_field
+from .discrete_width import DiscreteWidth
+from .load_rounding import LoadRounding
+from .search_goal import SearchGoal
+from .search_goal_tuple import SearchGoalTuple
+from .target_spec import TargetSpec
+
+
+@dataclass
+class TargetScaling:
+ """Encapsulate targets derived from goals.
+
+ No default values for primaries, contructor call has to specify everything.
+ """
+
+ goals: SearchGoalTuple
+ """Set of goals to generate targets for."""
+ rounding: LoadRounding
+ """Rounding instance to use (targets have discrete width)."""
+ # Derived quantities.
+ targets: Tuple[TargetSpec] = secondary_field()
+ """The generated targets, linked into chains."""
+ goal_to_final_target: Dict[SearchGoal, TargetSpec] = secondary_field()
+ """Mapping from a goal to its corresponding final target."""
+
+ def __post_init__(self) -> None:
+ """For each goal create final, and non-final targets and link them."""
+ linked_targets = []
+ self.goal_to_final_target = {}
+ for goal in self.goals:
+ standalone_targets = []
+ # Final target.
+ width = DiscreteWidth(
+ rounding=self.rounding,
+ float_width=goal.relative_width,
+ ).rounded_down()
+ duration_sum = goal.duration_sum
+ target = TargetSpec(
+ loss_ratio=goal.loss_ratio,
+ exceed_ratio=goal.exceed_ratio,
+ discrete_width=width,
+ trial_duration=goal.final_trial_duration,
+ duration_sum=duration_sum,
+ expansion_coefficient=goal.expansion_coefficient,
+ fail_fast=goal.fail_fast,
+ preceding=None,
+ )
+ standalone_targets.append(target)
+ # Non-final targets.
+ preceding_targets = goal.preceding_targets
+ multiplier = (
+ pow(
+ goal.initial_trial_duration / duration_sum,
+ 1.0 / preceding_targets,
+ )
+ if preceding_targets
+ else 1.0
+ )
+ for count in range(preceding_targets):
+ preceding_sum = duration_sum * pow(multiplier, count + 1)
+ if count + 1 >= preceding_targets:
+ preceding_sum = goal.initial_trial_duration
+ trial_duration = min(goal.final_trial_duration, preceding_sum)
+ width *= 2
+ target = TargetSpec(
+ loss_ratio=goal.loss_ratio,
+ exceed_ratio=goal.exceed_ratio,
+ discrete_width=width,
+ trial_duration=trial_duration,
+ duration_sum=preceding_sum,
+ expansion_coefficient=goal.expansion_coefficient,
+ fail_fast=False,
+ preceding=None,
+ )
+ standalone_targets.append(target)
+ # Link preceding targets.
+ preceding_target = None
+ for target in reversed(standalone_targets):
+ linked_target = target.with_preceding(preceding_target)
+ linked_targets.append(linked_target)
+ preceding_target = linked_target
+ # Associate final target to the goal.
+ self.goal_to_final_target[goal] = linked_targets[-1]
+ # Store all targets as a tuple.
+ self.targets = tuple(linked_targets)
diff --git a/resources/libraries/python/MLRsearch/target_spec.py b/resources/libraries/python/MLRsearch/target_spec.py
new file mode 100644
index 0000000000..5279ba00a1
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/target_spec.py
@@ -0,0 +1,95 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining TargetSpec class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass, field
+from typing import Optional
+
+from .discrete_width import DiscreteWidth
+
+
+@dataclass(frozen=True, eq=True)
+class TargetSpec:
+ """Composite object holding attributes specifying one search target.
+
+ Abstractly, this has several similar meanings.
+ With discrete_width attribute this specifies when a selector is Done.
+ With expansion_coefficient attribute it tells selector how quickly
+ should it expand interval in external search.
+ With "preceding" attribute it helps selector, so it does not need to point
+ to preceding target separately from its current target.
+ Without those three attributes this object is still sufficient
+ for LoadStats to classify loads as lower bound, upper bound, or unknown.
+ """
+
+ loss_ratio: float
+ """Target loss ratio. Equal and directly analogous to goal loss ratio,
+ but applicable also for non-final targets."""
+ exceed_ratio: float
+ """Target exceed ratio. Equal and directly analogous to goal exceed ratio,
+ but applicable also for non-final targets."""
+ discrete_width: DiscreteWidth
+ """Target relative width. Analogous to goal relative width,
+ but coarser for non-final targets."""
+ trial_duration: float
+ """Duration to use for trials for this target. Shorter trials have lesser
+ (and more complicated) impact when determining upper and lower bounds."""
+ duration_sum: float
+ """Sum of trial durations sufficient to classify a load
+ as an upper or lower bound.
+ For non-final targets, this is shorter than goal duration_sum."""
+ expansion_coefficient: int = field(repr=False)
+ """Equal and directly analogous to goal expansion coefficient,
+ but applicable also for non-final targets."""
+ fail_fast: bool = field(repr=False)
+ """Copied from goal. If true and min load is not an upper bound, raise."""
+ preceding: Optional[TargetSpec] = field(repr=False)
+ """Reference to next coarser target (if any) belonging to the same goal."""
+
+ # No conversions or validations, as this is an internal structure.
+
+ def __str__(self) -> str:
+ """Convert into a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return (
+ f"lr={self.loss_ratio},er={self.exceed_ratio}"
+ f",ds={self.duration_sum}"
+ )
+
+ def with_preceding(self, preceding: Optional[TargetSpec]) -> TargetSpec:
+ """Create an equivalent instance but with different preceding field.
+
+ This is useful in initialization. Create semi-initialized targets
+ starting from final one, than add references in reversed order.
+
+ :param preceding: New value for preceding field, cannot be None.
+ :type preceding: Optional[TargetSpec]
+ :returns: Instance with the new value applied.
+ :rtype: TargetSpec
+ """
+ return TargetSpec(
+ loss_ratio=self.loss_ratio,
+ exceed_ratio=self.exceed_ratio,
+ discrete_width=self.discrete_width,
+ trial_duration=self.trial_duration,
+ duration_sum=self.duration_sum,
+ expansion_coefficient=self.expansion_coefficient,
+ fail_fast=self.fail_fast,
+ preceding=preceding,
+ )
diff --git a/resources/libraries/python/MLRsearch/target_stat.py b/resources/libraries/python/MLRsearch/target_stat.py
new file mode 100644
index 0000000000..18e1ff4161
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/target_stat.py
@@ -0,0 +1,153 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining LoadStat class."""
+
+from dataclasses import dataclass, field
+from typing import Dict, Tuple
+
+from .target_spec import TargetSpec
+from .discrete_result import DiscreteResult
+
+
+@dataclass
+class TargetStat:
+ """Class for aggregating trial results for a single load and target.
+
+ Reference to the target is included for convenience.
+
+ The main usage is for load classification, done in estimates method.
+ If both estimates agree, the load is classified as either a lower bound
+ or an upper bound. For additional logic for dealing with loss inversion
+ see MeasurementDatabase.
+
+ Also, data needed for conditional throughput is gathered here,
+ exposed only as a pessimistic loss ratio
+ (as the load value is not stored here).
+ """
+
+ target: TargetSpec = field(repr=False)
+ """The target for which this instance is aggregating results."""
+ good_long: float = 0.0
+ """Sum of durations of long enough trials satisfying target loss ratio."""
+ bad_long: float = 0.0
+ """Sum of durations of long trials not satisfying target loss ratio."""
+ good_short: float = 0.0
+ """Sum of durations of shorter trials satisfying target loss ratio."""
+ bad_short: float = 0.0
+ """Sum of durations of shorter trials not satisfying target loss ratio."""
+ long_losses: Dict[float, float] = field(repr=False, default_factory=dict)
+ """If a loss ratio value occured in a long trial, map it to duration sum."""
+
+ def __str__(self) -> str:
+ """Convert into a short human-readable string.
+
+ :returns: The short string.
+ :rtype: str
+ """
+ return (
+ f"gl={self.good_long},bl={self.bad_long}"
+ f",gs={self.good_short},bs={self.bad_short}"
+ )
+
+ def add(self, result: DiscreteResult) -> None:
+ """Take into account one more trial result.
+
+ Use intended duration for deciding between long and short trials,
+ but use offered duation (with overheads) to increase the duration sums.
+
+ :param result: The trial result to add to the stats.
+ :type result: DiscreteResult
+ """
+ dwo = result.duration_with_overheads
+ rlr = result.loss_ratio
+ if result.intended_duration >= self.target.trial_duration:
+ if rlr not in self.long_losses:
+ self.long_losses[rlr] = 0.0
+ self.long_losses = dict(sorted(self.long_losses.items()))
+ self.long_losses[rlr] += dwo
+ if rlr > self.target.loss_ratio:
+ self.bad_long += dwo
+ else:
+ self.good_long += dwo
+ else:
+ if rlr > self.target.loss_ratio:
+ self.bad_short += dwo
+ else:
+ self.good_short += dwo
+
+ def estimates(self) -> Tuple[bool, bool]:
+ """Return whether this load can become a lower bound.
+
+ This returns two estimates, hence the weird nonverb name of this method.
+ One estimate assumes all following results will satisfy the loss ratio,
+ the other assumes all results will not satisfy the loss ratio.
+ The sum of durations of the assumed results
+ is the minimum to reach target duration sum, or zero if already reached.
+
+ If both estimates are the same, it means the load is a definite bound.
+ This may happen even when the sum of durations of already
+ measured trials is less than the target, when the missing measurements
+ cannot change the classification.
+
+ :returns: Tuple of two estimates whether the load can be a lower bound.
+ (True, False) means more trial results are needed.
+ :rtype: Tuple[bool, bool]
+ """
+ coeff = self.target.exceed_ratio
+ decrease = self.good_short * coeff / (1.0 - coeff)
+ short_excess = self.bad_short - decrease
+ effective_excess = self.bad_long + max(0.0, short_excess)
+ effective_dursum = max(
+ self.good_long + effective_excess,
+ self.target.duration_sum,
+ )
+ limit_dursum = effective_dursum * self.target.exceed_ratio
+ optimistic = effective_excess <= limit_dursum
+ pessimistic = (effective_dursum - self.good_long) <= limit_dursum
+ return optimistic, pessimistic
+
+ @property
+ def pessimistic_loss_ratio(self) -> float:
+ """Return the loss ratio for conditional throughput computation.
+
+ It adds missing dursum as full-loss trials to long_losses
+ and returns a quantile corresponding to exceed ratio.
+ In case of tie (as in median for even number of samples),
+ this returns the lower value (as being equal to goal exceed ratio
+ is allowed).
+
+ For loads classified as a lower bound, the return value
+ ends up being no larger than the target loss ratio.
+ This is because the excess short bad trials would only come
+ after the quantile in question (as would full-loss missing trials).
+ For other loads, anything can happen, but conditional throughput
+ should not be computed for those anyway.
+ Those two facts allow the logic here be simpler than in estimates().
+
+ :returns: Effective loss ratio based on long trial results.
+ :rtype: float
+ """
+ all_long = max(self.target.duration_sum, self.good_long + self.bad_long)
+ remaining = all_long * (1.0 - self.target.exceed_ratio)
+ ret = None
+ for ratio, dursum in self.long_losses.items():
+ if ret is None or remaining > 0.0:
+ ret = ratio
+ remaining -= dursum
+ else:
+ break
+ else:
+ if remaining > 0.0:
+ ret = 1.0
+ return ret
diff --git a/resources/libraries/python/MLRsearch/trial_measurement/__init__.py b/resources/libraries/python/MLRsearch/trial_measurement/__init__.py
new file mode 100644
index 0000000000..034ae41819
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/trial_measurement/__init__.py
@@ -0,0 +1,19 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+__init__ file for Python package "trial_measurement".
+"""
+
+from .abstract_measurer import AbstractMeasurer
+from .measurement_result import MeasurementResult
diff --git a/resources/libraries/python/MLRsearch/trial_measurement/abstract_measurer.py b/resources/libraries/python/MLRsearch/trial_measurement/abstract_measurer.py
new file mode 100644
index 0000000000..6fab79c8dc
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/trial_measurement/abstract_measurer.py
@@ -0,0 +1,55 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining AbstractMeasurer class."""
+
+from abc import ABCMeta, abstractmethod
+
+from .measurement_result import MeasurementResult as Result
+
+
+class AbstractMeasurer(metaclass=ABCMeta):
+ """Abstract class defining common API for trial measurement providers.
+
+ The original use of this class was in the realm of
+ RFC 2544 Throughput search, which explains the teminology
+ related to networks, frames, packets, offered load, forwarding rate
+ and similar.
+
+ But the same logic can be used in higher level networking scenarios
+ (e.g. https requests) or even outside networking (database transactions).
+
+ The current code uses language from packet forwarding,
+ docstring sometimes mention transactions as an alternative view.
+ """
+
+ @abstractmethod
+ def measure(self, intended_duration: float, intended_load: float) -> Result:
+ """Perform trial measurement and return the result.
+
+ It is assumed the measurer got already configured with anything else
+ needed to perform the measurement (e.g. traffic profile
+ or transaction limit).
+
+ Duration and load are the only values expected to vary
+ during the search.
+
+ :param intended_duration: Intended trial duration [s].
+ :param intended_load: Intended rate of transactions (packets) [tps].
+ It is a per-port rate, e.g. uni-directional for SUTs
+ with two ports.
+ :type intended_duration: float
+ :type intended_load: float
+ :returns: Structure detailing the result of the measurement.
+ :rtype: measurement_result.MeasurementResult
+ """
diff --git a/resources/libraries/python/MLRsearch/trial_measurement/measurement_result.py b/resources/libraries/python/MLRsearch/trial_measurement/measurement_result.py
new file mode 100644
index 0000000000..9dc1ccf5f1
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/trial_measurement/measurement_result.py
@@ -0,0 +1,161 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining MeasurementResult class."""
+
+from dataclasses import dataclass
+
+
+@dataclass
+class MeasurementResult:
+ """Structure defining the result of a single trial measurement.
+
+ There are few primary (required) quantities. Various secondary (derived)
+ quantities are calculated and can be queried.
+
+ The constructor allows broader argument types,
+ the post init function converts to the stricter types.
+
+ Integer quantities (counts) are preferred, as float values
+ can suffer from rounding errors, and sometimes they are measured
+ at unknown (possibly very limited) precision and accuracy.
+
+ There are relations between the counts (e.g. offered count
+ should be equal to a sum of forwarding count and loss count).
+ This implementation does not perform consistency checks, but uses them
+ for computing quantities the caller left unspecified.
+
+ In some cases, the units of intended load are different from units
+ of loss count (e.g. load in transactions but loss in packets).
+ Quantities with relative_ prefix can be used to get load candidates
+ from forwarding results.
+
+ Sometimes, the measurement provider is unable to reach the intended load,
+ and it can react by spending longer than intended duration
+ to reach its intended count. To signal irregular situations like this,
+ several optional fields can be given, and various secondary quantities
+ are populated, so the measurement consumer can query the quantity
+ it wants to rely on in these irregular situations.
+
+ The current implementation intentionally limits the secondary quantities
+ to the few that proved useful in practice.
+ """
+
+ # Required primary quantities.
+ intended_duration: float
+ """Intended trial measurement duration [s]."""
+ intended_load: float
+ """Intended load [tps]. If bidirectional (or multi-port) traffic is used,
+ most users will put unidirectional (single-port) value here,
+ as bandwidth and pps limits are usually per-port."""
+ # Two of the next three primary quantities are required.
+ offered_count: int = None
+ """Number of packets actually transmitted (transactions attempted).
+ This should be the aggregate (bidirectional, multi-port) value,
+ so that asymmetric trafic profiles are supported."""
+ loss_count: int = None
+ """Number of packets transmitted but not received (transactions failed)."""
+ forwarding_count: int = None
+ """Number of packets successfully forwarded (transactions succeeded)."""
+ # Optional primary quantities.
+ offered_duration: float = None
+ """Estimate of the time [s] the trial was actually transmitting traffic."""
+ duration_with_overheads: float = None
+ """Estimate of the time [s] it took to get the trial result
+ since the measurement started."""
+ intended_count: int = None
+ """Expected number of packets to transmit. If not known,
+ the value of offered_count is used."""
+
+ def __post_init__(self) -> None:
+ """Convert types, compute missing values.
+
+ Current caveats:
+ A failing assumption looks like a conversion error.
+ Negative counts are allowed, which can lead to errors later.
+ """
+ self.intended_duration = float(self.intended_duration)
+ if self.offered_duration is None:
+ self.offered_duration = self.intended_duration
+ else:
+ self.offered_duration = float(self.offered_duration)
+ if self.duration_with_overheads is None:
+ self.duration_with_overheads = self.offered_duration
+ else:
+ self.duration_with_overheads = float(self.duration_with_overheads)
+ self.intended_load = float(self.intended_load)
+ if self.forwarding_count is None:
+ self.forwarding_count = int(self.offered_count) - int(
+ self.loss_count
+ )
+ else:
+ self.forwarding_count = int(self.forwarding_count)
+ if self.offered_count is None:
+ self.offered_count = self.forwarding_count + int(self.loss_count)
+ else:
+ self.offered_count = int(self.offered_count)
+ if self.loss_count is None:
+ self.loss_count = self.offered_count - self.forwarding_count
+ else:
+ self.loss_count = int(self.loss_count)
+ if self.intended_count is None:
+ self.intended_count = self.offered_count
+ else:
+ self.intended_count = int(self.intended_count)
+ # TODO: Handle (somehow) situations where offered > intended?
+
+ @property
+ def unsent_count(self) -> int:
+ """How many packets were not transmitted (transactions not started).
+
+ :return: Intended count minus offered count.
+ :rtype: int
+ """
+ return self.intended_count - self.offered_count
+
+ @property
+ def loss_ratio(self) -> float:
+ """Bad count divided by overall count, zero if the latter is zero.
+
+ The bad count includes not only loss count, but also unsent count.
+ If unsent count is negative, its absolute value is used.
+ The overall count is intended count or offered count,
+ whichever is bigger.
+
+ Together, the resulting formula tends to increase loss ratio
+ (but not above 100%) in irregular situations,
+ thus guiding search algorithms towards lower loads
+ where there should be less irregularities.
+ The zero default is there to prevent search algorithms from
+ getting stuck on a too low intended load.
+
+ :returns: Bad count divided by overall count.
+ :rtype: float
+ """
+ overall = max(self.offered_count, self.intended_count)
+ bad = abs(self.loss_count) + abs(self.unsent_count)
+ return bad / overall if overall else 0.0
+
+ @property
+ def relative_forwarding_rate(self) -> float:
+ """Forwarding rate in load units as if duration and load was intended.
+
+ The result is based purely on intended load and loss ratio.
+ While the resulting value may be far from what really happened,
+ it has nice behavior with respect to common assumptions
+ of search algorithms.
+
+ :returns: Forwarding rate in load units estimated from loss ratio.
+ :rtype: float
+ """
+ return self.intended_load * (1.0 - self.loss_ratio)
diff --git a/resources/libraries/python/MLRsearch/trimmed_stat.py b/resources/libraries/python/MLRsearch/trimmed_stat.py
new file mode 100644
index 0000000000..74918d78b0
--- /dev/null
+++ b/resources/libraries/python/MLRsearch/trimmed_stat.py
@@ -0,0 +1,52 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module defining TrimmedStat class."""
+
+from __future__ import annotations
+
+from dataclasses import dataclass
+
+from .load_stats import LoadStats
+from .target_spec import TargetSpec
+
+
+@dataclass
+class TrimmedStat(LoadStats):
+ """Load stats trimmed to a single target.
+
+ Useful mainly for reporting the overall results.
+ """
+
+ def __post_init__(self) -> None:
+ """Initialize load value and check there is one target to track."""
+ super().__post_init__()
+ if len(self.target_to_stat) != 1:
+ raise ValueError(f"No single target: {self.target_to_stat!r}")
+
+ @staticmethod
+ def for_target(stats: LoadStats, target: TargetSpec) -> TrimmedStat:
+ """Return new instance with only one target in the mapping.
+
+ :param stats: The load stats instance to trim.
+ :param target: The one target which should remain in the mapping.
+ :type stats: LoadStats
+ :type target: TargetSpec
+ :return: Newly created instance.
+ :rtype: TrimmedStat
+ """
+ return TrimmedStat(
+ rounding=stats.rounding,
+ int_load=stats.int_load,
+ target_to_stat={target: stats.target_to_stat[target]},
+ )
diff --git a/resources/libraries/python/Memif.py b/resources/libraries/python/Memif.py
index d38f5000a7..32096d0ca5 100644
--- a/resources/libraries/python/Memif.py
+++ b/resources/libraries/python/Memif.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -74,7 +74,7 @@ class Memif:
includes only retval.
:rtype: dict
"""
- cmd = u"memif_socket_filename_add_del"
+ cmd = u"memif_socket_filename_add_del_v2"
err_msg = f"Failed to create memif socket on host {node[u'host']}"
args = dict(
is_add=is_add,
@@ -85,7 +85,7 @@ class Memif:
return papi_exec.add(cmd, **args).get_reply(err_msg)
@staticmethod
- def _memif_create(node, mid, sid, rxq=1, txq=1, role=1):
+ def _memif_create(node, mid, sid, rxq=1, txq=1, role=1, use_dma=False):
"""Create Memif interface on the given node, return its sw_if_index.
:param node: Given node to create Memif interface on.
@@ -94,16 +94,18 @@ class Memif:
:param rxq: Number of RX queues; 0 means do not set.
:param txq: Number of TX queues; 0 means do not set.
:param role: Memif interface role [master=0|slave=1]. Default is slave.
+ :param use_dma: Use DMA acceleration. Requires hardware support.
:type node: dict
:type mid: str
:type sid: str
:type rxq: int
:type txq: int
:type role: int
+ :type use_dma: bool
:returns: sw_if_index
:rtype: int
"""
- cmd = u"memif_create"
+ cmd = u"memif_create_v2"
err_msg = f"Failed to create memif interface on host {node[u'host']}"
args = dict(
role=role,
@@ -111,7 +113,8 @@ class Memif:
tx_queues=int(txq),
socket_id=int(sid),
id=int(mid),
- secret=u""
+ secret=u"",
+ use_dma=use_dma,
)
with PapiSocketExecutor(node) as papi_exec:
@@ -119,7 +122,8 @@ class Memif:
@staticmethod
def create_memif_interface(
- node, filename, mid, sid, rxq=1, txq=1, role=u"SLAVE"):
+ node, filename, mid, sid, rxq=1, txq=1, role=u"SLAVE", use_dma=False
+ ):
"""Create Memif interface on the given node.
:param node: Given node to create Memif interface on.
@@ -129,6 +133,7 @@ class Memif:
:param rxq: Number of RX queues; 0 means do not set.
:param txq: Number of TX queues; 0 means do not set.
:param role: Memif interface role [master=0|slave=1]. Default is master.
+ :param use_dma: Use DMA acceleration. Requires hardware support.
:type node: dict
:type filename: str
:type mid: str
@@ -136,6 +141,7 @@ class Memif:
:type rxq: int
:type txq: int
:type role: str
+ :type use_dma: bool
:returns: SW interface index.
:rtype: int
:raises ValueError: If command 'create memif' fails.
@@ -147,7 +153,7 @@ class Memif:
# Create memif
sw_if_index = Memif._memif_create(
- node, mid, sid, rxq=rxq, txq=txq, role=role
+ node, mid, sid, rxq=rxq, txq=txq, role=role, use_dma=use_dma
)
# Update Topology
diff --git a/resources/libraries/python/NATUtil.py b/resources/libraries/python/NATUtil.py
index e771637b37..e5f530ab46 100644
--- a/resources/libraries/python/NATUtil.py
+++ b/resources/libraries/python/NATUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -62,23 +62,17 @@ class NATUtil:
pass
@staticmethod
- def enable_nat44_plugin(
- node, inside_vrf=0, outside_vrf=0, users=0, user_memory=0,
- sessions=0, session_memory=0, user_sessions=0, mode=u""):
+ def enable_nat44_ed_plugin(
+ node, inside_vrf=0, outside_vrf=0, sessions=0, session_memory=0,
+ mode=u""):
"""Enable NAT44 plugin.
:param node: DUT node.
:param inside_vrf: Inside VRF ID.
:param outside_vrf: Outside VRF ID.
- :param users: Maximum number of users. Used only in endpoint-independent
- mode.
- :param user_memory: User memory size - overwrite auto calculated hash
- allocation parameter if non-zero.
:param sessions: Maximum number of sessions.
:param session_memory: Session memory size - overwrite auto calculated
hash allocation parameter if non-zero.
- :param user_sessions: Maximum number of sessions per user. Used only in
- endpoint-independent mode.
:param mode: NAT44 mode. Valid values:
- endpoint-independent
- endpoint-dependent
@@ -88,24 +82,18 @@ class NATUtil:
:type node: dict
:type inside_vrf: str or int
:type outside_vrf: str or int
- :type users: str or int
- :type user_memory: str or int
:type sessions: str or int
:type session_memory: str or int
- :type user_sessions: str or int
:type mode: str
"""
- cmd = u"nat44_plugin_enable_disable"
+ cmd = u"nat44_ed_plugin_enable_disable"
err_msg = f"Failed to enable NAT44 plugin on the host {node[u'host']}!"
args_in = dict(
enable=True,
inside_vrf=int(inside_vrf),
outside_vrf=int(outside_vrf),
- users=int(users),
- user_memory=int(user_memory),
sessions=int(sessions),
session_memory=int(session_memory),
- user_sessions=int(user_sessions),
flags=getattr(
Nat44ConfigFlags,
f"NAT44_IS_{mode.replace(u'-', u'_').upper()}"
@@ -194,10 +182,9 @@ class NATUtil:
"""Delete and re-add the NAT range setting."""
with PapiSocketExecutor(node) as papi_exec:
args_in[u"is_add"] = False
- papi_exec.add(cmd, **args_in)
+ papi_exec.add(cmd, **args_in).get_reply(err_msg)
args_in[u"is_add"] = True
- papi_exec.add(cmd, **args_in)
- papi_exec.get_replies(err_msg)
+ papi_exec.add(cmd, **args_in).get_reply(err_msg)
return resetter
@@ -289,27 +276,70 @@ class NATUtil:
@staticmethod
def get_nat44_sessions_number(node, proto):
- """Get number of established NAT44 sessions from actual NAT44 mapping
- data.
+ """Get number of expected NAT44 sessions from NAT44 mapping data.
+
+ This keyword uses output from a CLI command,
+ so it can start failing when VPP changes the output format.
+ TODO: Switch to API (or stat segment) when available.
+
+ The current implementation supports both 2202 and post-2202 format.
+ (The Gerrit number changing the output format is 34877.)
+
+ For TCP proto, the expected state after rampup is
+ some number of sessions in transitory state (VPP has seen the FINs),
+ and some number of sessions in established state (meaning
+ some FINs were lost in the last trial).
+ While the two states may need slightly different number of cycles
+ to process next packet, the current implementation considers
+ both of them the "fast path", so they are both counted as expected.
+
+ As the tests should fail if a session is timed-out,
+ the logic substracts timed out sessions for the returned value
+ (only available for post-2202 format).
+
+ TODO: Investigate if it is worth to insert additional rampup trials
+ in TPUT tests to ensure all sessions are transitory before next
+ measurement.
:param node: DUT node.
:param proto: Required protocol - TCP/UDP/ICMP.
:type node: dict
:type proto: str
- :returns: Number of established NAT44 sessions.
+ :returns: Number of active established NAT44 sessions.
:rtype: int
:raises ValueError: If not supported protocol.
+ :raises RuntimeError: If output is not formatted as expected.
"""
- nat44_data = dict()
- if proto in [u"UDP", u"TCP", u"ICMP"]:
- for line in NATUtil.show_nat44_summary(node).splitlines():
- sum_k, sum_v = line.split(u":") if u":" in line \
- else (line, None)
- nat44_data[sum_k] = sum_v.strip() if isinstance(sum_v, str) \
- else sum_v
- else:
+ proto_l = proto.strip().lower()
+ if proto_l not in [u"udp", u"tcp", u"icmp"]:
raise ValueError(f"Unsupported protocol: {proto}!")
- return nat44_data.get(f"total {proto.lower()} sessions", 0)
+ summary_text = NATUtil.show_nat44_summary(node)
+ summary_lines = summary_text.splitlines()
+ # Output from VPP v22.02 and before, delete when no longer needed.
+ pattern_2202 = f"total {proto_l} sessions:"
+ if pattern_2202 in summary_text:
+ for line in summary_lines:
+ if pattern_2202 not in line:
+ continue
+ return int(line.split(u":", 1)[1].strip())
+ # Post-2202, the proto info and session info are not on the same line.
+ found = False
+ for line in summary_lines:
+ if not found:
+ if f"{proto_l} sessions:" in line:
+ found = True
+ continue
+ # Proto is found, find the line we are interested in.
+ if u"total" not in line:
+ raise RuntimeError(f"show nat summary: no {proto} total.")
+ # We have the line with relevant numbers.
+ total_part, timed_out_part = line.split(u"(", 1)
+ timed_out_part = timed_out_part.split(u")", 1)[0]
+ total_count = int(total_part.split(u":", 1)[1].strip())
+ timed_out_count = int(timed_out_part.split(u":", 1)[1].strip())
+ active_count = total_count - timed_out_count
+ return active_count
+ raise RuntimeError(u"Unknown format of show nat44 summary")
# DET44 PAPI calls
# DET44 means deterministic mode of NAT44
@@ -396,10 +426,9 @@ class NATUtil:
"""Delete and re-add the deterministic NAT mapping."""
with PapiSocketExecutor(node) as papi_exec:
args_in[u"is_add"] = False
- papi_exec.add(cmd, **args_in)
+ papi_exec.add(cmd, **args_in).get_reply(err_msg)
args_in[u"is_add"] = True
- papi_exec.add(cmd, **args_in)
- papi_exec.get_replies(err_msg)
+ papi_exec.add(cmd, **args_in).get_reply(err_msg)
return resetter
diff --git a/resources/libraries/python/NGINX/NGINXTools.py b/resources/libraries/python/NGINX/NGINXTools.py
index 9418484f15..941fe733e7 100644
--- a/resources/libraries/python/NGINX/NGINXTools.py
+++ b/resources/libraries/python/NGINX/NGINXTools.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2022 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -74,21 +74,15 @@ class NGINXTools:
:type nginx_version: str
:raises RuntimeError: If command returns nonzero return code.
"""
- nginx_path = f"{pkg_dir}/nginx-{nginx_version}/sbin/nginx"
- cmd_options = NginxUtil.get_cmd_options(path=nginx_path)
- ret_code, _, stderr = exec_cmd(node, cmd_options, sudo=True)
- if nginx_version in stderr and ret_code == 0:
- logger.info(f"NGINX Version: {stderr}")
+ cmd = f"test -f {pkg_dir}/nginx-{nginx_version}/sbin/nginx"
+ ret_code, _, _ = exec_cmd(node, cmd, sudo=True)
+ if ret_code == 0:
return
command = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_LIB_SH}" \
f"/entry/install_nginx.sh nginx-{nginx_version}"
message = u"Install the NGINX failed!"
exec_cmd_no_error(node, command, sudo=True, timeout=600,
message=message)
- _, stderr = exec_cmd_no_error(node, cmd_options, sudo=True,
- message=message)
-
- logger.info(f"NGINX Version: {stderr}")
@staticmethod
def install_vsap_nginx_on_dut(node, pkg_dir):
diff --git a/resources/libraries/python/NodePath.py b/resources/libraries/python/NodePath.py
index b9b4fc94e6..5b445bc593 100644
--- a/resources/libraries/python/NodePath.py
+++ b/resources/libraries/python/NodePath.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -243,20 +243,30 @@ class NodePath:
:raises RuntimeError: If unsupported combination of parameters.
"""
t_dict = dict()
+ t_dict[u"hosts"] = set()
if topo_has_dut:
duts = [key for key in nodes if u"DUT" in key]
+ for host in [nodes[dut][u"host"] for dut in duts]:
+ t_dict[u"hosts"].add(host)
t_dict[u"duts"] = duts
t_dict[u"duts_count"] = len(duts)
t_dict[u"int"] = u"pf"
for _ in range(0, nic_pfs // 2):
if topo_has_tg:
- self.append_node(nodes[u"TG"])
+ if topo_has_dut:
+ self.append_node(nodes[u"TG"])
+ else:
+ self.append_node(nodes[u"TG"], filter_list=filter_list)
if topo_has_dut:
for dut in duts:
self.append_node(nodes[dut], filter_list=filter_list)
if topo_has_tg:
- self.append_node(nodes[u"TG"])
+ t_dict[u"hosts"].add(nodes[u"TG"][u"host"])
+ if topo_has_dut:
+ self.append_node(nodes[u"TG"])
+ else:
+ self.append_node(nodes[u"TG"], filter_list=filter_list)
self.compute_path(always_same_link, topo_has_dut)
n_idx = 0 # node index
diff --git a/resources/libraries/python/PLRsearch/Integrator.py b/resources/libraries/python/PLRsearch/Integrator.py
index a7a59391ed..cc8f838fe6 100644
--- a/resources/libraries/python/PLRsearch/Integrator.py
+++ b/resources/libraries/python/PLRsearch/Integrator.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -189,12 +189,15 @@ def estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
:raises numpy.linalg.LinAlgError: If the focus shape gets singular
(due to rounding errors). Try changing scale_coeff.
"""
- debug_list = list()
- trace_list = list()
+ debug_list = []
+ trace_list = []
# Block until input object appears.
- dimension, dilled_function, param_focus_tracker, max_samples = (
- communication_pipe.recv()
- )
+ (
+ dimension,
+ dilled_function,
+ param_focus_tracker,
+ max_samples,
+ ) = communication_pipe.recv()
debug_list.append(
f"Called with param_focus_tracker {param_focus_tracker!r}"
)
@@ -237,39 +240,47 @@ def estimate_nd(communication_pipe, scale_coeff=8.0, trace_enabled=False):
if max_samples and samples >= max_samples:
break
sample_point = generate_sample(
- param_focus_tracker.averages, param_focus_tracker.covariance_matrix,
- dimension, scale_coeff
+ param_focus_tracker.averages,
+ param_focus_tracker.covariance_matrix,
+ dimension,
+ scale_coeff,
)
- trace(u"sample_point", sample_point)
+ trace("sample_point", sample_point)
samples += 1
- trace(u"samples", samples)
+ trace("samples", samples)
value, log_weight = value_logweight_function(trace, *sample_point)
- trace(u"value", value)
- trace(u"log_weight", log_weight)
- trace(u"focus tracker before adding", param_focus_tracker)
+ trace("value", value)
+ trace("log_weight", log_weight)
+ trace("focus tracker before adding", param_focus_tracker)
# Update focus related statistics.
param_distance = param_focus_tracker.add_without_dominance_get_distance(
sample_point, log_weight
)
# The code above looked at weight (not importance).
# The code below looks at importance (not weight).
- log_rarity = param_distance / 2.0
- trace(u"log_rarity", log_rarity)
+ log_rarity = param_distance / 2.0 / scale_coeff
+ trace("log_rarity", log_rarity)
log_importance = log_weight + log_rarity
- trace(u"log_importance", log_importance)
+ trace("log_importance", log_importance)
value_tracker.add(value, log_importance)
# Update sampled statistics.
param_sampled_tracker.add_get_shift(sample_point, log_importance)
debug_list.append(f"integrator used {samples!s} samples")
debug_list.append(
- u" ".join([
- u"value_avg", str(value_tracker.average),
- u"param_sampled_avg", repr(param_sampled_tracker.averages),
- u"param_sampled_cov", repr(param_sampled_tracker.covariance_matrix),
- u"value_log_variance", str(value_tracker.log_variance),
- u"value_log_secondary_variance",
- str(value_tracker.secondary.log_variance)
- ])
+ " ".join(
+ [
+ "value_avg",
+ str(value_tracker.average),
+ "param_sampled_avg",
+ repr(param_sampled_tracker.averages),
+ "param_sampled_cov",
+ repr(param_sampled_tracker.covariance_matrix),
+ "value_log_variance",
+ str(value_tracker.log_variance),
+ "value_log_secondary_variance",
+ str(value_tracker.secondary.log_variance),
+ ]
+ )
)
communication_pipe.send(
(value_tracker, param_focus_tracker, debug_list, trace_list, samples)
diff --git a/resources/libraries/python/PLRsearch/PLRsearch.py b/resources/libraries/python/PLRsearch/PLRsearch.py
index cdfd308149..326aa2e2d2 100644
--- a/resources/libraries/python/PLRsearch/PLRsearch.py
+++ b/resources/libraries/python/PLRsearch/PLRsearch.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -53,8 +53,14 @@ class PLRsearch:
log_xerfcx_10 = math.log(xerfcx_limit - math.exp(10) * erfcx(math.exp(10)))
def __init__(
- self, measurer, trial_duration_per_trial, packet_loss_ratio_target,
- trial_number_offset=0, timeout=7200.0, trace_enabled=False):
+ self,
+ measurer,
+ trial_duration_per_trial,
+ packet_loss_ratio_target,
+ trial_number_offset=0,
+ timeout=7200.0,
+ trace_enabled=False,
+ ):
"""Store rate measurer and additional parameters.
The measurer must never report negative loss count.
@@ -176,7 +182,7 @@ class PLRsearch:
f"Started search with min_rate {min_rate!r}, "
f"max_rate {max_rate!r}"
)
- trial_result_list = list()
+ trial_result_list = []
trial_number = self.trial_number_offset
focus_trackers = (None, None)
transmit_rate = (min_rate + max_rate) / 2.0
@@ -186,34 +192,54 @@ class PLRsearch:
trial_number += 1
logging.info(f"Trial {trial_number!r}")
results = self.measure_and_compute(
- self.trial_duration_per_trial * trial_number, transmit_rate,
- trial_result_list, min_rate, max_rate, focus_trackers
+ self.trial_duration_per_trial * trial_number,
+ transmit_rate,
+ trial_result_list,
+ min_rate,
+ max_rate,
+ focus_trackers,
)
measurement, average, stdev, avg1, avg2, focus_trackers = results
+ # Workaround for unsent packets and other anomalies.
+ measurement.plr_loss_count = min(
+ measurement.intended_count,
+ int(measurement.intended_count * measurement.loss_ratio + 0.9),
+ )
+ logging.debug(
+ f"loss ratio {measurement.plr_loss_count}"
+ f" / {measurement.intended_count}"
+ )
zeros += 1
# TODO: Ratio of fill rate to drain rate seems to have
# exponential impact. Make it configurable, or is 4:3 good enough?
- if measurement.loss_ratio >= self.packet_loss_ratio_target:
+ if measurement.plr_loss_count >= (
+ measurement.intended_count * self.packet_loss_ratio_target
+ ):
for _ in range(4 * zeros):
- lossy_loads.append(measurement.target_tr)
- if measurement.loss_count > 0:
+ lossy_loads.append(measurement.intended_load)
+ lossy_loads.sort()
zeros = 0
- lossy_loads.sort()
+ logging.debug("High enough loss, lossy loads added.")
+ else:
+ logging.debug(
+ f"Not a high loss, zero counter bumped to {zeros}."
+ )
if stop_time <= time.time():
return average, stdev
trial_result_list.append(measurement)
if (trial_number - self.trial_number_offset) <= 1:
next_load = max_rate
elif (trial_number - self.trial_number_offset) <= 3:
- next_load = (measurement.relative_receive_rate / (
- 1.0 - self.packet_loss_ratio_target))
+ next_load = measurement.relative_forwarding_rate / (
+ 1.0 - self.packet_loss_ratio_target
+ )
else:
next_load = (avg1 + avg2) / 2.0
if zeros > 0:
if lossy_loads[0] > next_load:
diminisher = math.pow(2.0, 1 - zeros)
next_load = lossy_loads[0] + diminisher * next_load
- next_load /= (1.0 + diminisher)
+ next_load /= 1.0 + diminisher
# On zero measurement, we need to drain obsoleted low losses
# even if we did not use them to increase next_load,
# in order to get to usable loses at higher loads.
@@ -263,22 +289,22 @@ class PLRsearch:
# TODO: chi is from https://en.wikipedia.org/wiki/Nondimensionalization
chi = (load - mrr) / spread
chi0 = -mrr / spread
- trace(u"stretch: load", load)
- trace(u"mrr", mrr)
- trace(u"spread", spread)
- trace(u"chi", chi)
- trace(u"chi0", chi0)
+ trace("stretch: load", load)
+ trace("mrr", mrr)
+ trace("spread", spread)
+ trace("chi", chi)
+ trace("chi0", chi0)
if chi > 0:
log_lps = math.log(
load - mrr + (log_plus(0, -chi) - log_plus(0, chi0)) * spread
)
- trace(u"big loss direct log_lps", log_lps)
+ trace("big loss direct log_lps", log_lps)
else:
two_positive = log_plus(chi, 2 * chi0 - log_2)
two_negative = log_plus(chi0, 2 * chi - log_2)
if two_positive <= two_negative:
log_lps = log_minus(chi, chi0) + log_spread
- trace(u"small loss crude log_lps", log_lps)
+ trace("small loss crude log_lps", log_lps)
return log_lps
two = log_minus(two_positive, two_negative)
three_positive = log_plus(two_positive, 3 * chi - log_3)
@@ -286,11 +312,11 @@ class PLRsearch:
three = log_minus(three_positive, three_negative)
if two == three:
log_lps = two + log_spread
- trace(u"small loss approx log_lps", log_lps)
+ trace("small loss approx log_lps", log_lps)
else:
log_lps = math.log(log_plus(0, chi) - log_plus(0, chi0))
log_lps += log_spread
- trace(u"small loss direct log_lps", log_lps)
+ trace("small loss direct log_lps", log_lps)
return log_lps
@staticmethod
@@ -329,26 +355,26 @@ class PLRsearch:
# TODO: The stretch sign is just to have less minuses. Worth changing?
chi = (mrr - load) / spread
chi0 = mrr / spread
- trace(u"Erf: load", load)
- trace(u"mrr", mrr)
- trace(u"spread", spread)
- trace(u"chi", chi)
- trace(u"chi0", chi0)
+ trace("Erf: load", load)
+ trace("mrr", mrr)
+ trace("spread", spread)
+ trace("chi", chi)
+ trace("chi0", chi0)
if chi >= -1.0:
- trace(u"positive, b roughly bigger than m", None)
+ trace("positive, b roughly bigger than m", None)
if chi > math.exp(10):
first = PLRsearch.log_xerfcx_10 + 2 * (math.log(chi) - 10)
- trace(u"approximated first", first)
+ trace("approximated first", first)
else:
first = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi))
- trace(u"exact first", first)
+ trace("exact first", first)
first -= chi * chi
second = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi0))
second -= chi0 * chi0
intermediate = log_minus(first, second)
- trace(u"first", first)
+ trace("first", first)
else:
- trace(u"negative, b roughly smaller than m", None)
+ trace("negative, b roughly smaller than m", None)
exp_first = PLRsearch.xerfcx_limit + chi * erfcx(-chi)
exp_first *= math.exp(-chi * chi)
exp_first -= 2 * chi
@@ -359,17 +385,17 @@ class PLRsearch:
second = math.log(PLRsearch.xerfcx_limit - chi * erfcx(chi0))
second -= chi0 * chi0
intermediate = math.log(exp_first - math.exp(second))
- trace(u"exp_first", exp_first)
- trace(u"second", second)
- trace(u"intermediate", intermediate)
+ trace("exp_first", exp_first)
+ trace("second", second)
+ trace("intermediate", intermediate)
result = intermediate + math.log(spread) - math.log(erfc(-chi0))
- trace(u"result", result)
+ trace("result", result)
return result
@staticmethod
def find_critical_rate(
- trace, lfit_func, min_rate, max_rate, loss_ratio_target,
- mrr, spread):
+ trace, lfit_func, min_rate, max_rate, loss_ratio_target, mrr, spread
+ ):
"""Given ratio target and parameters, return the achieving offered load.
This is basically an inverse function to lfit_func
@@ -411,12 +437,12 @@ class PLRsearch:
loss_rate = math.exp(lfit_func(trace, rate, mrr, spread))
loss_ratio = loss_rate / rate
if loss_ratio > loss_ratio_target:
- trace(u"halving down", rate)
+ trace("halving down", rate)
rate_hi = rate
elif loss_ratio < loss_ratio_target:
- trace(u"halving up", rate)
+ trace("halving up", rate)
rate_lo = rate
- trace(u"found", rate)
+ trace("found", rate)
return rate
@staticmethod
@@ -426,14 +452,22 @@ class PLRsearch:
Integrator assumes uniform distribution, but over different parameters.
Weight and likelihood are used interchangeably here anyway.
- Each trial has an offered load, a duration and a loss count.
- Fitting function is used to compute the average loss per second.
- Poisson distribution (with average loss per trial) is used
+ Each trial has an intended load, a sent count and a loss count
+ (probably counting unsent packets as loss, as they signal
+ the load is too high for the traffic generator).
+ The fitting function is used to compute the average loss rate.
+ Geometric distribution (with average loss per trial) is used
to get likelihood of one trial result, the overal likelihood
is a product of all trial likelihoods.
As likelihoods can be extremely small, logarithms are tracked instead.
- TODO: Copy ReceiveRateMeasurement from MLRsearch.
+ The current implementation does not use direct loss rate
+ from the fitting function, as the input and output units may not match
+ (e.g. intended load in TCP transactions, loss in packets).
+ Instead, the expected average loss is scaled according to the number
+ of packets actually sent.
+
+ TODO: Copy MeasurementResult from MLRsearch.
:param trace: A multiprocessing-friendly logging function (closure).
:param lfit_func: Fitting function, typically lfit_spread or lfit_erf.
@@ -442,40 +476,47 @@ class PLRsearch:
:param spread: The spread parameter for the fitting function.
:type trace: function (str, object) -> None
:type lfit_func: Function from 3 floats to float.
- :type trial_result_list: list of MLRsearch.ReceiveRateMeasurement
+ :type trial_result_list: list of MLRsearch.MeasurementResult
:type mrr: float
:type spread: float
:returns: Logarithm of result weight for given function and parameters.
:rtype: float
"""
log_likelihood = 0.0
- trace(u"log_weight for mrr", mrr)
- trace(u"spread", spread)
+ trace("log_weight for mrr", mrr)
+ trace("spread", spread)
for result in trial_result_list:
- trace(u"for tr", result.target_tr)
- trace(u"lc", result.loss_count)
- trace(u"d", result.duration)
- # _rel_ values use units of target_tr (transactions per second).
+ trace("for tr", result.intended_load)
+ trace("plc", result.plr_loss_count)
+ trace("d", result.intended_duration)
+ # _rel_ values use units of intended_load (transactions per second).
log_avg_rel_loss_per_second = lfit_func(
- trace, result.target_tr, mrr, spread
+ trace, result.intended_load, mrr, spread
)
# _abs_ values use units of loss count (maybe packets).
# There can be multiple packets per transaction.
log_avg_abs_loss_per_trial = log_avg_rel_loss_per_second + math.log(
- result.transmit_count / result.target_tr
+ result.offered_count / result.intended_load
)
# Geometric probability computation for logarithms.
log_trial_likelihood = log_plus(0.0, -log_avg_abs_loss_per_trial)
- log_trial_likelihood *= -result.loss_count
+ log_trial_likelihood *= -result.plr_loss_count
log_trial_likelihood -= log_plus(0.0, +log_avg_abs_loss_per_trial)
log_likelihood += log_trial_likelihood
- trace(u"avg_loss_per_trial", math.exp(log_avg_abs_loss_per_trial))
- trace(u"log_trial_likelihood", log_trial_likelihood)
+ trace("avg_loss_per_trial", math.exp(log_avg_abs_loss_per_trial))
+ trace("log_trial_likelihood", log_trial_likelihood)
return log_likelihood
def measure_and_compute(
- self, trial_duration, transmit_rate, trial_result_list,
- min_rate, max_rate, focus_trackers=(None, None), max_samples=None):
+ self,
+ trial_duration,
+ transmit_rate,
+ trial_result_list,
+ min_rate,
+ max_rate,
+ focus_trackers=(None, None),
+ max_samples=None,
+ ):
"""Perform both measurement and computation at once.
High level steps: Prepare and launch computation worker processes,
@@ -516,7 +557,7 @@ class PLRsearch:
:param max_samples: Limit for integrator samples, for debugging.
:type trial_duration: float
:type transmit_rate: float
- :type trial_result_list: list of MLRsearch.ReceiveRateMeasurement
+ :type trial_result_list: list of MLRsearch.MeasurementResult
:type min_rate: float
:type max_rate: float
:type focus_trackers: 2-tuple of None or stat_trackers.VectorStatTracker
@@ -556,6 +597,20 @@ class PLRsearch:
:rtype: multiprocessing.Connection
"""
+ boss_pipe_end, worker_pipe_end = multiprocessing.Pipe()
+ # Starting the worker first. Contrary to documentation
+ # https://docs.python.org/3/library/multiprocessing.html#multiprocessing.connection.Connection
+ # sending of large object without active listener on the other side
+ # results in a deadlock, not in a ValueError.
+ # See https://stackoverflow.com/questions/15137292/large-objects-and-multiprocessing-pipes-and-send
+ worker = multiprocessing.Process(
+ target=Integrator.try_estimate_nd,
+ args=(worker_pipe_end, 5.0, self.trace_enabled),
+ )
+ worker.daemon = True
+ worker.start()
+
+ # Only now it is safe to send the function to compute with.
def value_logweight_func(trace, x_mrr, x_spread):
"""Return log of critical rate and log of likelihood.
@@ -594,22 +649,18 @@ class PLRsearch:
)
value = math.log(
self.find_critical_rate(
- trace, fitting_function, min_rate, max_rate,
- self.packet_loss_ratio_target, mrr, spread
+ trace,
+ fitting_function,
+ min_rate,
+ max_rate,
+ self.packet_loss_ratio_target,
+ mrr,
+ spread,
)
)
return value, logweight
dilled_function = dill.dumps(value_logweight_func)
- boss_pipe_end, worker_pipe_end = multiprocessing.Pipe()
- # Do not send yet, run the worker first to avoid a deadlock.
- # See https://stackoverflow.com/a/15716500
- worker = multiprocessing.Process(
- target=Integrator.try_estimate_nd,
- args=(worker_pipe_end, 10.0, self.trace_enabled)
- )
- worker.daemon = True
- worker.start()
boss_pipe_end.send(
(dimension, dilled_function, focus_tracker, max_samples)
)
@@ -651,14 +702,18 @@ class PLRsearch:
raise RuntimeError(f"Worker {name} did not finish!")
result_or_traceback = pipe.recv()
try:
- value_tracker, focus_tracker, debug_list, trace_list, sampls = (
- result_or_traceback
- )
- except ValueError:
+ (
+ value_tracker,
+ focus_tracker,
+ debug_list,
+ trace_list,
+ sampls,
+ ) = result_or_traceback
+ except ValueError as exc:
raise RuntimeError(
f"Worker {name} failed with the following traceback:\n"
f"{result_or_traceback}"
- )
+ ) from exc
logging.info(f"Logs from worker {name!r}:")
for message in debug_list:
logging.info(message)
@@ -669,8 +724,8 @@ class PLRsearch:
)
return _PartialResult(value_tracker, focus_tracker, sampls)
- stretch_result = stop_computing(u"stretch", stretch_pipe)
- erf_result = stop_computing(u"erf", erf_pipe)
+ stretch_result = stop_computing("stretch", stretch_pipe)
+ erf_result = stop_computing("erf", erf_pipe)
result = PLRsearch._get_result(measurement, stretch_result, erf_result)
logging.info(
f"measure_and_compute finished with trial result "
@@ -692,7 +747,7 @@ class PLRsearch:
:param measurement: The trial measurement obtained during computation.
:param stretch_result: Computation output for stretch fitting function.
:param erf_result: Computation output for erf fitting function.
- :type measurement: ReceiveRateMeasurement
+ :type measurement: MeasurementResult
:type stretch_result: _PartialResult
:type erf_result: _PartialResult
:returns: Combined results.
@@ -717,7 +772,7 @@ class PLRsearch:
# Named tuples, for multiple local variables to be passed as return value.
_PartialResult = namedtuple(
- u"_PartialResult", u"value_tracker focus_tracker samples"
+ "_PartialResult", "value_tracker focus_tracker samples"
)
"""Two stat trackers and sample counter.
@@ -730,8 +785,8 @@ _PartialResult = namedtuple(
"""
_ComputeResult = namedtuple(
- u"_ComputeResult",
- u"measurement avg stdev stretch_exp_avg erf_exp_avg trackers"
+ "_ComputeResult",
+ "measurement avg stdev stretch_exp_avg erf_exp_avg trackers",
)
"""Measurement, 4 computation result values, pair of trackers.
@@ -741,7 +796,7 @@ _ComputeResult = namedtuple(
:param stretch_exp_avg: Stretch fitting function estimate average exponentiated.
:param erf_exp_avg: Erf fitting function estimate average, exponentiated.
:param trackers: Pair of focus trackers to start next iteration with.
-:type measurement: ReceiveRateMeasurement
+:type measurement: MeasurementResult
:type avg: float
:type stdev: float
:type stretch_exp_avg: float
diff --git a/resources/libraries/python/PLRsearch/log_plus.py b/resources/libraries/python/PLRsearch/log_plus.py
index 8ede2909c6..aabefdb5be 100644
--- a/resources/libraries/python/PLRsearch/log_plus.py
+++ b/resources/libraries/python/PLRsearch/log_plus.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -76,14 +76,14 @@ def log_minus(first, second):
:raises RuntimeError: If the difference would be non-positive.
"""
if first is None:
- raise RuntimeError(u"log_minus: does not support None first")
+ raise RuntimeError("log_minus: does not support None first")
if second is None:
return first
if second >= first:
- raise RuntimeError(u"log_minus: first has to be bigger than second")
+ raise RuntimeError("log_minus: first has to be bigger than second")
factor = -math.expm1(second - first)
if factor <= 0.0:
- msg = u"log_minus: non-positive number to log"
+ msg = "log_minus: non-positive number to log"
else:
return first + math.log(factor)
raise RuntimeError(msg)
diff --git a/resources/libraries/python/PLRsearch/stat_trackers.py b/resources/libraries/python/PLRsearch/stat_trackers.py
index e0b21dc3a9..e598fd840e 100644
--- a/resources/libraries/python/PLRsearch/stat_trackers.py
+++ b/resources/libraries/python/PLRsearch/stat_trackers.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -64,8 +64,10 @@ class ScalarStatTracker:
:returns: Expression constructing an equivalent instance.
:rtype: str
"""
- return f"ScalarStatTracker(log_sum_weight={self.log_sum_weight!r}," \
+ return (
+ f"ScalarStatTracker(log_sum_weight={self.log_sum_weight!r},"
f"average={self.average!r},log_variance={self.log_variance!r})"
+ )
def copy(self):
"""Return new ScalarStatTracker instance with the same state as self.
@@ -110,7 +112,8 @@ class ScalarStatTracker:
if absolute_shift > 0.0:
log_square_shift = 2 * math.log(absolute_shift)
log_variance = log_plus(
- log_variance, log_square_shift + log_sample_ratio)
+ log_variance, log_square_shift + log_sample_ratio
+ )
if log_variance is not None:
log_variance += old_log_sum_weight - new_log_sum_weight
self.log_sum_weight = new_log_sum_weight
@@ -133,10 +136,17 @@ class ScalarDualStatTracker(ScalarStatTracker):
One typical use is for Monte Carlo integrator to decide whether
the partial sums so far are reliable enough.
"""
+
def __init__(
- self, log_sum_weight=None, average=0.0, log_variance=None,
- log_sum_secondary_weight=None, secondary_average=0.0,
- log_secondary_variance=None, max_log_weight=None):
+ self,
+ log_sum_weight=None,
+ average=0.0,
+ log_variance=None,
+ log_sum_secondary_weight=None,
+ secondary_average=0.0,
+ log_secondary_variance=None,
+ max_log_weight=None,
+ ):
"""Initialize new tracker instance, empty by default.
:param log_sum_weight: Natural logarithm of sum of weights
@@ -177,12 +187,14 @@ class ScalarDualStatTracker(ScalarStatTracker):
:rtype: str
"""
sec = self.secondary
- return f"ScalarDualStatTracker(log_sum_weight={self.log_sum_weight!r},"\
- f"average={self.average!r},log_variance={self.log_variance!r}," \
- f"log_sum_secondary_weight={sec.log_sum_weight!r}," \
- f"secondary_average={sec.average!r}," \
- f"log_secondary_variance={sec.log_variance!r}," \
+ return (
+ f"ScalarDualStatTracker(log_sum_weight={self.log_sum_weight!r},"
+ f"average={self.average!r},log_variance={self.log_variance!r},"
+ f"log_sum_secondary_weight={sec.log_sum_weight!r},"
+ f"secondary_average={sec.average!r},"
+ f"log_secondary_variance={sec.log_variance!r},"
f"max_log_weight={self.max_log_weight!r})"
+ )
def add(self, scalar_value, log_weight=0.0):
"""Return updated both stats after addition of another sample.
@@ -197,7 +209,7 @@ class ScalarDualStatTracker(ScalarStatTracker):
"""
# Using super() as copy() and add() are not expected to change
# signature, so this way diamond inheritance will be supported.
- primary = super(ScalarDualStatTracker, self)
+ primary = super()
if self.max_log_weight is None or log_weight >= self.max_log_weight:
self.max_log_weight = log_weight
self.secondary = primary.copy()
@@ -242,8 +254,12 @@ class VectorStatTracker:
"""
def __init__(
- self, dimension=2, log_sum_weight=None, averages=None,
- covariance_matrix=None):
+ self,
+ dimension=2,
+ log_sum_weight=None,
+ averages=None,
+ covariance_matrix=None,
+ ):
"""Initialize new tracker instance, two-dimensional empty by default.
If any of latter two arguments is None, it means
@@ -272,10 +288,12 @@ class VectorStatTracker:
:returns: Expression constructing an equivalent instance.
:rtype: str
"""
- return f"VectorStatTracker(dimension={self.dimension!r}," \
- f"log_sum_weight={self.log_sum_weight!r}," \
- f"averages={self.averages!r}," \
+ return (
+ f"VectorStatTracker(dimension={self.dimension!r},"
+ f"log_sum_weight={self.log_sum_weight!r},"
+ f"averages={self.averages!r},"
f"covariance_matrix={self.covariance_matrix!r})"
+ )
def copy(self):
"""Return new instance with the same state as self.
@@ -287,8 +305,10 @@ class VectorStatTracker:
:rtype: VectorStatTracker
"""
return VectorStatTracker(
- self.dimension, self.log_sum_weight, self.averages[:],
- copy.deepcopy(self.covariance_matrix)
+ self.dimension,
+ self.log_sum_weight,
+ self.averages[:],
+ copy.deepcopy(self.covariance_matrix),
)
def reset(self):
diff --git a/resources/libraries/python/PapiExecutor.py b/resources/libraries/python/PapiExecutor.py
index 7bfc8614a5..a55638ab7c 100644
--- a/resources/libraries/python/PapiExecutor.py
+++ b/resources/libraries/python/PapiExecutor.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -12,19 +12,21 @@
# limitations under the License.
"""Python API executor library.
+
+TODO: Document sync and async handling properly.
"""
import copy
import glob
import json
+import logging
import shutil
import struct # vpp-papi can raise struct.error
import subprocess
import sys
import tempfile
import time
-from collections import UserDict
-
+from collections import deque, UserDict
from pprint import pformat
from robot.api import logger
@@ -34,15 +36,19 @@ from resources.libraries.python.LocalExecution import run
from resources.libraries.python.FilteredLogger import FilteredLogger
from resources.libraries.python.PapiHistory import PapiHistory
from resources.libraries.python.ssh import (
- SSH, SSHTimeout, exec_cmd_no_error, scp_node)
+ SSH,
+ SSHTimeout,
+ exec_cmd_no_error,
+ scp_node,
+)
from resources.libraries.python.topology import Topology, SocketType
from resources.libraries.python.VppApiCrc import VppApiCrcChecker
__all__ = [
- u"PapiExecutor",
- u"PapiSocketExecutor",
- u"Disconnector",
+ "PapiExecutor",
+ "PapiSocketExecutor",
+ "Disconnector",
]
@@ -65,47 +71,50 @@ def dictize(obj):
:param obj: Arbitrary object to dictize.
:type obj: object
:returns: Dictized object.
- :rtype: same as obj type or collections.OrderedDict
+ :rtype: same as obj type or collections.UserDict
"""
- if not hasattr(obj, u"_asdict"):
+ if not hasattr(obj, "_asdict"):
return obj
overriden = UserDict(obj._asdict())
old_get = overriden.__getitem__
- new_get = lambda self, key: dictize(old_get(self, key))
- overriden.__getitem__ = new_get
+ overriden.__getitem__ = lambda self, key: dictize(old_get(self, key))
return overriden
-class PapiSocketExecutor:
- """Methods for executing VPP Python API commands on forwarded socket.
+def dictize_and_check_retval(obj, err_msg):
+ """Make namedtuple-like object accessible as dict, check retval if exists.
- Previously, we used an implementation with single client instance
- and connection being handled by a resource manager.
- On "with" statement, the instance connected, and disconnected
- on exit from the "with" block.
- This was limiting (no nested with blocks) and mainly it was slow:
- 0.7 seconds per disconnect cycle on Skylake, more than 3 second on Taishan.
+ If the object contains "retval" field, raise when the value is non-zero.
- The currently used implementation caches the connected client instances,
- providing speedup and making "with" blocks unnecessary.
- But with many call sites, "with" blocks are still the main usage pattern.
- Documentation still lists that as the intended pattern.
+ See dictize() for what it means to dictize.
- As a downside, clients need to be explicitly told to disconnect
- before VPP restart.
- There is some amount of retries and disconnects on disconnect
- (so unresponsive VPPs do not breach test much more than needed),
- but it is hard to verify all that works correctly.
- Especially, if Robot crashes, files and ssh processes may leak.
+ :param obj: Arbitrary object to dictize.
+ :param err_msg: The (additional) text for the raised exception.
+ :type obj: object
+ :type err_msg: str
+ :returns: Dictized object.
+ :rtype: same as obj type or collections.UserDict
+ :raises AssertionError: If retval field is present with nonzero value.
+ """
+ ret = dictize(obj)
+ # *_details messages do not contain retval.
+ retval = ret.get("retval", 0)
+ if retval != 0:
+ raise AssertionError(f"{err_msg}\nRetval nonzero in object {ret!r}")
+ return ret
- Delay for accepting socket connection is 10s.
- TODO: Decrease 10s to value that is long enough for creating connection
- and short enough to not affect performance.
+
+class PapiSocketExecutor:
+ """Methods for executing VPP Python API commands on forwarded socket.
The current implementation downloads and parses .api.json files only once
and caches client instances for reuse.
Cleanup metadata is added as additional attributes
- directly to client instances.
+ directly to the client instances.
+
+ The current implementation caches the connected client instances.
+ As a downside, clients need to be explicitly told to disconnect
+ before VPP restart.
The current implementation seems to run into read error occasionally.
Not sure if the error is in Python code on Robot side, ssh forwarding,
@@ -113,14 +122,16 @@ class PapiSocketExecutor:
seems to help, hoping repeated command execution does not lead to surprises.
The reconnection is logged at WARN level, so it is prominently shown
in log.html, so we can see how frequently it happens.
+ There are similar retries cleanups in other places
+ (so unresponsive VPPs do not break test much more than needed),
+ but it is hard to verify all that works correctly.
+ Especially, if Robot crashes, files and ssh processes may leak.
- TODO: Support handling of retval!=0 without try/except in caller.
-
- Note: Use only with "with" statement, e.g.:
+ TODO: Decrease current timeout value when creating connections
+ so broken VPP does not prolong job duration too much
+ while good VPP (almost) never fails to connect.
- cmd = 'show_version'
- with PapiSocketExecutor(node) as papi_exec:
- reply = papi_exec.add(cmd).get_reply(err_msg)
+ TODO: Support handling of retval!=0 without try/except in caller.
This class processes two classes of VPP PAPI methods:
1. Simple request / reply: method='request'.
@@ -130,27 +141,37 @@ class PapiSocketExecutor:
The recommended ways of use are (examples):
- 1. Simple request / reply
-
- a. One request with no arguments:
+ 1. Simple request / reply. Example with no arguments:
- cmd = 'show_version'
+ cmd = "show_version"
with PapiSocketExecutor(node) as papi_exec:
reply = papi_exec.add(cmd).get_reply(err_msg)
- b. Three requests with arguments, the second and the third ones are the same
- but with different arguments.
+ 2. Dump functions:
+ cmd = "sw_interface_rx_placement_dump"
with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, sw_if_index=ifc["vpp_sw_index"])
+ details = papi_exec.get_details(err_msg)
+
+ 3. Multiple requests with one reply each.
+ In this example, there are three requests with arguments,
+ the second and the third ones are the same but with different arguments.
+ This example also showcases method chaining.
+
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
replies = papi_exec.add(cmd1, **args1).add(cmd2, **args2).\
add(cmd2, **args3).get_replies(err_msg)
- 2. Dump functions
+ The "is_async=True" part in the last example enables "async handling mode",
+ which imposes limitations but gains speed and saves memory.
+ This is different than async mode of VPP PAPI, as the default handling mode
+ also uses async PAPI connections.
- cmd = 'sw_interface_rx_placement_dump'
- with PapiSocketExecutor(node) as papi_exec:
- details = papi_exec.add(cmd, sw_if_index=ifc['vpp_sw_index']).\
- get_details(err_msg)
+ The implementation contains more hidden details, such as
+ support for old VPP PAPI async mode behavior, API CRC checking
+ conditional usage of control ping, and possible susceptibility to VPP-2033.
+ See docstring of methods for more detailed info.
"""
# Class cache for reuse between instances.
@@ -174,16 +195,21 @@ class PapiSocketExecutor:
conn_cache = dict()
"""Mapping from node key to connected client instance."""
- def __init__(self, node, remote_vpp_socket=Constants.SOCKSVR_PATH):
+ def __init__(
+ self, node, remote_vpp_socket=Constants.SOCKSVR_PATH, is_async=False
+ ):
"""Store the given arguments, declare managed variables.
:param node: Node to connect to and forward unix domain socket from.
:param remote_vpp_socket: Path to remote socket to tunnel to.
+ :param is_async: Whether to use async handling.
:type node: dict
:type remote_vpp_socket: str
+ :type is_async: bool
"""
self._node = node
self._remote_vpp_socket = remote_vpp_socket
+ self._is_async = is_async
# The list of PAPI commands to be executed on the node.
self._api_command_list = list()
@@ -198,32 +224,40 @@ class PapiSocketExecutor:
cls = self.__class__
if cls.api_package_path:
return
- cls.api_root_dir = tempfile.TemporaryDirectory(dir=u"/tmp")
+ # Pylint suggests to use "with" statement, which we cannot,
+ # do as the dir should stay for multiple ensure_vpp_instance calls.
+ cls.api_root_dir = tempfile.TemporaryDirectory(dir="/tmp")
root_path = cls.api_root_dir.name
# Pack, copy and unpack Python part of VPP installation from _node.
# TODO: Use rsync or recursive version of ssh.scp_node instead?
node = self._node
- exec_cmd_no_error(node, [u"rm", u"-rf", u"/tmp/papi.txz"])
+ exec_cmd_no_error(node, ["rm", "-rf", "/tmp/papi.txz"])
# Papi python version depends on OS (and time).
- # Python 2.7 or 3.4, site-packages or dist-packages.
- installed_papi_glob = u"/usr/lib/python3*/*-packages/vpp_papi"
+ # Python 3.4 or higher, site-packages or dist-packages.
+ installed_papi_glob = "/usr/lib/python3*/*-packages/vpp_papi"
# We need to wrap this command in bash, in order to expand globs,
# and as ssh does join, the inner command has to be quoted.
- inner_cmd = u" ".join([
- u"tar", u"cJf", u"/tmp/papi.txz", u"--exclude=*.pyc",
- installed_papi_glob, u"/usr/share/vpp/api"
- ])
- exec_cmd_no_error(node, [u"bash", u"-c", u"'" + inner_cmd + u"'"])
- scp_node(node, root_path + u"/papi.txz", u"/tmp/papi.txz", get=True)
- run([u"tar", u"xf", root_path + u"/papi.txz", u"-C", root_path])
- cls.api_json_path = root_path + u"/usr/share/vpp/api"
+ inner_cmd = " ".join(
+ [
+ "tar",
+ "cJf",
+ "/tmp/papi.txz",
+ "--exclude=*.pyc",
+ installed_papi_glob,
+ "/usr/share/vpp/api",
+ ]
+ )
+ exec_cmd_no_error(node, ["bash", "-c", f"'{inner_cmd}'"])
+ scp_node(node, root_path + "/papi.txz", "/tmp/papi.txz", get=True)
+ run(["tar", "xf", root_path + "/papi.txz", "-C", root_path])
+ cls.api_json_path = root_path + "/usr/share/vpp/api"
# Perform initial checks before .api.json files are gone,
# by creating the checker instance.
cls.crc_checker = VppApiCrcChecker(cls.api_json_path)
# When present locally, we finally can find the installation path.
cls.api_package_path = glob.glob(root_path + installed_papi_glob)[0]
# Package path has to be one level above the vpp_papi directory.
- cls.api_package_path = cls.api_package_path.rsplit(u"/", 1)[0]
+ cls.api_package_path = cls.api_package_path.rsplit("/", 1)[0]
def ensure_vpp_instance(self):
"""Create or reuse a closed client instance, return it.
@@ -251,14 +285,39 @@ class PapiSocketExecutor:
# It is right, we should refactor the code and move initialization
# of package outside.
from vpp_papi.vpp_papi import VPPApiClient as vpp_class
- vpp_class.apidir = cls.api_json_path
- # We need to create instance before removing from sys.path.
- vpp_instance = vpp_class(
- use_socket=True, server_address=u"TBD", async_thread=False,
- read_timeout=14, logger=FilteredLogger(logger, u"INFO")
- )
- # Cannot use loglevel parameter, robot.api.logger lacks support.
- # TODO: Stop overriding read_timeout when VPP-1722 is fixed.
+ try:
+ # The old way. Deduplicate when pre-2402 support is not needed.
+
+ vpp_class.apidir = cls.api_json_path
+ # We need to create instance before removing from sys.path.
+ # Cannot use loglevel parameter, robot.api.logger lacks the support.
+ vpp_instance = vpp_class(
+ use_socket=True,
+ server_address="TBD",
+ async_thread=False,
+ # Large read timeout was originally there for VPP-1722,
+ # it may still be helping against AVF device creation failures.
+ read_timeout=14,
+ logger=FilteredLogger(logger, "INFO"),
+ )
+ except vpp_class.VPPRuntimeError:
+ # The 39871 way.
+
+ # We need to create instance before removing from sys.path.
+ # Cannot use loglevel parameter, robot.api.logger lacks the support.
+ vpp_instance = vpp_class(
+ apidir=cls.api_json_path,
+ use_socket=True,
+ server_address="TBD",
+ async_thread=False,
+ # Large read timeout was originally there for VPP-1722,
+ # it may still be helping against AVF device creation failures.
+ read_timeout=14,
+ logger=FilteredLogger(logger, "INFO"),
+ )
+ # The following is needed to prevent union (e.g. Ip4) debug logging
+ # of VPP part of PAPI from spamming robot logs.
+ logging.getLogger("vpp_papi.serializer").setLevel(logging.INFO)
finally:
if sys.path[-1] == cls.api_package_path:
sys.path.pop()
@@ -284,8 +343,8 @@ class PapiSocketExecutor:
:rtype: tuple of str
"""
return (
- node[u"host"],
- node[u"port"],
+ node["host"],
+ node["port"],
remote_socket,
# TODO: Do we support sockets paths such as "~/vpp/api.socket"?
# If yes, add also:
@@ -302,7 +361,8 @@ class PapiSocketExecutor:
:rtype: tuple of str
"""
return self.__class__.key_for_node_and_socket(
- self._node, self._remote_vpp_socket,
+ self._node,
+ self._remote_vpp_socket,
)
def set_connected_client(self, client):
@@ -329,10 +389,11 @@ class PapiSocketExecutor:
If check_connected, RuntimeError is raised when the client is
not in cache. None is returned if client is not in cache
(and the check is disabled).
+ Successful retrieval from cache is logged only when check_connected.
This hides details of what the node key is.
- :param check_connected: Whether cache miss raises.
+ :param check_connected: Whether cache miss raises (and success logs).
:type check_connected: bool
:returns: Connected client instance, or None if uncached and no check.
:rtype: Optional[vpp_papi.VPPApiClient]
@@ -340,11 +401,9 @@ class PapiSocketExecutor:
"""
key = self.key_for_self()
ret = self.__class__.conn_cache.get(key, None)
-
- if ret is None:
- if check_connected:
+ if check_connected:
+ if ret is None:
raise RuntimeError(f"Client not cached for key: {key}")
- else:
# When reading logs, it is good to see which VPP is accessed.
logger.debug(f"Activated cached PAPI client for key: {key}")
return ret
@@ -366,6 +425,8 @@ class PapiSocketExecutor:
- This socket controls the local ssh process doing the forwarding.
csit_local_vpp_socket
- This is the forwarded socket to talk with remote VPP.
+ csit_deque
+ - Queue for responses.
The attribute names do not start with underscore,
so pylint does not complain about accessing private attribute.
@@ -380,7 +441,7 @@ class PapiSocketExecutor:
if vpp_instance is not None:
return self
# No luck, create and connect a new instance.
- time_enter = time.time()
+ time_enter = time.monotonic()
node = self._node
# Parsing takes longer than connecting, prepare instance before tunnel.
vpp_instance = self.ensure_vpp_instance()
@@ -388,44 +449,55 @@ class PapiSocketExecutor:
# If connection fails, it is better to attempt disconnect anyway.
self.set_connected_client(vpp_instance)
# Set additional attributes.
- vpp_instance.csit_temp_dir = tempfile.TemporaryDirectory(dir=u"/tmp")
+ vpp_instance.csit_temp_dir = tempfile.TemporaryDirectory(dir="/tmp")
temp_path = vpp_instance.csit_temp_dir.name
- api_socket = temp_path + u"/vpp-api.sock"
+ api_socket = temp_path + "/vpp-api.sock"
vpp_instance.csit_local_vpp_socket = api_socket
- ssh_socket = temp_path + u"/ssh.sock"
+ ssh_socket = temp_path + "/ssh.sock"
vpp_instance.csit_control_socket = ssh_socket
# Cleanup possibilities.
- ret_code, _ = run([u"ls", ssh_socket], check=False)
+ ret_code, _ = run(["ls", ssh_socket], check=False)
if ret_code != 2:
# This branch never seems to be hit in CI,
# but may be useful when testing manually.
run(
- [u"ssh", u"-S", ssh_socket, u"-O", u"exit", u"0.0.0.0"],
- check=False, log=True
+ ["ssh", "-S", ssh_socket, "-O", "exit", "0.0.0.0"],
+ check=False,
+ log=True,
)
# TODO: Is any sleep necessary? How to prove if not?
- run([u"sleep", u"0.1"])
- run([u"rm", u"-vrf", ssh_socket])
+ run(["sleep", "0.1"])
+ run(["rm", "-vrf", ssh_socket])
# Even if ssh can perhaps reuse this file,
# we need to remove it for readiness detection to work correctly.
- run([u"rm", u"-rvf", api_socket])
+ run(["rm", "-rvf", api_socket])
# We use sleep command. The ssh command will exit in 30 second,
# unless a local socket connection is established,
# in which case the ssh command will exit only when
# the ssh connection is closed again (via control socket).
# The log level is to suppress "Warning: Permanently added" messages.
ssh_cmd = [
- u"ssh", u"-S", ssh_socket, u"-M", u"-L",
- api_socket + u":" + self._remote_vpp_socket,
- u"-p", str(node[u"port"]),
- u"-o", u"LogLevel=ERROR",
- u"-o", u"UserKnownHostsFile=/dev/null",
- u"-o", u"StrictHostKeyChecking=no",
- u"-o", u"ExitOnForwardFailure=yes",
- node[u"username"] + u"@" + node[u"host"],
- u"sleep", u"30"
+ "ssh",
+ "-S",
+ ssh_socket,
+ "-M",
+ "-L",
+ f"{api_socket}:{self._remote_vpp_socket}",
+ "-p",
+ str(node["port"]),
+ "-o",
+ "LogLevel=ERROR",
+ "-o",
+ "UserKnownHostsFile=/dev/null",
+ "-o",
+ "StrictHostKeyChecking=no",
+ "-o",
+ "ExitOnForwardFailure=yes",
+ f"{node['username']}@{node['host']}",
+ "sleep",
+ "30",
]
- priv_key = node.get(u"priv_key")
+ priv_key = node.get("priv_key")
if priv_key:
# This is tricky. We need a file to pass the value to ssh command.
# And we need ssh command, because paramiko does not support sockets
@@ -434,48 +506,52 @@ class PapiSocketExecutor:
key_file.write(priv_key)
# Make sure the content is written, but do not close yet.
key_file.flush()
- ssh_cmd[1:1] = [u"-i", key_file.name]
- password = node.get(u"password")
+ ssh_cmd[1:1] = ["-i", key_file.name]
+ password = node.get("password")
if password:
# Prepend sshpass command to set password.
- ssh_cmd[:0] = [u"sshpass", u"-p", password]
- time_stop = time.time() + 10.0
+ ssh_cmd[:0] = ["sshpass", "-p", password]
+ time_stop = time.monotonic() + 10.0
# subprocess.Popen seems to be the best way to run commands
# on background. Other ways (shell=True with "&" and ssh with -f)
# seem to be too dependent on shell behavior.
# In particular, -f does NOT return values for run().
subprocess.Popen(ssh_cmd)
# Check socket presence on local side.
- while time.time() < time_stop:
+ while time.monotonic() < time_stop:
# It can take a moment for ssh to create the socket file.
- ret_code, _ = run(
- [u"ls", u"-l", api_socket], check=False
- )
+ ret_code, _ = run(["ls", "-l", api_socket], check=False)
if not ret_code:
break
- time.sleep(0.1)
+ time.sleep(0.01)
else:
- raise RuntimeError(u"Local side socket has not appeared.")
+ raise RuntimeError("Local side socket has not appeared.")
if priv_key:
# Socket up means the key has been read. Delete file by closing it.
key_file.close()
# Everything is ready, set the local socket address and connect.
vpp_instance.transport.server_address = api_socket
# It seems we can get read error even if every preceding check passed.
- # Single retry seems to help.
+ # Single retry seems to help. TODO: Confirm this is still needed.
for _ in range(2):
try:
- vpp_instance.connect_sync(u"csit_socket")
+ vpp_instance.connect("csit_socket", do_async=True)
except (IOError, struct.error) as err:
logger.warn(f"Got initial connect error {err!r}")
vpp_instance.disconnect()
else:
break
else:
- raise RuntimeError(u"Failed to connect to VPP over a socket.")
- logger.trace(
- f"Establishing socket connection took {time.time()-time_enter}s"
- )
+ raise RuntimeError("Failed to connect to VPP over a socket.")
+ # Only after rls2302 all relevant VPP builds should have do_async.
+ if hasattr(vpp_instance.transport, "do_async"):
+ deq = deque()
+ vpp_instance.csit_deque = deq
+ vpp_instance.register_event_callback(lambda x, y: deq.append(y))
+ else:
+ vpp_instance.csit_deque = None
+ duration_conn = time.monotonic() - time_enter
+ logger.trace(f"Establishing socket connection took {duration_conn}s.")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
@@ -500,10 +576,17 @@ class PapiSocketExecutor:
return
logger.debug(f"Disconnecting by key: {key}")
client_instance.disconnect()
- run([
- u"ssh", u"-S", client_instance.csit_control_socket, u"-O",
- u"exit", u"0.0.0.0"
- ], check=False)
+ run(
+ [
+ "ssh",
+ "-S",
+ client_instance.csit_control_socket,
+ "-O",
+ "exit",
+ "0.0.0.0",
+ ],
+ check=False,
+ )
# Temp dir has autoclean, but deleting explicitly
# as an error can happen.
try:
@@ -519,8 +602,8 @@ class PapiSocketExecutor:
@classmethod
def disconnect_by_node_and_socket(
- cls, node, remote_socket=Constants.SOCKSVR_PATH
- ):
+ cls, node, remote_socket=Constants.SOCKSVR_PATH
+ ):
"""Disconnect a connected client instance, noop it not connected.
Also remove the local sockets by deleting the temporary directory.
@@ -578,10 +661,8 @@ class PapiSocketExecutor:
"""Add next command to internal command list; return self.
Unless disabled, new entry to papi history is also added at this point.
- The argument name 'csit_papi_command' must be unique enough as it cannot
- be repeated in kwargs.
- The kwargs dict is deep-copied, so it is safe to use the original
- with partial modifications for subsequent commands.
+ The kwargs dict is serialized or deep-copied, so it is safe to use
+ the original with partial modifications for subsequent calls.
Any pending conflicts from .api.json processing are raised.
Then the command name is checked for known CRCs.
@@ -591,6 +672,16 @@ class PapiSocketExecutor:
Each CRC issue is raised only once, so subsequent tests
can raise other issues.
+ With async handling mode, this method also serializes and sends
+ the command, skips CRC check to gain speed, and saves memory
+ by putting a sentinel (instead of deepcopy) to api command list.
+
+ For scale tests, the call sites are responsible to set history values
+ in a way that hints what is done without overwhelming the papi history.
+
+ Note to contributors: Do not rename "csit_papi_command"
+ to anything VPP could possibly use as an API field name.
+
:param csit_papi_command: VPP API command.
:param history: Enable/disable adding command to PAPI command history.
:param kwargs: Optional key-value arguments.
@@ -603,23 +694,39 @@ class PapiSocketExecutor:
"""
self.crc_checker.report_initial_conflicts()
if history:
+ # No need for deepcopy yet, serialization isolates from edits.
PapiHistory.add_to_papi_history(
self._node, csit_papi_command, **kwargs
)
self.crc_checker.check_api_name(csit_papi_command)
- self._api_command_list.append(
- dict(
- api_name=csit_papi_command,
- api_args=copy.deepcopy(kwargs)
+ if self._is_async:
+ # Save memory but still count the number of expected replies.
+ self._api_command_list.append(0)
+ api_object = self.get_connected_client(check_connected=False).api
+ func = getattr(api_object, csit_papi_command)
+ # No need for deepcopy yet, serialization isolates from edits.
+ func(**kwargs)
+ else:
+ # No serialization, so deepcopy is needed here.
+ self._api_command_list.append(
+ dict(api_name=csit_papi_command, api_args=copy.deepcopy(kwargs))
)
- )
return self
def get_replies(self, err_msg="Failed to get replies."):
- """Get replies from VPP Python API.
+ """Get reply for each command from VPP Python API.
+
+ This method expects one reply per command,
+ and gains performance by reading replies only after
+ sending all commands.
The replies are parsed into dict-like objects,
- "retval" field is guaranteed to be zero on success.
+ "retval" field (if present) is guaranteed to be zero on success.
+
+ Do not use this for messages with variable number of replies,
+ use get_details instead.
+ Do not use for commands trigering VPP-2033,
+ use series of get_reply instead.
:param err_msg: The message used if the PAPI command(s) execution fails.
:type err_msg: str
@@ -627,15 +734,18 @@ class PapiSocketExecutor:
:rtype: list of dict
:raises RuntimeError: If retval is nonzero, parsing or ssh error.
"""
- return self._execute(err_msg=err_msg)
+ if not self._is_async:
+ raise RuntimeError("Sync handling does not suport get_replies.")
+ return self._execute(err_msg=err_msg, do_async=True)
- def get_reply(self, err_msg=u"Failed to get reply."):
- """Get reply from VPP Python API.
+ def get_reply(self, err_msg="Failed to get reply."):
+ """Get reply to single command from VPP Python API.
- The reply is parsed into dict-like object,
- "retval" field is guaranteed to be zero on success.
+ This method waits for a single reply (no control ping),
+ thus avoiding bugs like VPP-2033.
- TODO: Discuss exception types to raise, unify with inner methods.
+ The reply is parsed into a dict-like object,
+ "retval" field (if present) is guaranteed to be zero on success.
:param err_msg: The message used if the PAPI command(s) execution fails.
:type err_msg: str
@@ -643,18 +753,19 @@ class PapiSocketExecutor:
:rtype: dict
:raises AssertionError: If retval is nonzero, parsing or ssh error.
"""
- replies = self.get_replies(err_msg=err_msg)
+ if self._is_async:
+ raise RuntimeError("Async handling does not suport get_reply.")
+ replies = self._execute(err_msg=err_msg, do_async=False)
if len(replies) != 1:
raise RuntimeError(f"Expected single reply, got {replies!r}")
return replies[0]
- def get_sw_if_index(self, err_msg=u"Failed to get reply."):
+ def get_sw_if_index(self, err_msg="Failed to get reply."):
"""Get sw_if_index from reply from VPP Python API.
Frequently, the caller is only interested in sw_if_index field
- of the reply, this wrapper makes such call sites shorter.
-
- TODO: Discuss exception types to raise, unify with inner methods.
+ of the reply, this wrapper around get_reply (thus safe against VPP-2033)
+ makes such call sites shorter.
:param err_msg: The message used if the PAPI command(s) execution fails.
:type err_msg: str
@@ -662,12 +773,13 @@ class PapiSocketExecutor:
:rtype: int
:raises AssertionError: If retval is nonzero, parsing or ssh error.
"""
+ if self._is_async:
+ raise RuntimeError("Async handling does not suport get_sw_if_index")
reply = self.get_reply(err_msg=err_msg)
- logger.trace(f"Getting index from {reply!r}")
- return reply[u"sw_if_index"]
+ return reply["sw_if_index"]
def get_details(self, err_msg="Failed to get dump details."):
- """Get dump details from VPP Python API.
+ """Get details (for possibly multiple dumps) from VPP Python API.
The details are parsed into dict-like objects.
The number of details per single dump command can vary,
@@ -676,19 +788,27 @@ class PapiSocketExecutor:
logging everything at once for debugging purposes),
it is recommended to call get_details for each dump (type) separately.
+ This method uses control ping to detect end of replies,
+ so it is not suitable for commands which trigger VPP-2033
+ (but arguably no dump currently triggers it).
+
:param err_msg: The message used if the PAPI command(s) execution fails.
:type err_msg: str
:returns: Details, dict objects with fields due to API without "retval".
:rtype: list of dict
"""
- return self._execute(err_msg)
+ if self._is_async:
+ raise RuntimeError("Async handling does not suport get_details.")
+ return self._execute(err_msg, do_async=False, single_reply=False)
@staticmethod
def run_cli_cmd(
- node, cli_cmd, log=True, remote_vpp_socket=Constants.SOCKSVR_PATH):
+ node, cli_cmd, log=True, remote_vpp_socket=Constants.SOCKSVR_PATH
+ ):
"""Run a CLI command as cli_inband, return the "reply" field of reply.
Optionally, log the field value.
+ This is a convenience wrapper around get_reply.
:param node: Node to run command on.
:param cli_cmd: The CLI command to be run on the node.
@@ -701,18 +821,18 @@ class PapiSocketExecutor:
:returns: CLI output.
:rtype: str
"""
- cmd = u"cli_inband"
- args = dict(
- cmd=cli_cmd
+ cmd = "cli_inband"
+ args = dict(cmd=cli_cmd)
+ err_msg = (
+ f"Failed to run 'cli_inband {cli_cmd}' PAPI command"
+ f" on host {node['host']}"
)
- err_msg = f"Failed to run 'cli_inband {cli_cmd}' PAPI command " \
- f"on host {node[u'host']}"
with PapiSocketExecutor(node, remote_vpp_socket) as papi_exec:
reply = papi_exec.add(cmd, **args).get_reply(err_msg)["reply"]
if log:
logger.info(
- f"{cli_cmd} ({node[u'host']} - {remote_vpp_socket}):\n"
+ f"{cli_cmd} ({node['host']} - {remote_vpp_socket}):\n"
f"{reply.strip()}"
)
return reply
@@ -721,6 +841,8 @@ class PapiSocketExecutor:
def run_cli_cmd_on_all_sockets(node, cli_cmd, log=True):
"""Run a CLI command as cli_inband, on all sockets in topology file.
+ Just a run_cli_cmd, looping over sockets.
+
:param node: Node to run command on.
:param cli_cmd: The CLI command to be run on the node.
:param log: If True, the response is logged.
@@ -739,6 +861,8 @@ class PapiSocketExecutor:
def dump_and_log(node, cmds):
"""Dump and log requested information, return None.
+ Just a get_details (with logging), looping over commands.
+
:param node: DUT node.
:param cmds: Dump commands to be executed.
:type node: dict
@@ -749,64 +873,231 @@ class PapiSocketExecutor:
dump = papi_exec.add(cmd).get_details()
logger.debug(f"{cmd}:\n{pformat(dump)}")
- def _execute(self, err_msg=u"Undefined error message", exp_rv=0):
+ @staticmethod
+ def _read_internal(vpp_instance, timeout=None):
+ """Blockingly read within timeout.
+
+ This covers behaviors both before and after 37758.
+ One read attempt is guaranteed even with zero timeout.
+
+ TODO: Simplify after 2302 RCA is done.
+
+ :param vpp_instance: Client instance to read from.
+ :param timeout: How long to wait for reply (or transport default).
+ :type vpp_instance: vpp_papi.VPPApiClient
+ :type timeout: Optional[float]
+ :returns: Message read or None if nothing got read.
+ :rtype: Optional[namedtuple]
+ """
+ timeout = vpp_instance.read_timeout if timeout is None else timeout
+ if vpp_instance.csit_deque is None:
+ return vpp_instance.read_blocking(timeout=timeout)
+ time_stop = time.monotonic() + timeout
+ while 1:
+ try:
+ return vpp_instance.csit_deque.popleft()
+ except IndexError:
+ # We could busy-wait but that seems to starve the reader thread.
+ time.sleep(0.01)
+ if time.monotonic() > time_stop:
+ return None
+
+ @staticmethod
+ def _read(vpp_instance, tries=3):
+ """Blockingly read within timeout, retry on early None.
+
+ For (sometimes) unknown reasons, VPP client in async mode likes
+ to return None occasionally before time runs out.
+ This function retries in that case.
+
+ Most of the time, early None means VPP crashed (see VPP-2033),
+ but is is better to give VPP more chances to respond without failure.
+
+ TODO: Perhaps CSIT now never triggers VPP-2033,
+ so investigate and remove this layer if even more speed is needed.
+
+ :param vpp_instance: Client instance to read from.
+ :param tries: Maximum number of tries to attempt.
+ :type vpp_instance: vpp_papi.VPPApiClient
+ :type tries: int
+ :returns: Message read or None if nothing got read even with retries.
+ :rtype: Optional[namedtuple]
+ """
+ timeout = vpp_instance.read_timeout
+ for _ in range(tries):
+ time_stop = time.monotonic() + 0.9 * timeout
+ reply = PapiSocketExecutor._read_internal(vpp_instance)
+ if reply is None and time.monotonic() < time_stop:
+ logger.trace("Early None. Retry?")
+ continue
+ return reply
+ logger.trace(f"Got {tries} early Nones, probably a real None.")
+ return None
+
+ @staticmethod
+ def _drain(vpp_instance, err_msg, timeout=30.0):
+ """Keep reading with until None or timeout.
+
+ This is needed to mitigate the risk of a state with unread responses
+ (e.g. after non-zero retval in the middle of get_replies)
+ causing failures in everything subsequent (until disconnect).
+
+ The reads are done without any waiting.
+
+ It is possible some responses have not arrived yet,
+ but that is unlikely as Python is usually slower than VPP.
+
+ :param vpp_instance: Client instance to read from.
+ :param err_msg: Error message to use when overstepping timeout.
+ :param timeout: How long to try before giving up.
+ :type vpp_instance: vpp_papi.VPPApiClient
+ :type err_msg: str
+ :type timeout: float
+ :raises RuntimeError: If read keeps returning nonzero after timeout.
+ """
+ time_stop = time.monotonic() + timeout
+ while time.monotonic() < time_stop:
+ if PapiSocketExecutor._read_internal(vpp_instance, 0.0) is None:
+ return
+ raise RuntimeError(f"{err_msg}\nTimed out while draining.")
+
+ def _execute(self, err_msg, do_async, single_reply=True):
"""Turn internal command list into data and execute; return replies.
This method also clears the internal command list.
- IMPORTANT!
- Do not use this method in L1 keywords. Use:
- - get_replies()
- - get_reply()
- - get_sw_if_index()
- - get_details()
-
:param err_msg: The message used if the PAPI command(s) execution fails.
+ :param do_async: If true, assume one reply per command and do not wait
+ for each reply before sending next request.
+ Dump commands (and calls causing VPP-2033) need False.
+ :param single_reply: For sync emulation mode (cannot be False
+ if do_async is True). When false use control ping.
+ When true, wait for a single reply.
:type err_msg: str
- :returns: Papi responses parsed into a dict-like object,
+ :type do_async: bool
+ :type single_reply: bool
+ :returns: Papi replies parsed into a dict-like object,
with fields due to API (possibly including retval).
- :rtype: list of dict
+ :rtype: NoneType or list of dict
:raises RuntimeError: If the replies are not all correct.
"""
- vpp_instance = self.get_connected_client()
local_list = self._api_command_list
# Clear first as execution may fail.
self._api_command_list = list()
- replies = list()
+ if do_async:
+ if not single_reply:
+ raise RuntimeError("Async papi needs one reply per request.")
+ return self._execute_async(local_list, err_msg=err_msg)
+ return self._execute_sync(
+ local_list, err_msg=err_msg, single_reply=single_reply
+ )
+
+ def _execute_sync(self, local_list, err_msg, single_reply):
+ """Execute commands waiting for replies one by one; return replies.
+
+ This implementation either expects a single response per request,
+ or uses control ping to emulate sync PAPI calls.
+ Reliable, but slow. Required for dumps. Needed for calls
+ which trigger VPP-2033.
+
+ CRC checking is done for the replies (requests are checked in .add).
+
+ :param local_list: The list of PAPI commands to be executed on the node.
+ :param err_msg: The message used if the PAPI command(s) execution fails.
+ :param single_reply: When false use control ping.
+ When true, wait for a single reply.
+ :type local_list: list of dict
+ :type err_msg: str
+ :type single_reply: bool
+ :returns: Papi replies parsed into a dict-like object,
+ with fields due to API (possibly including retval).
+ :rtype: List[UserDict]
+ :raises AttributeError: If VPP does not know the command.
+ :raises RuntimeError: If the replies are not all correct.
+ """
+ vpp_instance = self.get_connected_client()
+ control_ping_fn = getattr(vpp_instance.api, "control_ping")
+ ret_list = list()
for command in local_list:
- api_name = command[u"api_name"]
+ api_name = command["api_name"]
papi_fn = getattr(vpp_instance.api, api_name)
+ replies = list()
try:
- try:
- reply = papi_fn(**command[u"api_args"])
- except (IOError, struct.error) as err:
- # Occasionally an error happens, try reconnect.
- logger.warn(f"Reconnect after error: {err!r}")
- vpp_instance.disconnect()
- # Testing shows immediate reconnect fails.
- time.sleep(1)
- vpp_instance.connect_sync(u"csit_socket")
- logger.trace(u"Reconnected.")
- reply = papi_fn(**command[u"api_args"])
+ # Send the command maybe followed by control ping.
+ main_context = papi_fn(**command["api_args"])
+ if single_reply:
+ replies.append(PapiSocketExecutor._read(vpp_instance))
+ else:
+ ping_context = control_ping_fn()
+ # Receive the replies.
+ while 1:
+ reply = PapiSocketExecutor._read(vpp_instance)
+ if reply is None:
+ raise RuntimeError(
+ f"{err_msg}\nSync PAPI timed out."
+ )
+ if reply.context == ping_context:
+ break
+ if reply.context != main_context:
+ raise RuntimeError(
+ f"{err_msg}\nUnexpected context: {reply!r}"
+ )
+ replies.append(reply)
except (AttributeError, IOError, struct.error) as err:
- raise AssertionError(err_msg) from err
- # *_dump commands return list of objects, convert, ordinary reply.
- if not isinstance(reply, list):
- reply = [reply]
- for item in reply:
- self.crc_checker.check_api_name(item.__class__.__name__)
- dict_item = dictize(item)
- if u"retval" in dict_item.keys():
- # *_details messages do not contain retval.
- retval = dict_item[u"retval"]
- if retval != exp_rv:
- # TODO: What exactly to log and raise here?
- raise AssertionError(
- f"Retval {retval!r} does not match expected "
- f"retval {exp_rv!r}"
- )
- replies.append(dict_item)
- return replies
+ # TODO: Add retry if it is still needed.
+ raise AssertionError(f"{err_msg}") from err
+ finally:
+ # Discard any unprocessed replies to avoid secondary failures.
+ PapiSocketExecutor._drain(vpp_instance, err_msg)
+ # Process replies for this command.
+ for reply in replies:
+ self.crc_checker.check_api_name(reply.__class__.__name__)
+ dictized_reply = dictize_and_check_retval(reply, err_msg)
+ ret_list.append(dictized_reply)
+ return ret_list
+
+ def _execute_async(self, local_list, err_msg):
+ """Read, process and return replies.
+
+ The messages were already sent by .add() in this mode,
+ local_list is used just so we know how many replies to read.
+
+ Beware: It is not clear what to do when socket read fails
+ in the middle of async processing.
+
+ The implementation assumes each command results in exactly one reply,
+ there is no reordering in either commands nor replies,
+ and context numbers increase one by one (and are matching for replies).
+
+ To speed processing up, reply CRC values are not checked.
+
+ The current implementation does not limit the number of messages
+ in-flight, we rely on VPP PAPI background thread to move replies
+ from socket to queue fast enough.
+
+ :param local_list: The list of PAPI commands to get replies for.
+ :param err_msg: The message used if the PAPI command(s) execution fails.
+ :type local_list: list
+ :type err_msg: str
+ :returns: Papi replies parsed into a dict-like object, with fields
+ according to API (possibly including retval).
+ :rtype: List[UserDict]
+ :raises RuntimeError: If the replies are not all correct.
+ """
+ vpp_instance = self.get_connected_client()
+ ret_list = list()
+ try:
+ for index, _ in enumerate(local_list):
+ # Blocks up to timeout.
+ reply = PapiSocketExecutor._read(vpp_instance)
+ if reply is None:
+ time_msg = f"PAPI async timeout: idx {index}"
+ raise RuntimeError(f"{err_msg}\n{time_msg}")
+ ret_list.append(dictize_and_check_retval(reply, err_msg))
+ finally:
+ # Discard any unprocessed replies to avoid secondary failures.
+ PapiSocketExecutor._drain(vpp_instance, err_msg)
+ return ret_list
class Disconnector:
@@ -831,8 +1122,7 @@ class Disconnector:
"""
cls = PapiSocketExecutor
# Iterate over copy of entries so deletions do not mess with iterator.
- keys_copy = list(cls.conn_cache.keys())
- for key in keys_copy:
+ for key in list(cls.conn_cache.keys()):
cls.disconnect_by_key(key)
@@ -893,17 +1183,15 @@ class PapiExecutor:
def __enter__(self):
try:
self._ssh.connect(self._node)
- except IOError:
- raise RuntimeError(
- f"Cannot open SSH connection to host {self._node[u'host']} "
- f"to execute PAPI command(s)"
- )
+ except IOError as err:
+ msg = f"PAPI: Cannot open SSH connection to {self._node['host']}"
+ raise RuntimeError(msg) from err
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self._ssh.disconnect(self._node)
- def add(self, csit_papi_command=u"vpp-stats", history=True, **kwargs):
+ def add(self, csit_papi_command="vpp-stats", history=True, **kwargs):
"""Add next command to internal command list; return self.
The argument name 'csit_papi_command' must be unique enough as it cannot
@@ -925,15 +1213,16 @@ class PapiExecutor:
self._node, csit_papi_command, **kwargs
)
self._api_command_list.append(
- dict(
- api_name=csit_papi_command, api_args=copy.deepcopy(kwargs)
- )
+ dict(api_name=csit_papi_command, api_args=copy.deepcopy(kwargs))
)
return self
def get_stats(
- self, err_msg=u"Failed to get statistics.", timeout=120,
- socket=Constants.SOCKSTAT_PATH):
+ self,
+ err_msg="Failed to get statistics.",
+ timeout=120,
+ socket=Constants.SOCKSTAT_PATH,
+ ):
"""Get VPP Stats from VPP Python API.
:param err_msg: The message used if the PAPI command(s) execution fails.
@@ -945,12 +1234,15 @@ class PapiExecutor:
:returns: Requested VPP statistics.
:rtype: list of dict
"""
- paths = [cmd[u"api_args"][u"path"] for cmd in self._api_command_list]
+ paths = [cmd["api_args"]["path"] for cmd in self._api_command_list]
self._api_command_list = list()
stdout = self._execute_papi(
- paths, method=u"stats", err_msg=err_msg, timeout=timeout,
- socket=socket
+ paths,
+ method="stats",
+ err_msg=err_msg,
+ timeout=timeout,
+ socket=socket,
)
return json.loads(stdout)
@@ -990,19 +1282,16 @@ class PapiExecutor:
api_data_processed = list()
for api in api_d:
api_args_processed = dict()
- for a_k, a_v in api[u"api_args"].items():
+ for a_k, a_v in api["api_args"].items():
api_args_processed[str(a_k)] = process_value(a_v)
api_data_processed.append(
- dict(
- api_name=api[u"api_name"],
- api_args=api_args_processed
- )
+ dict(api_name=api["api_name"], api_args=api_args_processed)
)
return api_data_processed
def _execute_papi(
- self, api_data, method=u"request", err_msg=u"", timeout=120,
- socket=None):
+ self, api_data, method="request", err_msg="", timeout=120, socket=None
+ ):
"""Execute PAPI command(s) on remote node and store the result.
:param api_data: List of APIs with their arguments.
@@ -1021,15 +1310,19 @@ class PapiExecutor:
:raises AssertionError: If PAPI command(s) execution has failed.
"""
if not api_data:
- raise RuntimeError(u"No API data provided.")
+ raise RuntimeError("No API data provided.")
- json_data = json.dumps(api_data) \
- if method in (u"stats", u"stats_request") \
+ json_data = (
+ json.dumps(api_data)
+ if method in ("stats", "stats_request")
else json.dumps(self._process_api_data(api_data))
+ )
- sock = f" --socket {socket}" if socket else u""
- cmd = f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_PAPI_PROVIDER}" \
+ sock = f" --socket {socket}" if socket else ""
+ cmd = (
+ f"{Constants.REMOTE_FW_DIR}/{Constants.RESOURCES_PAPI_PROVIDER}"
f" --method {method} --data '{json_data}'{sock}"
+ )
try:
ret_code, stdout, _ = self._ssh.exec_command_sudo(
cmd=cmd, timeout=timeout, log_stdout_err=False
@@ -1037,14 +1330,14 @@ class PapiExecutor:
# TODO: Fail on non-empty stderr?
except SSHTimeout:
logger.error(
- f"PAPI command(s) execution timeout on host "
- f"{self._node[u'host']}:\n{api_data}"
+ f"PAPI command(s) execution timeout on host"
+ f" {self._node['host']}:\n{api_data}"
)
raise
except Exception as exc:
raise RuntimeError(
- f"PAPI command(s) execution on host {self._node[u'host']} "
- f"failed: {api_data}"
+ f"PAPI command(s) execution on host {self._node['host']}"
+ f" failed: {api_data}"
) from exc
if ret_code != 0:
raise AssertionError(err_msg)
diff --git a/resources/libraries/python/PapiHistory.py b/resources/libraries/python/PapiHistory.py
index 32429c4f64..18b2774908 100644
--- a/resources/libraries/python/PapiHistory.py
+++ b/resources/libraries/python/PapiHistory.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -48,7 +48,7 @@ class PapiHistory:
PapiHistory.reset_papi_history(node)
@staticmethod
- def add_to_papi_history(node, csit_papi_command, papi=True, **kwargs):
+ def add_to_papi_history(node, csit_papi_command, **kwargs):
"""Add command to PAPI command history on DUT node.
Repr strings are used for argument values.
@@ -70,29 +70,17 @@ class PapiHistory:
VPP Stats:
vpp-stats(path=['^/if', '/err/ip4-input', '/sys/node/ip4-input'])
- VAT:
- sw_interface_set_flags sw_if_index 3 admin-up link-up
-
:param node: DUT node to add command to PAPI command history for.
:param csit_papi_command: Command to be added to PAPI command history.
- :param papi: Says if the command to store is PAPi or VAT. Remove when
- VAT executor is completely removed.
:param kwargs: Optional key-value arguments.
:type node: dict
:type csit_papi_command: str
- :type papi: bool
:type kwargs: dict
"""
- if papi:
- args = list()
- for key, val in kwargs.items():
- args.append(f"{key}={val!r}")
- item = f"{csit_papi_command}({u','.join(args)})"
- else:
- # This else part is here to store VAT commands.
- # VAT history is not used.
- # TODO: Remove when VatExecutor is completely removed.
- item = f"{csit_papi_command}"
+ args = list()
+ for key, val in kwargs.items():
+ args.append(f"{key}={val!r}")
+ item = f"{csit_papi_command}({u','.join(args)})"
DICT__DUTS_PAPI_HISTORY[node[u"host"]].append(item)
@staticmethod
diff --git a/resources/libraries/python/Policer.py b/resources/libraries/python/Policer.py
index 6d3bf86462..28ed0b0aa9 100644
--- a/resources/libraries/python/Policer.py
+++ b/resources/libraries/python/Policer.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -72,7 +72,7 @@ class Policer:
def policer_set_configuration(
node, policer_name, cir, eir, cbs, ebs, rate_type, round_type,
policer_type, conform_action_type, exceed_action_type,
- violate_action_type, color_aware, is_add=True, conform_dscp=None,
+ violate_action_type, color_aware, conform_dscp=None,
exceed_dscp=None, violate_dscp=None):
"""Configure policer on VPP node.
@@ -89,7 +89,6 @@ class Policer:
:param exceed_action_type: Exceed action type.
:param violate_action_type: Violate action type.
:param color_aware: Color-blind (cb) or color-aware (ca).
- :param is_add: Add policer if True, else delete.
:param conform_dscp: DSCP for conform mark_and_transmit action.
:param exceed_dscp: DSCP for exceed mark_and_transmit action.
:param violate_dscp: DSCP for vilate mark_and_transmit action.
@@ -106,7 +105,6 @@ class Policer:
:type exceed_action_type: str
:type violate_action_type: str
:type color_aware: str
- :type is_add: bool
:type conform_dscp: str
:type exceed_dscp: str
:type violate_dscp: str
@@ -130,10 +128,8 @@ class Policer:
else 0
)
- cmd = u"policer_add_del"
- args = dict(
- is_add=is_add,
- name=str(policer_name),
+ cmd = u"policer_add"
+ infos = dict(
cir=int(cir),
eir=int(eir),
cb=int(cbs),
@@ -148,6 +144,10 @@ class Policer:
violate_action=violate_action,
color_aware=bool(color_aware == u"'ca'")
)
+ args = dict(
+ name=str(policer_name),
+ infos=infos,
+ )
err_msg = f"Failed to configure policer {policer_name} " \
f"on host {node['host']}"
diff --git a/resources/libraries/python/QATUtil.py b/resources/libraries/python/QATUtil.py
new file mode 100644
index 0000000000..e16221fb30
--- /dev/null
+++ b/resources/libraries/python/QATUtil.py
@@ -0,0 +1,92 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""QAT util library."""
+
+from resources.libraries.python.DUTSetup import DUTSetup
+from resources.libraries.python.topology import NodeType, Topology
+from resources.libraries.python.VPPUtil import VPPUtil
+from resources.libraries.python.ssh import exec_cmd_no_error
+
+
+class QATUtil:
+ """Contains methods for setting up QATs."""
+
+ @staticmethod
+ def crypto_device_verify_on_all_duts(nodes):
+ """Verify if Crypto QAT device and its virtual functions are initialized
+ on all DUTs.
+
+ :param nodes: Nodes in the topology.
+ :type nodes: dict
+ """
+ VPPUtil.stop_vpp_service_on_all_duts(nodes)
+
+ for node in nodes.values():
+ if node["type"] == NodeType.DUT:
+ cryptodevs = Topology.get_cryptodev(node)
+ if not cryptodevs:
+ return
+ for device in cryptodevs.values():
+ QATUtil.crypto_device_init(node, device)
+
+ @staticmethod
+ def crypto_device_init(node, device):
+ """Init Crypto QAT device virtual functions on DUT.
+
+ :param node: DUT node.
+ :device: Crypto device entry from topology file.
+ :type node: dict
+ :type device: dict
+ """
+ DUTSetup.verify_kernel_module(node, device["module"], force_load=True)
+
+ current_driver = DUTSetup.get_pci_dev_driver(
+ node, device["pci_address"].replace(":", r"\:")
+ )
+ if current_driver is not None:
+ DUTSetup.pci_driver_unbind(node, device["pci_address"])
+ # Bind to kernel driver.
+ DUTSetup.pci_driver_bind(node, device["pci_address"], device["driver"])
+
+ cmd = f"adf_ctl status | grep {device['pci_address']} | "
+ cmd += "awk '{print $1}'"
+ stdout, _ = exec_cmd_no_error(
+ node, cmd, sudo=True, message="Failed to check crypto device!"
+ )
+ if stdout.strip():
+ qat_dev = stdout.split("_")[-1]
+ conf_file = f"/etc/{device['driver']}_{qat_dev.strip()}.conf"
+ exec_cmd_no_error(
+ node, f"adf_ctl --config {conf_file} {stdout.strip()} restart",
+ sudo=True, message="Failed to restart crypto device!"
+ )
+ else:
+ raise ValueError("Crypto device error")
+
+ # Initialize QAT VFs.
+ if int(device["numvfs"]) > 0:
+ path = f"drivers/{device['driver']}"
+ DUTSetup.set_sriov_numvfs(
+ node, device["pci_address"], path=path,
+ numvfs=device["numvfs"]
+ )
+
+ if device["driver"] not in ["c4xxx"]:
+ for cvf in range(int(device["numvfs"])):
+ DUTSetup.pci_vf_driver_unbind(
+ node, device["pci_address"], cvf
+ )
+ DUTSetup.pci_vf_driver_bind(
+ node, device["pci_address"], cvf, "vfio-pci"
+ )
diff --git a/resources/libraries/python/QemuManager.py b/resources/libraries/python/QemuManager.py
index 766372ad9c..259b4c6981 100644
--- a/resources/libraries/python/QemuManager.py
+++ b/resources/libraries/python/QemuManager.py
@@ -154,7 +154,8 @@ class QemuManager:
smp=len(self.machines_affinity[name]),
mem=4096,
vnf=kwargs[u"vnf"],
- img=Constants.QEMU_VM_KERNEL
+ img=Constants.QEMU_VM_KERNEL,
+ page_size=kwargs[u"page_size"]
)
self.machines[name].add_default_params()
self.machines[name].add_kernelvm_params()
diff --git a/resources/libraries/python/QemuUtils.py b/resources/libraries/python/QemuUtils.py
index 573336153a..2df89ee87c 100644
--- a/resources/libraries/python/QemuUtils.py
+++ b/resources/libraries/python/QemuUtils.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022-2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -42,7 +42,7 @@ class QemuUtils:
def __init__(
self, node, qemu_id=1, smp=1, mem=512, vnf=None,
- img=Constants.QEMU_VM_IMAGE):
+ img=Constants.QEMU_VM_IMAGE, page_size=u""):
"""Initialize QemuUtil class.
:param node: Node to run QEMU on.
@@ -51,12 +51,14 @@ class QemuUtils:
:param mem: Amount of memory.
:param vnf: Network function workload.
:param img: QEMU disk image or kernel image path.
+ :param page_size: Hugepage Size.
:type node: dict
:type qemu_id: int
:type smp: int
:type mem: int
:type vnf: str
:type img: str
+ :type page_size: str
"""
self._nic_id = 0
self._node = node
@@ -91,6 +93,8 @@ class QemuUtils:
self._opt[u"smp"] = int(smp)
self._opt[u"img"] = img
self._opt[u"vnf"] = vnf
+ self._opt[u"page_size"] = page_size
+
# Temporary files.
self._temp = dict()
self._temp[u"log"] = f"/tmp/serial_{qemu_id}.log"
@@ -115,6 +119,9 @@ class QemuUtils:
def add_default_params(self):
"""Set default QEMU command line parameters."""
+ mem_path = f"/dev/hugepages1G" \
+ if self._opt[u"page_size"] == u"1G" else u"/dev/hugepages"
+
self._params.add(u"daemonize")
self._params.add(u"nodefaults")
self._params.add_with_value(
@@ -133,7 +140,8 @@ class QemuUtils:
)
self._params.add_with_value(
u"object", f"memory-backend-file,id=mem,"
- f"size={self._opt.get(u'mem')}M,mem-path=/dev/hugepages,share=on"
+ f"size={self._opt.get(u'mem')}M,"
+ f"mem-path={mem_path},share=on"
)
self._params.add_with_value(u"m", f"{self._opt.get(u'mem')}M")
self._params.add_with_value(u"numa", u"node,memdev=mem")
@@ -202,6 +210,8 @@ class QemuUtils:
def add_kernelvm_params(self):
"""Set KernelVM QEMU parameters."""
+ hugepages = 3 if self._opt[u"page_size"] == u"1G" else 512
+
self._params.add_with_value(
u"serial", f"file:{self._temp.get(u'log')}"
)
@@ -220,7 +230,8 @@ class QemuUtils:
self._params.add_with_value(
u"append", f"'ro rootfstype=9p rootflags=trans=virtio "
f"root=virtioroot console={self._opt.get(u'console')} "
- f"tsc=reliable hugepages=512 "
+ f"tsc=reliable hugepages={hugepages} "
+ f"hugepagesz={self._opt.get(u'page_size')} "
f"init={self._temp.get(u'ini')} fastboot'"
)
@@ -247,7 +258,7 @@ class QemuUtils:
logger.debug(u"Jumbo frames temporarily disabled!")
self._params.add_with_value(
u"chardev", f"socket,id=char{self._nic_id},"
- f"path={socket}{u',server' if server is True else u''}"
+ f"path={socket}{u',server=on' if server is True else u''}"
)
self._params.add_with_value(
u"netdev", f"vhost-user,id=vhost{self._nic_id},"
@@ -313,9 +324,10 @@ class QemuUtils:
vpp_config.add_unix_exec(running)
vpp_config.add_socksvr()
vpp_config.add_main_heap_size(u"512M")
- vpp_config.add_main_heap_page_size(u"2M")
+ vpp_config.add_main_heap_page_size(self._opt[u"page_size"])
+ vpp_config.add_default_hugepage_size(self._opt[u"page_size"])
vpp_config.add_statseg_size(u"512M")
- vpp_config.add_statseg_page_size(u"2M")
+ vpp_config.add_statseg_page_size(self._opt[u"page_size"])
vpp_config.add_statseg_per_node_counters(u"on")
vpp_config.add_buffers_per_numa(107520)
vpp_config.add_cpu_main_core(u"0")
@@ -593,7 +605,7 @@ class QemuUtils:
except AttributeError:
self._wait_default()
- def _wait_default(self, retries=60):
+ def _wait_default(self, retries=120):
"""Wait until QEMU with VPP is booted.
:param retries: Number of retries.
@@ -720,7 +732,9 @@ class QemuUtils:
message = f"QEMU: Start failed on {self._node[u'host']}!"
try:
DUTSetup.check_huge_page(
- self._node, u"/dev/hugepages", int(self._opt.get(u"mem")))
+ self._node, self._opt.get(u"mem-path"),
+ int(self._opt.get(u"mem"))
+ )
exec_cmd_no_error(
self._node, cmd_opts, timeout=300, sudo=True, message=message
diff --git a/resources/libraries/python/SRv6.py b/resources/libraries/python/SRv6.py
index eca22a2b17..0170df5ef6 100644
--- a/resources/libraries/python/SRv6.py
+++ b/resources/libraries/python/SRv6.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -222,13 +222,14 @@ class SRv6:
:type sid_list: list
:type mode: str
"""
- cmd = u"sr_policy_add"
+ cmd = u"sr_policy_add_v2"
args = dict(
bsid_addr=IPv6Address(bsid).packed,
weight=1,
is_encap=bool(mode == u"encap"),
- is_spray=False,
- sids=SRv6.create_srv6_sid_list(sid_list)
+ type=0, # Neither SPRAY nor TEF are needed yet.
+ sids=SRv6.create_srv6_sid_list(sid_list),
+ # encap_src is optional, do not set yet.
)
err_msg = f"Failed to add SR policy for BindingSID {bsid} " \
f"on host {node[u'host']}"
@@ -243,7 +244,7 @@ class SRv6:
:param node: Given node to show SRv6 policies on.
:type node: dict
"""
- cmd = u"sr_policies_dump"
+ cmd = u"sr_policies_v2_dump"
PapiSocketExecutor.dump_and_log(node, (cmd,))
@staticmethod
diff --git a/resources/libraries/python/SetupFramework.py b/resources/libraries/python/SetupFramework.py
index e0c3a4cb61..95ca8a7d51 100644
--- a/resources/libraries/python/SetupFramework.py
+++ b/resources/libraries/python/SetupFramework.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -56,7 +56,8 @@ def pack_framework_dir():
run(
[
u"tar", u"--sparse", u"--exclude-vcs", u"--exclude=output*.xml",
- u"--exclude=./tmp", u"-zcf", file_name, u"."
+ u"--exclude=./tmp", u"--exclude=./env", u"--exclude=./.git",
+ u"-zcf", file_name, u"."
], msg=u"Could not pack testing framework"
)
@@ -105,7 +106,7 @@ def extract_tarball_at_node(tarball, node):
node, cmd,
message=f"Failed to extract {tarball} at node {node[u'type']} "
f"host {node[u'host']}, port {node[u'port']}",
- timeout=240, include_reason=True
+ timeout=600, include_reason=True
)
logger.console(
f"Extracting tarball to {con.REMOTE_FW_DIR} on {node[u'type']} "
@@ -134,7 +135,7 @@ def create_env_directory_at_node(node):
f"&& source env/bin/activate && ANSIBLE_SKIP_CONFLICT_CHECK=1 " \
f"pip3 install -r requirements.txt"
stdout, stderr = exec_cmd_no_error(
- node, cmd, timeout=100, include_reason=True,
+ node, cmd, timeout=300, include_reason=True,
message=f"Failed install at node {node[u'type']} host {node[u'host']}, "
f"port {node[u'port']}"
)
@@ -214,7 +215,7 @@ def delete_framework_dir(node):
node, f"sudo rm -rf {con.REMOTE_FW_DIR}",
message=f"Framework delete failed at node {node[u'type']} "
f"host {node[u'host']}, port {node[u'port']}",
- timeout=100, include_reason=True
+ timeout=100, include_reason=True,
)
logger.console(
f"Deleting framework directory on {node[u'type']} host {node[u'host']},"
@@ -258,9 +259,9 @@ def cleanup_node(node, results=None, logs=None):
class SetupFramework:
"""Setup suite run on topology nodes.
- Many VAT/CLI based tests need the scripts at remote hosts before executing
- them. This class packs the whole testing directory and copies it over
- to all nodes in topology under /tmp/
+ Some tests need the scripts at remote hosts before executing them.
+ This class packs the whole testing directory and copies it over
+ to all nodes in topology under /tmp/.
"""
@staticmethod
diff --git a/resources/libraries/python/TRexConfigGenerator.py b/resources/libraries/python/TRexConfigGenerator.py
new file mode 100644
index 0000000000..c50b42610c
--- /dev/null
+++ b/resources/libraries/python/TRexConfigGenerator.py
@@ -0,0 +1,301 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""TRex Configuration File Generator library."""
+
+import re
+import yaml
+
+from resources.libraries.python.Constants import Constants
+from resources.libraries.python.CpuUtils import CpuUtils
+from resources.libraries.python.ssh import exec_cmd_no_error
+from resources.libraries.python.topology import NodeType, NodeSubTypeTG
+from resources.libraries.python.topology import Topology
+
+
+__all__ = ["TrexConfigGenerator", "TrexConfig"]
+
+def pci_dev_check(pci_dev):
+ """Check if provided PCI address is in correct format.
+
+ :param pci_dev: PCI address (expected format: xxxx:xx:xx.x).
+ :type pci_dev: str
+ :returns: True if PCI address is in correct format.
+ :rtype: bool
+ :raises ValueError: If PCI address is in incorrect format.
+ """
+ pattern = re.compile(
+ r"^[0-9A-Fa-f]{4}:[0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}\.[0-9A-Fa-f]$"
+ )
+ if not re.match(pattern, pci_dev):
+ raise ValueError(
+ f"PCI address {pci_dev} is not in valid format xxxx:xx:xx.x"
+ )
+ return True
+
+
+class TrexConfigGenerator:
+ """TRex Startup Configuration File Generator."""
+
+ def __init__(self):
+ """Initialize library.
+ """
+ self._node = ""
+ self._node_key = ""
+ self._node_config = dict()
+ self._node_serialized_config = ""
+ self._startup_configuration_path = "/etc/trex_cfg.yaml"
+
+ def set_node(self, node, node_key=None):
+ """Set topology node.
+
+ :param node: Node to store configuration on.
+ :param node_key: Topology node key.
+ :type node: dict
+ :type node_key: str
+ :raises RuntimeError: If Node type is not TG and subtype is not TREX.
+ """
+ if node.get("type") is None:
+ msg = "Node type is not defined!"
+ elif node["type"] != NodeType.TG:
+ msg = f"Node type is {node['type']!r}, not a TG!"
+ elif node.get("subtype") is None:
+ msg = "TG subtype is not defined"
+ elif node["subtype"] != NodeSubTypeTG.TREX:
+ msg = f"TG subtype {node['subtype']!r} is not supported"
+ else:
+ self._node = node
+ self._node_key = node_key
+ return
+ raise RuntimeError(msg)
+
+ def get_serialized_config(self):
+ """Get serialized startup configuration in YAML format.
+
+ :returns: Startup configuration in YAML format.
+ :rtype: str
+ """
+ self.serialize_config(self._node_config)
+ return self._node_serialized_config
+
+ def serialize_config(self, obj):
+ """Serialize the startup configuration in YAML format.
+
+ :param obj: Python Object to print.
+ :type obj: Obj
+ """
+ self._node_serialized_config = yaml.dump([obj], default_style=None)
+
+ def add_config_item(self, config, value, path):
+ """Add startup configuration item.
+
+ :param config: Startup configuration of node.
+ :param value: Value to insert.
+ :param path: Path where to insert item.
+ :type config: dict
+ :type value: str
+ :type path: list
+ """
+ if len(path) == 1:
+ config[path[0]] = value
+ return
+ if path[0] not in config:
+ config[path[0]] = dict()
+ elif isinstance(config[path[0]], str):
+ config[path[0]] = dict() if config[path[0]] == "" \
+ else {config[path[0]]: ""}
+ self.add_config_item(config[path[0]], value, path[1:])
+
+ def add_version(self, value=2):
+ """Add config file version.
+
+ :param value: Version of configuration file.
+ :type value: int
+ """
+ path = ["version"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_c(self, value):
+ """Add core count.
+
+ :param value: Core count.
+ :type value: int
+ """
+ path = ["c"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_limit_memory(self, value):
+ """Add memory limit.
+
+ :param value: Memory limit.
+ :type value: str
+ """
+ path = ["limit_memory"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_interfaces(self, devices):
+ """Add PCI device configuration.
+
+ :param devices: PCI device(s) (format xxxx:xx:xx.x).
+ :type devices: list(str)
+ """
+ for device in devices:
+ pci_dev_check(device)
+
+ path = ["interfaces"]
+ self.add_config_item(self._node_config, devices, path)
+
+ def add_rx_desc(self, value):
+ """Add RX descriptors.
+
+ :param value: RX descriptors count.
+ :type value: int
+ """
+ path = ["rx_desc"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_tx_desc(self, value):
+ """Add TX descriptors.
+
+ :param value: TX descriptors count.
+ :type value: int
+ """
+ path = ["tx_desc"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_port_info(self, value):
+ """Add port information configuration.
+
+ :param value: Port information configuration.
+ :type value: list(dict)
+ """
+ path = ["port_info"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_platform_master_thread_id(self, value):
+ """Add platform master thread ID.
+
+ :param value: Master thread ID.
+ :type value: int
+ """
+ path = ["platform", "master_thread_id"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_platform_latency_thread_id(self, value):
+ """Add platform latency thread ID.
+
+ :param value: Latency thread ID.
+ :type value: int
+ """
+ path = ["platform", "latency_thread_id"]
+ self.add_config_item(self._node_config, value, path)
+
+ def add_platform_dual_if(self, value):
+ """Add platform dual interface configuration.
+
+ :param value: Dual interface configuration.
+ :type value: list(dict)
+ """
+ path = ["platform", "dual_if"]
+ self.add_config_item(self._node_config, value, path)
+
+ def write_config(self, path=None):
+ """Generate and write TRex startup configuration to file.
+
+ :param path: Override startup configuration path.
+ :type path: str
+ """
+ self.serialize_config(self._node_config)
+
+ if path is None:
+ path = self._startup_configuration_path
+
+ command = f"echo \"{self._node_serialized_config}\" | sudo tee {path}"
+ message = "Writing TRex startup configuration failed!"
+ exec_cmd_no_error(self._node, command, message=message)
+
+
+class TrexConfig:
+ """TRex Configuration Class.
+ """
+ @staticmethod
+ def add_startup_configuration(node, tg_topology):
+ """Apply TRex startup configuration.
+
+ :param node: TRex node in the topology.
+ :param tg_topology: Ordered TRex links.
+ :type node: dict
+ :type tg_topology: list(dict)
+ """
+ pci_addresses = list()
+ dual_if = list()
+ port_info = list()
+ master_thread_id = None
+ latency_thread_id = None
+ cores = None
+ sockets = list()
+
+ for idx, link in enumerate(tg_topology):
+ pci_addresses.append(
+ Topology().get_interface_pci_addr(node, link["interface"])
+ )
+ if len(tg_topology) > 2:
+ # Multiple dual_ifs must not share the cores.
+ tg_dtc = Constants.TREX_CORE_COUNT_MULTI
+ tg_dtc_offset = Constants.TREX_CORE_COUNT_MULTI * (idx // 2)
+ else:
+ # Single dual_if can share cores.
+ tg_dtc = Constants.TREX_CORE_COUNT
+ tg_dtc_offset = 0
+ master_thread_id, latency_thread_id, socket, threads = \
+ CpuUtils.get_affinity_trex(
+ node, link["interface"], tg_dtc=tg_dtc,
+ tg_dtc_offset=tg_dtc_offset
+ )
+ dual_if.append(dict(socket=socket, threads=threads))
+ cores = len(threads)
+ port_info.append(
+ dict(
+ src_mac=Topology().get_interface_mac(
+ node, link["interface"]
+ ),
+ dest_mac=link["dst_mac"]
+ )
+ )
+ sockets.append(socket)
+
+ limit_memory = f"{Constants.TREX_LIMIT_MEMORY}"
+ if len(tg_topology) <= 2 and 0 in sockets and 1 in sockets:
+ limit_memory = (
+ f"{Constants.TREX_LIMIT_MEMORY},{Constants.TREX_LIMIT_MEMORY}"
+ )
+ if len(tg_topology) > 2:
+ limit_memory = (
+ f"{Constants.TREX_LIMIT_MEMORY_MULTI}"
+ )
+
+ trex_config = TrexConfigGenerator()
+ trex_config.set_node(node)
+ trex_config.add_version()
+ trex_config.add_interfaces(pci_addresses)
+ trex_config.add_c(cores)
+ trex_config.add_limit_memory(limit_memory)
+ trex_config.add_port_info(port_info)
+ if Constants.TREX_RX_DESCRIPTORS_COUNT != 0:
+ trex_config.add_rx_desc(Constants.TREX_RX_DESCRIPTORS_COUNT)
+ if Constants.TREX_TX_DESCRIPTORS_COUNT != 0:
+ trex_config.add_rx_desc(Constants.TREX_TX_DESCRIPTORS_COUNT)
+ trex_config.add_platform_master_thread_id(int(master_thread_id))
+ trex_config.add_platform_latency_thread_id(int(latency_thread_id))
+ trex_config.add_platform_dual_if(dual_if)
+ trex_config.write_config()
diff --git a/resources/libraries/python/Tap.py b/resources/libraries/python/Tap.py
index 7a987fc34b..7380344b72 100644
--- a/resources/libraries/python/Tap.py
+++ b/resources/libraries/python/Tap.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -64,7 +64,7 @@ class Tap:
:returns: Returns a interface index.
:rtype: int
"""
- cmd = u"tap_create_v2"
+ cmd = u"tap_create_v3"
args = dict(
id=Constants.BITWISE_NON_ZERO,
use_random_mac=bool(mac is None),
diff --git a/resources/libraries/python/TelemetryUtil.py b/resources/libraries/python/TelemetryUtil.py
index be2f4796b2..63d0bf60a7 100644
--- a/resources/libraries/python/TelemetryUtil.py
+++ b/resources/libraries/python/TelemetryUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,129 +13,87 @@
"""Telemetry utility."""
-from robot.api import logger
-
+from resources.libraries.python.model.ExportResult import append_telemetry
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.OptionString import OptionString
-from resources.libraries.python.ssh import exec_cmd, exec_cmd_no_error
+from resources.libraries.python.ssh import exec_cmd_no_error
from resources.libraries.python.topology import NodeType
-__all__ = [u"TelemetryUtil"]
+__all__ = ["TelemetryUtil"]
class TelemetryUtil:
"""Class contains methods for telemetry utility."""
@staticmethod
- def perf_stat(node, cpu_list=None, duration=1):
- """Get perf stat read for duration.
-
- :param node: Node in the topology.
- :param cpu_list: CPU List as a string separated by comma.
- :param duration: Measure time in seconds.
- :type node: dict
- :type cpu_list: str
- :type duration: int
- """
- if cpu_list:
- cpu_list = list(dict.fromkeys(cpu_list.split(u",")))
- cpu_list = ",".join(str(cpu) for cpu in cpu_list)
-
- cmd_opts = OptionString(prefix=u"--")
- cmd_opts.add(u"no-aggr")
- cmd_opts.add_with_value_if(
- u"cpu", cpu_list, cpu_list
- )
- cmd_opts.add_if(
- u"all-cpus", not(cpu_list)
- )
- cmd_opts.add_with_value_if(
- u"event", f"'{{{Constants.PERF_STAT_EVENTS}}}'",
- Constants.PERF_STAT_EVENTS
- )
- cmd_opts.add_with_value(
- u"interval-print", 1000
- )
- cmd_opts.add_with_value(
- u"field-separator", u"';'"
- )
-
- cmd_base = OptionString()
- cmd_base.add(f"perf stat")
- cmd_base.extend(cmd_opts)
- cmd_base.add(u"--")
- cmd_base.add_with_value(u"sleep", int(duration))
-
- exec_cmd(node, cmd_base, sudo=True)
-
- @staticmethod
- def perf_stat_on_all_duts(nodes, cpu_list=None, duration=1):
- """Get perf stat read for duration on all DUTs.
-
- :param nodes: Nodes in the topology.
- :param cpu_list: CPU List.
- :param duration: Measure time in seconds.
- :type nodes: dict
- :type cpu_list: str
- :type duration: int
- """
- for node in nodes.values():
- if node[u"type"] == NodeType.DUT:
- TelemetryUtil.perf_stat(
- node, cpu_list=cpu_list, duration=duration
- )
-
- @staticmethod
- def run_telemetry(node, profile, hook=None):
- """Get telemetry stat read for duration.
+ def _run_telemetry(
+ node, profile, sid=None, spath=None, rate="", export=False):
+ """Get telemetry read on node.
:param node: Node in the topology.
:param profile: Telemetry configuration profile.
- :param hook: Process ID or socket path (optional).
+ :param sid: Socket ID used to describe recipient side of socket.
+ :param spath: Socket path.
+ :param rate: Telemetry load, unique within the test (optional).
+ :param export: If false, do not attempt JSON export (default false).
:type node: dict
:type profile: str
- :type hook: str
+ :type sid: str
+ :type spath: str
+ :type rate: str
+ :type export: bool
"""
- config = u""
+ config = ""
config += f"{Constants.REMOTE_FW_DIR}/"
config += f"{Constants.RESOURCES_TPL_TELEMETRY}/"
config += f"{profile}"
- cd_cmd = u""
+ cd_cmd = ""
cd_cmd += f"sh -c \"cd {Constants.REMOTE_FW_DIR}/"
cd_cmd += f"{Constants.RESOURCES_TOOLS}"
- bin_cmd = f"python3 -m telemetry --config {config} --hook {hook}\""
- hostname = node[u"host"]
-
+ if spath:
+ bin_cmd = f"python3 -m telemetry --config {config} --hook {spath}\""
+ else:
+ bin_cmd = f"python3 -m telemetry --config {config}\""
exec_cmd_no_error(node, f"{cd_cmd} && {bin_cmd}", sudo=True)
+
+ if not export:
+ return
+
+ hostname = exec_cmd_no_error(node, "hostname")[0].strip()
stdout, _ = exec_cmd_no_error(
- node, u"cat /tmp/metric.prom", sudo=True, log_stdout_err=False
- )
- logger.info(
- u"# TYPE target info\n"
- u"# HELP target Target metadata\n"
- f"target_info{{hostname=\"{hostname}\",hook=\"{hook}\"}} 1\n"
- f"{stdout}"
+ node, "cat /tmp/metric.prom", sudo=True, log_stdout_err=False
)
+ prefix = "{"
+ prefix += f"hostname=\"{hostname}\","
+ if sid:
+ prefix += f"hook=\"{sid}\","
+ prefix += f"rate=\"{rate}\","
+ for line in stdout.splitlines():
+ if line and not line.startswith("#"):
+ append_telemetry(
+ prefix.join(line.rsplit("{", 1)).replace("\"", "'")
+ )
- @staticmethod
- def run_telemetry_on_all_duts(nodes, profile):
- """Get telemetry stat read on all DUTs.
+ def run_telemetry_on_all_duts(self, nodes, profile, rate="", export=False):
+ """Get telemetry read on all DUTs.
:param nodes: Nodes in the topology.
:param profile: Telemetry configuration profile.
- :param hooks: Dict of Process IDs or socket paths (optional).
+ :param rate: Telemetry load, unique within the test (optional).
+ :param export: If false, do not attempt JSON export (default false).
:type nodes: dict
:type profile: str
- :type hooks: dict
+ :type rate: str
+ :type export: bool
"""
for node in nodes.values():
- if node[u"type"] == NodeType.DUT:
+ if node["type"] == NodeType.DUT:
try:
- for socket in node[u"sockets"][u"PAPI"].values():
- TelemetryUtil.run_telemetry(
- node, profile=profile, hook=socket
+ for sid, spath in node["sockets"]["CLI"].items():
+ self._run_telemetry(
+ node, profile=profile, sid=sid, spath=spath,
+ rate=rate, export=export
)
except IndexError:
pass
diff --git a/resources/libraries/python/TestConfig.py b/resources/libraries/python/TestConfig.py
index 28c740e42e..eb093a4651 100644
--- a/resources/libraries/python/TestConfig.py
+++ b/resources/libraries/python/TestConfig.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -23,7 +23,6 @@ from resources.libraries.python.IPAddress import IPAddress
from resources.libraries.python.IPUtil import IPUtil
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.topology import Topology
-from resources.libraries.python.VatExecutor import VatExecutor
class TestConfig:
@@ -117,38 +116,6 @@ class TestConfig:
src_ip_start = ip_address(src_ip_start)
dst_ip_start = ip_address(dst_ip_start)
- if vxlan_count > 10:
- commands = list()
- for i in range(0, vxlan_count):
- try:
- src_ip = src_ip_start + i * ip_step
- dst_ip = dst_ip_start + i * ip_step
- except AddressValueError:
- logger.warn(
- u"Can't do more iterations - IP address limit "
- u"has been reached."
- )
- vxlan_count = i
- break
- commands.append(
- f"sw_interface_add_del_address sw_if_index "
- f"{Topology.get_interface_sw_index(node, node_vxlan_if)} "
- f"{src_ip}/{128 if src_ip.version == 6 else 32}\n"
- )
- commands.append(
- f"vxlan_add_del_tunnel src {src_ip} dst {dst_ip} "
- f"vni {vni_start + i}\n"
- )
- commands.append(
- f"create_vlan_subif sw_if_index "
- f"{Topology.get_interface_sw_index(node, node_vlan_if)} "
- f"vlan {i + 1}\n"
- )
- VatExecutor().write_and_execute_script(
- node, u"/tmp/create_vxlan_interfaces.config", commands
- )
- return vxlan_count
-
cmd1 = u"sw_interface_add_del_address"
args1 = dict(
sw_if_index=InterfaceUtil.get_interface_index(node, node_vxlan_if),
@@ -174,7 +141,7 @@ class TestConfig:
vlan_id=None
)
- with PapiSocketExecutor(node) as papi_exec:
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(0, vxlan_count):
try:
src_ip = src_ip_start + i * ip_step
@@ -198,9 +165,9 @@ class TestConfig:
args2[u"vni"] = int(vni_start) + i
args3[u"vlan_id"] = i + 1
history = bool(not 1 < i < vxlan_count - 1)
- papi_exec.add(cmd1, history=history, **args1).\
- add(cmd2, history=history, **args2).\
- add(cmd3, history=history, **args3)
+ papi_exec.add(cmd1, history=history, **args1)
+ papi_exec.add(cmd2, history=history, **args2)
+ papi_exec.add(cmd3, history=history, **args3)
papi_exec.get_replies()
return vxlan_count
@@ -220,50 +187,6 @@ class TestConfig:
:type node_vlan_if: str
"""
if_data = InterfaceUtil.vpp_get_interface_data(node)
- if vxlan_count > 10:
- commands = list()
- for i in range(0, vxlan_count):
- vxlan_subif_key = Topology.add_new_port(node, u"vxlan_tunnel")
- vxlan_subif_name = f"vxlan_tunnel{i}"
- founds = dict(vxlan=False, vlan=False)
- vxlan_subif_idx = None
- vlan_subif_key = Topology.add_new_port(node, u"vlan_subif")
- vlan_subif_name = \
- f"{Topology.get_interface_name(node, node_vlan_if)}.{i + 1}"
- vlan_idx = None
- for data in if_data:
- if_name = data[u"interface_name"]
- if not founds[u"vxlan"] and if_name == vxlan_subif_name:
- vxlan_subif_idx = data[u"sw_if_index"]
- founds[u"vxlan"] = True
- elif not founds[u"vlan"] and if_name == vlan_subif_name:
- vlan_idx = data[u"sw_if_index"]
- founds[u"vlan"] = True
- if founds[u"vxlan"] and founds[u"vlan"]:
- break
- Topology.update_interface_sw_if_index(
- node, vxlan_subif_key, vxlan_subif_idx)
- Topology.update_interface_name(
- node, vxlan_subif_key, vxlan_subif_name)
- commands.append(
- f"sw_interface_set_flags sw_if_index {vxlan_subif_idx} "
- f"admin-up link-up\n"
- )
- Topology.update_interface_sw_if_index(
- node, vlan_subif_key, vlan_idx
- )
- Topology.update_interface_name(
- node, vlan_subif_key, vlan_subif_name
- )
- commands.append(
- f"sw_interface_set_flags sw_if_index {vlan_idx} admin-up "
- f"link-up\n"
- )
- VatExecutor().write_and_execute_script(
- node, u"/tmp/put_subinterfaces_up.config", commands
- )
- return
-
cmd = u"sw_interface_set_flags"
args1 = dict(
sw_if_index=None,
@@ -274,7 +197,7 @@ class TestConfig:
flags=InterfaceStatusFlags.IF_STATUS_API_FLAG_ADMIN_UP.value
)
- with PapiSocketExecutor(node) as papi_exec:
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(0, vxlan_count):
vxlan_subif_key = Topology.add_new_port(node, u"vxlan_tunnel")
vxlan_subif_name = f"vxlan_tunnel{i}"
@@ -310,9 +233,8 @@ class TestConfig:
)
args2[u"sw_if_index"] = vlan_idx
history = bool(not 1 < i < vxlan_count - 1)
- papi_exec.add(cmd, history=history, **args1). \
- add(cmd, history=history, **args2)
- papi_exec.add(cmd, **args1).add(cmd, **args2)
+ papi_exec.add(cmd, history=history, **args1)
+ papi_exec.add(cmd, history=history, **args2)
papi_exec.get_replies()
@staticmethod
@@ -344,43 +266,6 @@ class TestConfig:
"""
dst_ip_start = ip_address(dst_ip_start)
- if vxlan_count > 1:
- idx_vxlan_if = Topology.get_interface_sw_index(node, node_vxlan_if)
- commands = list()
- for i in range(0, vxlan_count):
- dst_ip = dst_ip_start + i * ip_step
- commands.append(
- f"exec ip neighbor "
- f"{Topology.get_interface_name(node, node_vxlan_if)} "
- f"{dst_ip} "
- f"{Topology.get_interface_mac(op_node, op_node_if)} static "
- f"\n"
- )
- commands.append(
- f"ip_route_add_del "
- f"{dst_ip}/{128 if dst_ip.version == 6 else 32} count 1 "
- f"via {dst_ip} sw_if_index {idx_vxlan_if}\n"
- )
- sw_idx_vxlan = Topology.get_interface_sw_index(
- node, f"vxlan_tunnel{i + 1}"
- )
- commands.append(
- f"sw_interface_set_l2_bridge sw_if_index {sw_idx_vxlan} "
- f"bd_id {bd_id_start + i} shg 0 enable\n"
- )
- sw_idx_vlan = Topology.get_interface_sw_index(
- node, f"vlan_subif{i + 1}"
- )
- commands.append(
- f"sw_interface_set_l2_bridge sw_if_index {sw_idx_vlan} "
- f"bd_id {bd_id_start + i} shg 0 enable\n"
- )
- VatExecutor().write_and_execute_script(
- node, u"/tmp/configure_routes_and_bridge_domains.config",
- commands
- )
- return
-
cmd1 = u"ip_neighbor_add_del"
neighbor = dict(
sw_if_index=Topology.get_interface_sw_index(node, node_vxlan_if),
@@ -422,7 +307,7 @@ class TestConfig:
enable=1
)
- with PapiSocketExecutor(node) as papi_exec:
+ with PapiSocketExecutor(node, is_async=True) as papi_exec:
for i in range(0, vxlan_count):
args1[u"neighbor"][u"ip_address"] = \
str(dst_ip_start + i * ip_step)
@@ -439,8 +324,9 @@ class TestConfig:
)
args4[u"bd_id"] = int(bd_id_start+i)
history = bool(not 1 < i < vxlan_count - 1)
- papi_exec.add(cmd1, history=history, **args1). \
- add(cmd2, history=history, **args2). \
- add(cmd3, history=history, **args3). \
- add(cmd3, history=history, **args4)
+ papi_exec.add(cmd1, history=history, **args1)
+ papi_exec.add(cmd2, history=history, **args2)
+ papi_exec.add(cmd3, history=history, **args3)
+ # Yes, args4 go with cmd3, there is no cmd4.
+ papi_exec.add(cmd3, history=history, **args4)
papi_exec.get_replies()
diff --git a/resources/libraries/python/TrafficGenerator.py b/resources/libraries/python/TrafficGenerator.py
index b2748f74ba..936cb3a06d 100644
--- a/resources/libraries/python/TrafficGenerator.py
+++ b/resources/libraries/python/TrafficGenerator.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -16,21 +16,25 @@
import math
import time
+from typing import Callable, List, Optional, Union
+
from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn
from .Constants import Constants
-from .CpuUtils import CpuUtils
from .DropRateSearch import DropRateSearch
-from .MLRsearch.AbstractMeasurer import AbstractMeasurer
-from .MLRsearch.MultipleLossRatioSearch import MultipleLossRatioSearch
-from .MLRsearch.ReceiveRateMeasurement import ReceiveRateMeasurement
+from .MLRsearch import (
+ AbstractMeasurer, Config, GoalResult, MeasurementResult,
+ MultipleLossRatioSearch, SearchGoal,
+)
from .PLRsearch.PLRsearch import PLRsearch
from .OptionString import OptionString
from .ssh import exec_cmd_no_error, exec_cmd
from .topology import NodeType
from .topology import NodeSubTypeTG
from .topology import Topology
+from .TRexConfigGenerator import TrexConfig
+from .DUTSetup import DUTSetup as DS
__all__ = [u"TGDropRateSearchImpl", u"TrafficGenerator", u"OptimizedSearch"]
@@ -128,22 +132,18 @@ class TrexMode:
STL = u"STL"
-# TODO: Pylint says too-many-instance-attributes.
class TrafficGenerator(AbstractMeasurer):
"""Traffic Generator."""
- # TODO: Remove "trex" from lines which could work with other TGs.
-
# Use one instance of TrafficGenerator for all tests in test suite
ROBOT_LIBRARY_SCOPE = u"TEST SUITE"
def __init__(self):
- # TODO: Separate into few dataclasses/dicts.
- # Pylint dislikes large unstructured state, and it is right.
self._node = None
self._mode = None
# TG interface order mapping
self._ifaces_reordered = False
+ self._ifaces = []
# Result holding fields, to be removed.
self._result = None
self._loss = None
@@ -178,8 +178,7 @@ class TrafficGenerator(AbstractMeasurer):
self.ramp_up_duration = None
self.state_timeout = None
# Transient data needed for async measurements.
- self._xstats = (None, None)
- # TODO: Rename "xstats" to something opaque, so T-Rex is not privileged?
+ self._xstats = []
@property
def node(self):
@@ -252,119 +251,111 @@ class TrafficGenerator(AbstractMeasurer):
f"{self._node[u'subtype']} not running in {expected_mode} mode!"
)
- # TODO: pylint says disable=too-many-locals.
- def initialize_traffic_generator(
- self, tg_node, tg_if1, tg_if2, tg_if1_adj_node, tg_if1_adj_if,
- tg_if2_adj_node, tg_if2_adj_if, osi_layer, tg_if1_dst_mac=None,
- tg_if2_dst_mac=None):
- """TG initialization.
+ @staticmethod
+ def get_tg_type(tg_node):
+ """Log and return the installed traffic generator type.
- TODO: Document why do we need (and how do we use) _ifaces_reordered.
+ :param tg_node: Node from topology file.
+ :type tg_node: dict
+ :returns: Traffic generator type string.
+ :rtype: str
+ :raises RuntimeError: If command returns nonzero return code.
+ """
+ return str(check_subtype(tg_node))
- :param tg_node: Traffic generator node.
- :param tg_if1: TG - name of first interface.
- :param tg_if2: TG - name of second interface.
- :param tg_if1_adj_node: TG if1 adjecent node.
- :param tg_if1_adj_if: TG if1 adjecent interface.
- :param tg_if2_adj_node: TG if2 adjecent node.
- :param tg_if2_adj_if: TG if2 adjecent interface.
- :param osi_layer: 'L2', 'L3' or 'L7' - OSI Layer testing type.
- :param tg_if1_dst_mac: Interface 1 destination MAC address.
- :param tg_if2_dst_mac: Interface 2 destination MAC address.
+ @staticmethod
+ def get_tg_version(tg_node):
+ """Log and return the installed traffic generator version.
+
+ :param tg_node: Node from topology file.
:type tg_node: dict
- :type tg_if1: str
- :type tg_if2: str
- :type tg_if1_adj_node: dict
- :type tg_if1_adj_if: str
- :type tg_if2_adj_node: dict
- :type tg_if2_adj_if: str
- :type osi_layer: str
- :type tg_if1_dst_mac: str
- :type tg_if2_dst_mac: str
- :returns: nothing
- :raises RuntimeError: In case of issue during initialization.
+ :returns: Traffic generator version string.
+ :rtype: str
+ :raises RuntimeError: If command returns nonzero return code.
"""
subtype = check_subtype(tg_node)
if subtype == NodeSubTypeTG.TREX:
- self._node = tg_node
- self._mode = TrexMode.ASTF if osi_layer == u"L7" else TrexMode.STL
- if1 = dict()
- if2 = dict()
- if1[u"pci"] = Topology().get_interface_pci_addr(self._node, tg_if1)
- if2[u"pci"] = Topology().get_interface_pci_addr(self._node, tg_if2)
- if1[u"addr"] = Topology().get_interface_mac(self._node, tg_if1)
- if2[u"addr"] = Topology().get_interface_mac(self._node, tg_if2)
-
- if osi_layer == u"L2":
- if1[u"adj_addr"] = if2[u"addr"]
- if2[u"adj_addr"] = if1[u"addr"]
- elif osi_layer in (u"L3", u"L7"):
- if1[u"adj_addr"] = Topology().get_interface_mac(
- tg_if1_adj_node, tg_if1_adj_if
- )
- if2[u"adj_addr"] = Topology().get_interface_mac(
- tg_if2_adj_node, tg_if2_adj_if
- )
- else:
- raise ValueError(u"Unknown OSI layer!")
-
- # in case of switched environment we can override MAC addresses
- if tg_if1_dst_mac is not None and tg_if2_dst_mac is not None:
- if1[u"adj_addr"] = tg_if1_dst_mac
- if2[u"adj_addr"] = tg_if2_dst_mac
+ command = f"cat {Constants.TREX_INSTALL_DIR}/VERSION"
+ message = u"Get T-Rex version failed!"
+ stdout, _ = exec_cmd_no_error(tg_node, command, message=message)
+ return stdout.strip()
+ return "none"
- if min(if1[u"pci"], if2[u"pci"]) != if1[u"pci"]:
- if1, if2 = if2, if1
- self._ifaces_reordered = True
+ def initialize_traffic_generator(self, osi_layer, pfs=2):
+ """TG initialization.
- master_thread_id, latency_thread_id, socket, threads = \
- CpuUtils.get_affinity_trex(
- self._node, tg_if1, tg_if2,
- tg_dtc=Constants.TREX_CORE_COUNT)
+ :param osi_layer: 'L2', 'L3' or 'L7' - OSI Layer testing type.
+ :param pfs: Number of physical interfaces to configure.
+ :type osi_layer: str
+ :type pfs: int
+ :raises ValueError: If OSI layer is unknown.
+ """
+ if osi_layer not in ("L2", "L3", "L7"):
+ raise ValueError("Unknown OSI layer!")
- if osi_layer in (u"L2", u"L3", u"L7"):
- exec_cmd_no_error(
- self._node,
- f"sh -c 'cat << EOF > /etc/trex_cfg.yaml\n"
- f"- version: 2\n"
- f" c: {len(threads)}\n"
- f" limit_memory: {Constants.TREX_LIMIT_MEMORY}\n"
- f" interfaces: [\"{if1[u'pci']}\",\"{if2[u'pci']}\"]\n"
- f" port_info:\n"
- f" - dest_mac: \'{if1[u'adj_addr']}\'\n"
- f" src_mac: \'{if1[u'addr']}\'\n"
- f" - dest_mac: \'{if2[u'adj_addr']}\'\n"
- f" src_mac: \'{if2[u'addr']}\'\n"
- f" platform :\n"
- f" master_thread_id: {master_thread_id}\n"
- f" latency_thread_id: {latency_thread_id}\n"
- f" dual_if:\n"
- f" - socket: {socket}\n"
- f" threads: {threads}\n"
- f"EOF'",
- sudo=True, message=u"T-Rex config generation!"
- )
+ topology = BuiltIn().get_variable_value("&{topology_info}")
+ self._node = topology["TG"]
+ subtype = check_subtype(self._node)
- if Constants.TREX_RX_DESCRIPTORS_COUNT != 0:
- exec_cmd_no_error(
- self._node,
- f"sh -c 'cat << EOF >> /etc/trex_cfg.yaml\n"
- f" rx_desc: {Constants.TREX_RX_DESCRIPTORS_COUNT}\n"
- f"EOF'",
- sudo=True, message=u"T-Rex rx_desc modification!"
+ if subtype == NodeSubTypeTG.TREX:
+ trex_topology = list()
+ self._mode = TrexMode.ASTF if osi_layer == "L7" else TrexMode.STL
+
+ for link in range(1, pfs, 2):
+ tg_if1_adj_addr = topology[f"TG_pf{link+1}_mac"][0]
+ tg_if2_adj_addr = topology[f"TG_pf{link}_mac"][0]
+ if osi_layer in ("L3", "L7") and "DUT1" in topology.keys():
+ ifl = BuiltIn().get_variable_value("${int}")
+ last = topology["duts_count"]
+ tg_if1_adj_addr = Topology().get_interface_mac(
+ topology["DUT1"],
+ BuiltIn().get_variable_value(
+ f"${{DUT1_{ifl}{link}}}[0]"
+ )
+ )
+ tg_if2_adj_addr = Topology().get_interface_mac(
+ topology[f"DUT{last}"],
+ BuiltIn().get_variable_value(
+ f"${{DUT{last}_{ifl}{link+1}}}[0]"
+ )
)
- if Constants.TREX_TX_DESCRIPTORS_COUNT != 0:
- exec_cmd_no_error(
- self._node,
- f"sh -c 'cat << EOF >> /etc/trex_cfg.yaml\n"
- f" tx_desc: {Constants.TREX_TX_DESCRIPTORS_COUNT}\n"
- f"EOF'",
- sudo=True, message=u"T-Rex tx_desc modification!"
+ if1_pci = topology[f"TG_pf{link}_pci"][0]
+ if2_pci = topology[f"TG_pf{link+1}_pci"][0]
+ if min(if1_pci, if2_pci) != if1_pci:
+ self._ifaces.append(str(link))
+ self._ifaces.append(str(link-1))
+ trex_topology.append(
+ dict(
+ interface=topology[f"TG_pf{link+1}"][0],
+ dst_mac=tg_if2_adj_addr
+ )
+ )
+ trex_topology.append(
+ dict(
+ interface=topology[f"TG_pf{link}"][0],
+ dst_mac=tg_if1_adj_addr
+ )
+ )
+ else:
+ self._ifaces.append(str(link-1))
+ self._ifaces.append(str(link))
+ trex_topology.append(
+ dict(
+ interface=topology[f"TG_pf{link}"][0],
+ dst_mac=tg_if1_adj_addr
+ )
+ )
+ trex_topology.append(
+ dict(
+ interface=topology[f"TG_pf{link+1}"][0],
+ dst_mac=tg_if2_adj_addr
+ )
)
- else:
- raise ValueError(u"Unknown OSI layer!")
+ TrexConfig.add_startup_configuration(
+ self._node, trex_topology
+ )
TrafficGenerator.startup_trex(
self._node, osi_layer, subtype=subtype
)
@@ -387,32 +378,41 @@ class TrafficGenerator(AbstractMeasurer):
if subtype == NodeSubTypeTG.TREX:
for _ in range(0, 3):
# Kill TRex only if it is already running.
- cmd = u"sh -c \"pgrep t-rex && pkill t-rex && sleep 3 || true\""
+ cmd = "sh -c \"pgrep t-rex && pkill t-rex && sleep 3 || true\""
exec_cmd_no_error(
- tg_node, cmd, sudo=True, message=u"Kill TRex failed!"
+ tg_node, cmd, sudo=True, message="Kill TRex failed!"
)
- # Configure TRex.
- ports = ''
- for port in tg_node[u"interfaces"].values():
- if u'Mellanox' not in port.get(u'model'):
- ports += f" {port.get(u'pci_address')}"
-
- cmd = f"sh -c \"cd {Constants.TREX_INSTALL_DIR}/scripts/ && " \
- f"./dpdk_nic_bind.py -u {ports} || true\""
- exec_cmd_no_error(
- tg_node, cmd, sudo=True,
- message=u"Unbind PCI ports from driver failed!"
- )
+ # Prepare interfaces for TRex.
+ tg_port_drv = Constants.TREX_PORT_DRIVER
+ mlx_driver = ""
+ for port in tg_node["interfaces"].values():
+ if "Mellanox" in port.get("model"):
+ mlx_driver = port.get("driver")
+ pci_addr = port.get("pci_address")
+ cur_driver = DS.get_pci_dev_driver(tg_node, pci_addr)
+ if cur_driver == mlx_driver:
+ pass
+ elif not cur_driver:
+ DS.pci_driver_bind(tg_node, pci_addr, mlx_driver)
+ else:
+ DS.pci_driver_unbind(tg_node, pci_addr)
+ DS.pci_driver_bind(tg_node, pci_addr, mlx_driver)
+ else:
+ pci_addr = port.get("pci_address")
+ cur_driver = DS.get_pci_dev_driver(tg_node, pci_addr)
+ if cur_driver:
+ DS.pci_driver_unbind(tg_node, pci_addr)
+ DS.pci_driver_bind(tg_node, pci_addr, tg_port_drv)
# Start TRex.
cd_cmd = f"cd '{Constants.TREX_INSTALL_DIR}/scripts/'"
- trex_cmd = OptionString([u"nohup", u"./t-rex-64"])
- trex_cmd.add(u"-i")
- trex_cmd.add(u"--prefix $(hostname)")
- trex_cmd.add(u"--hdrh")
- trex_cmd.add(u"--no-scapy-server")
- trex_cmd.add_if(u"--astf", osi_layer == u"L7")
+ trex_cmd = OptionString(["nohup", "./t-rex-64"])
+ trex_cmd.add("-i")
+ trex_cmd.add("--prefix $(hostname)")
+ trex_cmd.add("--hdrh")
+ trex_cmd.add("--no-scapy-server")
+ trex_cmd.add_if("--astf", osi_layer == "L7")
# OptionString does not create double space if extra is empty.
trex_cmd.add(f"{Constants.TREX_EXTRA_CMDLINE}")
inner_command = f"{cd_cmd} && {trex_cmd} > /tmp/trex.log 2>&1 &"
@@ -420,33 +420,33 @@ class TrafficGenerator(AbstractMeasurer):
try:
exec_cmd_no_error(tg_node, cmd, sudo=True)
except RuntimeError:
- cmd = u"sh -c \"cat /tmp/trex.log\""
+ cmd = "sh -c \"cat /tmp/trex.log\""
exec_cmd_no_error(
tg_node, cmd, sudo=True,
- message=u"Get TRex logs failed!"
+ message="Get TRex logs failed!"
)
- raise RuntimeError(u"Start TRex failed!")
+ raise RuntimeError("Start TRex failed!")
# Test T-Rex API responsiveness.
cmd = f"python3 {Constants.REMOTE_FW_DIR}/GPL/tools/trex/"
- if osi_layer in (u"L2", u"L3"):
- cmd += u"trex_stl_assert.py"
- elif osi_layer == u"L7":
- cmd += u"trex_astf_assert.py"
+ if osi_layer in ("L2", "L3"):
+ cmd += "trex_stl_assert.py"
+ elif osi_layer == "L7":
+ cmd += "trex_astf_assert.py"
else:
- raise ValueError(u"Unknown OSI layer!")
+ raise ValueError("Unknown OSI layer!")
try:
exec_cmd_no_error(
tg_node, cmd, sudo=True,
- message=u"T-Rex API is not responding!", retries=20
+ message="T-Rex API is not responding!", retries=20
)
except RuntimeError:
continue
return
# After max retries TRex is still not responding to API critical
# error occurred.
- exec_cmd(tg_node, u"cat /tmp/trex.log", sudo=True)
- raise RuntimeError(u"Start T-Rex failed after multiple retries!")
+ exec_cmd(tg_node, "cat /tmp/trex.log", sudo=True)
+ raise RuntimeError("Start T-Rex failed after multiple retries!")
@staticmethod
def is_trex_running(node):
@@ -457,7 +457,7 @@ class TrafficGenerator(AbstractMeasurer):
:returns: True if T-Rex is running otherwise False.
:rtype: bool
"""
- ret, _, _ = exec_cmd(node, u"pgrep t-rex", sudo=True)
+ ret, _, _ = exec_cmd(node, "pgrep t-rex", sudo=True)
return bool(int(ret) == 0)
@staticmethod
@@ -490,17 +490,17 @@ class TrafficGenerator(AbstractMeasurer):
:type node: dict
:raises RuntimeError: If stop traffic script fails.
"""
- command_line = OptionString().add(u"python3")
+ command_line = OptionString().add("python3")
dirname = f"{Constants.REMOTE_FW_DIR}/GPL/tools/trex"
command_line.add(f"'{dirname}/trex_astf_stop.py'")
- command_line.change_prefix(u"--")
- for index, value in enumerate(self._xstats):
+ command_line.add("--xstat")
+ for value in self._xstats:
if value is not None:
- value = value.replace(u"'", u"\"")
- command_line.add_equals(f"xstat{index}", f"'{value}'")
+ value = value.replace("'", "\"")
+ command_line.add(f"'{value}'")
stdout, _ = exec_cmd_no_error(
node, command_line,
- message=u"T-Rex ASTF runtime error!"
+ message="T-Rex ASTF runtime error!"
)
self._parse_traffic_results(stdout)
@@ -514,17 +514,17 @@ class TrafficGenerator(AbstractMeasurer):
:type node: dict
:raises RuntimeError: If stop traffic script fails.
"""
- command_line = OptionString().add(u"python3")
+ command_line = OptionString().add("python3")
dirname = f"{Constants.REMOTE_FW_DIR}/GPL/tools/trex"
command_line.add(f"'{dirname}/trex_stl_stop.py'")
- command_line.change_prefix(u"--")
- for index, value in enumerate(self._xstats):
+ command_line.add("--xstat")
+ for value in self._xstats:
if value is not None:
- value = value.replace(u"'", u"\"")
- command_line.add_equals(f"xstat{index}", f"'{value}'")
+ value = value.replace("'", "\"")
+ command_line.add(f"'{value}'")
stdout, _ = exec_cmd_no_error(
node, command_line,
- message=u"T-Rex STL runtime error!"
+ message="T-Rex STL runtime error!"
)
self._parse_traffic_results(stdout)
@@ -532,7 +532,7 @@ class TrafficGenerator(AbstractMeasurer):
"""Stop all traffic on TG.
:returns: Structure containing the result of the measurement.
- :rtype: ReceiveRateMeasurement
+ :rtype: MeasurementResult
:raises ValueError: If TG traffic profile is not supported.
"""
subtype = check_subtype(self._node)
@@ -552,7 +552,7 @@ class TrafficGenerator(AbstractMeasurer):
"""Compute duration for profile driver.
The final result is influenced by transaction scale and duration limit.
- It is assumed a higher level function has already set those to self.
+ It is assumed a higher level function has already set those on self.
The duration argument is the target value from search point of view,
before the overrides are applied here.
@@ -629,8 +629,6 @@ class TrafficGenerator(AbstractMeasurer):
if not isinstance(duration, (float, int)):
duration = float(duration)
- # TODO: Refactor the code so duration is computed only once,
- # and both the initial and the computed durations are logged.
computed_duration, _ = self._compute_duration(duration, multiplier)
command_line = OptionString().add(u"python3")
@@ -643,6 +641,9 @@ class TrafficGenerator(AbstractMeasurer):
)
command_line.add_with_value(u"duration", f"{computed_duration!r}")
command_line.add_with_value(u"frame_size", self.frame_size)
+ command_line.add_with_value(
+ u"n_data_frames", Constants.ASTF_N_DATA_FRAMES
+ )
command_line.add_with_value(u"multiplier", multiplier)
command_line.add_with_value(u"port_0", p_0)
command_line.add_with_value(u"port_1", p_1)
@@ -671,7 +672,7 @@ class TrafficGenerator(AbstractMeasurer):
self._sent = None
self._loss = None
self._latency = None
- xstats = [None, None]
+ xstats = []
self._l7_data = dict()
self._l7_data[u"client"] = dict()
self._l7_data[u"client"][u"active_flows"] = None
@@ -704,10 +705,8 @@ class TrafficGenerator(AbstractMeasurer):
index = 0
for line in stdout.splitlines():
if f"Xstats snapshot {index}: " in line:
- xstats[index] = line[19:]
+ xstats.append(line[19:])
index += 1
- if index == 2:
- break
self._xstats = tuple(xstats)
else:
self._target_duration = duration
@@ -735,41 +734,36 @@ class TrafficGenerator(AbstractMeasurer):
:raises RuntimeError: In case of T-Rex driver issue.
"""
self.check_mode(TrexMode.STL)
- p_0, p_1 = (1, 0) if self._ifaces_reordered else (0, 1)
if not isinstance(duration, (float, int)):
duration = float(duration)
- # TODO: Refactor the code so duration is computed only once,
- # and both the initial and the computed durations are logged.
duration, _ = self._compute_duration(duration=duration, multiplier=rate)
- command_line = OptionString().add(u"python3")
+ command_line = OptionString().add("python3")
dirname = f"{Constants.REMOTE_FW_DIR}/GPL/tools/trex"
command_line.add(f"'{dirname}/trex_stl_profile.py'")
- command_line.change_prefix(u"--")
+ command_line.change_prefix("--")
dirname = f"{Constants.REMOTE_FW_DIR}/GPL/traffic_profiles/trex"
command_line.add_with_value(
- u"profile", f"'{dirname}/{self.traffic_profile}.py'"
+ "profile", f"'{dirname}/{self.traffic_profile}.py'"
)
- command_line.add_with_value(u"duration", f"{duration!r}")
- command_line.add_with_value(u"frame_size", self.frame_size)
- command_line.add_with_value(u"rate", f"{rate!r}")
- command_line.add_with_value(u"port_0", p_0)
- command_line.add_with_value(u"port_1", p_1)
+ command_line.add_with_value("duration", f"{duration!r}")
+ command_line.add_with_value("frame_size", self.frame_size)
+ command_line.add_with_value("rate", f"{rate!r}")
+ command_line.add_with_value("ports", " ".join(self._ifaces))
command_line.add_with_value(
- u"traffic_directions", self.traffic_directions
+ "traffic_directions", self.traffic_directions
)
- command_line.add_if(u"async_start", async_call)
- command_line.add_if(u"latency", self.use_latency)
- command_line.add_if(u"force", Constants.TREX_SEND_FORCE)
- command_line.add_with_value(u"delay", Constants.PERF_TRIAL_STL_DELAY)
+ command_line.add_if("async_start", async_call)
+ command_line.add_if("latency", self.use_latency)
+ command_line.add_if("force", Constants.TREX_SEND_FORCE)
+ command_line.add_with_value("delay", Constants.PERF_TRIAL_STL_DELAY)
- # TODO: This is ugly. Handle parsing better.
self._start_time = time.monotonic()
- self._rate = float(rate[:-3]) if u"pps" in rate else float(rate)
+ self._rate = float(rate[:-3]) if "pps" in rate else float(rate)
stdout, _ = exec_cmd_no_error(
self._node, command_line, timeout=int(duration) + 60,
- message=u"T-Rex STL runtime error"
+ message="T-Rex STL runtime error"
)
if async_call:
@@ -781,14 +775,12 @@ class TrafficGenerator(AbstractMeasurer):
self._loss = None
self._latency = None
- xstats = [None, None]
+ xstats = []
index = 0
for line in stdout.splitlines():
if f"Xstats snapshot {index}: " in line:
- xstats[index] = line[19:]
+ xstats.append(line[19:])
index += 1
- if index == 2:
- break
self._xstats = tuple(xstats)
else:
self._target_duration = duration
@@ -811,7 +803,7 @@ class TrafficGenerator(AbstractMeasurer):
use_latency=False,
ramp_up_rate=None,
ramp_up_duration=None,
- state_timeout=300.0,
+ state_timeout=240.0,
ramp_up_only=False,
):
"""Send traffic from all configured interfaces on TG.
@@ -878,7 +870,7 @@ class TrafficGenerator(AbstractMeasurer):
:type state_timeout: float
:type ramp_up_only: bool
:returns: TG results.
- :rtype: ReceiveRateMeasurement or None
+ :rtype: MeasurementResult or None
:raises ValueError: If TG traffic profile is not supported.
"""
self.set_rate_provider_defaults(
@@ -925,7 +917,7 @@ class TrafficGenerator(AbstractMeasurer):
:type rate: float
:type async_call: bool
:returns: TG results.
- :rtype: ReceiveRateMeasurement or None
+ :rtype: MeasurementResult or None
:raises ValueError: If TG traffic profile is not supported.
"""
subtype = check_subtype(self._node)
@@ -936,7 +928,6 @@ class TrafficGenerator(AbstractMeasurer):
)
elif u"trex-stl" in self.traffic_profile:
unit_rate_str = str(rate) + u"pps"
- # TODO: Suport transaction_scale et al?
self.trex_stl_start_remote_exec(
duration, unit_rate_str, async_call
)
@@ -977,13 +968,12 @@ class TrafficGenerator(AbstractMeasurer):
:type async_call: bool
:type ramp_up_only: bool
:returns: TG results.
- :rtype: ReceiveRateMeasurement or None
+ :rtype: MeasurementResult or None
:raises ValueError: If TG traffic profile is not supported.
"""
complete = False
if self.ramp_up_rate:
# Figure out whether we need to insert a ramp-up trial.
- # TODO: Give up on async_call=True?
if ramp_up_only or self.ramp_up_start is None:
# We never ramped up yet (at least not in this test case).
ramp_up_needed = True
@@ -1033,7 +1023,7 @@ class TrafficGenerator(AbstractMeasurer):
trial_end = time.monotonic()
if self.ramp_up_rate:
# Optimization: No loss acts as a good ramp-up, if it was complete.
- if complete and result is not None and result.loss_count == 0:
+ if complete and result is not None and result.loss_ratio == 0.0:
logger.debug(u"Good trial acts as a ramp-up")
self.ramp_up_start = trial_start
self.ramp_up_stop = trial_end
@@ -1055,8 +1045,6 @@ class TrafficGenerator(AbstractMeasurer):
def fail_if_no_traffic_forwarded(self):
"""Fail if no traffic forwarded.
- TODO: Check number of passed transactions instead.
-
:returns: nothing
:raises Exception: If no traffic forwarded.
"""
@@ -1207,21 +1195,20 @@ class TrafficGenerator(AbstractMeasurer):
int(self._result.get(u"server_tcp_rx_bytes", 0))
def _get_measurement_result(self):
- """Return the result of last measurement as ReceiveRateMeasurement.
+ """Return the result of last measurement as MeasurementResult.
Separate function, as measurements can end either by time
or by explicit call, this is the common block at the end.
- The target_tr field of ReceiveRateMeasurement is in
+ The intended_load field of MeasurementResult is in
transactions per second. Transmit count and loss count units
depend on the transaction type. Usually they are in transactions
- per second, or aggregate packets per second.
-
- TODO: Fail on running or already reported measurement.
+ per second, or aggregated packets per second.
:returns: Structure containing the result of the measurement.
- :rtype: ReceiveRateMeasurement
+ :rtype: MeasurementResult
"""
+ duration_with_overheads = time.monotonic() - self._start_time
try:
# Client duration seems to include a setup period
# where TRex does not send any packets yet.
@@ -1261,7 +1248,7 @@ class TrafficGenerator(AbstractMeasurer):
expected_attempt_count = max(expected_attempt_count, self._sent)
unsent = expected_attempt_count - self._sent
pass_count = self._received
- fail_count = expected_attempt_count - pass_count
+ loss_count = self._loss
elif self.transaction_type == u"udp_cps":
if not self.transaction_scale:
raise RuntimeError(u"Add support for no-limit udp_cps.")
@@ -1270,7 +1257,7 @@ class TrafficGenerator(AbstractMeasurer):
expected_attempt_count = self.transaction_scale
unsent = expected_attempt_count - partial_attempt_count
pass_count = self._l7_data[u"client"][u"received"]
- fail_count = expected_attempt_count - pass_count
+ loss_count = partial_attempt_count - pass_count
elif self.transaction_type == u"tcp_cps":
if not self.transaction_scale:
raise RuntimeError(u"Add support for no-limit tcp_cps.")
@@ -1283,14 +1270,14 @@ class TrafficGenerator(AbstractMeasurer):
# but we are testing NAT session so client/connects counts that
# (half connections from TCP point of view).
pass_count = self._l7_data[u"client"][u"tcp"][u"connects"]
- fail_count = expected_attempt_count - pass_count
+ loss_count = partial_attempt_count - pass_count
elif self.transaction_type == u"udp_pps":
if not self.transaction_scale:
raise RuntimeError(u"Add support for no-limit udp_pps.")
partial_attempt_count = self._sent
expected_attempt_count = self.transaction_scale * self.ppta
unsent = expected_attempt_count - self._sent
- fail_count = self._loss + unsent
+ loss_count = self._loss
elif self.transaction_type == u"tcp_pps":
if not self.transaction_scale:
raise RuntimeError(u"Add support for no-limit tcp_pps.")
@@ -1304,29 +1291,30 @@ class TrafficGenerator(AbstractMeasurer):
# Probability of retransmissions exactly cancelling
# packets unsent due to duration stretching is quite low.
unsent = abs(expected_attempt_count - self._sent)
- fail_count = self._loss + unsent
+ loss_count = self._loss
else:
raise RuntimeError(f"Unknown parsing {self.transaction_type!r}")
if unsent and isinstance(self._approximated_duration, float):
# Do not report unsent for "manual".
logger.debug(f"Unsent packets/transactions: {unsent}")
- if fail_count < 0 and not self.negative_loss:
- fail_count = 0
- measurement = ReceiveRateMeasurement(
- duration=target_duration,
- target_tr=transmit_rate,
- transmit_count=expected_attempt_count,
- loss_count=fail_count,
- approximated_duration=approximated_duration,
- partial_transmit_count=partial_attempt_count,
+ if loss_count < 0 and not self.negative_loss:
+ loss_count = 0
+ measurement = MeasurementResult(
+ intended_duration=target_duration,
+ intended_load=transmit_rate,
+ offered_count=partial_attempt_count,
+ loss_count=loss_count,
+ offered_duration=approximated_duration,
+ duration_with_overheads=duration_with_overheads,
+ intended_count=expected_attempt_count,
)
measurement.latency = self.get_latency_int()
return measurement
- def measure(self, duration, transmit_rate):
+ def measure(self, intended_duration, intended_load):
"""Run trial measurement, parse and return results.
- The input rate is for transactions. Stateles bidirectional traffic
+ The intended load is for transactions. Stateles bidirectional traffic
is understood as sequence of (asynchronous) transactions,
two packets each.
@@ -1334,35 +1322,32 @@ class TrafficGenerator(AbstractMeasurer):
the count either transactions or packets (aggregated over directions).
Optionally, this method sleeps if measurement finished before
- the time specified as duration.
+ the time specified as intended_duration (PLRsearch needs time for math).
- :param duration: Trial duration [s].
- :param transmit_rate: Target rate in transactions per second.
- :type duration: float
- :type transmit_rate: float
+ :param intended_duration: Trial duration [s].
+ :param intended_load: Target rate in transactions per second.
+ :type intended_duration: float
+ :type intended_load: float
:returns: Structure containing the result of the measurement.
- :rtype: ReceiveRateMeasurement
+ :rtype: MeasurementResult
:raises RuntimeError: If TG is not set or if node is not TG
or if subtype is not specified.
:raises NotImplementedError: If TG is not supported.
"""
- duration = float(duration)
+ intended_duration = float(intended_duration)
time_start = time.monotonic()
- time_stop = time_start + duration
+ time_stop = time_start + intended_duration
if self.resetter:
self.resetter()
result = self._send_traffic_on_tg_with_ramp_up(
- duration=duration,
- rate=transmit_rate,
+ duration=intended_duration,
+ rate=intended_load,
async_call=False,
)
logger.debug(f"trial measurement result: {result!r}")
# In PLRsearch, computation needs the specified time to complete.
if self.sleep_till_duration:
- sleeptime = time_stop - time.monotonic()
- if sleeptime > 0.0:
- # TODO: Sometimes we have time to do additional trials here,
- # adapt PLRsearch to accept all the results.
+ while (sleeptime := time_stop - time.monotonic()) > 0.0:
time.sleep(sleeptime)
return result
@@ -1382,7 +1367,7 @@ class TrafficGenerator(AbstractMeasurer):
use_latency=False,
ramp_up_rate=None,
ramp_up_duration=None,
- state_timeout=300.0,
+ state_timeout=240.0,
):
"""Store values accessed by measure().
@@ -1403,7 +1388,6 @@ class TrafficGenerator(AbstractMeasurer):
:param transaction_type: An identifier specifying which counters
and formulas to use when computing attempted and failed
transactions. Default: "packet".
- TODO: Does this also specify parsing for the measured duration?
:param duration_limit: Zero or maximum limit for computed (or given)
duration.
:param negative_loss: If false, negative loss is reported as zero loss.
@@ -1433,7 +1417,7 @@ class TrafficGenerator(AbstractMeasurer):
self.frame_size = frame_size
self.traffic_profile = str(traffic_profile)
self.resetter = resetter
- self.ppta = ppta
+ self.ppta = int(ppta)
self.traffic_directions = int(traffic_directions)
self.transaction_duration = float(transaction_duration)
self.transaction_scale = int(transaction_scale)
@@ -1451,33 +1435,34 @@ class OptimizedSearch:
"""Class to be imported as Robot Library, containing search keywords.
Aside of setting up measurer and forwarding arguments,
- the main business is to translate min/max rate from unidir to aggregate.
+ the main business is to translate min/max rate from unidir to aggregated.
"""
@staticmethod
- def perform_optimized_ndrpdr_search(
- frame_size,
- traffic_profile,
- minimum_transmit_rate,
- maximum_transmit_rate,
- packet_loss_ratio=0.005,
- final_relative_width=0.005,
- final_trial_duration=30.0,
- initial_trial_duration=1.0,
- number_of_intermediate_phases=2,
- timeout=1200.0,
- ppta=1,
- resetter=None,
- traffic_directions=2,
- transaction_duration=0.0,
- transaction_scale=0,
- transaction_type=u"packet",
- use_latency=False,
- ramp_up_rate=None,
- ramp_up_duration=None,
- state_timeout=300.0,
- expansion_coefficient=4.0,
- ):
+ def perform_mlr_search(
+ frame_size: Union[int, str],
+ traffic_profile: str,
+ min_load: float,
+ max_load: float,
+ loss_ratio: float = 0.005,
+ relative_width: float = 0.005,
+ initial_trial_duration: float = 1.0,
+ final_trial_duration: float = 1.0,
+ duration_sum: float = 21.0,
+ expansion_coefficient: int = 2,
+ preceding_targets: int = 2,
+ search_duration_max: float = 1200.0,
+ ppta: int = 1,
+ resetter: Optional[Callable[[], None]] = None,
+ traffic_directions: int = 2,
+ transaction_duration: float = 0.0,
+ transaction_scale: int = 0,
+ transaction_type: str = "packet",
+ use_latency: bool = False,
+ ramp_up_rate: float = 0.0,
+ ramp_up_duration: float = 0.0,
+ state_timeout: float = 240.0,
+ ) -> List[GoalResult]:
"""Setup initialized TG, perform optimized search, return intervals.
If transaction_scale is nonzero, all init and non-init trial durations
@@ -1489,18 +1474,20 @@ class OptimizedSearch:
:param frame_size: Frame size identifier or value [B].
:param traffic_profile: Module name as a traffic profile identifier.
See GPL/traffic_profiles/trex for implemented modules.
- :param minimum_transmit_rate: Minimal load in transactions per second.
- :param maximum_transmit_rate: Maximal load in transactions per second.
- :param packet_loss_ratio: Ratio of packets lost, for PDR [1].
- :param final_relative_width: Final lower bound transmit rate
+ :param min_load: Minimal load in transactions per second.
+ :param max_load: Maximal load in transactions per second.
+ :param loss_ratio: Ratio of packets lost, for PDR [1].
+ :param relative_width: Final lower bound intended load
cannot be more distant that this multiple of upper bound [1].
- :param final_trial_duration: Trial duration for the final phase [s].
:param initial_trial_duration: Trial duration for the initial phase
and also for the first intermediate phase [s].
- :param number_of_intermediate_phases: Number of intermediate phases
+ :param final_trial_duration: Trial duration for the final phase [s].
+ :param duration_sum: Max sum of duration for deciding [s].
+ :param expansion_coefficient: In external search multiply width by this.
+ :param preceding_targets: Number of intermediate phases
to perform before the final phase [1].
- :param timeout: The search will fail itself when not finished
- before this overall time [s].
+ :param search_duration_max: The search will fail itself
+ when not finished before this overall time [s].
:param ppta: Packets per transaction, aggregated over directions.
Needed for udp_pps which does not have a good transaction counter,
so we need to compute expected number of packets.
@@ -1519,17 +1506,18 @@ class OptimizedSearch:
:param ramp_up_rate: Rate to use in ramp-up trials [pps].
:param ramp_up_duration: Duration of ramp-up trials [s].
:param state_timeout: Time of life of DUT state [s].
- :param expansion_coefficient: In external search multiply width by this.
:type frame_size: str or int
:type traffic_profile: str
- :type minimum_transmit_rate: float
- :type maximum_transmit_rate: float
- :type packet_loss_ratio: float
- :type final_relative_width: float
- :type final_trial_duration: float
+ :type min_load: float
+ :type max_load: float
+ :type loss_ratio: float
+ :type relative_width: float
:type initial_trial_duration: float
- :type number_of_intermediate_phases: int
- :type timeout: float
+ :type final_trial_duration: float
+ :type duration_sum: float
+ :type expansion_coefficient: int
+ :type preceding_targets: int
+ :type search_duration_max: float
:type ppta: int
:type resetter: Optional[Callable[[], None]]
:type traffic_directions: int
@@ -1540,11 +1528,12 @@ class OptimizedSearch:
:type ramp_up_rate: float
:type ramp_up_duration: float
:type state_timeout: float
- :type expansion_coefficient: float
- :returns: Structure containing narrowed down NDR and PDR intervals
- and their measurements.
- :rtype: List[Receiverateinterval]
- :raises RuntimeError: If total duration is larger than timeout.
+ :returns: Goal result (based on unidirectional tps) for each goal.
+ The result contains both the offered load for stat trial,
+ and the conditional throughput for display.
+ :rtype: List[GoalResult]
+ :raises RuntimeError: If search duration exceeds search_duration_max
+ or if min load becomes an upper bound for any search goal.
"""
# we need instance of TrafficGenerator instantiated by Robot Framework
# to be able to use trex_stl-*()
@@ -1552,13 +1541,12 @@ class OptimizedSearch:
u"resources.libraries.python.TrafficGenerator"
)
# Overrides for fixed transaction amount.
- # TODO: Move to robot code? We have two call sites, so this saves space,
- # even though this is surprising for log readers.
if transaction_scale:
initial_trial_duration = 1.0
final_trial_duration = 1.0
- number_of_intermediate_phases = 0
- timeout += transaction_scale * 3e-4
+ preceding_targets = 1
+ # TODO: Move the value to Constants.py?
+ search_duration_max += transaction_scale * 3e-4
tg_instance.set_rate_provider_defaults(
frame_size=frame_size,
traffic_profile=traffic_profile,
@@ -1574,34 +1562,43 @@ class OptimizedSearch:
ramp_up_duration=ramp_up_duration,
state_timeout=state_timeout,
)
- algorithm = MultipleLossRatioSearch(
- measurer=tg_instance,
- final_trial_duration=final_trial_duration,
- final_relative_width=final_relative_width,
- number_of_intermediate_phases=number_of_intermediate_phases,
- initial_trial_duration=initial_trial_duration,
- timeout=timeout,
- debug=logger.debug,
- expansion_coefficient=expansion_coefficient,
- )
- if packet_loss_ratio:
- packet_loss_ratios = [0.0, packet_loss_ratio]
+ if loss_ratio:
+ loss_ratios = [0.0, loss_ratio]
+ exceed_ratio = 0.5
else:
# Happens in reconf tests.
- packet_loss_ratios = [packet_loss_ratio]
- results = algorithm.narrow_down_intervals(
- min_rate=minimum_transmit_rate,
- max_rate=maximum_transmit_rate,
- packet_loss_ratios=packet_loss_ratios,
- )
- return results
+ loss_ratios = [0.0]
+ exceed_ratio = 0.0
+ goals = [
+ SearchGoal(
+ loss_ratio=loss_ratio,
+ exceed_ratio=exceed_ratio,
+ relative_width=relative_width,
+ initial_trial_duration=initial_trial_duration,
+ final_trial_duration=final_trial_duration,
+ duration_sum=duration_sum,
+ preceding_targets=preceding_targets,
+ expansion_coefficient=expansion_coefficient,
+ fail_fast=True,
+ )
+ for loss_ratio in loss_ratios
+ ]
+ config = Config()
+ config.goals = goals
+ config.min_load = min_load
+ config.max_load = max_load
+ config.search_duration_max = search_duration_max
+ config.warmup_duration = 1.0
+ algorithm = MultipleLossRatioSearch(config)
+ results = algorithm.search(measurer=tg_instance, debug=logger.debug)
+ return [results[goal] for goal in goals]
@staticmethod
def perform_soak_search(
frame_size,
traffic_profile,
- minimum_transmit_rate,
- maximum_transmit_rate,
+ min_load,
+ max_load,
plr_target=1e-7,
tdpt=0.1,
initial_count=50,
@@ -1616,15 +1613,15 @@ class OptimizedSearch:
use_latency=False,
ramp_up_rate=None,
ramp_up_duration=None,
- state_timeout=300.0,
+ state_timeout=240.0,
):
"""Setup initialized TG, perform soak search, return avg and stdev.
:param frame_size: Frame size identifier or value [B].
:param traffic_profile: Module name as a traffic profile identifier.
See GPL/traffic_profiles/trex for implemented modules.
- :param minimum_transmit_rate: Minimal load in transactions per second.
- :param maximum_transmit_rate: Maximal load in transactions per second.
+ :param min_load: Minimal load in transactions per second.
+ :param max_load: Maximal load in transactions per second.
:param plr_target: Ratio of packets lost to achieve [1].
:param tdpt: Trial duration per trial.
The algorithm linearly increases trial duration with trial number,
@@ -1658,8 +1655,8 @@ class OptimizedSearch:
:param state_timeout: Time of life of DUT state [s].
:type frame_size: str or int
:type traffic_profile: str
- :type minimum_transmit_rate: float
- :type maximum_transmit_rate: float
+ :type min_load: float
+ :type max_load: float
:type plr_target: float
:type initial_count: int
:type timeout: float
@@ -1674,18 +1671,14 @@ class OptimizedSearch:
:type ramp_up_rate: float
:type ramp_up_duration: float
:type state_timeout: float
- :returns: Average and stdev of estimated aggregate rate giving PLR.
+ :returns: Average and stdev of estimated aggregated rate giving PLR.
:rtype: 2-tuple of float
"""
tg_instance = BuiltIn().get_library_instance(
u"resources.libraries.python.TrafficGenerator"
)
# Overrides for fixed transaction amount.
- # TODO: Move to robot code? We have a single call site
- # but MLRsearch has two and we want the two to be used similarly.
if transaction_scale:
- # TODO: What is a good value for max scale?
- # TODO: Scale the timeout with transaction scale.
timeout = 7200.0
tg_instance.set_rate_provider_defaults(
frame_size=frame_size,
@@ -1712,7 +1705,7 @@ class OptimizedSearch:
trace_enabled=trace_enabled,
)
result = algorithm.search(
- min_rate=minimum_transmit_rate,
- max_rate=maximum_transmit_rate,
+ min_rate=min_load,
+ max_rate=max_load,
)
return result
diff --git a/resources/libraries/python/VPPUtil.py b/resources/libraries/python/VPPUtil.py
index e343d38d2f..1ede76cdd4 100644
--- a/resources/libraries/python/VPPUtil.py
+++ b/resources/libraries/python/VPPUtil.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,6 +18,9 @@ from robot.api import logger
from resources.libraries.python.Constants import Constants
from resources.libraries.python.DUTSetup import DUTSetup
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+from resources.libraries.python.model.ExportResult import (
+ export_dut_type_and_version
+)
from resources.libraries.python.ssh import exec_cmd_no_error, exec_cmd
from resources.libraries.python.topology import Topology, SocketType, NodeType
@@ -26,35 +29,6 @@ class VPPUtil:
"""General class for any VPP related methods/functions."""
@staticmethod
- def show_vpp_settings(node, *additional_cmds):
- """Print default VPP settings. In case others are needed, can be
- accepted as next parameters (each setting one parameter), preferably
- in form of a string.
-
- :param node: VPP node.
- :param additional_cmds: Additional commands that the vpp should print
- settings for.
- :type node: dict
- :type additional_cmds: tuple
- """
- def_setting_tb_displayed = {
- u"IPv6 FIB": u"ip6 fib",
- u"IPv4 FIB": u"ip fib",
- u"Interface IP": u"int addr",
- u"Interfaces": u"int",
- u"ARP": u"ip arp",
- u"Errors": u"err"
- }
-
- if additional_cmds:
- for cmd in additional_cmds:
- def_setting_tb_displayed[f"Custom Setting: {cmd}"] = cmd
-
- for _, cmd in def_setting_tb_displayed.items():
- command = f"vppctl sh {cmd}"
- exec_cmd_no_error(node, command, timeout=30, sudo=True)
-
- @staticmethod
def restart_vpp_service(node, node_key=None):
"""Restart VPP service on the specified topology node.
@@ -67,9 +41,18 @@ class VPPUtil:
"""
# Containers have a separate lifecycle, but better be safe.
PapiSocketExecutor.disconnect_all_sockets_by_node(node)
- DUTSetup.restart_service(node, Constants.VPP_UNIT)
+
+ VPPUtil.stop_vpp_service(node)
+ command = "/usr/bin/vpp -c /etc/vpp/startup.conf"
+ message = f"Node {node[u'host']} failed to start VPP!"
+ exec_cmd_no_error(
+ node, command, timeout=180, sudo=True, message=message
+ )
+
if node_key:
Topology.add_new_socket(
+ node, SocketType.CLI, node_key, Constants.SOCKCLI_PATH)
+ Topology.add_new_socket(
node, SocketType.PAPI, node_key, Constants.SOCKSVR_PATH)
Topology.add_new_socket(
node, SocketType.STATS, node_key, Constants.SOCKSTAT_PATH)
@@ -96,12 +79,19 @@ class VPPUtil:
:type node: dict
:type node_key: str
"""
- # Containers have a separate lifecycle, but better be safe.
PapiSocketExecutor.disconnect_all_sockets_by_node(node)
- DUTSetup.stop_service(node, Constants.VPP_UNIT)
+ command = "pkill -9 vpp; sleep 1"
+ exec_cmd(node, command, timeout=180, sudo=True)
+ command = (
+ "/bin/rm -f /dev/shm/db /dev/shm/global_vm /dev/shm/vpe-api"
+ )
+ exec_cmd(node, command, timeout=180, sudo=True)
+
if node_key:
- Topology.del_node_socket_id(node, SocketType.PAPI, node_key)
- Topology.del_node_socket_id(node, SocketType.STATS, node_key)
+ if Topology.get_node_sockets(node, socket_type=SocketType.PAPI):
+ Topology.del_node_socket_id(node, SocketType.PAPI, node_key)
+ if Topology.get_node_sockets(node, socket_type=SocketType.STATS):
+ Topology.del_node_socket_id(node, SocketType.STATS, node_key)
@staticmethod
def stop_vpp_service_on_all_duts(nodes):
@@ -115,6 +105,39 @@ class VPPUtil:
VPPUtil.stop_vpp_service(node, node_key)
@staticmethod
+ def install_vpp_on_all_duts(nodes, vpp_pkg_dir):
+ """Install VPP on all DUT nodes.
+
+ :param nodes: Nodes in the topology.
+ :param vpp_pkg_dir: Path to directory where VPP packages are stored.
+ :type nodes: dict
+ :type vpp_pkg_dir: str
+ """
+ VPPUtil.stop_vpp_service_on_all_duts(nodes)
+ for node in nodes.values():
+ message = f"Failed to install VPP on host {node['host']}!"
+ if node["type"] == NodeType.DUT:
+ command = "mkdir -p /var/log/vpp/"
+ exec_cmd(node, command, sudo=True)
+
+ command = "ln -s /dev/null /etc/systemd/system/vpp.service"
+ exec_cmd(node, command, sudo=True)
+
+ command = "ln -s /dev/null /etc/sysctl.d/80-vpp.conf"
+ exec_cmd(node, command, sudo=True)
+
+ command = "apt-get purge -y '*vpp*' || true"
+ exec_cmd_no_error(node, command, timeout=120, sudo=True)
+
+ command = f"dpkg -i --force-all {vpp_pkg_dir}*.deb"
+ exec_cmd_no_error(
+ node, command, timeout=120, sudo=True, message=message
+ )
+
+ command = "dpkg -l | grep vpp"
+ exec_cmd_no_error(node, command, sudo=True)
+
+ @staticmethod
def verify_vpp_installed(node):
"""Verify that VPP is installed on the specified topology node.
@@ -197,6 +220,7 @@ class VPPUtil:
"""Run "show_version" PAPI command.
Socket is configurable, so VPP inside container can be accessed.
+ The result is exported to JSON UTI output as "dut-version".
:param node: Node to run command on.
:param remote_vpp_socket: Path to remote socket to target VPP.
@@ -214,7 +238,9 @@ class VPPUtil:
reply = papi_exec.add(cmd).get_reply()
if log:
logger.info(f"VPP version: {reply[u'version']}\n")
- return f"{reply[u'version']}"
+ version = f"{reply[u'version']}"
+ export_dut_type_and_version(u"VPP", version)
+ return version
@staticmethod
def show_vpp_version_on_all_duts(nodes):
@@ -402,3 +428,20 @@ class VPPUtil:
reply = papi_exec.add(cmd, **args).get_reply()
return reply[u"next_index"]
+
+ @staticmethod
+ def vpp_set_neighbor_limit_on_all_duts(nodes, count):
+ """VPP set neighbor count limit on all DUTs in the given topology.
+
+ :param nodes: Nodes in the topology.
+ :param count: Neighbor count need to set.
+ :type nodes: dict
+ :type count: int
+ """
+ for node in nodes.values():
+ if node[u"type"] == NodeType.DUT:
+ cmd = f"set ip neighbor-config ip4 limit {count}"
+ PapiSocketExecutor.run_cli_cmd(node, cmd)
+
+ cmd = f"set ip neighbor-config ip6 limit {count}"
+ PapiSocketExecutor.run_cli_cmd(node, cmd)
diff --git a/resources/libraries/python/VatExecutor.py b/resources/libraries/python/VatExecutor.py
deleted file mode 100644
index 63f46c8b6d..0000000000
--- a/resources/libraries/python/VatExecutor.py
+++ /dev/null
@@ -1,397 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""VAT executor library."""
-
-import json
-
-from os import remove
-
-from paramiko.ssh_exception import SSHException
-from robot.api import logger
-
-import resources.libraries.python.DUTSetup as PidLib
-
-from resources.libraries.python.Constants import Constants
-from resources.libraries.python.PapiHistory import PapiHistory
-from resources.libraries.python.ssh import SSH, SSHTimeout
-
-__all__ = [u"VatExecutor"]
-
-
-def cleanup_vat_json_output(json_output, vat_name=None):
- """Return VAT JSON output cleaned from VAT clutter.
-
- Clean up VAT JSON output from clutter like vat# prompts and such.
-
- :param json_output: Cluttered JSON output.
- :param vat_name: Name of the VAT script.
- :type json_output: JSON
- :type vat_name: str
- :returns: Cleaned up output JSON string.
- :rtype: JSON
- """
-
- retval = json_output
- clutter = [u"vat#", u"dump_interface_table error: Misc"]
- if vat_name:
- remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \
- f"{Constants.RESOURCES_TPL_VAT}/{vat_name}"
- clutter.append(f"{remote_file_path}(2):")
- for garbage in clutter:
- retval = retval.replace(garbage, u"")
- return retval
-
-
-def get_vpp_pid(node):
- """Get PID of running VPP process.
-
- :param node: DUT node.
- :type node: dict
- :returns: PID of VPP process / List of PIDs if more VPP processes are
- running on the DUT node.
- :rtype: int or list
- """
- pid = PidLib.DUTSetup.get_pid(node, u"vpp")
- return pid
-
-
-class VatExecutor:
- """Contains methods for executing VAT commands on DUTs."""
- def __init__(self):
- self._stdout = None
- self._stderr = None
- self._ret_code = None
- self._script_name = None
-
- def execute_script(
- self, vat_name, node, timeout=120, json_out=True,
- copy_on_execute=False, history=True):
- """Execute VAT script on remote node, and store the result. There is an
- option to copy script from local host to remote host before execution.
- Path is defined automatically.
-
- :param vat_name: Name of the vat script file. Only the file name of
- the script is required, the resources path is prepended
- automatically.
- :param node: Node to execute the VAT script on.
- :param timeout: Seconds to allow the script to run.
- :param json_out: Require JSON output.
- :param copy_on_execute: If true, copy the file from local host to remote
- before executing.
- :param history: If true, add command to history.
- :type vat_name: str
- :type node: dict
- :type timeout: int
- :type json_out: bool
- :type copy_on_execute: bool
- :type history: bool
- :raises SSHException: If cannot open connection for VAT.
- :raises SSHTimeout: If VAT execution is timed out.
- :raises RuntimeError: If VAT script execution fails.
- """
- ssh = SSH()
- try:
- ssh.connect(node)
- except:
- raise SSHException(
- f"Cannot open SSH connection to execute VAT command(s) "
- f"from vat script {vat_name}"
- )
-
- if copy_on_execute:
- ssh.scp(vat_name, vat_name)
- remote_file_path = vat_name
- if history:
- with open(vat_name, u"rt") as vat_file:
- for line in vat_file:
- PapiHistory.add_to_papi_history(
- node, line.replace(u"\n", u""), papi=False
- )
- else:
- remote_file_path = f"{Constants.REMOTE_FW_DIR}/" \
- f"{Constants.RESOURCES_TPL_VAT}/{vat_name}"
-
- cmd = f"{Constants.VAT_BIN_NAME}" \
- f"{u' json' if json_out is True else u''} " \
- f"in {remote_file_path} script"
- try:
- ret_code, stdout, stderr = ssh.exec_command_sudo(
- cmd=cmd, timeout=timeout
- )
- except SSHTimeout:
- logger.error(f"VAT script execution timeout: {cmd}")
- raise
- except Exception:
- raise RuntimeError(f"VAT script execution failed: {cmd}")
-
- self._ret_code = ret_code
- self._stdout = stdout
- self._stderr = stderr
- self._script_name = vat_name
-
- def write_and_execute_script(
- self, node, tmp_fn, commands, timeout=300, json_out=False):
- """Write VAT commands to the script, copy it to node and execute it.
-
- :param node: VPP node.
- :param tmp_fn: Path to temporary file script.
- :param commands: VAT command list.
- :param timeout: Seconds to allow the script to run.
- :param json_out: Require JSON output.
- :type node: dict
- :type tmp_fn: str
- :type commands: list
- :type timeout: int
- :type json_out: bool
- """
- with open(tmp_fn, u"wt") as tmp_f:
- tmp_f.writelines(commands)
-
- self.execute_script(
- tmp_fn, node, timeout=timeout, json_out=json_out,
- copy_on_execute=True
- )
- remove(tmp_fn)
-
- def execute_script_json_out(self, vat_name, node, timeout=120):
- """Pass all arguments to 'execute_script' method, then cleanup returned
- json output.
-
- :param vat_name: Name of the vat script file. Only the file name of
- the script is required, the resources path is prepended
- automatically.
- :param node: Node to execute the VAT script on.
- :param timeout: Seconds to allow the script to run.
- :type vat_name: str
- :type node: dict
- :type timeout: int
- """
- self.execute_script(vat_name, node, timeout, json_out=True)
- self._stdout = cleanup_vat_json_output(self._stdout, vat_name=vat_name)
-
- def script_should_have_failed(self):
- """Read return code from last executed script and raise exception if the
- script didn't fail."""
- if self._ret_code is None:
- raise Exception(u"First execute the script!")
- if self._ret_code == 0:
- raise AssertionError(
- f"VAT Script execution passed, but failure was expected: "
- f"{self._script_name}"
- )
-
- def script_should_have_passed(self):
- """Read return code from last executed script and raise exception if the
- script failed."""
- if self._ret_code is None:
- raise Exception(u"First execute the script!")
- if self._ret_code != 0:
- raise AssertionError(
- f"VAT Script execution failed, but success was expected: "
- f"{self._script_name}"
- )
-
- def get_script_stdout(self):
- """Returns value of stdout from last executed script."""
- return self._stdout
-
- def get_script_stderr(self):
- """Returns value of stderr from last executed script."""
- return self._stderr
-
- @staticmethod
- def cmd_from_template(node, vat_template_file, json_param=True, **vat_args):
- """Execute VAT script on specified node. This method supports
- script templates with parameters.
-
- :param node: Node in topology on witch the script is executed.
- :param vat_template_file: Template file of VAT script.
- :param json_param: Require JSON mode.
- :param vat_args: Arguments to the template file.
- :returns: List of JSON objects returned by VAT.
- """
- with VatTerminal(node, json_param=json_param) as vat:
- return vat.vat_terminal_exec_cmd_from_template(
- vat_template_file, **vat_args
- )
-
-
-class VatTerminal:
- """VAT interactive terminal.
-
- :param node: Node to open VAT terminal on.
- :param json_param: Defines if outputs from VAT are in JSON format.
- Default is True.
- :type node: dict
- :type json_param: bool
-
- """
-
- __VAT_PROMPT = (u"vat# ", )
- __LINUX_PROMPT = (u":~# ", u":~$ ", u"~]$ ", u"~]# ")
-
- def __init__(self, node, json_param=True):
- json_text = u" json" if json_param else u""
- self.json = json_param
- self._node = node
- self._ssh = SSH()
- self._ssh.connect(self._node)
- try:
- self._tty = self._ssh.interactive_terminal_open()
- except Exception:
- raise RuntimeError(
- f"Cannot open interactive terminal on node "
- f"{self._node[u'host']}"
- )
-
- for _ in range(3):
- try:
- self._ssh.interactive_terminal_exec_command(
- self._tty, f"sudo -S {Constants.VAT_BIN_NAME}{json_text}",
- self.__VAT_PROMPT
- )
- except Exception:
- continue
- else:
- break
- else:
- vpp_pid = get_vpp_pid(self._node)
- if vpp_pid:
- if isinstance(vpp_pid, int):
- logger.trace(f"VPP running on node {self._node[u'host']}")
- else:
- logger.error(
- f"More instances of VPP running "
- f"on node {self._node[u'host']}."
- )
- else:
- logger.error(f"VPP not running on node {self._node[u'host']}.")
- raise RuntimeError(
- f"Failed to open VAT console on node {self._node[u'host']}"
- )
-
- self._exec_failure = False
- self.vat_stdout = None
-
- def __enter__(self):
- return self
-
- def __exit__(self, exc_type, exc_val, exc_tb):
- self.vat_terminal_close()
-
- def vat_terminal_exec_cmd(self, cmd):
- """Execute command on the opened VAT terminal.
-
- :param cmd: Command to be executed.
-
- :returns: Command output in python representation of JSON format or
- None if not in JSON mode.
- """
- PapiHistory.add_to_papi_history(self._node, cmd, papi=False)
- logger.debug(f"Executing command in VAT terminal: {cmd}")
- try:
- out = self._ssh.interactive_terminal_exec_command(
- self._tty, cmd, self.__VAT_PROMPT
- )
- self.vat_stdout = out
- except Exception:
- self._exec_failure = True
- vpp_pid = get_vpp_pid(self._node)
- if vpp_pid:
- if isinstance(vpp_pid, int):
- msg = f"VPP running on node {self._node[u'host']} " \
- f"but VAT command {cmd} execution failed."
- else:
- msg = f"More instances of VPP running on node " \
- f"{self._node[u'host']}. VAT command {cmd} " \
- f"execution failed."
- else:
- msg = f"VPP not running on node {self._node[u'host']}. " \
- f"VAT command {cmd} execution failed."
- raise RuntimeError(msg)
-
- logger.debug(f"VAT output: {out}")
- if self.json:
- obj_start = out.find(u"{")
- obj_end = out.rfind(u"}")
- array_start = out.find(u"[")
- array_end = out.rfind(u"]")
-
- if obj_start == -1 and array_start == -1:
- raise RuntimeError(f"VAT command {cmd}: no JSON data.")
-
- if obj_start < array_start or array_start == -1:
- start = obj_start
- end = obj_end + 1
- else:
- start = array_start
- end = array_end + 1
- out = out[start:end]
- json_out = json.loads(out)
- return json_out
-
- return None
-
- def vat_terminal_close(self):
- """Close VAT terminal."""
- # interactive terminal is dead, we only need to close session
- if not self._exec_failure:
- try:
- self._ssh.interactive_terminal_exec_command(
- self._tty, u"quit", self.__LINUX_PROMPT
- )
- except Exception:
- vpp_pid = get_vpp_pid(self._node)
- if vpp_pid:
- if isinstance(vpp_pid, int):
- logger.trace(
- f"VPP running on node {self._node[u'host']}."
- )
- else:
- logger.error(
- f"More instances of VPP running "
- f"on node {self._node[u'host']}."
- )
- else:
- logger.error(
- f"VPP not running on node {self._node[u'host']}."
- )
- raise RuntimeError(
- f"Failed to close VAT console "
- f"on node {self._node[u'host']}"
- )
- try:
- self._ssh.interactive_terminal_close(self._tty)
- except Exception:
- raise RuntimeError(
- f"Cannot close interactive terminal "
- f"on node {self._node[u'host']}"
- )
-
- def vat_terminal_exec_cmd_from_template(self, vat_template_file, **args):
- """Execute VAT script from a file.
-
- :param vat_template_file: Template file name of a VAT script.
- :param args: Dictionary of parameters for VAT script.
- :returns: List of JSON objects returned by VAT.
- """
- file_path = f"{Constants.RESOURCES_TPL_VAT}/{vat_template_file}"
-
- with open(file_path, u"rt") as template_file:
- cmd_template = template_file.readlines()
- ret = list()
- for line_tmpl in cmd_template:
- vat_cmd = line_tmpl.format(**args)
- ret.append(self.vat_terminal_exec_cmd(vat_cmd.replace(u"\n", u"")))
- return ret
diff --git a/resources/libraries/python/VatJsonUtil.py b/resources/libraries/python/VatJsonUtil.py
deleted file mode 100644
index 3e956e790d..0000000000
--- a/resources/libraries/python/VatJsonUtil.py
+++ /dev/null
@@ -1,218 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Utilities to work with JSON data format from VAT."""
-
-from robot.api import logger
-
-from resources.libraries.python.parsers.JsonParser import JsonParser
-
-
-class VatJsonUtil:
- """Utilities to work with JSON data format from VAT."""
-
- @staticmethod
- def _convert_mac_to_number_list(mac_address):
- """Convert MAC address string to list of decimal numbers.
-
- Converts a ":" separated MAC address to decimal number list as used
- in JSON interface dump.
-
- :param mac_address: MAC address.
- :type mac_address: str
- :returns: List representation of MAC address.
- :rtype: list
- """
- list_mac = list()
- for num in mac_address.split(u":"):
- list_mac.append(int(num, 16))
- return list_mac
-
- @staticmethod
- def get_vpp_interface_by_mac(interfaces_list, mac_address):
- """Return interface dictionary from interface_list by MAC address.
-
- Extracts interface dictionary from all of the interfaces in interfaces
- list parsed from JSON according to mac_address of the interface.
-
- :param interfaces_list: Interfaces parsed from JSON.
- :param mac_address: MAC address of interface we are looking for.
- :type interfaces_list: dict
- :type mac_address: str
- :returns: Interface from JSON.
- :rtype: dict
- """
- interface_dict = dict()
- list_mac_address = VatJsonUtil._convert_mac_to_number_list(mac_address)
- logger.trace(
- f"MAC address {mac_address} converted to list {list_mac_address}."
- )
- for interface in interfaces_list:
- # TODO: create vat json integrity checking and move there
- if u"l2_address" not in interface:
- raise KeyError(
- u"key l2_address not found in interface dict."
- u"Probably input list is not parsed from correct VAT "
- u"json output."
- )
- if u"l2_address_length" not in interface:
- raise KeyError(
- u"key l2_address_length not found in interface "
- u"dict. Probably input list is not parsed from correct "
- u"VAT json output."
- )
- mac_from_json = interface[u"l2_address"][:6]
- if mac_from_json == list_mac_address:
- if interface[u"l2_address_length"] != 6:
- raise ValueError(u"l2_address_length value is not 6.")
- interface_dict = interface
- break
- return interface_dict
-
- @staticmethod
- def update_vpp_interface_data_from_json(node, interface_dump_json):
- """Update vpp node data in node__DICT from JSON interface dump.
-
- This method updates vpp interface names and sw if indexes according to
- interface MAC addresses found in interface_dump_json.
-
- :param node: Node dictionary.
- :param interface_dump_json: JSON output from dump_interface_list VAT
- command.
- :type node: dict
- :type interface_dump_json: str
- """
- interface_list = JsonParser().parse_data(interface_dump_json)
- for ifc in node[u"interfaces"].values():
- if_mac = ifc[u"mac_address"]
- interface_dict = VatJsonUtil.get_vpp_interface_by_mac(
- interface_list, if_mac
- )
- if not interface_dict:
- logger.trace(f"Interface {ifc} not found by MAC {if_mac}")
- ifc[u"vpp_sw_index"] = None
- continue
- ifc[u"name"] = interface_dict[u"interface_name"]
- ifc[u"vpp_sw_index"] = interface_dict[u"sw_if_index"]
- ifc[u"mtu"] = interface_dict[u"mtu"]
-
- @staticmethod
- def get_interface_sw_index_from_json(interface_dump_json, interface_name):
- """Get sw_if_index from given JSON output by interface name.
-
- :param interface_dump_json: JSON output from dump_interface_list VAT
- command.
- :param interface_name: Interface name.
- :type interface_dump_json: str
- :type interface_name: str
- :returns: SW interface index.
- :rtype: int
- :raises ValueError: If interface not found in interface_dump_json.
- """
- logger.trace(interface_dump_json)
- interface_list = JsonParser().parse_data(interface_dump_json)
- for interface in interface_list:
- try:
- if interface[u"interface_name"] == interface_name:
- index = interface[u"sw_if_index"]
- logger.debug(
- f"Interface with name {interface_name} "
- f"has sw_if_index {index}."
- )
- return index
- except KeyError:
- pass
- raise ValueError(f"Interface with name {interface_name} not found.")
-
- @staticmethod
- def get_interface_name_from_json(interface_dump_json, sw_if_index):
- """Get interface name from given JSON output by sw_if_index.
-
- :param interface_dump_json: JSON output from dump_interface_list VAT
- command.
- :param sw_if_index: SW interface index.
- :type interface_dump_json: str
- :type sw_if_index: int
- :returns: Interface name.
- :rtype: str
- :raises ValueError: If interface not found in interface_dump_json.
- """
- logger.trace(interface_dump_json)
- interface_list = JsonParser().parse_data(interface_dump_json)
- for interface in interface_list:
- try:
- if interface[u"sw_if_index"] == sw_if_index:
- interface_name = interface[u"interface_name"]
- logger.debug(
- f"Interface with sw_if_index {sw_if_index} "
- f"has name {interface_name}."
- )
- return interface_name
- except KeyError:
- pass
- raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.")
-
- @staticmethod
- def get_interface_mac_from_json(interface_dump_json, sw_if_index):
- """Get interface MAC address from given JSON output by sw_if_index.
-
- :param interface_dump_json: JSON output from dump_interface_list VAT
- command.
- :param sw_if_index: SW interface index.
- :type interface_dump_json: str
- :type sw_if_index: int
- :returns: Interface MAC address.
- :rtype: str
- :raises ValueError: If interface not found in interface_dump_json.
- """
- logger.trace(interface_dump_json)
- interface_list = JsonParser().parse_data(interface_dump_json)
- for interface in interface_list:
- try:
- if interface[u"sw_if_index"] == sw_if_index:
- mac_from_json = interface[u"l2_address"][:6] \
- if u"l2_address" in list(interface.keys()) else u""
- mac_address = u":".join(
- f"{item:02x}" for item in mac_from_json
- )
- logger.debug(
- f"Interface with sw_if_index {sw_if_index} "
- f"has MAC address {mac_address}."
- )
- return mac_address
- except KeyError:
- pass
- raise ValueError(f"Interface with sw_if_index {sw_if_index} not found.")
-
- @staticmethod
- def verify_vat_retval(vat_out, exp_retval=0, err_msg=u"VAT cmd failed"):
- """Verify return value of VAT command.
-
- VAT command JSON output should be object (dict in python) or array. We
- are looking for something like this: { "retval": 0 }. Verification is
- skipped if VAT output does not contain return value element or root
- elemet is array.
-
- :param vat_out: VAT command output in python representation of JSON.
- :param exp_retval: Expected return value (default 0).
- :err_msg: Message to be displayed in case of error (optional).
- :type vat_out: dict or list
- :type exp_retval: int
- :type err_msg: str
- :raises RuntimeError: If VAT command return value is incorrect.
- """
- if isinstance(vat_out, dict):
- retval = vat_out.get(u"retval")
- if retval is not None:
- if retval != exp_retval:
- raise RuntimeError(err_msg)
diff --git a/resources/libraries/python/VppApiCrc.py b/resources/libraries/python/VppApiCrc.py
index 0cb8c2b7e7..a8947a18cb 100644
--- a/resources/libraries/python/VppApiCrc.py
+++ b/resources/libraries/python/VppApiCrc.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -75,8 +75,9 @@ class VppApiCrcChecker:
Starts the same as _expected, but each time an encountered api,crc pair
fits the expectation, the pair is removed from all collections
- within this mapping. Ideally, the active mappings will become empty.
- If not, it is an error, VPP removed or renamed a message CSIT needs."""
+ within this mapping. It is fine if an api is missing
+ from some collections, as long as it is not missing from all collections
+ that remained in _expected."""
self._found = dict()
"""Mapping from API name to CRC string.
@@ -325,12 +326,15 @@ class VppApiCrcChecker:
if not report_missing:
return
missing = {name: mapp for name, mapp in self._missing.items() if mapp}
- if missing:
- missing_indented = json.dumps(
- missing, indent=1, sort_keys=True, separators=[u",", u":"])
- self.log_and_raise(
- f"API CRCs missing from .api.json:\n{missing_indented}"
- )
+ if set(missing.keys()) < set(self._expected.keys()):
+ # There is a collection where nothing is missing.
+ return
+ missing_indented = json.dumps(
+ missing, indent=1, sort_keys=True, separators=[u",", u":"]
+ )
+ self.log_and_raise(
+ f"API CRCs missing from .api.json:\n{missing_indented}"
+ )
def check_api_name(self, api_name):
"""Fail if the api_name has no, or different from known CRC associated.
@@ -375,8 +379,25 @@ class VppApiCrcChecker:
self.log_and_raise(
f"No active collection has API {api_name!r} with CRC {crc!r}"
)
- options = self._options[api_name]
+ options = self._options.get(api_name, None)
+ if not options:
+ # None means CSIT is attempting a new API on an old VPP build.
+ # If that is an issue, the API has been reported as missing already.
+ return
options.pop(u"vat_help", None)
if options:
self._reported[api_name] = crc
logger.console(f"{api_name} used but has options {options}")
+
+ def print_warnings(self):
+ """Call check_api_name for API names in surviving collections.
+
+ Useful for VPP CRC checking job.
+ The API name is only checked when it appears
+ in all surviving collections.
+ """
+ api_name_to_crc_maps = self._expected.values()
+ api_name_sets = (set(n2c.keys()) for n2c in api_name_to_crc_maps)
+ api_names = set.intersection(*api_name_sets)
+ for api_name in sorted(api_names):
+ self.check_api_name(api_name)
diff --git a/resources/libraries/python/VppConfigGenerator.py b/resources/libraries/python/VppConfigGenerator.py
index 4943c1aae6..4191c0eed2 100644
--- a/resources/libraries/python/VppConfigGenerator.py
+++ b/resources/libraries/python/VppConfigGenerator.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -11,12 +11,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-"""VPP Configuration File Generator library.
-
-TODO: Support initialization with default values,
-so that we do not need to have block of 6 "Add Unix" commands
-in 7 various places of CSIT code.
-"""
+"""VPP Configuration File Generator library."""
import re
@@ -26,7 +21,7 @@ from resources.libraries.python.topology import NodeType
from resources.libraries.python.topology import Topology
from resources.libraries.python.VPPUtil import VPPUtil
-__all__ = [u"VppConfigGenerator"]
+__all__ = ["VppConfigGenerator", "VppInitConfig"]
def pci_dev_check(pci_dev):
@@ -54,21 +49,17 @@ class VppConfigGenerator:
def __init__(self):
"""Initialize library."""
# VPP Node to apply configuration on
- self._node = u""
+ self._node = ""
# Topology node key
- self._node_key = u""
+ self._node_key = ""
# VPP Configuration
self._nodeconfig = dict()
# Serialized VPP Configuration
- self._vpp_config = u""
+ self._vpp_config = ""
# VPP Service name
- self._vpp_service_name = u"vpp"
- # VPP Logfile location
- self._vpp_logfile = u"/tmp/vpe.log"
+ self._vpp_service_name = "vpp"
# VPP Startup config location
- self._vpp_startup_conf = u"/etc/vpp/startup.conf"
- # VPP Startup config backup location
- self._vpp_startup_conf_backup = None
+ self._vpp_startup_conf = "/etc/vpp/startup.conf"
def set_node(self, node, node_key=None):
"""Set DUT node.
@@ -79,29 +70,13 @@ class VppConfigGenerator:
:type node_key: str
:raises RuntimeError: If Node type is not DUT.
"""
- if node[u"type"] != NodeType.DUT:
+ if node["type"] != NodeType.DUT:
raise RuntimeError(
- u"Startup config can only be applied to DUTnode."
+ "Startup config can only be applied to DUTnode."
)
self._node = node
self._node_key = node_key
- def set_vpp_logfile(self, logfile):
- """Set VPP logfile location.
-
- :param logfile: VPP logfile location.
- :type logfile: str
- """
- self._vpp_logfile = logfile
-
- def set_vpp_startup_conf_backup(self, backup=u"/etc/vpp/startup.backup"):
- """Set VPP startup configuration backup.
-
- :param backup: VPP logfile location.
- :type backup: str
- """
- self._vpp_startup_conf_backup = backup
-
def get_config_str(self):
"""Get dumped startup configuration in VPP config format.
@@ -127,8 +102,8 @@ class VppConfigGenerator:
if path[0] not in config:
config[path[0]] = dict()
elif isinstance(config[path[0]], str):
- config[path[0]] = dict() if config[path[0]] == u"" \
- else {config[path[0]]: u""}
+ config[path[0]] = dict() if config[path[0]] == "" \
+ else {config[path[0]]: ""}
self.add_config_item(config[path[0]], value, path[1:])
def dump_config(self, obj, level=-1):
@@ -140,7 +115,7 @@ class VppConfigGenerator:
:type level: int
:returns: nothing
"""
- indent = u" "
+ indent = " "
if level >= 0:
self._vpp_config += f"{level * indent}{{\n"
if isinstance(obj, dict):
@@ -156,53 +131,56 @@ class VppConfigGenerator:
if level >= 0:
self._vpp_config += f"{level * indent}}}\n"
- def add_unix_log(self, value=None):
+ def add_unix_log(self, value="/var/log/vpp/vpp.log"):
"""Add UNIX log configuration.
:param value: Log file.
:type value: str
"""
- path = [u"unix", u"log"]
- if value is None:
- value = self._vpp_logfile
+ path = ["unix", "log"]
self.add_config_item(self._nodeconfig, value, path)
- def add_unix_cli_listen(self, value=u"/run/vpp/cli.sock"):
+ def add_unix_cli_listen(self, value="/run/vpp/cli.sock"):
"""Add UNIX cli-listen configuration.
:param value: CLI listen address and port or path to CLI socket.
:type value: str
"""
- path = [u"unix", u"cli-listen"]
+ path = ["unix", "cli-listen"]
self.add_config_item(self._nodeconfig, value, path)
- def add_unix_gid(self, value=u"vpp"):
+ def add_unix_cli_no_pager(self):
+ """Add UNIX cli-no-pager configuration."""
+ path = ["unix", "cli-no-pager"]
+ self.add_config_item(self._nodeconfig, "", path)
+
+ def add_unix_gid(self, value="vpp"):
"""Add UNIX gid configuration.
:param value: Gid.
:type value: str
"""
- path = [u"unix", u"gid"]
+ path = ["unix", "gid"]
self.add_config_item(self._nodeconfig, value, path)
def add_unix_nodaemon(self):
"""Add UNIX nodaemon configuration."""
- path = [u"unix", u"nodaemon"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["unix", "nodaemon"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_unix_coredump(self):
"""Add UNIX full-coredump configuration."""
- path = [u"unix", u"full-coredump"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["unix", "full-coredump"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_unix_exec(self, value):
"""Add UNIX exec configuration."""
- path = [u"unix", u"exec"]
+ path = ["unix", "exec"]
self.add_config_item(self._nodeconfig, value, path)
def add_socksvr(self, socket=Constants.SOCKSVR_PATH):
"""Add socksvr configuration."""
- path = [u"socksvr", u"socket-name"]
+ path = ["socksvr", "socket-name"]
self.add_config_item(self._nodeconfig, socket, path)
def add_graph_node_variant(self, variant=Constants.GRAPH_NODE_VARIANT):
@@ -211,39 +189,48 @@ class VppConfigGenerator:
:param value: Graph node variant default value.
:type value: str
"""
- if variant == u"":
+ if variant == "":
return
- variant_list = [u"hsw", u"skx", u"icl"]
+ variant_list = ["hsw", "skx", "icl"]
if variant not in variant_list:
raise ValueError("Invalid graph node variant value")
- path = [u"node", u"default", u"variant"]
+ path = ["node", "default", "variant"]
self.add_config_item(self._nodeconfig, variant, path)
- def add_api_segment_gid(self, value=u"vpp"):
- """Add API-SEGMENT gid configuration.
+ def add_api_segment_gid(self, value="vpp"):
+ """Add api-segment gid configuration.
:param value: Gid.
:type value: str
"""
- path = [u"api-segment", u"gid"]
+ path = ["api-segment", "gid"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_segment_global_size(self, value):
- """Add API-SEGMENT global-size configuration.
+ """Add api-segment global-size configuration.
:param value: Global size.
:type value: str
"""
- path = [u"api-segment", u"global-size"]
+ path = ["api-segment", "global-size"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_api_segment_prefix(self, value="vpp"):
+ """Add api-segment prefix configuration.
+
+ :param value: Gid.
+ :type value: str
+ """
+ path = ["api-segment", "prefix"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_segment_api_size(self, value):
- """Add API-SEGMENT api-size configuration.
+ """Add api-segment api-size configuration.
:param value: API size.
:type value: str
"""
- path = [u"api-segment", u"api-size"]
+ path = ["api-segment", "api-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_buffers_per_numa(self, value):
@@ -252,7 +239,7 @@ class VppConfigGenerator:
:param value: Number of buffers allocated.
:type value: int
"""
- path = [u"buffers", u"buffers-per-numa"]
+ path = ["buffers", "buffers-per-numa"]
self.add_config_item(self._nodeconfig, value, path)
def add_buffers_default_data_size(self, value):
@@ -261,7 +248,7 @@ class VppConfigGenerator:
:param value: Buffers data-size allocated.
:type value: int
"""
- path = [u"buffers", u"default data-size"]
+ path = ["buffers", "default data-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev(self, *devices):
@@ -272,35 +259,26 @@ class VppConfigGenerator:
"""
for device in devices:
if pci_dev_check(device):
- path = [u"dpdk", f"dev {device}"]
- self.add_config_item(self._nodeconfig, u"", path)
-
- def add_dpdk_dev_parameter(self, device, parameter, value):
- """Add parameter for DPDK device.
-
- :param device: PCI device (format xxxx:xx:xx.x).
- :param parameter: Parameter name.
- :param value: Parameter value.
- :type device: str
- :type parameter: str
- :type value: str
- """
- if pci_dev_check(device):
- path = [u"dpdk", f"dev {device}", parameter]
- self.add_config_item(self._nodeconfig, value, path)
+ path = ["dpdk", f"dev {device}"]
+ self.add_config_item(self._nodeconfig, "", path)
- def add_dpdk_cryptodev(self, count):
+ def add_dpdk_cryptodev(self, count, num_rx_queues=1):
"""Add DPDK Crypto PCI device configuration.
:param count: Number of HW crypto devices to add.
+ :param num_rx_queues: Number of RX queues per QAT interface.
:type count: int
- """
- cryptodev = Topology.get_cryptodev(self._node)
- for i in range(count):
- cryptodev_config = re.sub(r"\d.\d$", f"1.{str(i)}", cryptodev)
- path = [u"dpdk", f"dev {cryptodev_config}"]
- self.add_config_item(self._nodeconfig, u"", path)
- self.add_dpdk_uio_driver(u"vfio-pci")
+ :type num_rx_queues: int
+ """
+ cryptodevs = Topology.get_cryptodev(self._node)
+ for device in cryptodevs.values():
+ for i in range(int(count/len(cryptodevs))):
+ numvfs = device["numvfs"]
+ computed = f"{(i+1)//numvfs}.{(i+1)%numvfs}"
+ addr = re.sub(r"\d.\d$", computed, device["pci_address"])
+ path = ["dpdk", f"dev {addr}", "num-rx-queues"]
+ self.add_config_item(self._nodeconfig, num_rx_queues, path)
+ self.add_dpdk_uio_driver("vfio-pci")
def add_dpdk_sw_cryptodev(self, sw_pmd_type, socket_id, count):
"""Add DPDK SW Crypto device configuration.
@@ -315,8 +293,8 @@ class VppConfigGenerator:
for _ in range(count):
cryptodev_config = f"vdev cryptodev_{sw_pmd_type}_pmd," \
f"socket_id={str(socket_id)}"
- path = [u"dpdk", cryptodev_config]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["dpdk", cryptodev_config]
+ self.add_config_item(self._nodeconfig, "", path)
def add_dpdk_dev_default_rxq(self, value):
"""Add DPDK dev default rxq configuration.
@@ -324,7 +302,7 @@ class VppConfigGenerator:
:param value: Default number of rxqs.
:type value: str
"""
- path = [u"dpdk", u"dev default", u"num-rx-queues"]
+ path = ["dpdk", "dev default", "num-rx-queues"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_txq(self, value):
@@ -333,7 +311,7 @@ class VppConfigGenerator:
:param value: Default number of txqs.
:type value: str
"""
- path = [u"dpdk", u"dev default", u"num-tx-queues"]
+ path = ["dpdk", "dev default", "num-tx-queues"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_rxd(self, value):
@@ -342,7 +320,7 @@ class VppConfigGenerator:
:param value: Default number of rxds.
:type value: str
"""
- path = [u"dpdk", u"dev default", u"num-rx-desc"]
+ path = ["dpdk", "dev default", "num-rx-desc"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_dev_default_txd(self, value):
@@ -351,22 +329,27 @@ class VppConfigGenerator:
:param value: Default number of txds.
:type value: str
"""
- path = [u"dpdk", u"dev default", u"num-tx-desc"]
+ path = ["dpdk", "dev default", "num-tx-desc"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_dpdk_dev_default_tso(self):
+ """Add DPDK dev default tso configuration."""
+ path = [u"dpdk", u"dev default", u"tso"]
+ self.add_config_item(self._nodeconfig, "on", path)
+
def add_dpdk_log_level(self, value):
"""Add DPDK log-level configuration.
:param value: Log level.
:type value: str
"""
- path = [u"dpdk", u"log-level"]
+ path = ["dpdk", "log-level"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_no_pci(self):
"""Add DPDK no-pci."""
- path = [u"dpdk", u"no-pci"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["dpdk", "no-pci"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_dpdk_uio_driver(self, value=None):
"""Add DPDK uio-driver configuration.
@@ -378,7 +361,7 @@ class VppConfigGenerator:
"""
if value is None:
value = Topology.get_uio_driver(self._node)
- path = [u"dpdk", u"uio-driver"]
+ path = ["dpdk", "uio-driver"]
self.add_config_item(self._nodeconfig, value, path)
def add_dpdk_max_simd_bitwidth(self, variant=Constants.GRAPH_NODE_VARIANT):
@@ -387,23 +370,28 @@ class VppConfigGenerator:
:param value: Graph node variant default value.
:type value: str
"""
- if variant == u"icl":
+ if variant == "icl":
value = 512
- elif variant in [u"skx", u"hsw"]:
+ elif variant in ["skx", "hsw"]:
value = 256
else:
return
- path = [u"dpdk", u"max-simd-bitwidth"]
+ path = ["dpdk", "max-simd-bitwidth"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_dpdk_enable_tcp_udp_checksum(self):
+ """Add DPDK enable-tcp-udp-checksum configuration."""
+ path = [u"dpdk", u"enable-tcp-udp-checksum"]
+ self.add_config_item(self._nodeconfig, u"", path)
+
def add_cpu_main_core(self, value):
"""Add CPU main core configuration.
:param value: Main core option.
:type value: str
"""
- path = [u"cpu", u"main-core"]
+ path = ["cpu", "main-core"]
self.add_config_item(self._nodeconfig, value, path)
def add_cpu_corelist_workers(self, value):
@@ -412,7 +400,7 @@ class VppConfigGenerator:
:param value: Corelist-workers option.
:type value: str
"""
- path = [u"cpu", u"corelist-workers"]
+ path = ["cpu", "corelist-workers"]
self.add_config_item(self._nodeconfig, value, path)
def add_main_heap_size(self, value):
@@ -421,7 +409,7 @@ class VppConfigGenerator:
:param value: Amount of heap.
:type value: str
"""
- path = [u"memory", u"main-heap-size"]
+ path = ["memory", "main-heap-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_main_heap_page_size(self, value):
@@ -430,13 +418,22 @@ class VppConfigGenerator:
:param value: Heap page size.
:type value: str
"""
- path = [u"memory", u"main-heap-page-size"]
+ path = ["memory", "main-heap-page-size"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_default_hugepage_size(self, value=Constants.DEFAULT_HUGEPAGE_SIZE):
+ """Add Default Hugepage Size configuration.
+
+ :param value: Hugepage size.
+ :type value: str
+ """
+ path = ["memory", "default-hugepage-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_api_trace(self):
"""Add API trace configuration."""
- path = [u"api-trace", u"on"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["api-trace", "on"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_ip6_hash_buckets(self, value):
"""Add IP6 hash buckets configuration.
@@ -444,7 +441,7 @@ class VppConfigGenerator:
:param value: Number of IP6 hash buckets.
:type value: str
"""
- path = [u"ip6", u"hash-buckets"]
+ path = ["ip6", "hash-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_ip6_heap_size(self, value):
@@ -453,13 +450,53 @@ class VppConfigGenerator:
:param value: IP6 Heapsize amount.
:type value: str
"""
- path = [u"ip6", u"heap-size"]
+ path = ["ip6", "heap-size"]
self.add_config_item(self._nodeconfig, value, path)
- def add_spd_flow_cache_ipv4_outbound(self):
- """Add SPD flow cache for IP4 outbound traffic"""
- path = [u"ipsec", u"ipv4-outbound-spd-flow-cache"]
- self.add_config_item(self._nodeconfig, "on", path)
+ def add_ipsec_spd_flow_cache_ipv4_inbound(self, value):
+ """Add IPsec spd flow cache for IP4 inbound.
+
+ :param value: "on" to enable spd flow cache.
+ :type value: str
+ """
+ path = ["ipsec", "ipv4-inbound-spd-flow-cache"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_flow_cache_ipv4_outbound(self, value):
+ """Add IPsec spd flow cache for IP4 outbound.
+
+ :param value: "on" to enable spd flow cache.
+ :type value: str
+ """
+ path = ["ipsec", "ipv4-outbound-spd-flow-cache"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_fast_path_ipv4_inbound(self, value):
+ """Add IPsec spd fast path for IP4 inbound.
+
+ :param value: "on" to enable spd fast path.
+ :type value: str
+ """
+ path = [u"ipsec", u"ipv4-inbound-spd-fast-path"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_fast_path_ipv4_outbound(self, value):
+ """Add IPsec spd fast path for IP4 outbound.
+
+ :param value: "on" to enable spd fast path.
+ :type value: str
+ """
+ path = ["ipsec", "ipv4-outbound-spd-fast-path"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_ipsec_spd_fast_path_num_buckets(self, value):
+ """Add num buckets for IPsec spd fast path.
+
+ :param value: Number of buckets.
+ :type value: int
+ """
+ path = ["ipsec", "spd-fast-path-num-buckets"]
+ self.add_config_item(self._nodeconfig, value, path)
def add_statseg_size(self, value):
"""Add Stats Heap Size configuration.
@@ -467,7 +504,7 @@ class VppConfigGenerator:
:param value: Stats heapsize amount.
:type value: str
"""
- path = [u"statseg", u"size"]
+ path = ["statseg", "size"]
self.add_config_item(self._nodeconfig, value, path)
def add_statseg_page_size(self, value):
@@ -476,7 +513,7 @@ class VppConfigGenerator:
:param value: Stats heapsize amount.
:type value: str
"""
- path = [u"statseg", u"page-size"]
+ path = ["statseg", "page-size"]
self.add_config_item(self._nodeconfig, value, path)
def add_statseg_per_node_counters(self, value):
@@ -485,7 +522,7 @@ class VppConfigGenerator:
:param value: "on" to switch the counters on.
:type value: str
"""
- path = [u"statseg", u"per-node-counters"]
+ path = ["statseg", "per-node-counters"]
self.add_config_item(self._nodeconfig, value, path)
def add_plugin(self, state, *plugins):
@@ -497,27 +534,27 @@ class VppConfigGenerator:
:type plugins: list
"""
for plugin in plugins:
- path = [u"plugins", f"plugin {plugin}", state]
- self.add_config_item(self._nodeconfig, u" ", path)
+ path = ["plugins", f"plugin {plugin}", state]
+ self.add_config_item(self._nodeconfig, " ", path)
def add_dpdk_no_multi_seg(self):
"""Add DPDK no-multi-seg configuration."""
- path = [u"dpdk", u"no-multi-seg"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["dpdk", "no-multi-seg"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_dpdk_no_tx_checksum_offload(self):
"""Add DPDK no-tx-checksum-offload configuration."""
- path = [u"dpdk", u"no-tx-checksum-offload"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["dpdk", "no-tx-checksum-offload"]
+ self.add_config_item(self._nodeconfig, "", path)
- def add_nat(self, value=u"deterministic"):
+ def add_nat(self, value="deterministic"):
"""Add NAT mode configuration.
:param value: NAT mode.
:type value: str
"""
- path = [u"nat", value]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["nat", value]
+ self.add_config_item(self._nodeconfig, "", path)
def add_nat_max_translations_per_thread(self, value):
"""Add NAT max. translations per thread number configuration.
@@ -525,21 +562,21 @@ class VppConfigGenerator:
:param value: NAT mode.
:type value: str
"""
- path = [u"nat", u"max translations per thread"]
+ path = ["nat", "max translations per thread"]
self.add_config_item(self._nodeconfig, value, path)
def add_nsim_poll_main_thread(self):
"""Add NSIM poll-main-thread configuration."""
- path = [u"nsim", u"poll-main-thread"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["nsim", "poll-main-thread"]
+ self.add_config_item(self._nodeconfig, "", path)
- def add_tcp_congestion_control_algorithm(self, value=u"cubic"):
+ def add_tcp_congestion_control_algorithm(self, value="cubic"):
"""Add TCP congestion control algorithm.
:param value: The congestion control algorithm to use. Example: cubic
:type value: str
"""
- path = [u"tcp", u"cc-algo"]
+ path = ["tcp", "cc-algo"]
self.add_config_item(self._nodeconfig, value, path)
def add_tcp_preallocated_connections(self, value):
@@ -548,7 +585,7 @@ class VppConfigGenerator:
:param value: The number of pre-allocated connections.
:type value: int
"""
- path = [u"tcp", u"preallocated-connections"]
+ path = ["tcp", "preallocated-connections"]
self.add_config_item(self._nodeconfig, value, path)
def add_tcp_preallocated_half_open_connections(self, value):
@@ -557,18 +594,28 @@ class VppConfigGenerator:
:param value: The number of pre-allocated half open connections.
:type value: int
"""
- path = [u"tcp", u"preallocated-half-open-connections"]
+ path = ["tcp", "preallocated-half-open-connections"]
self.add_config_item(self._nodeconfig, value, path)
+ def add_tcp_tso(self):
+ """Add TCP tso configuration."""
+ path = [u"tcp", u"tso"]
+ self.add_config_item(self._nodeconfig, u"", path)
+
def add_session_enable(self):
"""Add session enable."""
- path = [u"session", u"enable"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["session", "enable"]
+ self.add_config_item(self._nodeconfig, "", path)
+
+ def add_session_app_socket_api(self):
+ """Use session app socket api."""
+ path = ["session", "use-app-socket-api"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_session_event_queues_memfd_segment(self):
"""Add session event queue memfd segment."""
- path = [u"session", u"evt_qs_memfd_seg"]
- self.add_config_item(self._nodeconfig, u"", path)
+ path = ["session", "evt_qs_memfd_seg"]
+ self.add_config_item(self._nodeconfig, "", path)
def add_session_event_queue_length(self, value):
"""Add session event queue length.
@@ -576,7 +623,7 @@ class VppConfigGenerator:
:param value: Session event queue length.
:type value: int
"""
- path = [u"session", u"event-queue-length"]
+ path = ["session", "event-queue-length"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_event_queues_segment_size(self, value):
@@ -585,7 +632,7 @@ class VppConfigGenerator:
:param value: Session event queue segment size.
:type value: str
"""
- path = [u"session", u"evt_qs_seg_size"]
+ path = ["session", "evt_qs_seg_size"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_preallocated_sessions(self, value):
@@ -594,7 +641,7 @@ class VppConfigGenerator:
:param value: Number of pre-allocated sessions.
:type value: int
"""
- path = [u"session", u"preallocated-sessions"]
+ path = ["session", "preallocated-sessions"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_session_table_buckets(self, value):
@@ -603,7 +650,7 @@ class VppConfigGenerator:
:param value: Number of v4 session table buckets.
:type value: int
"""
- path = [u"session", u"v4-session-table-buckets"]
+ path = ["session", "v4-session-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_session_table_memory(self, value):
@@ -612,7 +659,7 @@ class VppConfigGenerator:
:param value: Size of v4 session table memory.
:type value: str
"""
- path = [u"session", u"v4-session-table-memory"]
+ path = ["session", "v4-session-table-memory"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_halfopen_table_buckets(self, value):
@@ -621,7 +668,7 @@ class VppConfigGenerator:
:param value: Number of v4 halfopen table buckets.
:type value: int
"""
- path = [u"session", u"v4-halfopen-table-buckets"]
+ path = ["session", "v4-halfopen-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_v4_halfopen_table_memory(self, value):
@@ -630,7 +677,7 @@ class VppConfigGenerator:
:param value: Size of v4 halfopen table memory.
:type value: str
"""
- path = [u"session", u"v4-halfopen-table-memory"]
+ path = ["session", "v4-halfopen-table-memory"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_local_endpoints_table_buckets(self, value):
@@ -639,7 +686,7 @@ class VppConfigGenerator:
:param value: Number of local endpoints table buckets.
:type value: int
"""
- path = [u"session", u"local-endpoints-table-buckets"]
+ path = ["session", "local-endpoints-table-buckets"]
self.add_config_item(self._nodeconfig, value, path)
def add_session_local_endpoints_table_memory(self, value):
@@ -648,7 +695,31 @@ class VppConfigGenerator:
:param value: Size of local endpoints table memory.
:type value: str
"""
- path = [u"session", u"local-endpoints-table-memory"]
+ path = ["session", "local-endpoints-table-memory"]
+ self.add_config_item(self._nodeconfig, value, path)
+
+ def add_session_use_dma(self):
+ """Add session use-dma configuration."""
+ path = [u"session", u"use-dma"]
+ self.add_config_item(self._nodeconfig, u"", path)
+
+ def add_dma_dev(self, devices):
+ """Add DMA devices configuration.
+
+ :param devices: DMA devices or work queues.
+ :type devices: list
+ """
+ for device in devices:
+ path = ["dsa", f"dev {device}"]
+ self.add_config_item(self._nodeconfig, "", path)
+
+ def add_logging_default_syslog_log_level(self, value="debug"):
+ """Add default logging level for syslog.
+
+ :param value: Log level.
+ :type value: str
+ """
+ path = ["logging", "default-syslog-log-level"]
self.add_config_item(self._nodeconfig, value, path)
def write_config(self, filename=None):
@@ -665,15 +736,9 @@ class VppConfigGenerator:
if filename is None:
filename = self._vpp_startup_conf
- if self._vpp_startup_conf_backup is not None:
- cmd = f"cp {self._vpp_startup_conf} {self._vpp_startup_conf_backup}"
- exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Copy config file failed!"
- )
-
cmd = f"echo \"{self._vpp_config}\" | sudo tee {filename}"
exec_cmd_no_error(
- self._node, cmd, message=u"Writing config file failed!"
+ self._node, cmd, message="Writing config file failed!"
)
def apply_config(self, filename=None, verify_vpp=True):
@@ -693,9 +758,39 @@ class VppConfigGenerator:
if verify_vpp:
VPPUtil.verify_vpp(self._node)
- def restore_config(self):
- """Restore VPP startup.conf from backup."""
- cmd = f"cp {self._vpp_startup_conf_backup} {self._vpp_startup_conf}"
- exec_cmd_no_error(
- self._node, cmd, sudo=True, message=u"Copy config file failed!"
- )
+
+class VppInitConfig:
+ """VPP Initial Configuration."""
+ @staticmethod
+ def init_vpp_startup_configuration_on_all_duts(nodes):
+ """Apply initial VPP startup configuration on all DUTs.
+
+ :param nodes: Nodes in the topology.
+ :type nodes: dict
+ """
+ huge_size = Constants.DEFAULT_HUGEPAGE_SIZE
+ for node in nodes.values():
+ if node["type"] == NodeType.DUT:
+ vpp_config = VppConfigGenerator()
+ vpp_config.set_node(node)
+ vpp_config.add_unix_log()
+ vpp_config.add_unix_cli_listen()
+ vpp_config.add_unix_cli_no_pager()
+ vpp_config.add_unix_gid()
+ vpp_config.add_unix_coredump()
+ vpp_config.add_socksvr(socket=Constants.SOCKSVR_PATH)
+ vpp_config.add_main_heap_size("2G")
+ vpp_config.add_main_heap_page_size(huge_size)
+ vpp_config.add_default_hugepage_size(huge_size)
+ vpp_config.add_statseg_size("2G")
+ vpp_config.add_statseg_page_size(huge_size)
+ vpp_config.add_statseg_per_node_counters("on")
+ vpp_config.add_plugin("disable", "default")
+ vpp_config.add_plugin("enable", "dpdk_plugin.so")
+ vpp_config.add_dpdk_dev(
+ *[node["interfaces"][interface].get("pci_address") \
+ for interface in node["interfaces"]]
+ )
+ vpp_config.add_ip6_hash_buckets(2000000)
+ vpp_config.add_ip6_heap_size("4G")
+ vpp_config.apply_config()
diff --git a/resources/libraries/python/WireGuardUtil.py b/resources/libraries/python/WireGuardUtil.py
new file mode 100644
index 0000000000..6e6237e7e7
--- /dev/null
+++ b/resources/libraries/python/WireGuardUtil.py
@@ -0,0 +1,298 @@
+# Copyright (c) 2022 Intel and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""WireGuard utilities library."""
+
+from ipaddress import ip_address
+from cryptography.hazmat.primitives.serialization import Encoding, \
+ PrivateFormat, PublicFormat, NoEncryption
+from cryptography.hazmat.primitives.asymmetric.x25519 import \
+ X25519PrivateKey
+
+from resources.libraries.python.InterfaceUtil import InterfaceUtil
+from resources.libraries.python.IPUtil import IPUtil
+from resources.libraries.python.PapiExecutor import PapiSocketExecutor
+
+class WireGuardUtil:
+ """This class defines the methods to set WireGuard."""
+
+ @staticmethod
+ def public_key_bytes(k):
+ """Return the public key as byte.
+
+ :param k: Generated public key.
+ :type: x25519._X25519PublicKey object
+ :returns: Public key.
+ :rtype: bytes
+ """
+ return k.public_bytes(Encoding.Raw, PublicFormat.Raw)
+
+ @staticmethod
+ def private_key_bytes(k):
+ """Return the private key as byte.
+
+ :param k: Generated private key.
+ :type: x25519._X25519PrivateKey object
+ :returns: Private key.
+ :rtype: bytes
+ """
+ return k.private_bytes(Encoding.Raw, PrivateFormat.Raw, NoEncryption())
+
+ @staticmethod
+ def generate_wireguard_privatekey_and_pubkey():
+ """Generate a pair of WireGuard Private key and Public key.
+
+ :returns: A pair of privatekey and publickey
+ :rtype: x25519._X25519PublicKey object
+ """
+ privatekey = X25519PrivateKey.generate()
+ pubkey = privatekey.public_key()
+ private_key = WireGuardUtil.private_key_bytes(privatekey)
+ public_key = WireGuardUtil.public_key_bytes(pubkey)
+ return private_key, public_key
+
+ @staticmethod
+ def vpp_wireguard_create_interface(
+ node, listen_port, wg_src, private_key):
+ """Create WireGuard interface.
+
+ :param node: VPP node to add config on.
+ :param listen_port: WireGuard interface listen port.
+ :param wg_src: WireGuard source IPv4.
+ :param private_key: WireGuard interface private key
+ :type node: dict
+ :type listen_port: int
+ :type wg_src: str
+ :type private_key: bytes
+ :returns: Wireguard interface sw_if_index.
+ :rtype: int
+ """
+ cmd = u"wireguard_interface_create"
+ err_msg = f"Failed to create wireguard interface" \
+ f"on host {node[u'host']}"
+ src_ip = ip_address(wg_src)
+ args = dict(
+ interface=dict(
+ port=int(listen_port),
+ src_ip=src_ip,
+ private_key=private_key,
+ generate_key=False
+ )
+ )
+ with PapiSocketExecutor(node) as papi_exec:
+ wg_sw_index = \
+ papi_exec.add(cmd, **args).get_sw_if_index(err_msg)
+ return wg_sw_index
+
+ @staticmethod
+ def vpp_wireguard_add_peer(
+ node, interface, peer_pubkey, endpoint_ip,
+ allowed_ips, n_allowed_ips, dst_port, keepalive_time):
+ """Add a peer for WireGuard interface.
+
+ :param node: VPP node to add config on.
+ :param interface: WireGuard interface sw_if_index.
+ :param peer_pubkey: Public key of wireguard interface peer.
+ :param endpoint_ip: Peer source IPv4.
+ :param allowed_ips: WireGuard interface allowed ips list.
+ :param n_allowed_ips: Number of allowed ips.
+ :param dst_port: WireGuard destination port.
+ :param keepaliva time: WireGuard persistent keepalive time.
+ :type node: dict
+ :type interface: int
+ :type peer_pubkey: bytes
+ :type endpoint_ip: str
+ :type allowed_ips: list
+ :type n_allowed_ips: int
+ :type dst_port: int
+ :type keepalive_time: int
+ """
+ endpoint_ip = ip_address(endpoint_ip)
+ cmd = u"wireguard_peer_add"
+ err_msg = f"Failed to add peer of wireguard interface" \
+ f"{interface} on host {node[u'host']}"
+ args = dict(
+ peer=dict(
+ public_key=peer_pubkey,
+ port=int(dst_port),
+ endpoint=endpoint_ip,
+ sw_if_index=interface,
+ persistent_keepalive=int(keepalive_time),
+ n_allowed_ips=int(n_allowed_ips),
+ allowed_ips=allowed_ips
+ )
+ )
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
+
+ @staticmethod
+ def vpp_wireguard_set_async_mode(node, async_enable=1):
+ """Set wireguard async mode on or off.
+
+ :param node: VPP node to set wireguard async mode.
+ :param async_enable: Async mode on or off.
+ :type node: dict
+ :type async_enable: int
+ """
+ cmd = u"wg_set_async_mode"
+ err_msg = f"Failed to set wireguard async mode on host {node[u'host']}"
+ args = dict(
+ async_enable=async_enable
+ )
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
+
+ @staticmethod
+ def _wireguard_create_tunnel_interface_on_dut(
+ node, if1_key, if2_mac_addr, src_ip, peer_endpoint_ip,
+ peer_allowed_ips, peer_n_allowed_ips, dut_wg_ip, port,
+ keepalive_time, dut_private_key, peer_pubkey):
+ """Create WireGuard tunnel interface on one DUT node using PAPI.
+
+ :param node: VPP node as DUT to create tunnel interface.
+ :param if1_key: VPP node as DUT interface key from topology file.
+ :param if2_mac_addr: Vpp node on the other end/ TG node
+ (in case of 2-node topology) interface mac address.
+ :param src_ip: WireGuard source IPv4 address.
+ :param peer_endpoint_ip: Peer source IPv4 address.
+ :param peer_allowed_ips: WireGuard peer interface allowed ip list.
+ :param peer_n_allowed ips: Number of peer allowed ips.
+ :param dut_wg_ip: WireGuard interface ip address on DUT.
+ :param port: WireGuard interface listen port or
+ Peer interface destination port.
+ :param keepalive_time: WireGuard persistent keepalive time.
+ :param dut_private_key: WireGuard interface private key of DUT.
+ :param peer_pubkey: WireGuard Peer interface public key.
+ :type nodes: dict
+ :type if1_key: str
+ :type if2_mac_addr: str
+ :type src_ip: str
+ :type peer_endpoint_ip: str
+ :type peer_allowed_ips: list
+ :type peer_n_allowed_ips: int
+ :type dut_wg_ip: str
+ :type port: int
+ :type keepalive_time: int
+ :type dut_private_key: bytes
+ :type peer_pubkey: bytes
+ """
+ #Set IP address on VPP node interface
+ IPUtil.vpp_interface_set_ip_address(node, if1_key, src_ip, 24)
+ IPUtil.vpp_add_ip_neighbor(
+ node, if1_key, peer_endpoint_ip, if2_mac_addr
+ )
+ #Create Wireguard interface on DUT
+ dut_wg_sw_index = WireGuardUtil.vpp_wireguard_create_interface(
+ node, port, src_ip, dut_private_key
+ )
+ #Add wireguard peer
+ WireGuardUtil.vpp_wireguard_add_peer(
+ node, dut_wg_sw_index, peer_pubkey, peer_endpoint_ip,
+ peer_allowed_ips, peer_n_allowed_ips, port, keepalive_time
+ )
+ #Set wireguard interface up
+ InterfaceUtil.set_interface_state(node, dut_wg_sw_index, state=u'up')
+ #Set wireguard interface IP address
+ cmd = u'sw_interface_add_del_address'
+ args = dict(
+ sw_if_index=dut_wg_sw_index,
+ is_add=True,
+ del_all=False,
+ prefix=IPUtil.create_prefix_object(ip_address(dut_wg_ip), 24)
+ )
+ err_msg = f"Failed to set IP address on wg interface " \
+ f"on host {node[u'host']}"
+ with PapiSocketExecutor(node) as papi_exec:
+ papi_exec.add(cmd, **args).get_reply(err_msg)
+ #Set route on VPP node as DUT wg interface
+ for allowed_ip in peer_allowed_ips:
+ traffic_addr = ip_address(
+ allowed_ip[u'address'][u'un'][u'ip4']
+ )
+ prefix_len = allowed_ip[u'len']
+ IPUtil.vpp_route_add(
+ node, traffic_addr, prefix_len,
+ gateway=(traffic_addr+1).compressed,
+ interface=dut_wg_sw_index
+ )
+
+ @staticmethod
+ def vpp_wireguard_create_tunnel_interfaces_on_duts(
+ nodes, if1_key, if2_key, if1_ip_addr, if2_ip_addr,
+ if1_mac_addr, if2_mac_addr, wg_if1_ip_addr, wg_if2_ip_addr,
+ n_tunnels, port, keepalive_time, raddr_ip1, raddr_ip2):
+ """Create WireGuard tunnel interfaces between two VPP nodes.
+
+ :param nodes: VPP nodes to create tunnel interfaces.
+ :param if1_key: VPP node 1 interface key from topology file.
+ :param if2_key: VPP node 2 / TG node (in case of 2-node topology)
+ :param if1_ip_addr: VPP node 1 interface IPv4/IPv6 address.
+ :param if2_ip_addr: VPP node 2 / TG node
+ (in case of 2-node topology) interface IPv4/IPv6 address.
+ :param if1_mac_addr: VPP node1 interface mac address.
+ :param if2_mac_addr: VPP node2 interface mac address.
+ :param wg_if1_ip_addr: VPP node 1 WireGuard interface IPv4 address.
+ :param wg_if2_ip_addr: VPP node 2 WireGuard interface IPv4 address.
+ :param n_tunnels: Number of wireguard tunnels.
+ :param port: WireGuard interface listen port or
+ Peer interface destination port.
+ :param keepalive_time: WireGuard persistent keepalive time.
+ :param raddr_ip1: Policy selector remote IPv4/IPv6 start address
+ for the first tunnel in direction node1->node2.
+ :param raddr_ip2: Policy selector remote IPv4/IPv6 start address
+ for the first tunnel in direction node2->node1.
+ :type nodes: dict
+ :type if1_key: str
+ :type if2_key: str
+ :type if1_ip_addr: str
+ :type if2_ip_addr: str
+ :type if1_mac_addr: str
+ :type if2_mac_addr: str
+ :type wg_if1_ip_addr: str
+ :type wg_if2_ip_addr: str
+ :type n_tunnels: int
+ :type port: int
+ :type keepalive_time: int
+ :type raddr_ip1: str
+ :type raddr_ip2: str
+ """
+ for i in range(n_tunnels):
+ if1_ipaddr = str(ip_address(if1_ip_addr) + i*256)
+ if2_ipaddr = str(ip_address(if2_ip_addr) + i*256)
+ wg_if1_ipaddr = str(ip_address(wg_if1_ip_addr) + i*256)
+ wg_if2_ipaddr = str(ip_address(wg_if2_ip_addr) + i*256)
+
+ allowed_ipaddr1 = ip_address(raddr_ip1) + i*256
+ allowed_ipaddr2 = ip_address(raddr_ip2) + i*256
+ dut1_allowed_ips = \
+ [IPUtil.create_prefix_object(allowed_ipaddr2, 24),]
+ dut2_allowed_ips = \
+ [IPUtil.create_prefix_object(allowed_ipaddr1, 24),]
+
+ dut1_privatekey, dut1_pubkey = \
+ WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
+ dut2_privatekey, dut2_pubkey = \
+ WireGuardUtil.generate_wireguard_privatekey_and_pubkey()
+
+ #Configure WireGuard interface on DUT1
+ WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
+ nodes[u'DUT1'], if1_key, if2_mac_addr, if1_ipaddr, if2_ipaddr,
+ dut1_allowed_ips, 1, wg_if1_ipaddr, port,
+ keepalive_time, dut1_privatekey, dut2_pubkey
+ )
+ #Configure WireGuard interface on DUT2
+ WireGuardUtil._wireguard_create_tunnel_interface_on_dut(
+ nodes[u'DUT2'], if2_key, if1_mac_addr, if2_ipaddr, if1_ipaddr,
+ dut2_allowed_ips, 1, wg_if2_ipaddr, port,
+ keepalive_time, dut2_privatekey, dut1_pubkey
+ )
diff --git a/resources/libraries/python/autogen/Regenerator.py b/resources/libraries/python/autogen/Regenerator.py
index bb2e5b5fbc..8d593fecca 100644
--- a/resources/libraries/python/autogen/Regenerator.py
+++ b/resources/libraries/python/autogen/Regenerator.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,6 +17,7 @@ TODO: How can we check each suite id is unique,
when currently the suite generation is run on each directory separately?
"""
+import copy
import sys
from glob import glob
@@ -116,54 +117,75 @@ def check_suite_tag(suite_tag, prolog):
raise ValueError(f"Suite tag found {found} times for {suite_tag}")
-def add_default_testcases(testcase, iface, suite_id, file_out, tc_kwargs_list):
+def filter_and_edit_kwargs_for_astf(suite_id, kwargs):
+ """Return possibly edited kwargs, or None if to be skipped.
+
+ This is a code block used in few places.
+ Kwargs is (a copy of) one item from tc_kwargs_list.
+ Currently, the editable field is frame_size,
+ to be increased to for tests with data (not just CPS).
+
+ :param suite_id: Suite ID.
+ :param kwargs: Key-value pairs used to construct one testcase.
+ :type suite_id: str
+ :type tc_kwargs_list: dict
+ :returns: Edited kwargs.
+ :rtype Optional[dict]
+ """
+ if u"-cps-" in suite_id:
+ # Contrary to UDP, there is no place to affect frame size
+ # in TCP CPS tests. Actual frames are close to min size.
+ # UDP uses the min value too, for fairer comparison to TCP.
+ if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
+ return None
+ elif (u"-pps-" in suite_id or u"-tput-" in suite_id):
+ if u"imix" in str(kwargs[u"frame_size"]).lower():
+ # ASTF does not support IMIX (yet).
+ return None
+ if kwargs[u"frame_size"] in MIN_FRAME_SIZE_VALUES:
+ # Minimal (TRex) TCP data frame is 80B for IPv4.
+ # In future, we may want to have also IPv6 TCP.
+ # UDP uses the same value, for fairer comparison to TCP.
+ kwargs[u"frame_size"] = 100
+ return kwargs
+
+
+def add_default_testcases(
+ testcase, nic_code, suite_id, file_out, tc_kwargs_list):
"""Add default testcases to file.
:param testcase: Testcase class.
- :param iface: Interface.
+ :param nic_code: NIC code.
:param suite_id: Suite ID.
:param file_out: File to write testcases to.
:param tc_kwargs_list: Key-value pairs used to construct testcases.
:type testcase: Testcase
- :type iface: str
+ :type nic_code: str
:type suite_id: str
:type file_out: file
:type tc_kwargs_list: dict
"""
- for kwargs in tc_kwargs_list:
+ for kwas in tc_kwargs_list:
+ # We may edit framesize for ASTF, the copy should be local.
+ kwargs = copy.deepcopy(kwas)
# TODO: Is there a better way to disable some combinations?
emit = True
- if kwargs[u"frame_size"] == 9000:
- if u"vic1227" in iface:
- # Not supported in HW.
- emit = False
- if u"vic1385" in iface:
- # Not supported in HW.
- emit = False
- if u"-16vm2t-" in suite_id or u"-16dcr2t-" in suite_id:
- if kwargs[u"phy_cores"] > 3:
- # CSIT lab only has 28 (physical) core processors,
- # so these test would fail when attempting to assign cores.
- emit = False
- if u"-24vm1t-" in suite_id or u"-24dcr1t-" in suite_id:
- if kwargs[u"phy_cores"] > 3:
- # CSIT lab only has 28 (physical) core processors,
- # so these test would fail when attempting to assign cores.
- emit = False
+ core_scale = Constants.NIC_CODE_TO_CORESCALE[nic_code]
if u"soak" in suite_id:
# Soak test take too long, do not risk other than tc01.
if kwargs[u"phy_cores"] != 1:
emit = False
- if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
- emit = False
- if (
- u"-cps-" in suite_id
- or u"-pps-" in suite_id
- or u"-tput-" in suite_id
- ):
- if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
- emit = False
- if emit:
+ if u"reassembly" in suite_id:
+ if kwargs[u"frame_size"] != 1518:
+ emit = False
+ else:
+ if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
+ emit = False
+
+ kwargs.update({'phy_cores': kwas['phy_cores']*core_scale})
+
+ kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+ if emit and kwargs is not None:
file_out.write(testcase.generate(**kwargs))
@@ -207,17 +229,11 @@ def add_trex_testcases(testcase, suite_id, file_out, tc_kwargs_list):
:type file_out: file
:type tc_kwargs_list: dict
"""
- for kwargs in tc_kwargs_list:
- # TODO: Is there a better way to disable some combinations?
- emit = True
- if (
- u"-cps-" in suite_id
- or u"-pps-" in suite_id
- or u"-tput-" in suite_id
- ):
- if kwargs[u"frame_size"] not in MIN_FRAME_SIZE_VALUES:
- emit = False
- if emit:
+ for kwas in tc_kwargs_list:
+ # We may edit framesize for ASTF, the copy should be local.
+ kwargs = copy.deepcopy(kwas)
+ kwargs = filter_and_edit_kwargs_for_astf(suite_id, kwargs)
+ if kwargs is not None:
file_out.write(testcase.generate(**kwargs))
@@ -233,75 +249,75 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
"""
for suite_type in Constants.PERF_TYPE_TO_KEYWORD:
tmp_filename = replace_defensively(
- in_filename, u"ndrpdr", suite_type, 1,
- u"File name should contain suite type once.", in_filename
+ in_filename, "ndrpdr", suite_type, 1,
+ "File name should contain suite type once.", in_filename
)
tmp_prolog = replace_defensively(
- in_prolog, u"ndrpdr".upper(), suite_type.upper(), 1,
- u"Suite type should appear once in uppercase (as tag).",
+ in_prolog, "ndrpdr".upper(), suite_type.upper(), 1,
+ "Suite type should appear once in uppercase (as tag).",
in_filename
)
tmp_prolog = replace_defensively(
tmp_prolog,
- u"Find NDR and PDR intervals using optimized search",
+ "Find NDR and PDR intervals using optimized search",
Constants.PERF_TYPE_TO_KEYWORD[suite_type], 1,
- u"Main search keyword should appear once in suite.",
+ "Main search keyword should appear once in suite.",
in_filename
)
tmp_prolog = replace_defensively(
tmp_prolog,
- Constants.PERF_TYPE_TO_SUITE_DOC_VER[u"ndrpdr"],
+ Constants.PERF_TYPE_TO_SUITE_DOC_VER["ndrpdr"],
Constants.PERF_TYPE_TO_SUITE_DOC_VER[suite_type],
- 1, u"Exact suite type doc not found.", in_filename
+ 1, "Exact suite type doc not found.", in_filename
)
tmp_prolog = replace_defensively(
tmp_prolog,
- Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[u"ndrpdr"],
+ Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER["ndrpdr"],
Constants.PERF_TYPE_TO_TEMPLATE_DOC_VER[suite_type],
- 1, u"Exact template type doc not found.", in_filename
+ 1, "Exact template type doc not found.", in_filename
)
_, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
testcase = Testcase.default(suite_id)
- for nic_name in Constants.NIC_NAME_TO_CODE:
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
tmp2_filename = replace_defensively(
- tmp_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[nic_name], 1,
- u"File name should contain NIC code once.", in_filename
+ tmp_filename, "10ge2p1x710", nic_code, 1,
+ "File name should contain NIC code once.", in_filename
)
tmp2_prolog = replace_defensively(
- tmp_prolog, u"Intel-X710", nic_name, 2,
- u"NIC name should appear twice (tag and variable).",
+ tmp_prolog, "Intel-X710", nic_name, 2,
+ "NIC name should appear twice (tag and variable).",
in_filename
)
- if tmp2_prolog.count(u"HW_") == 2:
+ if tmp2_prolog.count("HW_") == 2:
# TODO CSIT-1481: Crypto HW should be read
# from topology file instead.
if nic_name in Constants.NIC_NAME_TO_CRYPTO_HW:
tmp2_prolog = replace_defensively(
- tmp2_prolog, u"HW_DH895xcc",
+ tmp2_prolog, "HW_DH895xcc",
Constants.NIC_NAME_TO_CRYPTO_HW[nic_name], 1,
- u"HW crypto name should appear.", in_filename
+ "HW crypto name should appear.", in_filename
)
iface, old_suite_id, old_suite_tag = get_iface_and_suite_ids(
tmp2_filename
)
- if u"DPDK" in in_prolog:
+ if "DPDK" in in_prolog:
for driver in Constants.DPDK_NIC_NAME_TO_DRIVER[nic_name]:
out_filename = replace_defensively(
tmp2_filename, old_suite_id,
Constants.DPDK_NIC_DRIVER_TO_SUITE_PREFIX[driver] \
+ old_suite_id,
- 1, u"Error adding driver prefix.", in_filename
+ 1, "Error adding driver prefix.", in_filename
)
out_prolog = replace_defensively(
- tmp2_prolog, u"vfio-pci", driver, 1,
- u"Driver name should appear once.", in_filename
+ tmp2_prolog, "vfio-pci", driver, 1,
+ "Driver name should appear once.", in_filename
)
out_prolog = replace_defensively(
out_prolog,
- Constants.DPDK_NIC_DRIVER_TO_TAG[u"vfio-pci"],
+ Constants.DPDK_NIC_DRIVER_TO_TAG["vfio-pci"],
Constants.DPDK_NIC_DRIVER_TO_TAG[driver], 1,
- u"Driver tag should appear once.", in_filename
+ "Driver tag should appear once.", in_filename
)
iface, suite_id, suite_tag = get_iface_and_suite_ids(
out_filename
@@ -316,36 +332,41 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
check_suite_tag(suite_tag, out_prolog)
# TODO: Reorder loops so suite_id is finalized sooner.
testcase = Testcase.default(suite_id)
- with open(out_filename, u"wt") as file_out:
+ with open(out_filename, "wt") as file_out:
file_out.write(out_prolog)
add_default_testcases(
- testcase, iface, suite_id, file_out, kwargs_list
+ testcase, nic_code, suite_id, file_out, kwargs_list
)
continue
for driver in Constants.NIC_NAME_TO_DRIVER[nic_name]:
out_filename = replace_defensively(
tmp2_filename, old_suite_id,
Constants.NIC_DRIVER_TO_SUITE_PREFIX[driver] + old_suite_id,
- 1, u"Error adding driver prefix.", in_filename
+ 1, "Error adding driver prefix.", in_filename
)
out_prolog = replace_defensively(
- tmp2_prolog, u"vfio-pci", driver, 1,
- u"Driver name should appear once.", in_filename
+ tmp2_prolog, "vfio-pci", driver, 1,
+ "Driver name should appear once.", in_filename
)
out_prolog = replace_defensively(
- out_prolog, Constants.NIC_DRIVER_TO_TAG[u"vfio-pci"],
+ out_prolog, Constants.NIC_DRIVER_TO_TAG["vfio-pci"],
Constants.NIC_DRIVER_TO_TAG[driver], 1,
- u"Driver tag should appear once.", in_filename
+ "Driver tag should appear once.", in_filename
)
out_prolog = replace_defensively(
- out_prolog, Constants.NIC_DRIVER_TO_PLUGINS[u"vfio-pci"],
+ out_prolog, Constants.NIC_DRIVER_TO_PLUGINS["vfio-pci"],
Constants.NIC_DRIVER_TO_PLUGINS[driver], 1,
- u"Driver plugin should appear once.", in_filename
+ "Driver plugin should appear once.", in_filename
)
out_prolog = replace_defensively(
- out_prolog, Constants.NIC_DRIVER_TO_VFS[u"vfio-pci"],
+ out_prolog, Constants.NIC_DRIVER_TO_VFS["vfio-pci"],
Constants.NIC_DRIVER_TO_VFS[driver], 1,
- u"NIC VFs argument should appear once.", in_filename
+ "NIC VFs argument should appear once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+ Constants.NIC_CODE_TO_PFS[nic_code], 1,
+ "NIC PFs argument should appear once.", in_filename
)
iface, suite_id, suite_tag = get_iface_and_suite_ids(
out_filename
@@ -360,10 +381,10 @@ def write_default_files(in_filename, in_prolog, kwargs_list):
check_suite_tag(suite_tag, out_prolog)
# TODO: Reorder loops so suite_id is finalized sooner.
testcase = Testcase.default(suite_id)
- with open(out_filename, u"wt") as file_out:
+ with open(out_filename, "wt") as file_out:
file_out.write(out_prolog)
add_default_testcases(
- testcase, iface, suite_id, file_out, kwargs_list
+ testcase, nic_code, suite_id, file_out, kwargs_list
)
@@ -383,10 +404,10 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
"""
_, suite_id, _ = get_iface_and_suite_ids(in_filename)
testcase = Testcase.default(suite_id)
- for nic_name in Constants.NIC_NAME_TO_CODE:
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
tmp_filename = replace_defensively(
- in_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[nic_name], 1,
+ in_filename, u"10ge2p1x710", nic_code, 1,
u"File name should contain NIC code once.", in_filename
)
tmp_prolog = replace_defensively(
@@ -431,6 +452,11 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
Constants.NIC_DRIVER_TO_VFS[driver], 1,
u"NIC VFs argument should appear once.", in_filename
)
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+ Constants.NIC_CODE_TO_PFS[nic_code], 1,
+ "NIC PFs argument should appear once.", in_filename
+ )
iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
out_prolog = replace_defensively(
out_prolog, old_suite_tag, suite_tag, 1,
@@ -449,8 +475,6 @@ def write_reconf_files(in_filename, in_prolog, kwargs_list):
def write_tcp_files(in_filename, in_prolog, kwargs_list):
"""Using given filename and prolog, write all generated tcp suites.
- TODO: Suport drivers.
-
:param in_filename: Template filename to derive real filenames from.
:param in_prolog: Template content to derive real content from.
:param kwargs_list: List of kwargs for add_default_testcase.
@@ -461,21 +485,60 @@ def write_tcp_files(in_filename, in_prolog, kwargs_list):
# TODO: Generate rps from cps? There are subtle differences.
_, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
testcase = Testcase.tcp(suite_id)
- for nic_name in Constants.NIC_NAME_TO_CODE:
- out_filename = replace_defensively(
- in_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[nic_name], 1,
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
+ tmp_filename = replace_defensively(
+ in_filename, u"10ge2p1x710", nic_code, 1,
u"File name should contain NIC code once.", in_filename
)
- out_prolog = replace_defensively(
+ tmp_prolog = replace_defensively(
in_prolog, u"Intel-X710", nic_name, 2,
u"NIC name should appear twice (tag and variable).",
in_filename
)
- check_suite_tag(suite_tag, out_prolog)
- with open(out_filename, u"wt") as file_out:
- file_out.write(out_prolog)
- add_tcp_testcases(testcase, file_out, kwargs_list)
+ iface, old_suite_id, old_suite_tag = get_iface_and_suite_ids(
+ tmp_filename
+ )
+ for driver in Constants.NIC_NAME_TO_DRIVER[nic_name]:
+ out_filename = replace_defensively(
+ tmp_filename, old_suite_id,
+ Constants.NIC_DRIVER_TO_SUITE_PREFIX[driver] + old_suite_id,
+ 1, u"Error adding driver prefix.", in_filename
+ )
+ out_prolog = replace_defensively(
+ tmp_prolog, u"vfio-pci", driver, 1,
+ u"Driver name should appear once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_DRIVER_TO_TAG[u"vfio-pci"],
+ Constants.NIC_DRIVER_TO_TAG[driver], 1,
+ u"Driver tag should appear once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_DRIVER_TO_PLUGINS[u"vfio-pci"],
+ Constants.NIC_DRIVER_TO_PLUGINS[driver], 1,
+ u"Driver plugin should appear once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_DRIVER_TO_VFS[u"vfio-pci"],
+ Constants.NIC_DRIVER_TO_VFS[driver], 1,
+ u"NIC VFs argument should appear once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+ Constants.NIC_CODE_TO_PFS[nic_code], 1,
+ "NIC PFs argument should appear once.", in_filename
+ )
+ iface, suite_id, suite_tag = get_iface_and_suite_ids(out_filename)
+ out_prolog = replace_defensively(
+ out_prolog, old_suite_tag, suite_tag, 1,
+ u"Perf suite tag should appear once.", in_filename
+ )
+ check_suite_tag(suite_tag, out_prolog)
+ testcase = Testcase.tcp(suite_id)
+ with open(out_filename, u"wt") as file_out:
+ file_out.write(out_prolog)
+ add_tcp_testcases(testcase, file_out, kwargs_list)
def write_iperf3_files(in_filename, in_prolog, kwargs_list):
@@ -490,20 +553,21 @@ def write_iperf3_files(in_filename, in_prolog, kwargs_list):
"""
_, suite_id, suite_tag = get_iface_and_suite_ids(in_filename)
testcase = Testcase.iperf3(suite_id)
- out_filename = replace_defensively(
- in_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[u"Intel-X710"], 1,
- u"File name should contain NIC code once.", in_filename
- )
- out_prolog = replace_defensively(
- in_prolog, u"Intel-X710", u"Intel-X710", 2,
- u"NIC name should appear twice (tag and variable).",
- in_filename
- )
- check_suite_tag(suite_tag, out_prolog)
- with open(out_filename, u"wt") as file_out:
- file_out.write(out_prolog)
- add_iperf3_testcases(testcase, file_out, kwargs_list)
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
+ out_filename = replace_defensively(
+ in_filename, u"10ge2p1x710", nic_code, 1,
+ u"File name should contain NIC code once.", in_filename
+ )
+ out_prolog = replace_defensively(
+ in_prolog, u"Intel-X710", nic_name, 2,
+ u"NIC name should appear twice (tag and variable).",
+ in_filename
+ )
+ check_suite_tag(suite_tag, out_prolog)
+ with open(out_filename, u"wt") as file_out:
+ file_out.write(out_prolog)
+ add_iperf3_testcases(testcase, file_out, kwargs_list)
def write_trex_files(in_filename, in_prolog, kwargs_list):
@@ -547,10 +611,10 @@ def write_trex_files(in_filename, in_prolog, kwargs_list):
)
_, suite_id, suite_tag = get_iface_and_suite_ids(tmp_filename)
testcase = Testcase.trex(suite_id)
- for nic_name in Constants.NIC_NAME_TO_CODE:
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
out_filename = replace_defensively(
- tmp_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[nic_name], 1,
+ tmp_filename, u"10ge2p1x710", nic_code, 1,
u"File name should contain NIC code once.", in_filename
)
out_prolog = replace_defensively(
@@ -581,10 +645,10 @@ def write_device_files(in_filename, in_prolog, kwargs_list):
)
_, suite_id, _ = get_iface_and_suite_ids(tmp_filename)
testcase = Testcase.default(suite_id)
- for nic_name in Constants.NIC_NAME_TO_CODE:
+ for nic_code in Constants.NIC_CODE_TO_NAME:
+ nic_name = Constants.NIC_CODE_TO_NAME[nic_code]
tmp2_filename = replace_defensively(
- tmp_filename, u"10ge2p1x710",
- Constants.NIC_NAME_TO_CODE[nic_name], 1,
+ tmp_filename, u"10ge2p1x710", nic_code, 1,
u"File name should contain NIC code once.", in_filename
)
tmp2_prolog = replace_defensively(
@@ -620,6 +684,11 @@ def write_device_files(in_filename, in_prolog, kwargs_list):
Constants.NIC_DRIVER_TO_VFS[driver], 1,
u"NIC VFs argument should appear once.", in_filename
)
+ out_prolog = replace_defensively(
+ out_prolog, Constants.NIC_CODE_TO_PFS["10ge2p1x710"],
+ Constants.NIC_CODE_TO_PFS[nic_code], 1,
+ "NIC PFs argument should appear once.", in_filename
+ )
iface, suite_id, suite_tag = get_iface_and_suite_ids(
out_filename
)
diff --git a/resources/libraries/python/enum_util.py b/resources/libraries/python/enum_util.py
new file mode 100644
index 0000000000..41dfd8a459
--- /dev/null
+++ b/resources/libraries/python/enum_util.py
@@ -0,0 +1,67 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Utility functions for handling VPP API enum values from Robot."""
+
+
+from enum import Enum, IntEnum
+from typing import Type, Union
+
+
+# The return type is enum_class, but it is hard to explain that to pylint.
+def get_enum_instance(
+ enum_class: Type[Enum], value: Union[Enum, str, int, None]
+) -> Enum:
+ """Return an enum instance matching the string name.
+
+ In Robot, it is not convenient to construct Enum instances,
+ most values defined in Robot are strings.
+
+ This helper function can be used in Python L1 keywords
+ to convert string into the corresponding Enum instance.
+ Aliases are also recognized.
+
+ As an added benefit, support various Robot-like niceties,
+ like lower case, or dash or space instead of underscore.
+
+ As a common shortcut, value is returned it it already is an instance.
+
+ Another convenience: None or empty string is processed as "NONE".
+
+ If the class is a subclass of IntEnum, int values
+ and (string) values convertable to int are also accepted as input.
+
+ :param enum_class: Class object instance of which should be returned.
+ :param value: String or any other recognized form of an enum instance.
+ :type enum_class: Type[Enum]
+ :type value: Union[enum_class, str, int, None]
+ :returns: The matching instance, if found.
+ :rtype: enum_class
+ :raises: ValueError if no matching instance is found.
+ """
+ if issubclass(enum_class, IntEnum):
+ try:
+ int_value = int(value)
+ return enum_class(int_value)
+ except (TypeError, ValueError):
+ pass
+ if isinstance(value, enum_class):
+ return value
+ if not value:
+ value = "NONE"
+ normalized_name = str(value).upper().replace("-", "_").replace(" ", "_")
+ members = enum_class.__members__ # Includes aliases, useful for NONE.
+ if normalized_name not in members:
+ msg = f"Enum class {enum_class} does not have value {normalized_name!r}"
+ raise ValueError(msg)
+ return members[normalized_name]
diff --git a/resources/libraries/python/jumpavg/__init__.py b/resources/libraries/python/jumpavg/__init__.py
index 4fa696c538..7f63b5ee39 100644
--- a/resources/libraries/python/jumpavg/__init__.py
+++ b/resources/libraries/python/jumpavg/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -15,8 +15,8 @@
__init__ file for "jumpavg" Python package.
"""
-from .AvgStdevStats import AvgStdevStats
-from .BitCountingStats import BitCountingStats
-from .BitCountingGroup import BitCountingGroup
-from .BitCountingGroupList import BitCountingGroupList
+from .avg_stdev_stats import AvgStdevStats
+from .bit_counting_stats import BitCountingStats
+from .bit_counting_group import BitCountingGroup
+from .bit_counting_group_list import BitCountingGroupList
from .classify import classify
diff --git a/resources/libraries/python/jumpavg/AvgStdevStats.py b/resources/libraries/python/jumpavg/avg_stdev_stats.py
index 4720c10f3d..c21c50c8f8 100644
--- a/resources/libraries/python/jumpavg/AvgStdevStats.py
+++ b/resources/libraries/python/jumpavg/avg_stdev_stats.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,9 +13,12 @@
"""Module holding AvgStdevStats class."""
+import dataclasses
import math
+import typing
+@dataclasses.dataclass
class AvgStdevStats:
"""Class for statistics which include average and stdev of a group.
@@ -25,45 +28,18 @@ class AvgStdevStats:
Instances are only statistics, the data itself is stored elsewhere.
"""
- def __init__(self, size=0, avg=0.0, stdev=0.0):
- """Construct the stats object by storing the values needed.
-
- Each value has to be numeric.
- The values are not sanitized depending on size, wrong initialization
- can cause delayed math errors.
-
- :param size: Number of values participating in this group.
- :param avg: Population average of the participating sample values.
- :param stdev: Population standard deviation of the sample values.
- :type size: int
- :type avg: float
- :type stdev: float
- """
- self.size = size
- self.avg = avg
- self.stdev = stdev
-
- def __str__(self):
- """Return string with human readable description of the group.
-
- :returns: Readable description.
- :rtype: str
- """
- return f"size={self.size} avg={self.avg} stdev={self.stdev}"
-
- def __repr__(self):
- """Return string executable as Python constructor call.
-
- :returns: Executable constructor call.
- :rtype: str
- """
- return (
- f"AvgStdevStats(size={self.size!r},avg={self.avg!r}"
- f",stdev={self.stdev!r})"
- )
+ size: int = 0
+ """Number of scalar values (samples) participating in this group."""
+ avg: float = 0.0
+ """Population average of the participating sample values."""
+ stdev: float = 0.0
+ """Population standard deviation of the sample values."""
@classmethod
- def for_runs(cls, runs):
+ def for_runs(
+ cls,
+ runs: typing.Iterable[typing.Union[float, "AvgStdevStats"]],
+ ) -> "AvgStdevStats":
"""Return new stats instance describing the sequence of runs.
If you want to append data to existing stats object,
@@ -72,8 +48,8 @@ class AvgStdevStats:
Instead of a verb, "for" is used to start this method name,
to signify the result contains less information than the input data.
- Here, Run is a hypothetical abstract class, an union of float and cls.
- Defining that as a real abstract class in Python 2 is too much hassle.
+ Here, run is a hypothetical abstract class, an union of float and cls.
+ Defining that as a real abstract class in Python is too much hassle.
:param runs: Sequence of data to describe by the new metadata.
:type runs: Iterable[Union[float, cls]]
@@ -97,6 +73,8 @@ class AvgStdevStats:
run_size = run.size
run_avg = run.avg
run_stdev = run.stdev
+ if run_size < 1:
+ continue
old_total_size = total_size
delta = run_avg - total_avg
total_size += run_size
diff --git a/resources/libraries/python/jumpavg/BitCountingGroup.py b/resources/libraries/python/jumpavg/bit_counting_group.py
index f1bdc502fd..22c9337532 100644
--- a/resources/libraries/python/jumpavg/BitCountingGroup.py
+++ b/resources/libraries/python/jumpavg/bit_counting_group.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,14 +13,16 @@
"""Module holding BitCountingGroup class."""
-import copy
+import collections
+import dataclasses
+import typing
-from .AvgStdevStats import AvgStdevStats
-from .BitCountingStats import BitCountingStats
+from .avg_stdev_stats import AvgStdevStats
+from .bit_counting_stats import BitCountingStats
-class BitCountingGroup:
- # TODO: Inherit from collections.abc.Sequence in Python 3.
+@dataclasses.dataclass
+class BitCountingGroup(collections.abc.Sequence):
"""Group of runs which tracks bit count in an efficient manner.
This class contains methods that mutate the internal state,
@@ -38,74 +40,63 @@ class BitCountingGroup:
a method to add a single run in an efficient manner is provided.
"""
- def __init__(self, run_list=None, stats=None, bits=None,
- max_value=None, prev_avg=None, comment="unknown"):
- """Set the internal state and partially the stats.
-
- A "group" stands for an Iterable of runs, where "run" is either
- a float value, or a stats-like object (only size, avg and stdev
- are accessed). Run is a hypothetical abstract class,
- defining it in Python 2 is too much hassle.
-
- Only a copy of the run list argument value is stored in the instance,
- so it is not a problem if the value object is mutated afterwards.
+ run_list: typing.List[typing.Union[float, AvgStdevStats]]
+ """List of run to compose into this group.
+ The init call takes ownership of the list,
+ so the caller should clone it to avoid unexpected muations."""
+ max_value: float
+ """Maximal sample value to expect."""
+ unit: float = 1.0
+ """Typical resolution of the values"""
+ comment: str = "normal"
+ """Any string giving more info, e.g. "regression"."""
+ prev_avg: typing.Optional[float] = None
+ """Average of the previous group, if any."""
+ stats: AvgStdevStats = None
+ """Stats object used for computing bits.
+ Almost always recomputed, except when non-None in init."""
+ cached_bits: typing.Optional[float] = None
+ """Cached value of information content.
+ Noned on edit, recomputed if needed and None."""
+
+ def __post_init__(self):
+ """Recompute stats is None.
It is not verified whether the user provided values are valid,
e.g. whether the stats and bits values reflect the runs.
-
- :param run_list: List of run to compose into this group. Default: empty.
- :param stats: Stats object used for computing bits.
- :param bits: Cached value of information content.
- :param max_value: Maximal sample value to be used for computing.
- :param prev_avg: Average of the previous group, affects bits.
- :param comment: Any string giving more info, e.g. "regression".
- :type run_list: Iterable[Run]
- :type stats: Optional[AvgStdevStats]
- :type bits: Optional[float]
- :type max_value: float
- :type prev_avg: Optional[float]
- :type comment: str
"""
- self.run_list = copy.deepcopy(run_list) if run_list else list()
- self.stats = stats
- self.cached_bits = bits
- self.max_value = max_value
- self.prev_avg = prev_avg
- self.comment = comment
if self.stats is None:
- self.stats = AvgStdevStats.for_runs(self.run_list)
-
- def __str__(self):
- """Return string with human readable description of the group.
+ self.stats = AvgStdevStats.for_runs(runs=self.run_list)
- :returns: Readable description.
- :rtype: str
- """
- return f"stats={self.stats} bits={self.cached_bits}"
+ @property
+ def bits(self) -> float:
+ """Return overall bit content of the group list.
- def __repr__(self):
- """Return string executable as Python constructor call.
+ If not cached, compute from stats and cache.
- :returns: Executable constructor call.
- :rtype: str
+ :returns: The overall information content in bits.
+ :rtype: float
"""
- return (
- f"BitCountingGroup(run_list={self.run_list!r},stats={self.stats!r}"
- f",bits={self.cached_bits!r},max_value={self.max_value!r}"
- f",prev_avg={self.prev_avg!r},comment={self.comment!r})"
- )
+ if self.cached_bits is None:
+ self.cached_bits = BitCountingStats.for_runs_and_params(
+ runs=[self.stats],
+ max_value=self.max_value,
+ unit=self.unit,
+ prev_avg=self.prev_avg,
+ ).bits
+ return self.cached_bits
- def __getitem__(self, index):
+ def __getitem__(self, index: int) -> typing.Union[float, AvgStdevStats]:
"""Return the run at the index.
:param index: Index of the run to return.
:type index: int
:returns: The run at the index.
- :rtype: Run
+ :rtype: typing.Union[float, AvgStdevStats]
"""
return self.run_list[index]
- def __len__(self):
+ def __len__(self) -> int:
"""Return the number of runs in the group.
:returns: The Length of run_list.
@@ -113,39 +104,36 @@ class BitCountingGroup:
"""
return len(self.run_list)
- def copy(self):
+ def copy(self) -> "BitCountingGroup":
"""Return a new instance with copied internal state.
+ Stats are preserved to avoid re-computation.
+ As both float and AvgStdevStats are effectively immutable,
+ only a shallow copy of the runs list is performed.
+
:returns: The copied instance.
:rtype: BitCountingGroup
"""
stats = AvgStdevStats.for_runs([self.stats])
return self.__class__(
- run_list=self.run_list, stats=stats, bits=self.cached_bits,
- max_value=self.max_value, prev_avg=self.prev_avg,
- comment=self.comment)
-
- @property
- def bits(self):
- """Return overall bit content of the group list.
-
- If not cached, compute from stats and cache.
-
- :returns: The overall information content in bits.
- :rtype: float
- """
- if self.cached_bits is None:
- self.cached_bits = BitCountingStats.for_runs(
- [self.stats], self.max_value, self.prev_avg).bits
- return self.cached_bits
+ run_list=list(self.run_list),
+ stats=stats,
+ cached_bits=self.cached_bits,
+ max_value=self.max_value,
+ unit=self.unit,
+ prev_avg=self.prev_avg,
+ comment=self.comment,
+ )
- def append(self, run):
+ def append(
+ self, run: typing.Union[float, AvgStdevStats]
+ ) -> "BitCountingGroup":
"""Mutate to add the new run, return self.
Stats are updated, but old bits value is deleted from cache.
:param run: The run value to add to the group.
- :type value: Run
+ :type value: typing.Union[float, AvgStdevStats]
:returns: The updated self.
:rtype: BitCountingGroup
"""
@@ -154,7 +142,9 @@ class BitCountingGroup:
self.cached_bits = None
return self
- def extend(self, runs):
+ def extend(
+ self, runs: typing.Iterable[typing.Union[float, AvgStdevStats]]
+ ) -> "BitCountingGroup":
"""Mutate to add the new runs, return self.
This is saves small amount of computation
@@ -163,7 +153,7 @@ class BitCountingGroup:
Stats are updated, but old bits value is deleted from cache.
:param runs: The runs to add to the group.
- :type value: Iterable[Run]
+ :type value: typing.Iterable[typing.Union[float, AvgStdevStats]]
:returns: The updated self.
:rtype: BitCountingGroup
"""
diff --git a/resources/libraries/python/jumpavg/BitCountingGroupList.py b/resources/libraries/python/jumpavg/bit_counting_group_list.py
index aed1304d97..e4d33b53a2 100644
--- a/resources/libraries/python/jumpavg/BitCountingGroupList.py
+++ b/resources/libraries/python/jumpavg/bit_counting_group_list.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,13 +13,16 @@
"""Module holding BitCountingGroupList class."""
-import copy
+import collections
+import dataclasses
+import typing
-from .BitCountingGroup import BitCountingGroup
+from .avg_stdev_stats import AvgStdevStats # Just for type hints.
+from .bit_counting_group import BitCountingGroup
-class BitCountingGroupList:
- # TODO: Inherit from collections.abc.Sequence in Python 3.
+@dataclasses.dataclass
+class BitCountingGroupList(collections.abc.Sequence):
"""List of data groups which tracks overall bit count.
The Sequence-like access is related to the list of groups,
@@ -41,55 +44,29 @@ class BitCountingGroupList:
recalculations if the bit count is not needed.
"""
- def __init__(self, group_list=None, bits_except_last=0.0, max_value=None):
- """Set the internal state without any calculations.
-
- The group list argument is copied deeply, so it is not a problem
- if the value object is mutated afterwards.
+ max_value: float
+ """Maximal sample value to base bits computation on."""
+ unit: float = 1.0
+ """Typical resolution of the values."""
+ group_list: typing.List[BitCountingGroup] = None
+ """List of groups to compose this group list.
+ Init also accepts None standing for an empty list.
+ This class takes ownership of the list,
+ so caller of init should clone their copy to avoid unexpected mutations.
+ """
+ bits_except_last: float = 0.0
+ """Partial sum of all but one group bits."""
- A "group" stands for an Iterable of runs, where "run" is either
- a float value, or a stats-like object (only size, avg and stdev
- are accessed). Run is a hypothetical abstract class,
- defining it in Python 2 is too much hassle.
+ def __post_init__(self):
+ """Turn possible None into an empty list.
It is not verified whether the user provided values are valid,
- e.g. whether the cached bits values make sense.
-
- The max_value is required and immutable,
- it is recommended the callers find their maximum beforehand.
-
- :param group_list: List of groups to compose this group list (or empty).
- :param bits_except_last: Partial sum of all but one group bits.
- :param max_value: Maximal sample value to base bits computation on.
- :type group_list: Iterable[BitCountingGroup]
- :type bits_except_last: float
- :type max_value: float
- """
- self.group_list = copy.deepcopy(group_list) if group_list else list()
- self.bits_except_last = bits_except_last
- self.max_value = max_value
-
- def __str__(self):
- """Return string with human readable description of the group list.
-
- :returns: Readable description.
- :rtype: str
+ e.g. whether the cached bits values (and bits_except_last) make sense.
"""
- return u"group_list={self.group_list} bits={self.bits}"
-
- def __repr__(self):
- """Return string executable as Python constructor call.
+ if self.group_list is None:
+ self.group_list = []
- :returns: Executable constructor call.
- :rtype: str
- """
- return (
- f"BitCountingGroupList(group_list={self.group_list!r}"
- f",bits_except_last={self.bits_except_last!r}"
- f",max_value={self.max_value!r})"
- )
-
- def __getitem__(self, index):
+ def __getitem__(self, index: int) -> BitCountingGroup:
"""Return the group at the index.
:param index: Index of the group to return.
@@ -99,7 +76,7 @@ class BitCountingGroupList:
"""
return self.group_list[index]
- def __len__(self):
+ def __len__(self) -> int:
"""Return the length of the group list.
:returns: The Length of group_list.
@@ -107,19 +84,46 @@ class BitCountingGroupList:
"""
return len(self.group_list)
- def copy(self):
+ def copy(self) -> "BitCountingGroupList":
"""Return a new instance with copied internal state.
:returns: The copied instance.
:rtype: BitCountingGroupList
"""
return self.__class__(
- group_list=self.group_list, bits_except_last=self.bits_except_last,
- max_value=self.max_value
+ max_value=self.max_value,
+ unit=self.unit,
+ group_list=[group.copy() for group in self.group_list],
+ bits_except_last=self.bits_except_last,
+ )
+
+ def copy_fast(self) -> "BitCountingGroupList":
+ """Return a new instance with minimaly copied internal state.
+
+ The assumption here is that only the last group will ever be mutated
+ (in self, probably never in the return value),
+ so all the previous groups can be "copied by reference".
+
+ :returns: The copied instance.
+ :rtype: BitCountingGroupList
+ """
+ group_list = list(self.group_list)
+ if group_list:
+ group_list[-1] = group_list[-1].copy()
+ # Further speedup is possible by keeping the last group
+ # as a singly linked (from end) list,
+ # but for CSIT sample sizes, copy of whole Python list is faster.
+ # TODO: Implement linked list as an option
+ # for users with many samples.
+ return self.__class__(
+ max_value=self.max_value,
+ unit=self.unit,
+ group_list=group_list,
+ bits_except_last=self.bits_except_last,
)
@property
- def bits(self):
+ def bits(self) -> float:
"""Return overall bit content of the group list.
:returns: The overall information content in bits.
@@ -130,12 +134,17 @@ class BitCountingGroupList:
# TODO: Is it worth to cache the overall result?
return self.bits_except_last + self.group_list[-1].bits
- def append_group_of_runs(self, runs):
+ def append_group_of_runs(
+ self,
+ runs: typing.Union[
+ BitCountingGroup, typing.List[typing.Union[float, AvgStdevStats]]
+ ],
+ ) -> "BitCountingGroupList":
"""Mutate to add a new group based on the runs, return self.
- The argument is copied before adding to the group list,
- so further edits do not affect the grup list.
- The argument can also be a group, only runs from it are used.
+ The list argument is NOT copied before adding to the group list,
+ so further edits MAY not affect the grup list.
+ The list from BitCountingGroup is shallow copied though.
:param runs: Runs to form the next group to be appended to self.
:type runs: Union[Iterable[Run], BitCountingGroup]
@@ -147,16 +156,23 @@ class BitCountingGroupList:
# It is faster to avoid stats recalculation.
new_group = runs.copy()
new_group.max_value = self.max_value
+ # Unit is common.
new_group.prev_avg = prev_avg
new_group.cached_bits = None
else:
new_group = BitCountingGroup(
- run_list=runs, max_value=self.max_value, prev_avg=prev_avg)
+ run_list=runs,
+ max_value=self.max_value,
+ unit=self.unit,
+ prev_avg=prev_avg,
+ )
self.bits_except_last = self.bits
self.group_list.append(new_group)
return self
- def append_run_to_to_last_group(self, run):
+ def append_run_to_to_last_group(
+ self, run: typing.Union[float, AvgStdevStats]
+ ) -> "BitCountingGroupList":
"""Mutate to add new run at the end of the last group.
Basically a one-liner, only returning group list instead of last group.
@@ -170,7 +186,9 @@ class BitCountingGroupList:
self.group_list[-1].append(run)
return self
- def extend_runs_to_last_group(self, runs):
+ def extend_runs_to_last_group(
+ self, runs: typing.Iterable[typing.Union[float, AvgStdevStats]]
+ ) -> "BitCountingGroupList":
"""Mutate to add new runs to the end of the last group.
A faster alternative to appending runs one by one in a loop.
diff --git a/resources/libraries/python/jumpavg/BitCountingStats.py b/resources/libraries/python/jumpavg/bit_counting_stats.py
index 7b5e659214..3d1cb8aef0 100644
--- a/resources/libraries/python/jumpavg/BitCountingStats.py
+++ b/resources/libraries/python/jumpavg/bit_counting_stats.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,11 +13,14 @@
"""Module holding BitCountingStats class."""
+import dataclasses
import math
+import typing
-from .AvgStdevStats import AvgStdevStats
+from .avg_stdev_stats import AvgStdevStats
+@dataclasses.dataclass
class BitCountingStats(AvgStdevStats):
"""Class for statistics which include information content of a group.
@@ -33,11 +36,22 @@ class BitCountingStats(AvgStdevStats):
Only for_runs method calls the parent implementation, without using super().
"""
- def __init__(
- self, size=0, avg=None, stdev=0.0, max_value=None, prev_avg=None):
- """Construct the stats object by computing from the values needed.
+ max_value: float = None
+ """Maximal sample value (real or estimated).
+ Default value is there just for argument ordering reasons,
+ leaving None leads to exceptions."""
+ unit: float = 1.0
+ """Typical resolution of the values."""
+ prev_avg: typing.Optional[float] = None
+ """Population average of the previous group (if any)."""
+ bits: float = None
+ """The computed information content of the group.
+ It is formally an argument to init function, just to keep repr string
+ a valid call. ut the init value is ignored and always recomputed.
+ """
- The values are not sanitized, faulty callers can cause math errors.
+ def __post_init__(self):
+ """Construct the stats object by computing from the values needed.
The None values are allowed for stats for zero size data,
but such stats can report arbitrary avg and max_value.
@@ -54,91 +68,60 @@ class BitCountingStats(AvgStdevStats):
(but not with floating point mechanic).
The hope is the difference will have
no real impact on the classification procedure.
-
- :param size: Number of values participating in this group.
- :param avg: Population average of the participating sample values.
- :param stdev: Population standard deviation of the sample values.
- :param max_value: Maximal expected value.
- TODO: This might be more optimal,
- but max-invariant algorithm will be nicer.
- :param prev_avg: Population average of the previous group.
- If None, no previous average is taken into account.
- If not None, the given previous average is used to discourage
- consecutive groups with similar averages
- (opposite triangle distribution is assumed).
- :type avg: float
- :type size: int
- :type stdev: float
- :type max_value: Union[float, NoneType]
- :type prev_avg: Union[float, NoneType]
"""
- self.avg = avg
- self.size = size
- self.stdev = stdev
- self.max_value = max_value
- self.prev_avg = prev_avg
# Zero size should in principle have non-zero bits (coding zero size),
# but zero allows users to add empty groups without affecting bits.
self.bits = 0.0
if self.size < 1:
return
- if avg is None:
- raise ValueError(f"Avg is None: {self!r}")
- if max_value is None or max_value <= 0.0:
+ if self.max_value <= 0.0:
raise ValueError(f"Invalid max value: {self!r}")
+ max_value = self.max_value / self.unit
+ avg = self.avg / self.unit
# Length of the sequence must be also counted in bits,
# otherwise the message would not be decodable.
# Model: probability of k samples is 1/k - 1/(k+1) == 1/k/(k+1)
# This is compatible with zero size leading to zero bits.
- self.bits += math.log(size * (size + 1), 2)
- if prev_avg is None:
+ self.bits += math.log(self.size * (self.size + 1), 2)
+ if self.prev_avg is None:
# Avg is considered to be uniformly distributed
# from zero to max_value.
- self.bits += math.log(max_value + 1.0, 2)
+ self.bits += math.log(max_value + 1, 2)
else:
# Opposite triangle distribution with minimum.
- self.bits += math.log(
- max_value * (max_value + 1) / (abs(avg - prev_avg) + 1), 2)
+ prev_avg = self.prev_avg / self.unit
+ norm = prev_avg * prev_avg
+ norm -= (prev_avg - 1) * max_value
+ norm += max_value * max_value / 2
+ self.bits -= math.log((abs(avg - prev_avg) + 1) / norm, 2)
if self.size < 2:
return
- # Stdev is considered to be uniformly distributed
- # from zero to max_value. That is quite a bad expectation,
- # but resilient to negative samples etc.
- self.bits += math.log(max_value + 1.0, 2)
+ stdev = self.stdev / self.unit
+ # Stdev can be anything between zero and max value.
+ # For size==2, sphere surface is 2 points regardless of radius,
+ # we need to penalize large stdev already when encoding the stdev.
+ # The simplest way is to use the same distribution as with size...
+ self.bits += math.log((stdev + 1) * (stdev + 2), 2)
+ # .. just with added normalization from the max value cut-off.
+ self.bits += math.log(1 - 1 / (max_value + 2), 2)
# Now we know the samples lie on sphere in size-1 dimensions.
# So it is (size-2)-sphere, with radius^2 == stdev^2 * size.
# https://en.wikipedia.org/wiki/N-sphere
- sphere_area_ln = math.log(2) + math.log(math.pi) * ((size - 1) / 2.0)
- sphere_area_ln -= math.lgamma((size - 1) / 2.0)
- sphere_area_ln += math.log(stdev + 1.0) * (size - 2)
- sphere_area_ln += math.log(size) * ((size - 2) / 2.0)
+ sphere_area_ln = math.log(2)
+ sphere_area_ln += math.log(math.pi) * ((self.size - 1) / 2)
+ sphere_area_ln -= math.lgamma((self.size - 1) / 2)
+ sphere_area_ln += math.log(stdev + 1) * (self.size - 2)
+ sphere_area_ln += math.log(self.size) * ((self.size - 2) / 2)
self.bits += sphere_area_ln / math.log(2)
- def __str__(self):
- """Return string with human readable description of the group.
-
- :returns: Readable description.
- :rtype: str
- """
- return (
- f"size={self.size} avg={self.avg} stdev={self.stdev}"
- f" bits={self.bits}"
- )
-
- def __repr__(self):
- """Return string executable as Python constructor call.
-
- :returns: Executable constructor call.
- :rtype: str
- """
- return (
- f"BitCountingStats(size={self.size!r},avg={self.avg!r}"
- f",stdev={self.stdev!r},max_value={self.max_value!r}"
- f",prev_avg={self.prev_avg!r})"
- )
-
@classmethod
- def for_runs(cls, runs, max_value=None, prev_avg=None):
+ def for_runs_and_params(
+ cls,
+ runs: typing.Iterable[typing.Union[float, AvgStdevStats]],
+ max_value: float,
+ unit: float = 1.0,
+ prev_avg: typing.Optional[float] = None,
+ ):
"""Return new stats instance describing the sequence of runs.
If you want to append data to existing stats object,
@@ -156,14 +139,22 @@ class BitCountingStats(AvgStdevStats):
:param runs: Sequence of data to describe by the new metadata.
:param max_value: Maximal expected value.
+ :param unit: Typical resolution of the values.
:param prev_avg: Population average of the previous group, if any.
:type runs: Iterable[Union[float, AvgStdevStats]]
:type max_value: Union[float, NoneType]
+ :type unit: float
:type prev_avg: Union[float, NoneType]
:returns: The new stats instance.
:rtype: cls
"""
asd = AvgStdevStats.for_runs(runs)
- ret_obj = cls(size=asd.size, avg=asd.avg, stdev=asd.stdev,
- max_value=max_value, prev_avg=prev_avg)
+ ret_obj = cls(
+ size=asd.size,
+ avg=asd.avg,
+ stdev=asd.stdev,
+ max_value=max_value,
+ unit=unit,
+ prev_avg=prev_avg,
+ )
return ret_obj
diff --git a/resources/libraries/python/jumpavg/classify.py b/resources/libraries/python/jumpavg/classify.py
index 252c71e8d5..cc3cdcceed 100644
--- a/resources/libraries/python/jumpavg/classify.py
+++ b/resources/libraries/python/jumpavg/classify.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,32 +13,54 @@
"""Module holding the classify function
-Classification os one of primary purposes of this package.
+Classification is one of primary purposes of this package.
Minimal message length principle is used
for grouping results into the list of groups,
assuming each group is a population of different Gaussian distribution.
"""
-from .AvgStdevStats import AvgStdevStats
-from .BitCountingGroupList import BitCountingGroupList
+from typing import Iterable, Optional, Union
+from .avg_stdev_stats import AvgStdevStats
+from .bit_counting_group_list import BitCountingGroupList
-def classify(values):
+
+def classify(
+ values: Iterable[Union[float, Iterable[float]]],
+ unit: Optional[float] = None,
+ sbps: Optional[float] = None,
+) -> BitCountingGroupList:
"""Return the values in groups of optimal bit count.
Here, a value is either a float, or an iterable of floats.
Such iterables represent an undivisible sequence of floats.
+ Int is accepted anywhere instead of float.
Internally, such sequence is replaced by AvgStdevStats
after maximal value is found.
+ If the values are smaller than expected (below one unit),
+ the underlying assumption break down and the classification is wrong.
+ Use the "unit" parameter to hint at what the input resolution is.
+
+ If the correct value of unit is not known beforehand,
+ the argument "sbps" (Significant Bits Per Sample) can be used
+ to set unit such that maximal sample value is this many ones in binary.
+ If neither "unit" nor "sbps" are given, "sbps" of 12 is used by default.
+
:param values: Sequence of runs to classify.
+ :param unit: Typical resolution of the values.
+ Zero and None means no unit given.
+ :param sbps: Significant Bits Per Sample. None on zero means 12.
+ If units is not set, this is used to compute unit from max sample value.
:type values: Iterable[Union[float, Iterable[float]]]
+ :type unit: Optional[float]
+ :type sbps: Optional[float]
:returns: Classified group list.
:rtype: BitCountingGroupList
"""
- processed_values = list()
+ processed_values = []
max_value = 0.0
for value in values:
if isinstance(value, (float, int)):
@@ -50,27 +72,27 @@ def classify(values):
if subvalue > max_value:
max_value = subvalue
processed_values.append(AvgStdevStats.for_runs(value))
- open_at = list()
- closed_before = [BitCountingGroupList(max_value=max_value)]
- for index, value in enumerate(processed_values):
- newly_open = closed_before[index].copy()
- newly_open.append_group_of_runs([value])
- open_at.append(newly_open)
- record_group_list = newly_open
- for previous_index, old_open in enumerate(open_at[:index]):
- new_open = old_open.copy().append_run_to_to_last_group(value)
- open_at[previous_index] = new_open
- if new_open.bits < record_group_list.bits:
- record_group_list = new_open
- closed_before.append(record_group_list)
- partition = closed_before[-1]
- previous_average = partition[0].stats.avg
- for group in partition:
- if group.stats.avg == previous_average:
- group.comment = u"normal"
- elif group.stats.avg < previous_average:
- group.comment = u"regression"
+ if not unit:
+ if not sbps:
+ sbps = 12.0
+ max_in_units = pow(2.0, sbps + 1.0) - 1.0
+ unit = max_value / max_in_units
+ # Glist means group list (BitCountingGroupList).
+ open_glists = []
+ record_glist = BitCountingGroupList(max_value=max_value, unit=unit)
+ for value in processed_values:
+ new_open_glist = record_glist.copy_fast().append_group_of_runs([value])
+ record_glist = new_open_glist
+ for old_open_glist in open_glists:
+ old_open_glist.append_run_to_to_last_group(value)
+ if old_open_glist.bits < record_glist.bits:
+ record_glist = old_open_glist
+ open_glists.append(new_open_glist)
+ previous_average = record_glist[0].stats.avg
+ for group in record_glist:
+ if group.stats.avg < previous_average:
+ group.comment = "regression"
elif group.stats.avg > previous_average:
- group.comment = u"progression"
+ group.comment = "progression"
previous_average = group.stats.avg
- return partition
+ return record_glist
diff --git a/resources/libraries/python/model/ExportJson.py b/resources/libraries/python/model/ExportJson.py
new file mode 100644
index 0000000000..3f923d6d0e
--- /dev/null
+++ b/resources/libraries/python/model/ExportJson.py
@@ -0,0 +1,395 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module tracking json in-memory data and saving it to files.
+
+Each test case, suite setup (hierarchical) and teardown has its own file pair.
+
+Validation is performed for output files with available JSON schema.
+Validation is performed in data deserialized from disk,
+as serialization might have introduced subtle errors.
+"""
+
+import datetime
+import os.path
+
+from binascii import b2a_base64
+from dateutil.parser import parse
+from robot.api import logger
+from robot.libraries.BuiltIn import BuiltIn
+from zlib import compress
+
+from resources.libraries.python.Constants import Constants
+from resources.libraries.python.jumpavg import AvgStdevStats
+from resources.libraries.python.model.ExportResult import (
+ export_dut_type_and_version, export_tg_type_and_version
+)
+from resources.libraries.python.model.MemDump import write_output
+from resources.libraries.python.model.validate import (
+ get_validators, validate
+)
+
+
+class ExportJson():
+ """Class handling the json data setting and export."""
+
+ ROBOT_LIBRARY_SCOPE = "GLOBAL"
+
+ def __init__(self):
+ """Declare required fields, cache output dir.
+
+ Also memorize schema validator instances.
+ """
+ self.output_dir = BuiltIn().get_variable_value("\\${OUTPUT_DIR}", ".")
+ self.file_path = None
+ self.data = None
+ self.validators = get_validators()
+
+ def _detect_test_type(self):
+ """Return test_type, as inferred from robot test tags.
+
+ :returns: The inferred test type value.
+ :rtype: str
+ :raises RuntimeError: If the test tags does not contain expected values.
+ """
+ tags = self.data["tags"]
+ # First 5 options are specific for VPP tests.
+ if "DEVICETEST" in tags:
+ test_type = "device"
+ elif "LDP_NGINX" in tags:
+ test_type = "hoststack"
+ elif "HOSTSTACK" in tags:
+ test_type = "hoststack"
+ elif "GSO_TRUE" in tags or "GSO_FALSE" in tags:
+ test_type = "mrr"
+ elif "RECONF" in tags:
+ test_type = "reconf"
+ # The remaining 3 options could also apply to DPDK and TRex tests.
+ elif "SOAK" in tags:
+ test_type = "soak"
+ elif "NDRPDR" in tags:
+ test_type = "ndrpdr"
+ elif "MRR" in tags:
+ test_type = "mrr"
+ else:
+ raise RuntimeError(f"Unable to infer test type from tags: {tags}")
+ return test_type
+
+ def export_pending_data(self):
+ """Write the accumulated data to disk.
+
+ Create missing directories.
+ Reset both file path and data to avoid writing multiple times.
+
+ Functions which finalize content for given file are calling this,
+ so make sure each test and non-empty suite setup or teardown
+ is calling this as their last keyword.
+
+ If no file path is set, do not write anything,
+ as that is the failsafe behavior when caller from unexpected place.
+ Aso do not write anything when EXPORT_JSON constant is false.
+
+ Regardless of whether data was written, it is cleared.
+ """
+ if not Constants.EXPORT_JSON or not self.file_path:
+ self.data = None
+ self.file_path = None
+ return
+ new_file_path = write_output(self.file_path, self.data)
+ # Data is going to be cleared (as a sign that export succeeded),
+ # so this is the last chance to detect if it was for a test case.
+ is_testcase = "result" in self.data
+ self.data = None
+ # Validation for output goes here when ready.
+ self.file_path = None
+ if is_testcase:
+ validate(new_file_path, self.validators["tc_info"])
+
+ def warn_on_bad_export(self):
+ """If bad state is detected, log a warning and clean up state."""
+ if self.file_path is not None or self.data is not None:
+ logger.warn(f"Previous export not clean, path {self.file_path}")
+ self.data = None
+ self.file_path = None
+
+ def start_suite_setup_export(self):
+ """Set new file path, initialize data for the suite setup.
+
+ This has to be called explicitly at start of suite setup,
+ otherwise Robot likes to postpone initialization
+ until first call by a data-adding keyword.
+
+ File path is set based on suite.
+ """
+ self.warn_on_bad_export()
+ start_time = datetime.datetime.utcnow().strftime(
+ "%Y-%m-%dT%H:%M:%S.%fZ"
+ )
+ suite_name = BuiltIn().get_variable_value("\\${SUITE_NAME}")
+ suite_id = suite_name.lower().replace(" ", "_")
+ suite_path_part = os.path.join(*suite_id.split("."))
+ output_dir = self.output_dir
+ self.file_path = os.path.join(
+ output_dir, suite_path_part, "setup.info.json"
+ )
+ self.data = dict()
+ self.data["version"] = Constants.MODEL_VERSION
+ self.data["start_time"] = start_time
+ self.data["suite_name"] = suite_name
+ self.data["suite_documentation"] = BuiltIn().get_variable_value(
+ "\\${SUITE_DOCUMENTATION}"
+ )
+ # "end_time" and "duration" are added on flush.
+ self.data["hosts"] = set()
+ self.data["telemetry"] = list()
+
+ def start_test_export(self):
+ """Set new file path, initialize data to minimal tree for the test case.
+
+ It is assumed Robot variables DUT_TYPE and DUT_VERSION
+ are already set (in suite setup) to correct values.
+
+ This function has to be called explicitly at the start of test setup,
+ otherwise Robot likes to postpone initialization
+ until first call by a data-adding keyword.
+
+ File path is set based on suite and test.
+ """
+ self.warn_on_bad_export()
+ start_time = datetime.datetime.utcnow().strftime(
+ "%Y-%m-%dT%H:%M:%S.%fZ"
+ )
+ suite_name = BuiltIn().get_variable_value("\\${SUITE_NAME}")
+ suite_id = suite_name.lower().replace(" ", "_")
+ suite_path_part = os.path.join(*suite_id.split("."))
+ test_name = BuiltIn().get_variable_value("\\${TEST_NAME}")
+ self.file_path = os.path.join(
+ self.output_dir, suite_path_part,
+ test_name.lower().replace(" ", "_") + ".info.json"
+ )
+ self.data = dict()
+ self.data["version"] = Constants.MODEL_VERSION
+ self.data["start_time"] = start_time
+ self.data["suite_name"] = suite_name
+ self.data["test_name"] = test_name
+ test_doc = BuiltIn().get_variable_value("\\${TEST_DOCUMENTATION}", "")
+ self.data["test_documentation"] = test_doc
+ # "test_type" is added on flush.
+ # "tags" is detected and added on flush.
+ # "end_time" and "duration" is added on flush.
+ # Robot status and message are added on flush.
+ self.data["result"] = dict(type="unknown")
+ self.data["hosts"] = BuiltIn().get_variable_value("\\${hosts}")
+ self.data["telemetry"] = list()
+ export_dut_type_and_version()
+ export_tg_type_and_version()
+
+ def start_suite_teardown_export(self):
+ """Set new file path, initialize data for the suite teardown.
+
+ This has to be called explicitly at start of suite teardown,
+ otherwise Robot likes to postpone initialization
+ until first call by a data-adding keyword.
+
+ File path is set based on suite.
+ """
+ self.warn_on_bad_export()
+ start_time = datetime.datetime.utcnow().strftime(
+ "%Y-%m-%dT%H:%M:%S.%fZ"
+ )
+ suite_name = BuiltIn().get_variable_value("\\${SUITE_NAME}")
+ suite_id = suite_name.lower().replace(" ", "_")
+ suite_path_part = os.path.join(*suite_id.split("."))
+ self.file_path = os.path.join(
+ self.output_dir, suite_path_part, "teardown.info.json"
+ )
+ self.data = dict()
+ self.data["version"] = Constants.MODEL_VERSION
+ self.data["start_time"] = start_time
+ self.data["suite_name"] = suite_name
+ # "end_time" and "duration" is added on flush.
+ self.data["hosts"] = BuiltIn().get_variable_value("\\${hosts}")
+ self.data["telemetry"] = list()
+
+ def finalize_suite_setup_export(self):
+ """Add the missing fields to data. Do not write yet.
+
+ Should be run at the end of suite setup.
+ The write is done at next start (or at the end of global teardown).
+ """
+ end_time = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+ self.data["hosts"] = BuiltIn().get_variable_value("\\${hosts}")
+ self.data["end_time"] = end_time
+ self.export_pending_data()
+
+ def finalize_test_export(self):
+ """Add the missing fields to data. Do not write yet.
+
+ Should be at the end of test teardown, as the implementation
+ reads various Robot variables, some of them only available at teardown.
+
+ The write is done at next start (or at the end of global teardown).
+ """
+ end_time = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+ message = BuiltIn().get_variable_value("\\${TEST_MESSAGE}")
+ test_tags = BuiltIn().get_variable_value("\\${TEST_TAGS}")
+ self.data["end_time"] = end_time
+ start_float = parse(self.data["start_time"]).timestamp()
+ end_float = parse(self.data["end_time"]).timestamp()
+ self.data["duration"] = end_float - start_float
+ self.data["tags"] = list(test_tags)
+ self.data["message"] = message
+ self.process_passed()
+ self.process_test_name()
+ self.process_results()
+ self.export_pending_data()
+
+ def finalize_suite_teardown_export(self):
+ """Add the missing fields to data. Do not write yet.
+
+ Should be run at the end of suite teardown
+ (but before the explicit write in the global suite teardown).
+ The write is done at next start (or explicitly for global teardown).
+ """
+ end_time = datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%S.%fZ")
+ self.data["end_time"] = end_time
+ self.export_pending_data()
+
+ def process_test_name(self):
+ """Replace raw test name with short and long test name and set
+ test_type.
+
+ Perform in-place edits on the data dictionary.
+ Remove raw suite_name and test_name, they are not published.
+ Return early if the data is not for test case.
+ Insert test ID and long and short test name into the data.
+ Besides suite_name and test_name, also test tags are read.
+
+ Short test name is basically a suite tag, but with NIC driver prefix,
+ if the NIC driver used is not the default one (drv_vfio_pci for VPP
+ tests).
+
+ Long test name has the following form:
+ {nic_short_name}-{frame_size}-{threads_and_cores}-{suite_part}
+ Lookup in test tags is needed to get the threads value.
+ The threads_and_cores part may be empty, e.g. for TRex tests.
+
+ Test ID has form {suite_name}.{test_name} where the two names come from
+ Robot variables, converted to lower case and spaces replaces by
+ undescores.
+
+ Test type is set in an internal function.
+
+ :raises RuntimeError: If the data does not contain expected values.
+ """
+ suite_part = self.data.pop("suite_name").lower().replace(" ", "_")
+ if "test_name" not in self.data:
+ # There will be no test_id, provide suite_id instead.
+ self.data["suite_id"] = suite_part
+ return
+ test_part = self.data.pop("test_name").lower().replace(" ", "_")
+ self.data["test_id"] = f"{suite_part}.{test_part}"
+ tags = self.data["tags"]
+ # Test name does not contain thread count.
+ subparts = test_part.split("-")
+ if any("tg" in s for s in subparts) and subparts[1] == "":
+ # Physical core count not detected, assume it is a TRex test.
+ if "--" not in test_part:
+ raise RuntimeError(f"Invalid TG test name for: {subparts}")
+ short_name = test_part.split("--", 1)[1]
+ else:
+ short_name = "-".join(subparts[2:])
+ # Add threads to test_part.
+ core_part = subparts[1]
+ tag = list(filter(lambda t: subparts[1].upper() in t, tags))[0]
+ test_part = test_part.replace(f"-{core_part}-", f"-{tag.lower()}-")
+ # For long name we need NIC model, which is only in suite name.
+ last_suite_part = suite_part.split(".")[-1]
+ # Short name happens to be the suffix we want to ignore.
+ prefix_part = last_suite_part.split(short_name)[0]
+ # Also remove the trailing dash.
+ prefix_part = prefix_part[:-1]
+ # Throw away possible link prefix such as "1n1l-".
+ nic_code = prefix_part.split("-", 1)[-1]
+ nic_short = Constants.NIC_CODE_TO_SHORT_NAME[nic_code]
+ long_name = f"{nic_short}-{test_part}"
+ # Set test type.
+ test_type = self._detect_test_type()
+ self.data["test_type"] = test_type
+ # Remove trailing test type from names (if present).
+ short_name = short_name.split(f"-{test_type}")[0]
+ long_name = long_name.split(f"-{test_type}")[0]
+ # Store names.
+ self.data["test_name_short"] = short_name
+ self.data["test_name_long"] = long_name
+
+ def process_passed(self):
+ """Process the test status information as boolean.
+
+ Boolean is used to make post processing more efficient.
+ In case the test status is PASS, we will truncate the test message.
+ """
+ status = BuiltIn().get_variable_value("\\${TEST_STATUS}")
+ if status is not None:
+ self.data["passed"] = (status == "PASS")
+ if self.data["passed"]:
+ # Also truncate success test messages.
+ self.data["message"] = ""
+
+ def process_results(self):
+ """Process measured results.
+
+ Results are used to avoid future post processing, making it more
+ efficient to consume.
+ """
+ if self.data["telemetry"]:
+ telemetry_encode = "\n".join(self.data["telemetry"]).encode()
+ telemetry_compress = compress(telemetry_encode, level=9)
+ telemetry_base64 = b2a_base64(telemetry_compress, newline=False)
+ self.data["telemetry"] = [telemetry_base64.decode()]
+ if "result" not in self.data:
+ return
+ result_node = self.data["result"]
+ result_type = result_node["type"]
+ if result_type == "unknown":
+ # Device or something else not supported.
+ return
+
+ # Compute avg and stdev for mrr (rate and bandwidth).
+ if result_type == "mrr":
+ for node_name in ("rate", "bandwidth"):
+ node = result_node["receive_rate"].get(node_name, None)
+ if node is not None:
+ stats = AvgStdevStats.for_runs(node["values"])
+ node["avg"] = stats.avg
+ node["stdev"] = stats.stdev
+ return
+
+ # Multiple processing steps for ndrpdr.
+ if result_type != "ndrpdr":
+ return
+ # Filter out invalid latencies.
+ for which_key in ("latency_forward", "latency_reverse"):
+ if which_key not in result_node:
+ # Probably just an unidir test.
+ continue
+ for load in ("pdr_0", "pdr_10", "pdr_50", "pdr_90"):
+ if result_node[which_key][load]["max"] <= 0:
+ # One invalid number is enough to remove all loads.
+ break
+ else:
+ # No break means all numbers are ok, nothing to do here.
+ continue
+ # Break happened, something is invalid, remove all loads.
+ result_node.pop(which_key)
+ return
diff --git a/resources/libraries/python/model/ExportResult.py b/resources/libraries/python/model/ExportResult.py
new file mode 100644
index 0000000000..f155848913
--- /dev/null
+++ b/resources/libraries/python/model/ExportResult.py
@@ -0,0 +1,316 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module with keywords that publish parts of result structure."""
+
+from robot.libraries.BuiltIn import BuiltIn
+
+from resources.libraries.python.model.util import descend, get_export_data
+
+
+def export_dut_type_and_version(dut_type="unknown", dut_version="unknown"):
+ """Export the arguments as dut type and version.
+
+ Robot tends to convert "none" into None, hence the unusual default values.
+
+ If either argument is missing, the value from robot variable is used.
+ If argument is present, the value is also stored to robot suite variable.
+
+ :param dut_type: DUT type, e.g. VPP or DPDK.
+ :param dut_version: DUT version as determined by the caller.
+ :type dut_type: Optional[str]
+ :type dut_version: Optiona[str]
+ :raises RuntimeError: If value is neither in argument not robot variable.
+ """
+ if dut_type == "unknown":
+ dut_type = BuiltIn().get_variable_value("\\${DUT_TYPE}", "unknown")
+ if dut_type == "unknown":
+ raise RuntimeError("Dut type not provided.")
+ else:
+ # We want to set a variable in higher level suite setup
+ # to be available to test setup several levels lower.
+ BuiltIn().set_suite_variable(
+ "\\${DUT_TYPE}", dut_type, "children=True"
+ )
+ if dut_version == "unknown":
+ dut_version = BuiltIn().get_variable_value(
+ "\\${DUT_VERSION}", "unknown"
+ )
+ if dut_type == "unknown":
+ raise RuntimeError("Dut version not provided.")
+ else:
+ BuiltIn().set_suite_variable(
+ "\\${DUT_VERSION}", dut_version, "children=True"
+ )
+ data = get_export_data()
+ data["dut_type"] = dut_type.lower()
+ data["dut_version"] = dut_version
+
+
+def export_tg_type_and_version(tg_type="unknown", tg_version="unknown"):
+ """Export the arguments as tg type and version.
+
+ Robot tends to convert "none" into None, hence the unusual default values.
+
+ If either argument is missing, the value from robot variable is used.
+ If argument is present, the value is also stored to robot suite variable.
+
+ :param tg_type: TG type, e.g. TREX.
+ :param tg_version: TG version as determined by the caller.
+ :type tg_type: Optional[str]
+ :type tg_version: Optiona[str]
+ :raises RuntimeError: If value is neither in argument not robot variable.
+ """
+ if tg_type == "unknown":
+ tg_type = BuiltIn().get_variable_value("\\${TG_TYPE}", "unknown")
+ if tg_type == "unknown":
+ raise RuntimeError("TG type not provided!")
+ else:
+ # We want to set a variable in higher level suite setup
+ # to be available to test setup several levels lower.
+ BuiltIn().set_suite_variable(
+ "\\${TG_TYPE}", tg_type, "children=True"
+ )
+ if tg_version == "unknown":
+ tg_version = BuiltIn().get_variable_value(
+ "\\${TG_VERSION}", "unknown"
+ )
+ if tg_type == "unknown":
+ raise RuntimeError("TG version not provided!")
+ else:
+ BuiltIn().set_suite_variable(
+ "\\${TG_VERSION}", tg_version, "children=True"
+ )
+ data = get_export_data()
+ data["tg_type"] = tg_type.lower()
+ data["tg_version"] = tg_version
+
+
+def append_mrr_value(mrr_value, mrr_unit, bandwidth_value=None,
+ bandwidth_unit="bps"):
+ """Store mrr value to proper place so it is dumped into json.
+
+ The value is appended only when unit is not empty.
+
+ :param mrr_value: Forwarding rate from MRR trial.
+ :param mrr_unit: Unit of measurement for the rate.
+ :param bandwidth_value: The same value recomputed into L1 bits per second.
+ :type mrr_value: float
+ :type mrr_unit: str
+ :type bandwidth_value: Optional[float]
+ :type bandwidth_unit: Optional[str]
+ """
+ if not mrr_unit:
+ return
+ data = get_export_data()
+ data["result"]["type"] = "mrr"
+
+ for node_val, node_unit, node_name in ((mrr_value, mrr_unit, "rate"),
+ (bandwidth_value, bandwidth_unit, "bandwidth")):
+ if node_val is not None:
+ node = descend(descend(data["result"], "receive_rate"), node_name)
+ node["unit"] = str(node_unit)
+ values_list = descend(node, "values", list)
+ values_list.append(float(node_val))
+
+
+def export_search_bound(text, value, unit, bandwidth=None):
+ """Store bound value and unit.
+
+ This function works for both NDRPDR and SOAK, decided by text.
+
+ If a node does not exist, it is created.
+ If a previous value exists, it is overwritten silently.
+ Result type is set (overwritten) to ndrpdr (or soak).
+
+ Text is used to determine whether it is ndr or pdr, upper or lower bound,
+ as the Robot caller has the information only there.
+
+ :param text: Info from Robot caller to determime bound type.
+ :param value: The bound value in packets (or connections) per second.
+ :param unit: Rate unit the bound is measured (or estimated) in.
+ :param bandwidth: The same value recomputed into L1 bits per second.
+ :type text: str
+ :type value: float
+ :type unit: str
+ :type bandwidth: Optional[float]
+ """
+ value = float(value)
+ text = str(text).lower()
+ result_type = "soak" if "plrsearch" in text else "ndrpdr"
+ upper_or_lower = "upper" if "upper" in text else "lower"
+ ndr_or_pdr = "ndr" if "ndr" in text else "pdr"
+
+ result_node = get_export_data()["result"]
+ result_node["type"] = result_type
+ rate_item = dict(rate=dict(value=value, unit=unit))
+ if bandwidth:
+ rate_item["bandwidth"] = dict(value=float(bandwidth), unit="bps")
+ if result_type == "soak":
+ descend(result_node, "critical_rate")[upper_or_lower] = rate_item
+ return
+ descend(result_node, ndr_or_pdr)[upper_or_lower] = rate_item
+
+
+def _add_latency(result_node, percent, whichward, latency_string):
+ """Descend to a corresponding node and add values from latency string.
+
+ This is an internal block, moved out from export_ndrpdr_latency,
+ as it can be called up to 4 times.
+
+ :param result_node: UTI tree node to descend from.
+ :param percent: Percent value to use in node key (90, 50, 10, 0).
+ :param whichward: "forward" or "reverse".
+ :param latency_item: Unidir output from TRex utility, min/avg/max/hdrh.
+ :type result_node: dict
+ :type percent: int
+ :type whichward: str
+ :latency_string: str
+ """
+ l_min, l_avg, l_max, l_hdrh = latency_string.split("/", 3)
+ whichward_node = descend(result_node, f"latency_{whichward}")
+ percent_node = descend(whichward_node, f"pdr_{percent}")
+ percent_node["min"] = int(l_min)
+ percent_node["avg"] = int(l_avg)
+ percent_node["max"] = int(l_max)
+ percent_node["hdrh"] = l_hdrh
+ percent_node["unit"] = "us"
+
+
+def export_ndrpdr_latency(text, latency):
+ """Store NDRPDR hdrh latency data.
+
+ If "latency" node does not exist, it is created.
+ If a previous value exists, it is overwritten silently.
+
+ Text is used to determine what percentage of PDR is the load,
+ as the Robot caller has the information only there.
+
+ Reverse data may be missing, we assume the test was unidirectional.
+
+ :param text: Info from Robot caller to determime load.
+ :param latency: Output from TRex utility, min/avg/max/hdrh.
+ :type text: str
+ :type latency: 1-tuple or 2-tuple of str
+ """
+ result_node = get_export_data()["result"]
+ percent = 0
+ if "90" in text:
+ percent = 90
+ elif "50" in text:
+ percent = 50
+ elif "10" in text:
+ percent = 10
+ _add_latency(result_node, percent, "forward", latency[0])
+ # Else TRex does not support latency measurement for this traffic profile.
+ if len(latency) < 2:
+ return
+ _add_latency(result_node, percent, "reverse", latency[1])
+
+
+def export_reconf_result(packet_rate, packet_loss, bandwidth):
+ """Export the RECONF type results.
+
+ Result type is set to reconf.
+
+ :param packet_rate: Aggregate offered load in packets per second.
+ :param packet_loss: How many of the packets were dropped or unsent.
+ :param bandwidth: The offered load recomputed into L1 bits per second.
+ :type packet_rate: float
+ :type packet_loss: int
+ :type bandwidth: float
+ """
+ result_node = get_export_data()["result"]
+ result_node["type"] = "reconf"
+
+ time_loss = int(packet_loss) / float(packet_rate)
+ result_node["aggregate_rate"] = dict(
+ bandwidth=dict(
+ unit="bps",
+ value=float(bandwidth)
+ ),
+ rate=dict(
+ unit="pps",
+ value=float(packet_rate)
+ )
+ )
+ result_node["loss"] = dict(
+ packet=dict(
+ unit="packets",
+ value=int(packet_loss)
+ ),
+ time=dict(
+ unit="s",
+ value=time_loss
+ )
+ )
+
+
+def export_hoststack_results(
+ bandwidth, rate=None, rate_unit=None, latency=None,
+ failed_requests=None, completed_requests=None, retransmits=None,
+ duration=None
+):
+ """Export the HOSTSTACK type results.
+
+ Result type is set to hoststack.
+
+ :param bandwidth: Measured transfer rate using bps as a unit.
+ :param rate: Resulting rate measured by the test. [Optional]
+ :param rate_unit: CPS or RPS. [Optional]
+ :param latency: Measure latency. [Optional]
+ :param failed_requests: Number of failed requests. [Optional]
+ :param completed_requests: Number of completed requests. [Optional]
+ :param retransmits: Retransmitted TCP packets. [Optional]
+ :param duration: Measurment duration. [Optional]
+ :type bandwidth: float
+ :type rate: float
+ :type rate_unit: str
+ :type latency: float
+ :type failed_requests: int
+ :type completed_requests: int
+ :type retransmits: int
+ :type duration: float
+ """
+ result_node = get_export_data()["result"]
+ result_node["type"] = "hoststack"
+
+ result_node["bandwidth"] = dict(unit="bps", value=bandwidth)
+ if rate is not None:
+ result_node["rate"] = \
+ dict(unit=rate_unit, value=rate)
+ if latency is not None:
+ result_node["latency"] = \
+ dict(unit="ms", value=latency)
+ if failed_requests is not None:
+ result_node["failed_requests"] = \
+ dict(unit="requests", value=failed_requests)
+ if completed_requests is not None:
+ result_node["completed_requests"] = \
+ dict(unit="requests", value=completed_requests)
+ if retransmits is not None:
+ result_node["retransmits"] = \
+ dict(unit="packets", value=retransmits)
+ if duration is not None:
+ result_node["duration"] = \
+ dict(unit="s", value=duration)
+
+
+def append_telemetry(telemetry_item):
+ """Append telemetry entry to proper place so it is dumped into json.
+
+ :param telemetry_item: Telemetry entry.
+ :type telemetry_item: str
+ """
+ data = get_export_data()
+ data["telemetry"].append(telemetry_item)
diff --git a/resources/libraries/python/model/MemDump.py b/resources/libraries/python/model/MemDump.py
new file mode 100644
index 0000000000..b391569286
--- /dev/null
+++ b/resources/libraries/python/model/MemDump.py
@@ -0,0 +1,194 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module for converting in-memory data into JSON output.
+
+CSIT and VPP PAPI are using custom data types that are not directly serializable
+into JSON.
+
+Thus, before writing the output onto disk, the data is recursively converted to
+equivalent serializable types, in extreme cases replaced by string
+representation.
+
+Validation is outside the scope of this module, as it should use the JSON data
+read from disk.
+"""
+
+import json
+import os
+
+from collections.abc import Iterable, Mapping, Set
+from enum import IntFlag
+from dateutil.parser import parse
+
+
+def _pre_serialize_recursive(data):
+ """Recursively sort and convert to a more serializable form.
+
+ VPP PAPI code can give data with its own MACAddres type,
+ or various other enum and flag types.
+ The default json.JSONEncoder method raises TypeError on that.
+ First point of this function is to apply str() or repr()
+ to leaf values that need it.
+
+ Also, PAPI responses are namedtuples, which confuses
+ the json.JSONEncoder method (so it does not recurse).
+ Dictization (see PapiExecutor) helps somewhat, but it turns namedtuple
+ into a UserDict, which also confuses json.JSONEncoder.
+ Therefore, we recursively convert any Mapping into an ordinary dict.
+
+ We also convert iterables to list (sorted if the iterable was a set),
+ and prevent numbers from getting converted to strings.
+
+ As we are doing such low level operations,
+ we also convert mapping keys to strings
+ and sort the mapping items by keys alphabetically,
+ except "data" field moved to the end.
+
+ :param data: Object to make serializable, dictized when applicable.
+ :type data: object
+ :returns: Serializable equivalent of the argument.
+ :rtype: object
+ :raises ValueError: If the argument does not support string conversion.
+ """
+ # Recursion ends at scalar values, first handle irregular ones.
+ if isinstance(data, IntFlag):
+ return repr(data)
+ if isinstance(data, bytes):
+ return data.hex()
+ # The regular ones are good to go.
+ if isinstance(data, (str, int, float, bool)):
+ return data
+ # Recurse over, convert and sort mappings.
+ if isinstance(data, Mapping):
+ # Convert and sort alphabetically.
+ ret = {
+ str(key): _pre_serialize_recursive(data[key])
+ for key in sorted(data.keys())
+ }
+ # If exists, move "data" field to the end.
+ if u"data" in ret:
+ data_value = ret.pop(u"data")
+ ret[u"data"] = data_value
+ # If exists, move "type" field at the start.
+ if u"type" in ret:
+ type_value = ret.pop(u"type")
+ ret_old = ret
+ ret = dict(type=type_value)
+ ret.update(ret_old)
+ return ret
+ # Recurse over and convert iterables.
+ if isinstance(data, Iterable):
+ list_data = [_pre_serialize_recursive(item) for item in data]
+ # Additionally, sets are exported as sorted.
+ if isinstance(data, Set):
+ list_data = sorted(list_data)
+ return list_data
+ # Unknown structure, attempt str().
+ return str(data)
+
+
+def _pre_serialize_root(data):
+ """Recursively convert to a more serializable form, tweak order.
+
+ See _pre_serialize_recursive for most of changes this does.
+
+ The logic here (outside the recursive function) only affects
+ field ordering in the root mapping,
+ to make it more human friendly.
+ We are moving "version" to the top,
+ followed by start time and end time.
+ and various long fields to the bottom.
+
+ Some edits are done in-place, do not trust the argument value after calling.
+
+ :param data: Root data to make serializable, dictized when applicable.
+ :type data: dict
+ :returns: Order-tweaked version of the argument.
+ :rtype: dict
+ :raises KeyError: If the data does not contain required fields.
+ :raises TypeError: If the argument is not a dict.
+ :raises ValueError: If the argument does not support string conversion.
+ """
+ if not isinstance(data, dict):
+ raise RuntimeError(f"Root data object needs to be a dict: {data!r}")
+ data = _pre_serialize_recursive(data)
+ new_data = dict(version=data.pop(u"version"))
+ new_data[u"start_time"] = data.pop(u"start_time")
+ new_data[u"end_time"] = data.pop(u"end_time")
+ new_data.update(data)
+ return new_data
+
+
+def _merge_into_suite_info_file(teardown_path):
+ """Move setup and teardown data into a singe file, remove old files.
+
+ The caller has to confirm the argument is correct, e.g. ending in
+ "/teardown.info.json".
+
+ :param teardown_path: Local filesystem path to teardown file.
+ :type teardown_path: str
+ :returns: Local filesystem path to newly created suite file.
+ :rtype: str
+ """
+ # Manual right replace: https://stackoverflow.com/a/9943875
+ setup_path = u"setup".join(teardown_path.rsplit(u"teardown", 1))
+ with open(teardown_path, u"rt", encoding="utf-8") as file_in:
+ teardown_data = json.load(file_in)
+ # Transforming setup data into suite data.
+ with open(setup_path, u"rt", encoding="utf-8") as file_in:
+ suite_data = json.load(file_in)
+
+ end_time = teardown_data[u"end_time"]
+ suite_data[u"end_time"] = end_time
+ start_float = parse(suite_data[u"start_time"]).timestamp()
+ end_float = parse(suite_data[u"end_time"]).timestamp()
+ suite_data[u"duration"] = end_float - start_float
+ setup_telemetry = suite_data.pop(u"telemetry")
+ suite_data[u"setup_telemetry"] = setup_telemetry
+ suite_data[u"teardown_telemetry"] = teardown_data[u"telemetry"]
+
+ suite_path = u"suite".join(teardown_path.rsplit(u"teardown", 1))
+ with open(suite_path, u"wt", encoding="utf-8") as file_out:
+ json.dump(suite_data, file_out, indent=1)
+ # We moved everything useful from temporary setup/teardown info files.
+ os.remove(setup_path)
+ os.remove(teardown_path)
+
+ return suite_path
+
+
+def write_output(file_path, data):
+ """Prepare data for serialization and dump into a file.
+
+ Ancestor directories are created if needed.
+
+ :param file_path: Local filesystem path, including the file name.
+ :param data: Root data to make serializable, dictized when applicable.
+ :type file_path: str
+ :type data: dict
+ """
+ data = _pre_serialize_root(data)
+
+ # Lets move Telemetry to the end.
+ telemetry = data.pop(u"telemetry")
+ data[u"telemetry"] = telemetry
+
+ os.makedirs(os.path.dirname(file_path), exist_ok=True)
+ with open(file_path, u"wt", encoding="utf-8") as file_out:
+ json.dump(data, file_out, indent=1)
+
+ if file_path.endswith(u"/teardown.info.json"):
+ file_path = _merge_into_suite_info_file(file_path)
+
+ return file_path
diff --git a/resources/libraries/python/parsers/__init__.py b/resources/libraries/python/model/__init__.py
index 1b58a3cf17..36e32b89c4 100644
--- a/resources/libraries/python/parsers/__init__.py
+++ b/resources/libraries/python/model/__init__.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2016 Cisco and/or its affiliates.
+# Copyright (c) 2021 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -12,5 +12,5 @@
# limitations under the License.
"""
-__init__ file for resources/libraries/python/parsers
+__init__ file for directory resources/libraries/python/model
"""
diff --git a/resources/libraries/python/model/parse.py b/resources/libraries/python/model/parse.py
new file mode 100644
index 0000000000..1e0aebfe18
--- /dev/null
+++ b/resources/libraries/python/model/parse.py
@@ -0,0 +1,112 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Library for parsing results from JSON back to python objects.
+
+This is useful for vpp-csit jobs like per-patch performance verify.
+Such jobs invoke robot multiple times, each time on a different build.
+Each robot invocation may execute several test cases.
+How exactly are the results compared depends on the job type,
+but extracting just the main results from jsons (file trees) is a common task,
+so it is placed into this library.
+
+As such, the code in this file does not directly interact
+with the code in other files in this directory
+(result comparison is done outside robot invocation),
+but all files share common assumptions about json structure.
+
+The function here expects a particular tree created on a filesystem by
+a bootstrap script, including test results
+exported as json files according to a current model schema.
+This script extracts the results (according to result type)
+and joins them mapping from test IDs to lists of floats.
+Also, the result is cached into a results.json file,
+so each tree is parsed only once.
+
+The cached result does not depend on tree placement,
+so the bootstrap script may move and copy trees around
+before or after parsing.
+"""
+
+import json
+import os
+import pathlib
+
+from typing import Dict, List
+
+
+def parse(dirpath: str, fake_value: float = 1.0) -> Dict[str, List[float]]:
+ """Look for test jsons, extract scalar results.
+
+ Files other than .json are skipped, jsons without test_id are skipped.
+ If the test failed, four fake values are used as a fake result.
+
+ Units are ignored, as both parent and current are tested
+ with the same CSIT code so the unit should be identical.
+
+ The test results are sorted by test_id,
+ as the filesystem order is not deterministic enough.
+
+ The result is also cached as results.json file.
+
+ :param dirpath: Path to the directory tree to examine.
+ :param fail_value: Fake value to use for test cases that failed.
+ :type dirpath: str
+ :type fail_falue: float
+ :returns: Mapping from test IDs to list of measured values.
+ :rtype: Dict[str, List[float]]
+ :raises RuntimeError: On duplicate test ID or unknown test type.
+ """
+ if not pathlib.Path(dirpath).is_dir():
+ # This happens when per-patch runs out of iterations.
+ return {}
+ resultpath = pathlib.Path(f"{dirpath}/results.json")
+ if resultpath.is_file():
+ with open(resultpath, "rt", encoding="utf8") as file_in:
+ return json.load(file_in)
+ results = {}
+ for root, _, files in os.walk(dirpath):
+ for filename in files:
+ if not filename.endswith(".json"):
+ continue
+ filepath = os.path.join(root, filename)
+ with open(filepath, "rt", encoding="utf8") as file_in:
+ data = json.load(file_in)
+ if "test_id" not in data:
+ continue
+ name = data["test_id"]
+ if name in results:
+ raise RuntimeError(f"Duplicate: {name}")
+ if not data["passed"]:
+ results[name] = [fake_value] * 4
+ continue
+ result_object = data["result"]
+ result_type = result_object["type"]
+ if result_type == "mrr":
+ results[name] = result_object["receive_rate"]["rate"]["values"]
+ elif result_type == "ndrpdr":
+ results[name] = [result_object["pdr"]["lower"]["rate"]["value"]]
+ elif result_type == "soak":
+ results[name] = [
+ result_object["critical_rate"]["lower"]["rate"]["value"]
+ ]
+ elif result_type == "reconf":
+ results[name] = [result_object["loss"]["time"]["value"]]
+ elif result_type == "hoststack":
+ results[name] = [result_object["bandwidth"]["value"]]
+ else:
+ raise RuntimeError(f"Unknown result type: {result_type}")
+ results = {test_id: results[test_id] for test_id in sorted(results)}
+ with open(resultpath, "wt", encoding="utf8") as file_out:
+ json.dump(results, file_out, indent=1, separators=(", ", ": "))
+ return results
diff --git a/resources/libraries/python/model/util.py b/resources/libraries/python/model/util.py
new file mode 100644
index 0000000000..db2ef14bbb
--- /dev/null
+++ b/resources/libraries/python/model/util.py
@@ -0,0 +1,69 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module hosting few utility functions useful when dealing with modelled data.
+
+This is for storing varied utility functions, which are too short and diverse
+to be put into more descriptive modules.
+"""
+
+
+from robot.libraries.BuiltIn import BuiltIn
+
+
+def descend(parent_node, key, default_factory=None):
+ """Return a sub-node, create and insert it when it does not exist.
+
+ Without this function:
+ child_node = parent_node.get(key, dict())
+ parent_node[key] = child_node
+
+ With this function:
+ child_node = descend(parent_node, key)
+
+ New code is shorter and avoids the need to type key and parent_node twice.
+
+ :param parent_node: Reference to inner node of a larger structure
+ we want to descend from.
+ :param key: Key of the maybe existing child node.
+ :param default_factory: If the key does not exist, call this
+ to create a new value to be inserted under the key.
+ None means dict. The other popular option is list.
+ :type parent_node: dict
+ :type key: str
+ :type default_factory: Optional[Callable[[], object]]
+ :returns: The reference to (maybe just created) child node.
+ :rtype: object
+ """
+ if key not in parent_node:
+ factory = dict if default_factory is None else default_factory
+ parent_node[key] = factory()
+ return parent_node[key]
+
+
+def get_export_data():
+ """Return data member of ExportJson library instance.
+
+ This assumes the data has been initialized already.
+ Return None if Robot is not running.
+
+ :returns: Current library instance's raw data field.
+ :rtype: Optional[dict]
+ :raises AttributeError: If library is not imported yet.
+ """
+ instance = BuiltIn().get_library_instance(
+ u"resources.libraries.python.model.ExportJson"
+ )
+ if instance is None:
+ return None
+ return instance.data
diff --git a/resources/libraries/python/model/validate.py b/resources/libraries/python/model/validate.py
new file mode 100644
index 0000000000..85c4b993c9
--- /dev/null
+++ b/resources/libraries/python/model/validate.py
@@ -0,0 +1,62 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Module for validating JSON instances against schemas.
+
+Short module currently, as we validate only testcase info outputs.
+Structure will probably change when we start validation mode file types.
+"""
+
+import json
+import jsonschema
+import yaml
+
+
+def get_validators():
+ """Return mapping from file types to validator instances.
+
+ Uses hardcoded file types and paths to schemas on disk.
+
+ :returns: Validators, currently just for tc_info_output.
+ :rtype: Mapping[str, jsonschema.validators.Validator]
+ :raises RuntimeError: If schemas are not readable or not valid.
+ """
+ relative_path = "resources/model_schema/test_case.schema.yaml"
+ # Robot is always started when CWD is CSIT_DIR.
+ with open(relative_path, "rt", encoding="utf-8") as file_in:
+ schema = json.loads(
+ json.dumps(yaml.safe_load(file_in.read()), indent=2)
+ )
+ validator_class = jsonschema.validators.validator_for(schema)
+ validator_class.check_schema(schema)
+ fmt_checker = jsonschema.FormatChecker()
+ validator = validator_class(schema, format_checker=fmt_checker)
+
+ return dict(tc_info=validator)
+
+
+def validate(file_path, validator):
+ """Load data from disk, use validator to validate it.
+
+ :param file_path: Local filesystem path including the file name to load.
+ :param validator: Validator instance to use for validation.
+ :type file_path: str
+ :type validator: jsonschema.validators.Validator
+ :raises ValidationError: If schema validation fails.
+ """
+ with open(file_path, "rt", encoding="utf-8") as file_in:
+ instance = json.load(file_in)
+ error = jsonschema.exceptions.best_match(validator.iter_errors(instance))
+ if error is not None:
+ print(json.dumps(instance, indent=4))
+ raise error
diff --git a/resources/libraries/python/parsers/JsonParser.py b/resources/libraries/python/parsers/JsonParser.py
deleted file mode 100644
index c7a28bc1e4..0000000000
--- a/resources/libraries/python/parsers/JsonParser.py
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Used to parse JSON files or JSON data strings to dictionaries"""
-
-import json
-
-from io import open
-
-
-class JsonParser:
- """Parses JSON data string or files containing JSON data strings"""
- def __init__(self):
- pass
-
- @staticmethod
- def parse_data(json_data):
- """Return list parsed from JSON data string.
-
- Translates JSON data into list of values/dictionaries/lists.
-
- :param json_data: Data in JSON format.
- :type json_data: str
- :returns: JSON data parsed as python list.
- :rtype: list
- """
- parsed_data = json.loads(json_data)
- return parsed_data
-
- @staticmethod
- def parse_file(json_file):
- """Return list parsed from file containing JSON string.
-
- Translates JSON data found in file into list of
- values/dictionaries/lists.
-
- :param json_file: File with JSON type data.
- :type json_file: str
- :returns: JSON data parsed as python list.
- :rtype: list
- """
- input_data = open(json_file, u"rt").read()
- parsed_data = JsonParser.parse_data(input_data)
- return parsed_data
diff --git a/resources/libraries/python/ssh.py b/resources/libraries/python/ssh.py
index fad00482ed..437b1ad3e6 100644
--- a/resources/libraries/python/ssh.py
+++ b/resources/libraries/python/ssh.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,7 +17,7 @@
import socket
from io import StringIO
-from time import time, sleep
+from time import monotonic, sleep
from paramiko import RSAKey, SSHClient, AutoAddPolicy
from paramiko.ssh_exception import SSHException, NoValidConnectionsError
@@ -82,7 +82,7 @@ class SSH:
raise IOError(f"Cannot connect to {node['host']}")
else:
try:
- start = time()
+ start = monotonic()
pkey = None
if u"priv_key" in node:
pkey = RSAKey.from_private_key(StringIO(node[u"priv_key"]))
@@ -101,7 +101,7 @@ class SSH:
SSH.__existing_connections[node_hash] = self._ssh
logger.debug(
f"New SSH to {self._ssh.get_transport().getpeername()} "
- f"took {time() - start} seconds: {self._ssh}"
+ f"took {monotonic() - start} seconds: {self._ssh}"
)
except SSHException as exc:
raise IOError(f"Cannot connect to {node[u'host']}") from exc
@@ -151,6 +151,7 @@ class SSH:
:param log_stdout_err: If True, stdout and stderr are logged. stdout
and stderr are logged also if the return code is not zero
independently of the value of log_stdout_err.
+ Needed for calls outside Robot (e.g. from reservation script).
:type cmd: str or OptionString
:type timeout: int
:type log_stdout_err: bool
@@ -174,7 +175,7 @@ class SSH:
logger.trace(f"exec_command on {peer} with timeout {timeout}: {cmd}")
- start = time()
+ start = monotonic()
chan.exec_command(cmd)
while not chan.exit_status_ready() and timeout is not None:
if chan.recv_ready():
@@ -187,7 +188,8 @@ class SSH:
stderr += s_err.decode(encoding=u'utf-8', errors=u'ignore') \
if isinstance(s_err, bytes) else s_err
- if time() - start > timeout:
+ duration = monotonic() - start
+ if duration > timeout:
raise SSHTimeout(
f"Timeout exception during execution of command: {cmd}\n"
f"Current contents of stdout buffer: "
@@ -209,8 +211,8 @@ class SSH:
stderr += s_err.decode(encoding=u'utf-8', errors=u'ignore') \
if isinstance(s_err, bytes) else s_err
- end = time()
- logger.trace(f"exec_command on {peer} took {end-start} seconds")
+ duration = monotonic() - start
+ logger.trace(f"exec_command on {peer} took {duration} seconds")
logger.trace(f"return RC {return_code}")
if log_stdout_err or int(return_code):
@@ -230,6 +232,7 @@ class SSH:
:param cmd_input: Input redirected to the command.
:param timeout: Timeout.
:param log_stdout_err: If True, stdout and stderr are logged.
+ Needed for calls outside Robot (e.g. from reservation script).
:type cmd: str
:type cmd_input: str
:type timeout: int
@@ -400,19 +403,20 @@ class SSH:
self._ssh.get_transport(), sanitize=lambda x: x,
socket_timeout=timeout
)
- start = time()
+ start = monotonic()
if not get:
scp.put(local_path, remote_path)
else:
scp.get(remote_path, local_path)
scp.close()
- end = time()
- logger.trace(f"SCP took {end-start} seconds")
+ duration = monotonic() - start
+ logger.trace(f"SCP took {duration} seconds")
def exec_cmd(
node, cmd, timeout=600, sudo=False, disconnect=False,
- log_stdout_err=True):
+ log_stdout_err=True
+ ):
"""Convenience function to ssh/exec/return rc, out & err.
Returns (rc, stdout, stderr).
@@ -425,6 +429,7 @@ def exec_cmd(
:param log_stdout_err: If True, stdout and stderr are logged. stdout
and stderr are logged also if the return code is not zero
independently of the value of log_stdout_err.
+ Needed for calls outside Robot (e.g. from reservation script).
:type node: dict
:type cmd: str or OptionString
:type timeout: int
@@ -432,7 +437,7 @@ def exec_cmd(
:type disconnect: bool
:type log_stdout_err: bool
:returns: RC, Stdout, Stderr.
- :rtype: tuple(int, str, str)
+ :rtype: Tuple[int, str, str]
"""
if node is None:
raise TypeError(u"Node parameter is None")
@@ -470,7 +475,8 @@ def exec_cmd(
def exec_cmd_no_error(
node, cmd, timeout=600, sudo=False, message=None, disconnect=False,
- retries=0, include_reason=False, log_stdout_err=True):
+ retries=0, include_reason=False, log_stdout_err=True
+ ):
"""Convenience function to ssh/exec/return out & err.
Verifies that return code is zero.
@@ -489,6 +495,7 @@ def exec_cmd_no_error(
:param log_stdout_err: If True, stdout and stderr are logged. stdout
and stderr are logged also if the return code is not zero
independently of the value of log_stdout_err.
+ Needed for calls outside Robot thread (e.g. parallel framework setup).
:type node: dict
:type cmd: str or OptionString
:type timeout: int
diff --git a/resources/libraries/python/topology.py b/resources/libraries/python/topology.py
index fba2dcb189..22ed3666c3 100644
--- a/resources/libraries/python/topology.py
+++ b/resources/libraries/python/topology.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -71,6 +71,8 @@ class SocketType:
PAPI = u"PAPI"
# VPP PAPI Stats (legacy option until stats are migrated to Socket PAPI)
STATS = u"STATS"
+ # VPP Socket CLI
+ CLI = u"CLI"
DICT__nodes = load_topo_from_yaml()
@@ -764,7 +766,9 @@ class Topology:
# find link
for node_data in nodes_info.values():
# skip self
- if node_data[u"host"] == node[u"host"]:
+ l_hash = node_data[u"host"]+str(node_data[u"port"])
+ r_hash = node[u"host"]+str(node[u"port"])
+ if l_hash == r_hash:
continue
for if_key, if_val \
in node_data[u"interfaces"].items():
@@ -1083,6 +1087,19 @@ class Topology:
except KeyError:
return None
+ def get_bus(node):
+ """Return bus configuration of the node.
+
+ :param node: Node created from topology.
+ :type node: dict
+ :returns: bus configuration string.
+ :rtype: str
+ """
+ try:
+ return node[u"bus"]
+ except KeyError:
+ return None
+
@staticmethod
def get_uio_driver(node):
"""Return uio-driver configuration of the node.
diff --git a/resources/libraries/robot/crypto/ipsec.robot b/resources/libraries/robot/crypto/ipsec.robot
index 8be8230c3d..ebaac15bc8 100644
--- a/resources/libraries/robot/crypto/ipsec.robot
+++ b/resources/libraries/robot/crypto/ipsec.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -152,18 +152,16 @@
| | ... | ${r_tunnel} | ${l_tunnel}
| | VPP IPsec Add SPD | ${node} | ${spd_id}
| | VPP IPsec SPD Add If | ${node} | ${spd_id} | ${interface}
-| | ${action}= | Policy Action Bypass
-| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_hi} | ${action}
-| | ... | inbound=${TRUE} | proto=${ESP_PROTO} | is_ipv6=${is_ipv6}
+| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_hi} | BYPASS
+| | ... | inbound=${TRUE} | proto=ESP | is_ipv6=${is_ipv6}
| | ... | laddr_range=${tg_tun_ip} | raddr_range=${dut_tun_ip}
-| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_hi} | ${action}
-| | ... | inbound=${FALSE} | proto=${ESP_PROTO} | is_ipv6=${is_ipv6}
+| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_hi} | BYPASS
+| | ... | inbound=${FALSE} | proto=ESP | is_ipv6=${is_ipv6}
| | ... | laddr_range=${dut_tun_ip} | raddr_range=${tg_tun_ip}
-| | ${action}= | Policy Action Protect
-| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_lo} | ${action}
+| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_lo} | PROTECT
| | ... | sa_id=${r_sa_id} | laddr_range=${l_ip}
| | ... | raddr_range=${r_ip} | inbound=${TRUE}
-| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_lo} | ${action}
+| | VPP IPsec Add SPD Entry | ${node} | ${spd_id} | ${p_lo} | PROTECT
| | ... | sa_id=${l_sa_id} | laddr_range=${l_ip}
| | ... | raddr_range=${r_ip} | inbound=${FALSE}
@@ -240,13 +238,42 @@
| | ... | on all DUT nodes (leaving feature plane workers disabled).
| |
| | VPP Round Robin Rx Placement on all DUTs
-| | ... | ${nodes} | prefix=${EMPTY} | workers=${cpu_dp}
+| | ... | ${nodes} | prefix=${EMPTY} | use_dp_cores=${True}
| | VPP IPSec Crypto SW Scheduler Set Worker on all DUTs
-| | ... | ${nodes} | workers=${cpu_dp} | crypto_enable=${False}
+| | ... | ${nodes} | crypto_enable=${False}
+
+| Enable SPD flow cache IPv4 Inbound
+| | [Documentation]
+| | ... | Enable IPv4 Inbound SPD flow cache in VPP configuration file.
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Run Keyword | ${dut}.Add IPsec SPD Flow cache IPv4 Inbound | on
+| | | Run Keyword | ${dut}.Add IPsec SPD Fast Path IPv4 Inbound | on
+| | END
| Enable SPD flow cache IPv4 Outbound
| | [Documentation]
| | ... | Enable IPv4 Outbound SPD flow cache in VPP configuration file.
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Run Keyword | ${dut}.Add SPD Flow Cache IPv4 Outbound
+| | | Run Keyword | ${dut}.Add IPsec SPD Flow cache IPv4 Outbound | on
+| | | Run Keyword | ${dut}.Add IPsec SPD Fast Path IPv4 Outbound | on
+| | END
+
+| Enable IPsec SPD Fast Path IPv4 Inbound and Outbound
+| | [Documentation]
+| | ... | Enable IPsec SPD fast path IPv4 Inbound and outbound in VPP
+| | ... | configuration file.
+| |
+| | ... | *Arguments:*
+| | ... | - value - The number buckets for spd fast path. Type: int
+| |
+| | [Arguments] | ${value}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Run Keyword | ${dut}.Add IPsec SPD Flow Cache IPv4 Outbound | off
+| | | Run Keyword | ${dut}.Add IPsec SPD Flow Cache IPv4 Inbound | off
+| | | Run Keyword | ${dut}.Add IPsec SPD Fast Path IPv4 Outbound | on
+| | | Run Keyword | ${dut}.Add IPsec SPD Fast Path IPv4 Inbound | on
+| | | Run Keyword | ${dut}.Add IPsec SPD Fast Path Num Buckets | ${value}
+| | END
diff --git a/resources/libraries/robot/dpdk/default.robot b/resources/libraries/robot/dpdk/default.robot
deleted file mode 100644
index 9fd6379afd..0000000000
--- a/resources/libraries/robot/dpdk/default.robot
+++ /dev/null
@@ -1,85 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-*** Settings ***
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.CpuUtils
-| Library | resources.libraries.python.DPDK.TestpmdTest
-| Library | resources.libraries.python.DPDK.L3fwdTest
-| Library | Collections
-
-*** Keywords ***
-| Start testpmd on all DUTs
-| | [Documentation] | Start the testpmd with M worker threads and rxqueues N and
-| | ... | jumbo support frames on/off on all DUTs.
-| |
-| | ... | *Arguments:*
-| | ... | - phy_cores - Number of physical cores to use. Type: integer
-| | ... | - rx_queues - Number of RX queues. Type: integer
-| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ... | - rxd - Number of RX descriptors. Type: integer
-| | ... | - txd - Number of TX descriptors. Type: integer
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Start testpmd on all DUTs \| ${1} \| ${1} \| ${False} \|
-| |
-| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ... | ${rxd}=${None} | ${txd}=${None}
-| |
-| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
-| | FOR | ${dut} | IN | @{duts}
-| | | &{compute_resource_info}= | Get Affinity Vswitch
-| | | ... | ${nodes} | ${dut} | ${phy_cores} | rx_queues=${rx_queues}
-| | | ... | rxd=${rxd} | txd=${txd}
-| | | Set Test Variable | &{compute_resource_info}
-| | | Create compute resources variables
-| | | Start testpmd
-| | | ... | ${nodes['${dut}']} | ${${dut}_pf1}[0] | ${${dut}_pf2}[0]
-| | | ... | ${cpu_dp} | ${dp_count_int} | ${rxq_count_int} | ${jumbo_frames}
-| | | ... | ${nic_rxq_size} | ${nic_txq_size}
-| | END
-
-| Start l3fwd on all DUTs
-| | [Documentation] | Start the l3fwd with M worker threads and rxqueues N and
-| | ... | jumbo support frames on/off on all DUTs.
-| |
-| | ... | *Arguments:*
-| | ... | - phy_cores - Number of physical cores to use. Type: integer
-| | ... | - rx_queues - Number of RX queues. Type: integer
-| | ... | - jumbo_frames - Jumbo frames on/off: boolean
-| | ... | - rxd - Number of RX descriptors. Type: integer
-| | ... | - txd - Number of TX descriptors. Type: integer
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Start l3fwd on all DUTs \| ${1} \| ${1} \| ${False} \|
-| |
-| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${jumbo_frames}=${False}
-| | ... | ${rxd}=${None} | ${txd}=${None}
-| |
-| | ${cpu_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_count_int} | Convert to Integer | ${phy_cores}
-| | ${dp_cores}= | Evaluate | ${cpu_count_int}+1
-| | FOR | ${dut} | IN | @{duts}
-| | | &{compute_resource_info}= | Get Affinity Vswitch
-| | | ... | ${nodes} | ${dut} | ${phy_cores} | rx_queues=${rx_queues}
-| | | ... | rxd=${rxd} | txd=${txd}
-| | | Set Test Variable | &{compute_resource_info}
-| | | Create compute resources variables
-| | | Start l3fwd
-| | | ... | ${nodes} | ${nodes['${dut}']} | ${${dut}_pf1}[0] | ${${dut}_pf2}[0]
-| | | ... | ${cpu_dp} | ${dp_count_int} | ${rxq_count_int} | ${jumbo_frames}
-| | END
diff --git a/resources/libraries/robot/features/acl.robot b/resources/libraries/robot/features/acl.robot
index 1dd706c3ac..f474561a14 100644
--- a/resources/libraries/robot/features/acl.robot
+++ b/resources/libraries/robot/features/acl.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -100,10 +100,10 @@
| | Add Macip Acl Multi Entries | ${dut} | rules=${acl0}
| | Add Macip Acl Multi Entries | ${dut} | rules=${acl1}
| | ${acl_idx}= | Set Variable | 0
-| | Run Keyword Unless | '${dut_if1}' == '${NONE}'
+| | Run Keyword If | '${dut_if1}' != '${NONE}'
| | ... | Add Del Macip Acl Interface | ${dut} | ${dut_if1} | add | ${acl_idx}
| | ${acl_idx}= | Set Variable | 1
-| | Run Keyword Unless | '${dut_if2}' == '${NONE}'
+| | Run Keyword If | '${dut_if2}' != '${NONE}'
| | ... | Add Del Macip Acl Interface | ${dut} | ${dut_if2} | add | ${acl_idx}
| Configure IPv4 ACLs
diff --git a/resources/libraries/robot/features/dma.robot b/resources/libraries/robot/features/dma.robot
new file mode 100644
index 0000000000..677f39c9df
--- /dev/null
+++ b/resources/libraries/robot/features/dma.robot
@@ -0,0 +1,28 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+| Documentation | DMA Keywords
+|
+| Library | resources.libraries.python.DMAUtil
+| Resource | resources/libraries/robot/nginx/default.robot
+
+*** Keywords ***
+| Enable DMA WQs on all DUTs
+| | [Documentation] | Enable DMA WQs on all DUTs.
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | ${dma_wqs}= | Enable DMAs And WQs On DUT
+| | | ... | ${nodes['${dut}']} | ${cpu_count_int}
+| | | Set Test Variable | ${${dut}_dma_wqs} | ${dma_wqs}
+| | END
diff --git a/resources/libraries/robot/hoststack/hoststack.robot b/resources/libraries/robot/hoststack/hoststack.robot
index 9c81855af4..20c071dc2d 100644
--- a/resources/libraries/robot/hoststack/hoststack.robot
+++ b/resources/libraries/robot/hoststack/hoststack.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,8 +17,10 @@
| Library | resources.libraries.python.HoststackUtil
| Library | resources.libraries.python.NginxUtil
| Library | resources.libraries.python.NsimUtil
+| Library | resources.libraries.python.DMAUtil
| Library | resources.tools.ab.ABTools
| Variables | resources/libraries/python/Constants.py
+| Resource | resources/libraries/robot/features/dma.robot
| Resource | resources/libraries/robot/ip/ip4.robot
| Resource | resources/libraries/robot/nsim/nsim.robot
| Resource | resources/libraries/robot/nginx/default.robot
@@ -33,11 +35,8 @@
| ... | rxd=${256}
| ... | txd=${256}
| ... | phy_cores=${1}
-| ... | vpp_api_socket=${SOCKSVR_PATH}
-| ... | api_seg_global_size=2G
-| ... | api_seg_api_size=1G
+| ... | app_api_socket=/run/vpp/app_ns_sockets/default
| ... | tcp_cc_algo=cubic
-| ... | sess_evt_q_seg_size=64M
| ... | sess_evt_q_length=16384
| ... | sess_prealloc_sess=1024
| ... | sess_v4_tbl_buckets=20000
@@ -51,7 +50,7 @@
| ... | cpu_cnt=${1}
| ... | cfg_vpp_feature=${None}
| ... | namespace=default
-| ... | vpp_api_socket=${vpp_hoststack_attr}[vpp_api_socket]
+| ... | app_api_socket=${vpp_hoststack_attr}[app_api_socket]
| ... | json_output=json
| ... | uri_protocol=quic
| ... | uri_ip4_addr=${EMPTY}
@@ -66,12 +65,13 @@
| ... | tx_bytes=0
| ... | rx_results_diff=${False}
| ... | tx_results_diff=${False}
+| ... | use_app_socket_api=${True}
| &{vpp_echo_client_attr}=
| ... | role=client
| ... | cpu_cnt=${1}
| ... | cfg_vpp_feature=${None}
| ... | namespace=default
-| ... | vpp_api_socket=${vpp_hoststack_attr}[vpp_api_socket]
+| ... | app_api_socket=${vpp_hoststack_attr}[app_api_socket]
| ... | json_output=json
| ... | uri_protocol=quic
| ... | uri_ip4_addr=${EMPTY}
@@ -86,6 +86,7 @@
| ... | tx_bytes=0
| ... | rx_results_diff=${False}
| ... | tx_results_diff=${False}
+| ... | use_app_socket_api=${True}
| &{iperf3_server_attr}=
| ... | role=server
| ... | cpu_cnt=${1}
@@ -117,7 +118,17 @@
| ... | cpu_cnt=${1}
| ... | cfg_vpp_feature=${Empty}
| ... | namespace=default
-| ... | vcl_config=vcl_iperf3.conf
+| ... | vcl_config=vcl_nginx.conf
+| ... | ld_preload=${True}
+| ... | transparent_tls=${False}
+| ... | json=${True}
+| ... | ip_version=${4}
+| &{nginx_server_with_dma_attr}=
+| ... | role=server
+| ... | cpu_cnt=${1}
+| ... | cfg_vpp_feature=${Empty}
+| ... | namespace=default
+| ... | vcl_config=vcl_dma.conf
| ... | ld_preload=${True}
| ... | transparent_tls=${False}
| ... | json=${True}
@@ -133,11 +144,8 @@
| | ... | - ${rxd} - Number of Rx Descriptors Type: int
| | ... | - ${txd} - Number of Tx Descriptors Type: int
| | ... | - ${phy_cores} - Number of cores for workers Type: int
-| | ... | - ${vpp_api_socket} - Path to VPP api socket file Type: string
-| | ... | - ${api_seg_global_size} - Global API segment size Type: string
-| | ... | - ${api_seg_api_size} - API segment API fifo size Type: string
+| | ... | - ${app_api_socket} - Path to application api socket file Type: string
| | ... | - ${tcp_cc_algo} - TCP congestion control algorithm Type: string
-| | ... | - ${sess_evt_q_seg_size} - Session event queue segment size
| | ... | Type: string
| | ... | - ${sess_evt_q_length} - Session event queue length Type: string
| | ... | - ${sess_prealloc_sess} - Number of sessions to preallocate
@@ -164,11 +172,8 @@
| | ... | ${rxd}=${vpp_hoststack_attr}[rxd]
| | ... | ${txd}=${vpp_hoststack_attr}[txd]
| | ... | ${phy_cores}=${vpp_hoststack_attr}[phy_cores]
-| | ... | ${vpp_api_socket}=${vpp_hoststack_attr}[vpp_api_socket]
-| | ... | ${api_seg_global_size}=${vpp_hoststack_attr}[api_seg_global_size]
-| | ... | ${api_seg_api_size}=${vpp_hoststack_attr}[api_seg_api_size]
+| | ... | ${app_api_socket}=${vpp_hoststack_attr}[app_api_socket]
| | ... | ${tcp_cc_algo}=${vpp_hoststack_attr}[tcp_cc_algo]
-| | ... | ${sess_evt_q_seg_size}=${vpp_hoststack_attr}[sess_evt_q_seg_size]
| | ... | ${sess_evt_q_length}=${vpp_hoststack_attr}[sess_evt_q_length]
| | ... | ${sess_prealloc_sess}=${vpp_hoststack_attr}[sess_prealloc_sess]
| | ... | ${sess_v4_tbl_buckets}=${vpp_hoststack_attr}[sess_v4_tbl_buckets]
@@ -183,16 +188,10 @@
| | Set To Dictionary | ${vpp_hoststack_attr} | txd | ${txd}
| | Set To Dictionary | ${vpp_hoststack_attr} | phy_cores | ${phy_cores}
| | Set To Dictionary | ${vpp_hoststack_attr}
-| | ... | vpp_api_socket | ${vpp_api_socket}
-| | Set To Dictionary | ${vpp_hoststack_attr}
-| | ... | api_seg_global_size | ${api_seg_global_size}
-| | Set To Dictionary | ${vpp_hoststack_attr}
-| | ... | api_seg_api_size | ${api_seg_api_size}
+| | ... | app_api_socket | ${app_api_socket}
| | Set To Dictionary | ${vpp_hoststack_attr}
| | ... | tcp_cc_algo | ${tcp_cc_algo}
| | Set To Dictionary | ${vpp_hoststack_attr}
-| | ... | sess_evt_q_seg_size | ${sess_evt_q_seg_size}
-| | Set To Dictionary | ${vpp_hoststack_attr}
| | ... | sess_evt_q_length | ${sess_evt_q_length}
| | Set To Dictionary | ${vpp_hoststack_attr}
| | ... | sess_prealloc_sess | ${sess_prealloc_sess}
@@ -227,6 +226,7 @@
| | ... | - ${tx_bytes} - Number of Bytes to send Type: string
| | ... | - ${rx_results_diff} - Rx Results are different to pass Type: boolean
| | ... | - ${tx_results_diff} - Tx Results are different to pass Type: boolean
+| | ... | - ${use_app_socket_api} - Use app socket API instead of VPP API
| |
| | ... | *Example:*
| |
@@ -246,6 +246,7 @@
| | ... | ${tx_bytes}=${vpp_echo_server_attr}[tx_bytes]
| | ... | ${rx_results_diff}=${vpp_echo_server_attr}[rx_results_diff]
| | ... | ${tx_results_diff}=${vpp_echo_server_attr}[tx_results_diff]
+| | ... | ${use_app_socket_api}=${vpp_echo_server_attr}[use_app_socket_api]
| |
| | Set To Dictionary | ${vpp_echo_server_attr} | cfg_vpp_feature
| | ... | ${cfg_vpp_feature}
@@ -262,6 +263,8 @@
| | ... | ${vpp_echo_server_attr} | rx_results_diff | ${rx_results_diff}
| | Set To Dictionary
| | ... | ${vpp_echo_server_attr} | tx_results_diff | ${tx_results_diff}
+| | Set To Dictionary
+| | ... | ${vpp_echo_server_attr} | use_app_socket_api | ${use_app_socket_api}
| Set VPP Echo Client Attributes
| | [Documentation]
@@ -281,6 +284,7 @@
| | ... | - ${tx_bytes} - Number of Bytes to send Type: string
| | ... | - ${rx_results_diff} - Rx Results are different to pass Type: boolean
| | ... | - ${tx_results_diff} - Tx Results are different to pass Type: boolean
+| | ... | - ${use_app_socket_api} - Use app socket API instead of VPP API
| |
| | ... | *Example:*
| |
@@ -300,6 +304,7 @@
| | ... | ${tx_bytes}=${vpp_echo_client_attr}[tx_bytes]
| | ... | ${rx_results_diff}=${vpp_echo_client_attr}[rx_results_diff]
| | ... | ${tx_results_diff}=${vpp_echo_client_attr}[tx_results_diff]
+| | ... | ${use_app_socket_api}=${vpp_echo_client_attr}[use_app_socket_api]
| |
| | Set To Dictionary | ${vpp_echo_client_attr} | cfg_vpp_feature
| | ... | ${cfg_vpp_feature}
@@ -316,6 +321,8 @@
| | ... | ${vpp_echo_client_attr} | rx_results_diff | ${rx_results_diff}
| | Set To Dictionary
| | ... | ${vpp_echo_client_attr} | tx_results_diff | ${tx_results_diff}
+| | Set To Dictionary
+| | ... | ${vpp_echo_client_attr} | use_app_socket_api | ${use_app_socket_api}
| Set Iperf3 Server Attributes
| | [Documentation]
@@ -440,7 +447,7 @@
| | Set hoststack quic fifo size | ${node} | ${quic_fifo_size}
| | Set hoststack quic crypto engine | ${node} | ${quic_crypto_engine}
-| Configure VPP hoststack attributes on all DUTs
+| Configure VPP Hoststack Attributes on all DUTs
| | [Documentation]
| | ... | Configure VPP HostStack attributes on all DUTs.
| |
@@ -452,11 +459,6 @@
| | FOR | ${dut} | IN | @{duts}
| | | Import Library | resources.libraries.python.VppConfigGenerator
| | | ... | WITH NAME | ${dut}
-| | | Run keyword | ${dut}.Add socksvr | ${vpp_hoststack_attr}[vpp_api_socket]
-| | | Run keyword | ${dut}.Add api segment global size
-| | | ... | ${vpp_hoststack_attr}[api_seg_global_size]
-| | | Run keyword | ${dut}.Add api segment api size
-| | | ... | ${vpp_hoststack_attr}[api_seg_api_size]
| | | Run Keyword If
| | | ... | '${dut}' == 'DUT1' and ${vpp_nsim_attr}[output_nsim_enable]
| | | ... | ${dut}.Add Nsim poll main thread
@@ -464,9 +466,7 @@
| | | Run keyword | ${dut}.Add tcp congestion control algorithm
| | | ... | ${vpp_hoststack_attr}[tcp_cc_algo]
| | | Run keyword | ${dut}.Add session enable
-| | | Run keyword | ${dut}.Add session event queues memfd segment
-| | | Run keyword | ${dut}.Add session event queues segment size
-| | | ... | ${vpp_hoststack_attr}[sess_evt_q_seg_size]
+| | | Run keyword | ${dut}.Add session app socket api
| | | Run keyword | ${dut}.Add session event queue length
| | | ... | ${vpp_hoststack_attr}[sess_evt_q_length]
| | | Run keyword | ${dut}.Add session preallocated sessions
@@ -518,11 +518,13 @@
| | ... | ${vpp_echo_client_attr}[namespace] | ${core_list}
| | ... | ${vpp_echo_client_attr}[cfg_vpp_feature] | ${vpp_echo_client}
| | When Hoststack Test Program Finished | ${dut1} | ${client_pid}
+| | ... | ${vpp_echo_client} | ${dut2} | ${vpp_echo_server}
| | ${client_defer_fail} | ${client_output}=
| | ... | Analyze hoststack test program output | ${dut1} | Client
| | ... | ${vpp_nsim_attr} | ${vpp_echo_client}
| | Then Set test message | ${client_output}
| | And Hoststack Test Program Finished | ${dut2} | ${server_pid}
+| | ... | ${vpp_echo_server} | ${dut1} | ${vpp_echo_client}
| | ${server_defer_fail} | ${server_output}=
| | ... | Analyze hoststack test program output | ${dut2} | Server
| | ... | ${vpp_nsim_attr} | ${vpp_echo_server}
@@ -560,57 +562,62 @@
| | ... | ${iperf3_client_attr}[namespace] | ${core_list}
| | ... | ${iperf3_client_attr}[cfg_vpp_feature] | ${iperf3_client}
| | When Hoststack Test Program Finished | ${dut1} | ${client_pid}
+| | ... | ${iperf3_client} | ${dut2} | ${iperf3_server}
| | ${client_defer_fail} | ${client_output}=
| | ... | Analyze hoststack test program output | ${dut1} | Client
| | ... | ${vpp_nsim_attr} | ${iperf3_client}
| | Then Set test message | ${client_output}
| | Return From Keyword | ${client_defer_fail}
-| Set up LDP or VCL Nginx on DUT node
+| Set up LDP or VCL Nginx on DUT1 node
| | [Documentation]
-| | ... | Setup for suites which uses VCL or LDP Nginx on DUT.
+| | ... | Setup for suites which uses VCL or LDP Nginx on DUT1.
+| |
+| | ... | Currently hardcoded to work on DUT1, assuming its node dict
+| | ... | and similar values like \${DUT1_cpu_alloc_str} are already defined.
| |
| | ... | *Arguments:*
-| | ... | - dut - DUT node.
-| | ... | Type: string
-| | ... | - mode - VCL Nginx or LDP Nginx.
-| | ... | Type: string
-| | ... | - rps_cps - Test request or connect.
-| | ... | Type: string
-| | ... | - core_num - Nginx work processes number.
-| | ... | Type: int
-| | ... | - qat - Whether to use the qat engine.
-| | ... | Type: string
-| | ... | - tls_tcp - TLS or TCP.
+| | ... | - mode - VCL Nginx or LDP Nginx. Type: string
+| | ... | - rps_cps - Test rps or cps. Type: string
+| | ... | - core_num - Nginx work processes number. Type: int
+| | ... | - qat - Whether to use the qat engine. Type: string
+| | ... | - tls_tcp - TLS or TCP. Type: string
+| | ... | - use_dma - Whether to use DMA, Default: False. Type: bool
| |
| | ... | *Example:*
| |
-| | ... | \| Set up LDP or VCL NGINX on DUT node \| ${dut} |${mode}\
+| | ... | \| Set up LDP or VCL NGINX on DUT1 node \| ${mode}\
| | ... | \| ${rps_cps} \| ${phy_cores} \| ${qat} \| ${tls_tcp} \|
| |
-| | [Arguments] | ${dut} | ${mode} | ${rps_cps} | ${phy_cores} | ${qat}
-| | ... | ${tls_tcp}
+| | [Arguments] | ${mode} | ${rps_cps} | ${phy_cores} | ${qat} | ${tls_tcp}
+| | | ... | ${use_dma}=${False}
| |
-| | Set Interface State | ${dut} | ${DUT1_${int}1}[0] | up
-| | VPP Interface Set IP Address | ${dut} | ${DUT1_${int}1}[0]
+| | Set Interface State | ${DUT1} | ${DUT1_${int}1}[0] | up
+| | VPP Interface Set IP Address | ${DUT1} | ${DUT1_${int}1}[0]
| | ... | ${dut_ip_addrs}[0] | ${dut_ip_prefix}
-| | Vpp Node Interfaces Ready Wait | ${dut}
+| | Vpp Node Interfaces Ready Wait | ${DUT1}
| | ${skip_cnt}= | Evaluate
| | ... | ${CPU_CNT_SYSTEM} + ${CPU_CNT_MAIN} + ${vpp_hoststack_attr}[phy_cores]
-| | ${numa}= | Get interfaces numa node | ${dut} | ${DUT1_${int}1}[0]
-| | Apply Nginx configuration on DUT | ${dut} | ${phy_cores}
-| | Set To Dictionary | ${nginx_server_attr} | ip_address
+| | ${numa}= | Get interfaces numa node | ${DUT1} | ${DUT1_${int}1}[0]
+| | Apply Nginx configuration on DUT | ${DUT1} | ${phy_cores}
+| | ${attr}= | Run Keyword If | ${use_dma} == ${True}
+| | ... | Set Variable | ${nginx_server_with_dma_attr}
+| | ... | ELSE | Set Variable | ${nginx_server_attr}
+| | Set To Dictionary | ${attr} | ip_address
| | ... | ${dut_ip_addrs}[0]
-| | ${core_list}= | Cpu list per node str | ${dut} | ${numa}
-| | ... | skip_cnt=${skip_cnt} | cpu_cnt=${nginx_server_attr}[cpu_cnt]
-| | ${cpu_idle_list}= | Get cpu idle list | ${dut} | ${numa}
-| | ... | ${smt_used} | ${cpu_alloc_str}
-| | ${nginx_server}= | Get Nginx Command | ${nginx_server_attr}
+| | ${core_list}= | Cpu list per node str | ${DUT1} | ${numa}
+| | ... | skip_cnt=${skip_cnt} | cpu_cnt=${attr}[cpu_cnt]
+| | ... | smt_used=${smt_used}
+| | ${cpu_idle}= | Cpu List per node | ${DUT1} | ${numa}
+| | ${cpu_idle_list}= | Get Slice From List | ${cpu_idle}
+| | ... | ${${skip_cnt} + ${attr}[cpu_cnt]}
+| | ${nginx_server}= | Get Nginx Command | ${attr}
| | ... | ${nginx_version} | ${packages_dir}
-| | ${server_pid}= | Start Hoststack Test Program
-| | ... | ${dut} | ${nginx_server_attr}[namespace] | ${core_list}
+| | Start Hoststack Test Program
+| | ... | ${DUT1} | ${attr}[namespace] | ${core_list}
| | ... | ${nginx_server}
-| | Taskset Nginx PID to idle cores | ${dut} | ${cpu_idle_list}
+| | Get Hoststack Test Program Logs | ${DUT1} | ${nginx_server}
+| | Taskset Nginx PID to idle cores | ${DUT1} | ${cpu_idle_list}
| Measure TLS requests or connections per second
| | [Documentation]
@@ -629,8 +636,66 @@
| |
| | [Arguments] | ${ciphers} | ${files} | ${tls_tcp} | ${mode}
| |
-| | ${output}= | Run ab | ${tg} | ${dut_ip_addrs}[0] | ${ab_ip_addrs}[0]
+| | ${dut_ip_addrs_str} | Evaluate | ','.join(${dut_ip_addrs})
+| | ${ad_ip_addrs_str} | Evaluate | ','.join(${ab_ip_addrs})
+| | ${output}= | Run ab | ${tg} | ${dut_ip_addrs_str} | ${ad_ip_addrs_str}
| | ... | ${tls_tcp} | ${ciphers} | ${files} | ${mode} | ${r_total} | ${c_total}
| | ... | ${listen_port}
| | Set test message | ${output}
| | Log VPP Hoststack data | ${dut1}
+
+| Configure VPP startup configuration for NGINX
+| | [Documentation]
+| | ... | COnfigure VPP startup configuration for NGINX related tests
+| |
+| | [Arguments] | ${sess_prealloc_sess} | ${sess_evt_q_length}
+| | ... | ${v4_sess_tbl_buckets} | ${v4_sess_tbl_mem} | ${local_endpts_tbl_buckets}
+| | ... | ${local_endpts_tbl_mem} | ${tcp_prealloc_conns} | ${tcp_prealloc_ho_conns}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Import Library | resources.libraries.python.VppConfigGenerator
+| | | ... | WITH NAME | ${dut}
+| | | Run keyword | ${dut}.Add session enable
+| | | Run keyword | ${dut}.Add session app socket api
+| | | Run keyword | ${dut}.Add session preallocated sessions
+| | | ... | ${sess_prealloc_sess}
+| | | Run keyword | ${dut}.Add session event queue length
+| | | ... | ${sess_evt_q_length}
+| | | Run keyword | ${dut}.Add session v4 session table buckets
+| | | ... | ${v4_sess_tbl_buckets}
+| | | Run keyword | ${dut}.Add session v4 session table memory
+| | | ... | ${v4_sess_tbl_mem}
+| | | Run keyword | ${dut}.Add session local endpoints table buckets
+| | | ... | ${local_endpts_tbl_buckets}
+| | | Run keyword | ${dut}.Add session local endpoints table memory
+| | | ... | ${local_endpts_tbl_mem}
+| | | Run keyword | ${dut}.Add tcp preallocated connections
+| | | ... | ${tcp_prealloc_conns}
+| | | Run keyword | ${dut}.Add tcp preallocated half open connections
+| | | ... | ${tcp_prealloc_ho_conns}
+| | END
+
+| Add Additional Startup Configuration For DMA On All DUTs
+| | [Documentation]
+| | ... | Add additional startup configuration for DMA on all DUTs
+| |
+| | [Arguments] | ${use_dma}=${True}
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Import Library | resources.libraries.python.VppConfigGenerator
+| | | ... | WITH NAME | ${dut}
+| | | Run keyword | ${dut}.Add Session Event Queues Memfd Segment
+| | | Run keyword | ${dut}.Add TCP Congestion Control Algorithm
+| | | Run keyword | ${dut}.Add TCP Tso
+| | | Run keyword | ${dut}.Add Session Enable
+| | | Run keyword If | ${use_dma} == ${True}
+| | | ... | ${dut}.Add Session Use Dma
+| | | Run keyword If | ${use_dma} == ${True}
+| | | ... | Enable DMA WQs on all DUTs
+| | | Run keyword If | ${use_dma} == ${True}
+| | | ... | ${dut}.Add DMA Dev | ${${dut}_dma_wqs}
+| | | Run keyword If | '${nic_driver}' == 'vfio-pci'
+| | | ... | ${dut}.Add DPDK Dev Default Tso
+| | | Run keyword If | '${nic_driver}' == 'vfio-pci'
+| | | ... | ${dut}.Add DPDK Enable Tcp Udp Checksum
+| | END
diff --git a/resources/libraries/robot/ip/ip4.robot b/resources/libraries/robot/ip/ip4.robot
index ef5b27f7de..e3ebd0e289 100644
--- a/resources/libraries/robot/ip/ip4.robot
+++ b/resources/libraries/robot/ip/ip4.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -12,9 +12,6 @@
# limitations under the License.
*** Settings ***
-| Library | resources.libraries.python.InterfaceUtil
-| Library | resources.libraries.python.IPUtil
-|
| Documentation | IPv4 keywords
*** Keywords ***
@@ -83,80 +80,21 @@
| | ... | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${DUT2_${int}1}[0]
| |
-| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host1_ip}' != '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | ${remote_host_mask}
| | ... | gateway=10.10.10.2 | interface=${DUT1_${int}1}[0]
-| | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host2_ip}' != '${NONE}'
| | ... | Vpp Route Add | ${dut} | ${remote_host2_ip} | ${remote_host_mask}
| | ... | gateway=20.20.20.2 | interface=${dut_if2}
-| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host1_ip}' != '${NONE}'
| | ... | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | ${remote_host_mask}
| | ... | gateway=1.1.1.2 | interface=${DUT1_${int}2}[0]
-| | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host2_ip}' != '${NONE}'
| | ... | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | ${remote_host2_ip} | ${remote_host_mask}
| | ... | gateway=1.1.1.1 | interface=${DUT2_${int}1}[0]
-| Initialize IPv4 forwarding with scaling in circular topology
-| | [Documentation]
-| | ... | Custom setup of IPv4 topology with scalability of ip routes on all
-| | ... | DUT nodes in 2-node / 3-node circular topology
-| |
-| | ... | *Arguments:*
-| | ... | - count - IP route count. Type: integer
-| |
-| | ... | *Return:*
-| | ... | - No value returned
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Initialize IPv4 forwarding with scaling in 3-node circular \
-| | ... | topology \| 100000 \|
-| |
-| | [Arguments] | ${count}
-| |
-| | ${dut2_status} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${dut2}
-| |
-| | Set interfaces in path up
-| |
-| | VPP Add IP Neighbor
-| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.1 | ${TG_pf1_mac}[0]
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Add IP Neighbor
-| | ... | ${dut1} | ${DUT1_${int}2}[0] | 2.2.2.2 | ${DUT2_${int}1_mac}[0]
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Add IP Neighbor
-| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2.2.2.1 | ${DUT1_${int}2_mac}[0]
-| | ${dut}= | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Set Variable | ${dut2}
-| | ... | ELSE | Set Variable | ${dut1}
-| | ${dut_if2}= | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Set Variable | ${DUT2_${int}2}[0]
-| | ... | ELSE | Set Variable | ${DUT1_${int}2}[0]
-| | VPP Add IP Neighbor
-| | ... | ${dut} | ${dut_if2} | 3.3.3.1 | ${TG_pf2_mac}[0]
-| | VPP Interface Set IP Address
-| | ... | ${dut1} | ${DUT1_${int}1}[0] | 1.1.1.2 | 30
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}2}[0] | 2.2.2.1
-| | ... | 30
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | VPP Interface Set IP Address | ${dut2} | ${DUT2_${int}1}[0] | 2.2.2.2
-| | ... | 30
-| | VPP Interface Set IP Address | ${dut} | ${dut_if2} | 3.3.3.2 | 30
-| | Vpp Route Add | ${dut1} | 10.0.0.0 | 32 | gateway=1.1.1.1
-| | ... | interface=${DUT1_${int}1}[0] | count=${count}
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Vpp Route Add | ${dut1} | 20.0.0.0 | 32 | gateway=2.2.2.2
-| | ... | interface=${DUT1_${int}2}[0] | count=${count}
-| | Run Keyword If | '${dut2_status}' == 'PASS'
-| | ... | Vpp Route Add | ${dut2} | 10.0.0.0 | 32 | gateway=2.2.2.1
-| | ... | interface=${DUT2_${int}1}[0] | count=${count}
-| | Vpp Route Add | ${dut} | 20.0.0.0 | 32 | gateway=3.3.3.1
-| | ... | interface=${dut_if2} | count=${count}
-
| Initialize IPv4 routing with memif pairs
| | [Documentation]
| | ... | Create pairs of Memif interfaces on all defined VPP nodes. Put each
@@ -267,7 +205,7 @@
| | | ${memif2}= | Set Variable | ${${dut}-memif-${number}-if2}
| | | ${fib_table_1}= | Evaluate | ${fib_table_1} + ${1}
| | | ${fib_table_2}= | Evaluate | ${fib_table_1} + ${1}
-| | | Run Keyword Unless | ${number} == ${count}
+| | | Run Keyword If | ${number} != ${count}
| | | ... | Add Fib Table | ${nodes['${dut}']} | ${fib_table_2}
| | | Assign Interface To Fib Table | ${nodes['${dut}']}
| | | ... | ${memif1} | ${fib_table_1}
@@ -375,10 +313,10 @@
| | | ... | ${dut1} | ${dut1-vhost-${number}-if1} | 1.1.1.2 | 30
| | | VPP Interface Set IP Address
| | | ... | ${dut1} | ${dut1-vhost-${number}-if2} | 1.1.2.2 | 30
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=1.1.1.1
| | | ... | interface=${dut1-vhost-${number}-if1} | vrf=${fib_table_1}
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=1.1.2.1
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
| | | Run Keyword If | ${testpmd_mac}
@@ -494,16 +432,16 @@
| | | ... | ${dut2} | ${dut2-vhost-${number}-if1} | 1.1.1.2 | 30
| | | VPP Interface Set IP Address
| | | ... | ${dut2} | ${dut2-vhost-${number}-if2} | 1.1.2.2 | 30
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 20.0.0.0 | 8 | gateway=1.1.1.1
| | | ... | interface=${dut1-vhost-${number}-if1} | vrf=${fib_table_1}
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut1} | 10.0.0.0 | 8 | gateway=1.1.2.1
| | | ... | interface=${dut1-vhost-${number}-if2} | vrf=${fib_table_2}
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut2} | 20.0.0.0 | 8 | gateway=1.1.1.1
| | | ... | interface=${dut2-vhost-${number}-if1} | vrf=${fib_table_1}
-| | | Run Keyword Unless | ${testpmd_mac}
+| | | Run Keyword If | not ${testpmd_mac}
| | | ... | Vpp Route Add | ${dut2} | 10.0.0.0 | 8 | gateway=1.1.2.1
| | | ... | interface=${dut2-vhost-${number}-if2} | vrf=${fib_table_2}
| | | Run Keyword If | ${testpmd_mac}
diff --git a/resources/libraries/robot/ip/ip6.robot b/resources/libraries/robot/ip/ip6.robot
index edb264190c..506e5d844a 100644
--- a/resources/libraries/robot/ip/ip6.robot
+++ b/resources/libraries/robot/ip/ip6.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -84,17 +84,17 @@
| | ... | Vpp Route Add | ${dut2} | 2001:1::0 | 64 | gateway=2001:3::1
| | ... | interface=${DUT2_${int}1}[0]
| |
-| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host1_ip}' != '${NONE}'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128
| | ... | gateway=2001:1::2 | interface=${DUT1_${int}1}[0]
-| | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host2_ip}' != '${NONE}'
| | ... | Vpp Route Add | ${dut} | ${remote_host2_ip} | 128
| | ... | gateway=2001:2::2 | interface=${dut_if2}
-| | Run Keyword Unless | '${remote_host1_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host1_ip}' != '${NONE}'
| | ... | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut1} | ${remote_host1_ip} | 128
| | ... | gateway=2001:3::2 | interface=${DUT1_${int}2}[0]
-| | Run Keyword Unless | '${remote_host2_ip}' == '${NONE}'
+| | Run Keyword If | '${remote_host2_ip}' != '${NONE}'
| | ... | Run Keyword If | '${dut2_status}' == 'PASS'
| | ... | Vpp Route Add | ${dut2} | ${remote_host2_ip} | 128
| | ... | gateway=2001:3::1 | interface=${DUT2_${int}1}[0]
diff --git a/resources/libraries/robot/ip/nat.robot b/resources/libraries/robot/ip/nat.robot
index c33c875389..c04aef0f69 100644
--- a/resources/libraries/robot/ip/nat.robot
+++ b/resources/libraries/robot/ip/nat.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -52,7 +52,8 @@
| |
| | ${max_sessions}= | Compute Max Translations Per Thread
| | ... | ${n_sessions} | ${dp_count_int}
-| | Enable NAT44 Plugin | ${dut1} | mode=${nat_mode} | sessions=${max_sessions}
+| | Enable NAT44 ED Plugin | ${dut1} | mode=${nat_mode}
+| | ... | sessions=${max_sessions}
| | Configure inside and outside interfaces
| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${DUT1_${int}2}[0]
| | ${resetter} = | Set NAT44 Address Range
diff --git a/resources/libraries/robot/l2/l2_bridge_domain.robot b/resources/libraries/robot/l2/l2_bridge_domain.robot
index f54d1685c4..00044e1253 100644
--- a/resources/libraries/robot/l2/l2_bridge_domain.robot
+++ b/resources/libraries/robot/l2/l2_bridge_domain.robot
@@ -1,5 +1,5 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Copyright (c) 2021 PANTHEON.tech and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Copyright (c) 2023 PANTHEON.tech and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -491,18 +491,14 @@
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface
| | ... | ${dut1} | ${bond_mode} | ${lb_mode}
-| | Set Interface State | ${dut1} | ${dut1_eth_bond_if1} | up
-| | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1}
| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
| | | ${_even}= | Evaluate | ${pf} % 2
-| | | Run Keyword Unless | ${even}
+| | | Run Keyword If | not ${even}
| | | ... | VPP Add Bond Member
| | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1}
| | END
| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface
| | ... | ${dut2} | ${bond_mode} | ${lb_mode}
-| | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up
-| | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1}
| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
| | | ${_even}= | Evaluate | ${pf} % 2
| | | Run Keyword If | ${even}
diff --git a/resources/libraries/robot/l2/l2_xconnect.robot b/resources/libraries/robot/l2/l2_xconnect.robot
index 59199b6c90..b782602827 100644
--- a/resources/libraries/robot/l2/l2_xconnect.robot
+++ b/resources/libraries/robot/l2/l2_xconnect.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -243,18 +243,14 @@
| | Set interfaces in path up
| | ${dut1_eth_bond_if1}= | VPP Create Bond Interface
| | ... | ${dut1} | ${bond_mode} | ${lb_mode}
-| | Set Interface State | ${dut1} | ${dut1_eth_bond_if1} | up
-| | VPP Set interface MTU | ${dut1} | ${dut1_eth_bond_if1}
| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
| | | ${_even}= | Evaluate | ${pf} % 2
-| | | Run Keyword Unless | ${even}
+| | | Run Keyword If | not ${even}
| | | ... | VPP Add Bond Member
| | | ... | ${dut1} | ${DUT1_${int}${pf}}[0] | ${dut1_eth_bond_if1}
| | END
| | ${dut2_eth_bond_if1}= | VPP Create Bond Interface
| | ... | ${dut2} | ${bond_mode} | ${lb_mode}
-| | Set Interface State | ${dut2} | ${dut2_eth_bond_if1} | up
-| | VPP Set interface MTU | ${dut2} | ${dut2_eth_bond_if1}
| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
| | | ${_even}= | Evaluate | ${pf} % 2
| | | Run Keyword If | ${even}
diff --git a/resources/libraries/robot/l2/tagging.robot b/resources/libraries/robot/l2/tagging.robot
index dd4642c505..843b25d958 100644
--- a/resources/libraries/robot/l2/tagging.robot
+++ b/resources/libraries/robot/l2/tagging.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -82,24 +82,24 @@
| | ... | \| ${dut1_if2} \| 10 \|
| |
| | Set Interface State | ${DUT1} | ${INT1} | up
-| | Run Keyword Unless | ${DUT2} == ${None}
+| | Run Keyword If | ${DUT2} != ${None}
| | ... | Set Interface State | ${DUT2} | ${INT2} | up
| | ${INT1_NAME}= | Get interface name | ${DUT1} | ${INT1}
-| | ${INT2_NAME}= | Run Keyword Unless | ${DUT2} == ${None}
+| | ${INT2_NAME}= | Run Keyword If | ${DUT2} != ${None}
| | ... | Get interface name | ${DUT2} | ${INT2}
| | ${subif_name_1} | ${subif_index_1}= | Create Vlan Subinterface
| | ... | ${DUT1} | ${INT1_NAME} | ${SUB_ID}
| | ${subif_name_2} | ${subif_index_2}=
-| | ... | Run Keyword Unless | ${DUT2} == ${None}
+| | ... | Run Keyword If | ${DUT2} != ${None}
| | ... | Create Vlan Subinterface | ${DUT2} | ${INT2_NAME} | ${SUB_ID}
| | Set Interface State | ${DUT1} | ${subif_index_1} | up
-| | Run Keyword Unless | ${DUT2} == ${None}
+| | Run Keyword If | ${DUT2} != ${None}
| | ... | Set Interface State | ${DUT2} | ${subif_index_2} | up
| | Set Test Variable | ${subif_name_1}
| | Set Test Variable | ${subif_index_1}
-| | Run Keyword Unless | ${DUT2} == ${None}
+| | Run Keyword If | ${DUT2} != ${None}
| | ... | Set Test Variable | ${subif_name_2}
-| | Run Keyword Unless | ${DUT2} == ${None}
+| | Run Keyword If | ${DUT2} != ${None}
| | ... | Set Test Variable | ${subif_index_2}
| Configure L2 tag rewrite method on interfaces
@@ -115,7 +115,7 @@
| | ... | - TAG_REWRITE_METHOD - Method of tag rewrite.
| |
| | L2 Vlan tag rewrite | ${DUT1} | ${SUB_INT1} | ${TAG_REWRITE_METHOD}
-| | Run Keyword Unless | ${DUT2} == ${None}
+| | Run Keyword If | ${DUT2} != ${None}
| | ... | L2 Vlan tag rewrite | ${DUT2} | ${SUB_INT2} | ${TAG_REWRITE_METHOD}
| Configure L2 tag rewrite method on interface
diff --git a/resources/libraries/robot/overlay/gtpu.robot b/resources/libraries/robot/overlay/gtpu.robot
index 3135be73fd..be82ca0fd5 100644
--- a/resources/libraries/robot/overlay/gtpu.robot
+++ b/resources/libraries/robot/overlay/gtpu.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2022 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -23,7 +23,13 @@
| | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
| | ... | topology. Create GTPU tunnel on both DUT nodes, setup IPv4 adresses
| | ... | with /30 prefix on DUT1-DUT2 link, and set routing on both DUT nodes
-| | ... | with prefix /24 and next hop of neighbour DUT interface.
+| | ... | with prefix /24 and next hop of neighbour DUT interface. Gtpu offload
+| | ... | rx will be enabled on both DUT nodes if offload is set to true.
+| |
+| | ... | *Arguments:*
+| | ... | - offload - False or True. Type: bool
+| |
+| | [Arguments] | ${offload}=${False}
| |
| | VPP Interface Set IP Address | ${dut1} | ${DUT1_${int}1}[0]
| | ... | 10.10.10.1 | 24
@@ -60,3 +66,10 @@
| | ... | interface=${dut1_tunnel_if_index}
| | Vpp Route Add | ${dut2} | 10.10.10.0 | 24 | gateway=1.1.1.1
| | ... | interface=${dut2_tunnel_if_index}
+| |
+| | Run keyword if | ${offload} == ${True}
+| | ... | Vpp Enable GTPU Offload rx
+| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut1_tunnel_if_index}
+| | Run keyword if | ${offload} == ${True}
+| | ... | Vpp Enable GTPU Offload rx
+| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut2_tunnel_if_index}
diff --git a/resources/libraries/robot/overlay/lisp.robot b/resources/libraries/robot/overlay/lisp.robot
index c759aafda4..820a232338 100644
--- a/resources/libraries/robot/overlay/lisp.robot
+++ b/resources/libraries/robot/overlay/lisp.robot
@@ -339,13 +339,13 @@
| | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}1}[0] | 2001:1::2 | ${TG_pf1_mac}[0]
| | VPP Add IP Neighbor
-| | ... | ${dut2} | ${DUT2_${int}1}[0] | 2001:2::2 | ${TG_pf2_mac}[0]
-| | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_dut1_address}
| | ... | ${DUT2_${int}1_mac}[0]
| | VPP Add IP Neighbor
| | ... | ${dut2} | ${DUT2_${int}1}[0] | ${dut1_dut2_address}
| | ... | ${DUT1_${int}2_mac}[0]
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${DUT2_${int}2}[0] | 2001:2::2 | ${TG_pf2_mac}[0]
| Initialize LISP IPv4 over IPv6 forwarding in 3-node circular topology
| | [Documentation] | Custom setup of IPv4 over IPv6 topology on all DUT nodes \
diff --git a/resources/libraries/robot/overlay/srv6.robot b/resources/libraries/robot/overlay/srv6.robot
index 9462a71189..83ec8949a4 100644
--- a/resources/libraries/robot/overlay/srv6.robot
+++ b/resources/libraries/robot/overlay/srv6.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -263,7 +263,7 @@
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6}
| | ... | ${DUT2_${int}1_mac}[0]
-| | Run Keyword Unless | ${dut2_status}
+| | Run Keyword If | not ${dut2_status}
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6} | ${TG_pf2_mac}[0]
| | Run Keyword If | ${dut2_status}
@@ -367,16 +367,10 @@
| | Set up memif interfaces on DUT node | ${dut1} | ${sock1} | ${sock1}
| | ... | ${1} | dut1-memif-1-if1 | dut1-memif-1-if2 | ${rxq_count_int}
| | ... | ${rxq_count_int}
-| | VPP Set interface MTU | ${dut1} | ${dut1-memif-1-if1}
-| | VPP Set interface MTU | ${dut1} | ${dut1-memif-1-if2}
| | Run Keyword If | ${dut2_status}
| | ... | Set up memif interfaces on DUT node | ${dut2} | ${sock2} | ${sock2}
| | ... | ${1} | dut2-memif-1-if1 | dut2-memif-1-if2 | ${rxq_count_int}
| | ... | ${rxq_count_int}
-| | Run Keyword If | ${dut2_status}
-| | ... | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if1}
-| | Run Keyword If | ${dut2_status}
-| | ... | VPP Set interface MTU | ${dut2} | ${dut2-memif-1-if2}
| | FOR | ${dut} | IN | @{duts}
| | | Show Memif | ${nodes['${dut}']}
| | END
@@ -405,7 +399,7 @@
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6}
| | ... | ${DUT2_${int}1_mac}[0]
-| | Run Keyword Unless | ${dut2_status}
+| | Run Keyword If | not ${dut2_status}
| | ... | VPP Add IP Neighbor
| | ... | ${dut1} | ${DUT1_${int}2}[0] | ${dut2_if1_ip6} | ${TG_pf2_mac}[0]
| | Run Keyword If | ${dut2_status}
diff --git a/resources/libraries/robot/performance/performance_actions.robot b/resources/libraries/robot/performance/performance_actions.robot
index bb6881ef7b..1d2ea52274 100644
--- a/resources/libraries/robot/performance/performance_actions.robot
+++ b/resources/libraries/robot/performance/performance_actions.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -26,6 +26,41 @@
| | Run Keyword If | ${extended_debug}==${True}
| | ... | Perf Stat On All DUTs | ${nodes} | cpu_list=${cpu_alloc_str}
+| Additional Statistics Action For trex-runtime
+| | [Documentation]
+| | ... | Additional Statistics Action for T-Rex telemetry counters with
+| | ... | running traffic.
+| |
+| | ... | See documentation of the called keyword for required test variables.
+| |
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${ramp_up_duration} = | Get Ramp Up Duration
+| | ${ramp_up_rate} = | Get Ramp Up Rate
+| | ${runtime_duration} = | Get Runtime Duration
+| | ${runtime_rate} = | Get Runtime Rate
+| | ${traffic_directions} = | Get Traffic Directions
+| | ${transaction_duration} = | Get Transaction Duration
+| | ${transaction_scale} = | Get Transaction Scale
+| | ${transaction_type} = | Get Transaction Type
+| | ${use_latency} = | Get Use Latency
+| | Send traffic on tg
+| | ... | duration=${-1}
+| | ... | rate=${runtime_rate}
+| | ... | frame_size=${frame_size}
+| | ... | traffic_profile=${traffic_profile}
+| | ... | async_call=${True}
+| | ... | ppta=${ppta}
+| | ... | use_latency=${use_latency}
+| | ... | traffic_directions=${traffic_directions}
+| | ... | transaction_duration=${transaction_duration}
+| | ... | transaction_scale=${transaction_scale}
+| | ... | transaction_type=${transaction_type}
+| | ... | duration_limit=${0.0}
+| | ... | ramp_up_duration=${ramp_up_duration}
+| | ... | ramp_up_rate=${ramp_up_rate}
+| | Sleep | 1s
+| | Stop traffic on tg
+
| Additional Statistics Action For vpp-runtime
| | [Documentation]
| | ... | Additional Statistics Action for clear and show runtime counters with
@@ -59,7 +94,82 @@
| | ... | ramp_up_duration=${ramp_up_duration}
| | ... | ramp_up_rate=${ramp_up_rate}
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vpp_runtime.yaml
+| | ... | ${nodes} | profile=vppctl_runtime.yaml
+| | ... | rate=${telemetry_rate} | export=${telemetry_export}
+| | Stop traffic on tg
+
+| Additional Statistics Action For bpf-runtime
+| | [Documentation]
+| | ... | Additional Statistics Action for linux bundle counters with
+| | ... | running traffic.
+| |
+| | ... | See documentation of the called keyword for required test variables.
+| |
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${ramp_up_duration} = | Get Ramp Up Duration
+| | ${ramp_up_rate} = | Get Ramp Up Rate
+| | ${runtime_duration} = | Get Runtime Duration
+| | ${runtime_rate} = | Get Runtime Rate
+| | ${traffic_directions} = | Get Traffic Directions
+| | ${transaction_duration} = | Get Transaction Duration
+| | ${transaction_scale} = | Get Transaction Scale
+| | ${transaction_type} = | Get Transaction Type
+| | ${use_latency} = | Get Use Latency
+| | Send traffic on tg
+| | ... | duration=${-1}
+| | ... | rate=${runtime_rate}
+| | ... | frame_size=${frame_size}
+| | ... | traffic_profile=${traffic_profile}
+| | ... | async_call=${True}
+| | ... | ppta=${ppta}
+| | ... | use_latency=${use_latency}
+| | ... | traffic_directions=${traffic_directions}
+| | ... | transaction_duration=${transaction_duration}
+| | ... | transaction_scale=${transaction_scale}
+| | ... | transaction_type=${transaction_type}
+| | ... | duration_limit=${0.0}
+| | ... | ramp_up_duration=${ramp_up_duration}
+| | ... | ramp_up_rate=${ramp_up_rate}
+| | Run Telemetry On All DUTs
+| | ... | ${nodes} | profile=bpf_runtime.yaml
+| | ... | rate=${telemetry_rate} | export=${False}
+| | Stop traffic on tg
+
+| Additional Statistics Action For perf-stat-runtime
+| | [Documentation]
+| | ... | Additional Statistics Action for linux bundle counters with
+| | ... | running traffic.
+| |
+| | ... | See documentation of the called keyword for required test variables.
+| |
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${ramp_up_duration} = | Get Ramp Up Duration
+| | ${ramp_up_rate} = | Get Ramp Up Rate
+| | ${runtime_duration} = | Get Runtime Duration
+| | ${runtime_rate} = | Get Runtime Rate
+| | ${traffic_directions} = | Get Traffic Directions
+| | ${transaction_duration} = | Get Transaction Duration
+| | ${transaction_scale} = | Get Transaction Scale
+| | ${transaction_type} = | Get Transaction Type
+| | ${use_latency} = | Get Use Latency
+| | Send traffic on tg
+| | ... | duration=${-1}
+| | ... | rate=${runtime_rate}
+| | ... | frame_size=${frame_size}
+| | ... | traffic_profile=${traffic_profile}
+| | ... | async_call=${True}
+| | ... | ppta=${ppta}
+| | ... | use_latency=${use_latency}
+| | ... | traffic_directions=${traffic_directions}
+| | ... | transaction_duration=${transaction_duration}
+| | ... | transaction_scale=${transaction_scale}
+| | ... | transaction_type=${transaction_type}
+| | ... | duration_limit=${0.0}
+| | ... | ramp_up_duration=${ramp_up_duration}
+| | ... | ramp_up_rate=${ramp_up_rate}
+| | Run Telemetry On All DUTs
+| | ... | ${nodes} | profile=perf_stat_runtime.yaml
+| | ... | rate=${telemetry_rate} | export=${False}
| | Stop traffic on tg
| Additional Statistics Action For vpp-runtime-iperf3
@@ -84,7 +194,8 @@
| | | ... | bind=${iperf_client_bind}
| | | ... | affinity=${iperf_client_affinity}
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vpp_runtime.yaml
+| | ... | ${nodes} | profile=vppctl_runtime.yaml
+| | ... | rate=${telemetry_rate} | export=${telemetry_export}
| | iPerf Client Stop Remote Exec | ${nodes['${iperf_client_node}']} | ${pids}
| Additional Statistics Action For noop
@@ -98,7 +209,8 @@
| | ... | Additional Statistics Action for clear VPP statistics.
| |
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vpp_clear_stats.yaml
+| | ... | ${nodes} | profile=vppctl_clear_stats.yaml
+| | ... | export=${False}
| Additional Statistics Action For vpp-enable-packettrace
| | [Documentation]
@@ -119,4 +231,5 @@
| | ... | Additional Statistics Action for show VPP statistics.
| |
| | Run Telemetry On All DUTs
-| | ... | ${nodes} | profile=vpp_show_stats.yaml
+| | ... | ${nodes} | profile=vppctl_show_stats.yaml
+| | ... | export=${False}
diff --git a/resources/libraries/robot/performance/performance_display.robot b/resources/libraries/robot/performance/performance_display.robot
index de515412a5..6ee493a17e 100644
--- a/resources/libraries/robot/performance/performance_display.robot
+++ b/resources/libraries/robot/performance/performance_display.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,34 +17,30 @@
| ... | This includes checks to fail test.
*** Keywords ***
-| Check NDRPDR interval validity
+| Compute Bandwidth
| | [Documentation]
-| | ... | Extract loss ratio of lower bound of the interval.
-| | ... | Fail if it does not reach the allowed value.
-| |
+| | ... | Compute (bidir) bandwidth from given (unidir) transaction rate.
+| | ...
+| | ... | This keyword reads \${ppta} and \${avg_aggregated_frame_size} set
+| | ... | elsewhere. The implementation should work for both pps and cps rates.
+| | ... |
| | ... | *Arguments:*
-| | ... | - interval - Measured interval. Type: ReceiveRateInterval
-| | ... | - packet_loss_ratio - Accepted loss (0.0 for NDR). Type: float
+| | ... | - tps - Transaction rate (unidirectional) [tps]. Type: float
+| | ...
+| | ... | *Returns:*
+| | ... | - Computed bandwidth in Gbps.
+| | ... | - Computed aggregated packet rate in pps.
| |
| | ... | *Example:*
| |
-| | ... | \| Check NDRPDR interval validity \| \${result.pdr_interval} \
-| | ... | \| \${0.005} \|
-| |
-| | [Arguments] | ${interval} | ${packet_loss_ratio}=${0.0}
-| |
-| | ${lower_bound} = | Set Variable | ${interval.measured_low}
-| | ${lower_bound_lr} = | Set Variable | ${lower_bound.loss_ratio}
-| | Return From Keyword If | ${lower_bound_lr} <= ${packet_loss_ratio}
-| | Set Test Variable | \${rate_for_teardown} | ${lower_bound.target_tr}
-| | ${message}= | Catenate | SEPARATOR=${SPACE}
-| | ... | Minimal rate loss ratio ${lower_bound_lr}
-| | ... | does not reach target ${packet_loss_ratio}.
-| | ${message_zero} = | Set Variable | Zero packets forwarded!
-| | ${message_other} = | Set Variable | ${lower_bound.loss_count} packets lost.
-| | ${message} = | Set Variable If | ${lower_bound_lr} >= 1.0
-| | ... | ${message}${\n}${message_zero} | ${message}${\n}${message_other}
-| | Fail | ${message}
+| | ... | |\ \${bandwidth} \| \${pps} = \| Compute Bandwidth \| \${12345.67} \|
+| |
+| | [Arguments] | ${tps}
+| |
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${pps} = | Evaluate | ${tps} * ${ppta}
+| | ${bandwidth} = | Evaluate | ${pps} * (${avg_aggregated_frame_size}+20)*8/1e9
+| | Return From Keyword | ${bandwidth} | ${pps}
| Display Reconfig Test Message
| | [Documentation]
@@ -52,8 +48,8 @@
| | ... | due to reconfiguration under traffic.
| |
| | ... | *Arguments:*
-| | ... | - result - Result of bidirectional measurement.
-| | ... | Type: ReceiveRateMeasurement
+| | ... | - result - Result of MLRsearch invocation for one search goal.
+| | ... | Type: StatInterval
| |
| | ... | *Example:*
| |
@@ -61,23 +57,20 @@
| |
| | [Arguments] | ${result}
| |
-| | ${ppta} = | Get Packets Per Transaction Aggregated
-| | ${packet_rate} = | Evaluate | ${result.target_tr} * ${ppta}
+| | ${bandwidth} | ${packet_rate}= | Compute Bandwidth | ${result.intended_load}
| | ${packet_loss} = | Set Variable | ${result.loss_count}
| | ${time_loss} = | Evaluate | ${packet_loss} / ${packet_rate}
| | Set Test Message | Packets lost due to reconfig: ${packet_loss}
| | Set Test Message | ${\n}Implied time lost: ${time_loss} | append=yes
+| | Export Reconf Result | ${packet_rate} | ${packet_loss} | ${bandwidth * 1e9}
| Display result of NDRPDR search
| | [Documentation]
-| | ... | Display result of NDR+PDR search, both quantities, both bounds,
-| | ... | aggregate in units given by trasaction type, e.g. by default
-| | ... | in packet per seconds and Gbps total bandwidth
+| | ... | Display result of NDR+PDR search, both quantities, aggregated,
+| | ... | conditional throughput only, in units given by trasaction type,
+| | ... | e.g. by default in packet per seconds and Gbps total bandwidth
| | ... | (for initial packet size).
-| | ... |
-| | ... | The bound to display is encoded as target rate, it is assumed
-| | ... | it is in transactions per second. Bidirectional traffic
-| | ... | transaction is understood as having 2 packets, for this purpose.
+| | ... | The lower bounds in the result are assumed to be valid.
| | ... |
| | ... | Througput is calculated as:
| | ... | Sum of measured rate over streams
@@ -90,8 +83,8 @@
| | ... | - transaction_type - String identifier to determine how to count
| | ... | transactions. Default is "packet".
| | ... | *Arguments:*
-| | ... | - result - Measured result data. Aggregate rate, tps or pps.
-| | ... | Type: NdrPdrResult
+| | ... | - result - Measured result data Tps. Type: List[TrimmedStat]
+| | ... | *Returns:* NDR and PDR: Unidirectional intended load as tps float.
| |
| | ... | *Example:*
| |
@@ -99,21 +92,18 @@
| |
| | [Arguments] | ${result}
| |
-| | Display single bound | NDR_LOWER
-| | ... | ${result[0].measured_low.target_tr}
-| | ... | ${result[0].measured_low.latency}
-| | Display single bound | NDR_UPPER
-| | ... | ${result[0].measured_high.target_tr}
-| | Display single bound | PDR_LOWER
-| | ... | ${result[1].measured_low.target_tr}
-| | ... | ${result[1].measured_low.latency}
-| | Display single bound | PDR_UPPER
-| | ... | ${result[1].measured_high.target_tr}
+| | ${ndr} = | Convert To Number | ${result[0].relevant_lower_bound}
+| | ${pdr} = | Convert To Number | ${result[1].relevant_lower_bound}
+| | Display single bound | NDR | ${result[0].conditional_throughput}
+| | Display single bound | PDR | ${result[1].conditional_throughput}
+| | Return From Keyword | ${ndr} | ${pdr}
| Display result of soak search
| | [Documentation]
| | ... | Display result of soak search, avg+-stdev, as upper/lower bounds.
| | ... | See Display single bound for units used.
+| | ... | The displayed values are bidirectional, based on conditional
+| | ... | throughput. The returned
| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
@@ -123,7 +113,6 @@
| | ... | *Arguments:*
| | ... | - avg - Estimated average critical load [pps]. Type: float
| | ... | - stdev - Standard deviation of critical load [pps]. Type: float
-| |
| | ... | *Returns:*
| | ... | - Lower and upper bound of critical load [pps]. Type: 2-tuple of float
| |
@@ -144,14 +133,14 @@
| Display single bound
| | [Documentation]
| | ... | Compute and display one bound of NDR+PDR (or soak) search result.
-| | ... | If the latency string is present, it is displayed as well.
| | ... |
| | ... | The bound to display is given as target transfer rate, it is assumed
-| | ... | it is in transactions per second. Bidirectional traffic
+| | ... | valid and in transactions per second. Bidirectional traffic
| | ... | transaction is understood as having 2 packets, for this purpose.
| | ... |
-| | ... | Pps values are aggregate in packet per seconds,
+| | ... | Pps values are aggregated, in packet per seconds
| | ... | and Gbps total bandwidth (for initial packet size).
+| | ... | If the latency string is present, it is displayed as well.
| | ... |
| | ... | Througput is calculated as:
| | ... | Sum of measured rate over streams
@@ -164,22 +153,24 @@
| | ... | transactions. Default is "packet".
| | ... | *Arguments:*
| | ... | - text - Flavor text describing which bound is this. Type: string
-| | ... | - tps - Transaction rate [tps]. Type: float
+| | ... | - tps - Conditional throughput [tps]. Type: Union[float, DiscreteLoad]
| | ... | - latency - Latency data to display if non-empty. Type: string
| |
| | ... | *Example:*
| |
-| | ... | \| Display single bound \| NDR lower bound \| \${12345.67} \
+| | ... | \| Display single bound \| NDR \| \${12345.67} \
| | ... | \| latency=\${EMPTY} \|
| |
| | [Arguments] | ${text} | ${tps} | ${latency}=${EMPTY}
| |
+| | ${tps} = | Convert To Number | ${tps}
| | ${transaction_type} = | Get Transaction Type
| | Run Keyword And Return If | """_cps""" in """${transaction_type}"""
-| | ... | Display single cps bound | ${text} | ${tps} | ${latency}
-| | Display single pps bound | ${text} | ${tps} | ${latency}
+| | ... | Display Single CPS Bound | ${text} | ${tps} | ${latency}
+| | Run Keyword And Return
+| | ... | Display Single PPS Bound | ${text} | ${tps} | ${latency}
-| Display single cps bound
+| Display Single CPS Bound
| | [Documentation]
| | ... | Display one bound of NDR+PDR search for CPS tests.
| | ... | The bounds are expressed as transactions per second.
@@ -192,20 +183,21 @@
| |
| | ... | *Example:*
| |
-| | ... | \| Display single cps bound \| NDR lower bound \| \${12345.67} \
+| | ... | \| Display Single CPS Bound \| NDR lower bound \| \${12345.67} \
| | ... | \| latency=\${EMPTY} \|
| |
| | [Arguments] | ${text} | ${tps} | ${latency}=${EMPTY}
| |
| | Set Test Message | ${\n}${text}: ${tps} CPS | append=yes
-| | Return From Keyword If | not """${latency}"""
-| | Set Test Message | ${\n}LATENCY [min/avg/max/hdrh] per stream: ${latency}
-| | ... | append=yes
+| | ${bandwidth} | ${pps} = | Compute Bandwidth | ${tps}
+| | Export Search Bound | ${text} | ${tps} | cps | ${bandwidth * 1e9}
+| | Run Keyword If | """${latency}""" | Set Test Message
+| | ... | ${\n}LATENCY [min/avg/max/hdrh] per stream: ${latency} | append=yes
-| Display single pps bound
+| Display Single PPS Bound
| | [Documentation]
-| | ... | Display one pps bound of NDR+PDR search,
-| | ... | aggregate in packet per seconds and Gbps total bandwidth
+| | ... | Display one pps bound of NDR+PDR search, aggregated,
+| | ... | in packet per seconds and Gbps total bandwidth
| | ... | (for initial packet size).
| | ... |
| | ... | The bound to display is given as target transfer rate, it is assumed
@@ -225,16 +217,14 @@
| |
| | ... | *Example:*
| |
-| | ... | \| Display single pps bound \| NDR lower bound \| \${12345.67} \
+| | ... | \| Display Single PPS Bound \| NDR lower bound \| \${12345.67} \
| | ... | \| latency=\${EMPTY} \|
| |
| | [Arguments] | ${text} | ${tps} | ${latency}=${EMPTY}
| |
-| | ${ppta} = | Get Packets Per Transaction Aggregated
-| | ${pps} = | Evaluate | ${tps} * ${ppta}
-| | ${bandwidth} = | Evaluate | ${pps} * (${avg_frame_size}+20)*8 / 1e9
+| | ${bandwidth} | ${pps} = | Compute Bandwidth | ${tps}
| | Set Test Message | ${\n}${text}: ${pps} pps, | append=yes
| | Set Test Message | ${bandwidth} Gbps (initial) | append=yes
-| | Return From Keyword If | not """${latency}"""
-| | Set Test Message | ${\n}LATENCY [min/avg/max/hdrh] per stream: ${latency}
-| | ... | append=yes
+| | Export Search Bound | ${text} | ${pps} | pps | ${bandwidth * 1e9}
+| | Run Keyword If | """${latency}""" | Set Test Message
+| | ... | ${\n}LATENCY [min/avg/max/hdrh] per stream: ${latency} | append=yes
diff --git a/resources/libraries/robot/performance/performance_utils.robot b/resources/libraries/robot/performance/performance_utils.robot
index 8de74c5707..4211486a19 100644
--- a/resources/libraries/robot/performance/performance_utils.robot
+++ b/resources/libraries/robot/performance/performance_utils.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,6 +13,7 @@
*** Settings ***
| Library | Collections
+| Library | resources.libraries.python.model.ExportResult
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.NodePath
| Library | resources.libraries.python.InterfaceUtil
@@ -45,7 +46,7 @@
| | ... | Display results as formatted test message.
| | ... | Fail if computed lower bound is 110% of the minimal rate or less.
| | ... | Input rates are unidirectional, in transaction per second.
-| | ... | Reported result may contain aggregate pps rates, depending on test.
+| | ... | Reported result may contain aggregated pps rates, depending on test.
| | ... | Call \${resetter} (if defined) to reset DUT state before each trial.
| |
| | ... | *Test (or broader scope) variables read:*
@@ -72,11 +73,28 @@
| | ${transaction_scale} = | Get Transaction Scale
| | ${transaction_type} = | Get Transaction Type
| | ${use_latency} = | Get Use Latency
+| | # TRex needs a warmup to avoid unsent packets at half-max rate.
+| | Send traffic on tg
+| | ... | duration=1.0
+| | ... | rate=${max_rate}
+| | ... | frame_size=${frame_size}
+| | ... | traffic_profile=${traffic_profile}
+| | ... | async_call=${False}
+| | ... | duration_limit=${1.0}
+| | ... | ppta=${ppta}
+| | ... | traffic_directions=${traffic_directions}
+| | ... | transaction_duration=${transaction_duration}
+| | ... | transaction_scale=${transaction_scale}
+| | ... | transaction_type=${transaction_type}
+| | ... | use_latency=False
+| | ... | ramp_up_duration=${0.0}
+| | ... | ramp_up_rate=${0.0}
+| | # Ready for main search.
| | ${average} | ${stdev} = | Perform soak search
| | ... | frame_size=${frame_size}
| | ... | traffic_profile=${traffic_profile}
-| | ... | minimum_transmit_rate=${min_rate_soft}
-| | ... | maximum_transmit_rate=${max_rate}
+| | ... | min_load=${min_rate_soft}
+| | ... | max_load=${max_rate}
| | ... | plr_target=${1e-7}
| | ... | tdpt=${0.1}
| | ... | initial_count=${50}
@@ -94,6 +112,15 @@
| | ${lower} | ${upper} = | Display result of soak search
| | ... | ${average} | ${stdev}
| | Set Test Variable | \${rate for teardown} | ${lower}
+| | # Stats at the discovered critical rate.
+| | Set Test Variable | ${telemetry_rate} | plr
+| | Set Test Variable | ${telemetry_export} | ${True}
+| | Send traffic at specified rate
+| | ... | rate=${lower}
+| | ... | trial_duration=${1.0}
+| | ... | trial_multiplicity=${1}
+| | ... | use_latency=${use_latency}
+| | ... | duration_limit=${1.0}
| | Should Not Be True | 1.1 * ${min_rate_soft} > ${lower}
| | ... | Lower bound ${lower} too small for unidir minimum ${min_rate_soft}.
@@ -104,7 +131,7 @@
| | ... | Display findings as a formatted test message.
| | ... | Fail if a resulting lower bound has too high loss ratio.
| | ... | Input rates are unidirectional, in transaction per second.
-| | ... | Reported result may contain aggregate pps rates, depending on test.
+| | ... | Reported result may contain aggregated pps rates, depending on test.
| | ... | Additional latency measurements are performed for smaller loads,
| | ... | even if latency stream is disabled in search. Their results
| | ... | are also displayed.
@@ -115,7 +142,7 @@
| | ... | - traffic_profile - Name of module defining traffc for measurements.
| | ... | Type: string
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
-| | ... | string
+| | ... | string.
| | ... | - max_rate - Calculated maximal unidirectional transmit rate [tps].
| | ... | Type: float
| | ... | - resetter - Callable to reset DUT state before each trial.
@@ -133,8 +160,7 @@
| | ${disable_latency} = | Get Disable Latency
| | ${max_rate} = | Get Max Rate
| | ${min_rate_soft} = | Get Min Rate Soft
-| | # \${packet_loss_ratio} is used twice so it is worth a variable.
-| | ${packet_loss_ratio} = | Get Packet Loss Ratio
+| | ${loss_ratio} = | Get Packet Loss Ratio
| | ${ppta} = | Get Packets Per Transaction Aggregated
| | ${ramp_up_duration} = | Get Ramp Up Duration
| | ${ramp_up_rate} = | Get Ramp Up Rate
@@ -144,17 +170,18 @@
| | ${transaction_scale} = | Get Transaction Scale
| | ${transaction_type} = | Get Transaction Type
| | ${use_latency} = | Get Use Latency
-| | ${result} = | Perform optimized ndrpdr search
+| | ${result} = | Perform MLR Search
| | ... | frame_size=${frame_size}
| | ... | traffic_profile=${traffic_profile}
-| | ... | minimum_transmit_rate=${min_rate_soft}
-| | ... | maximum_transmit_rate=${max_rate}
-| | ... | packet_loss_ratio=${packet_loss_ratio}
-| | ... | final_relative_width=${0.005}
-| | ... | final_trial_duration=${30.0}
+| | ... | min_load=${min_rate_soft}
+| | ... | max_load=${max_rate}
+| | ... | loss_ratio=${loss_ratio}
+| | ... | relative_width=${0.005}
| | ... | initial_trial_duration=${1.0}
-| | ... | number_of_intermediate_phases=${2}
-| | ... | timeout=${1200.0}
+| | ... | final_trial_duration=${1.0}
+| | ... | duration_sum=${21.0}
+| | ... | preceding_targets=${2}
+| | ... | search_duration_max=${1200.0}
| | ... | ppta=${ppta}
| | ... | resetter=${resetter}
| | ... | traffic_directions=${traffic_directions}
@@ -164,19 +191,18 @@
| | ... | use_latency=${use_latency}
| | ... | ramp_up_duration=${ramp_up_duration}
| | ... | ramp_up_rate=${ramp_up_rate}
-| | Display result of NDRPDR search | ${result}
-| | Check NDRPDR interval validity | ${result[1]}
-| | ... | ${packet_loss_ratio}
-| | Check NDRPDR interval validity | ${result[0]}
-| | ${pdr} = | Set Variable | ${result[1].measured_low.target_tr}
-| | ${ndr} = | Set Variable | ${result[0].measured_low.target_tr}
-| | # We expect NDR and PDR to have different-looking stats.
+| | ${ndr} | ${pdr} = | Display result of NDRPDR search | ${result}
+| | # We expect NDR and PDR to have different-looking telemetry.
+| | Set Test Variable | ${telemetry_rate} | pdr
+| | Set Test Variable | ${telemetry_export} | ${True}
| | Send traffic at specified rate
| | ... | rate=${pdr}
| | ... | trial_duration=${1.0}
| | ... | trial_multiplicity=${1}
| | ... | use_latency=${use_latency}
| | ... | duration_limit=${1.0}
+| | Set Test Variable | ${telemetry_rate} | ndr
+| | Set Test Variable | ${telemetry_export} | ${True}
| | Run Keyword If | ${ndr} != ${pdr}
| | ... | Send traffic at specified rate
| | ... | rate=${ndr}
@@ -231,17 +257,18 @@
| | ${transaction_scale} = | Get Transaction Scale
| | ${transaction_type} = | Get Transaction Type
| | ${use_latency} = | Get Use Latency
-| | ${result} = | Perform optimized ndrpdr search
+| | ${result} = | Perform MLR Search
| | ... | frame_size=${frame_size}
| | ... | traffic_profile=${traffic_profile}
-| | ... | minimum_transmit_rate=${min_rate_soft}
-| | ... | maximum_transmit_rate=${max_rate}
-| | ... | packet_loss_ratio=${0.0}
-| | ... | final_relative_width=${0.001}
-| | ... | final_trial_duration=${10.0}
+| | ... | min_load=${min_rate_soft}
+| | ... | max_load=${max_rate}
+| | ... | loss_ratio=${0.0}
+| | ... | relative_width=${0.001}
| | ... | initial_trial_duration=${1.0}
-| | ... | number_of_intermediate_phases=${1}
-| | ... | timeout=${1200}
+| | ... | final_trial_duration=${1.0}
+| | ... | duration_sum=${11.0}
+| | ... | preceding_targets=${1}
+| | ... | search_duration_max=${1200}
| | ... | ppta=${ppta}
| | ... | resetter=${resetter}
| | ... | traffic_directions=${traffic_directions}
@@ -251,8 +278,8 @@
| | ... | use_latency=${use_latency}
| | ... | ramp_up_duration=${ramp_up_duration}
| | ... | ramp_up_rate=${ramp_up_rate}
-| | Check NDRPDR interval validity | ${result[0]}
-| | Return From Keyword | ${result[0].measured_low.target_tr}
+| | ${ret} = | Convert To Number | ${result[0].relevant_lower_bound}
+| | Return From Keyword | ${ret}
| Measure and show latency at specified rate
| | [Documentation]
@@ -301,6 +328,7 @@
| | ... | ramp_up_rate=${ramp_up_rate}
| | ${latency} = | Get Latency Int
| | Set Test Message | ${\n}${message_prefix} ${latency} | append=${True}
+| | Export Ndrpdr Latency | ${message_prefix} | ${latency}
| Send ramp-up traffic
| | [Documentation]
@@ -328,7 +356,7 @@
| | ... | \| Send ramp-up traffic \|
| |
| | ${ramp_up_rate} = | Get Ramp Up Rate
-| | Run Keyword Unless | ${ramp_up_rate} > 0.0 | Fail | Ramp up rate missing!
+| | Run Keyword If | ${ramp_up_rate} <= 0.0 | Fail | Ramp up rate missing!
| | ${ramp_up_duration} = | Get Ramp Up Duration
| | ${ppta} = | Get Packets Per Transaction Aggregated
| | ${traffic_directions} = | Get Traffic Directions
@@ -371,14 +399,17 @@
| | ... | Type: boolean
| | ... | - duration_limit - Hard limit for trial duration, overriding duration
| | ... | computed from transaction_scale. Default 0.0 means no limit.
+| | ... | - export_mrr_unit - Use this unit when exporting MRR values,
+| | ... | or empty string for no export.
| |
| | ... | *Example:*
| |
| | ... | \| Send traffic at specified rate \| \${1.0} \| ${4000000.0} \
-| | ... | \| \${10} \| ${False} \| ${1.0} \|
+| | ... | \| \${10} \| ${False} \| ${1.0} \| pps \|
| |
| | [Arguments] | ${trial_duration} | ${rate} | ${trial_multiplicity}
| | ... | ${use_latency}=${False} | ${duration_limit}=${0.0}
+| | ... | ${export_mrr_unit}=${Empty}
| |
| | ${ppta} = | Get Packets Per Transaction Aggregated
| | ${ramp_up_duration} = | Get Ramp Up Duration
@@ -415,7 +446,11 @@
| | | ... | ramp_up_rate=${ramp_up_rate}
| | | # Out of several quantities for aborted traffic (duration stretching),
| | | # the approximated receive rate is the best estimate we have.
-| | | Append To List | ${results} | ${result.approximated_receive_rate}
+| | | ${value} = | Set Variable | ${result.forwarding_count}
+| | | ${value} = | Evaluate | ${value} / ${result.offered_duration}
+| | | ${bandwidth} | ${pps} = | Compute Bandwidth | ${value} / ${ppta}
+| | | Append Mrr Value | ${value} | ${export_mrr_unit} | ${bandwidth * 1e9}
+| | | Append To List | ${results} | ${value}
| | END
| | FOR | ${action} | IN | @{stat_post_trial}
| | | Run Keyword | Additional Statistics Action For ${action}
@@ -443,9 +478,12 @@
| | ... | ${trial_multiplicity}=${trial_multiplicity}
| | ... | ${traffic_directions}=${1}
| |
+| | Set Test Variable | ${telemetry_rate} | mrr
+| | Set Test Variable | ${telemetry_export} | ${True}
| | ${results}= | Send iPerf3 traffic at specified rate
| | ... | ${trial_duration} | ${None} | ${None}
| | ... | ${trial_multiplicity} | ${traffic_directions}
+| | ... | export_mrr_unit=bps
| | Set Test Message | ${\n}iPerf3 trial results
| | Set Test Message | in Gbits per second: ${results}
| | ... | append=yes
@@ -460,7 +498,7 @@
| | ... | *Arguments:*
| | ... | - trial_duration - Duration of single trial [s].
| | ... | Type: float
-| | ... | - rate - Target aggregate transmit rate [bps] / Bits per second
+| | ... | - rate - Target aggregated transmit rate [bps] / Bits per second.
| | ... | Type: float
| | ... | - frame_size - L2 Frame Size [B].
| | ... | Type: integer or string
@@ -470,6 +508,9 @@
| | ... | Type: integer
| | ... | - extended_debug - True to enable extended debug.
| | ... | Type: boolean
+| | ... | - export_mrr_unit - Use this unit when exporting MRR values,
+| | ... | or empty string for no export.
+| | ... | Type: string
| |
| | ... | *Example:*
| |
@@ -479,6 +520,7 @@
| | [Arguments] | ${trial_duration} | ${rate} | ${frame_size}
| | ... | ${trial_multiplicity}=${trial_multiplicity}
| | ... | ${traffic_directions}=${1} | ${extended_debug}=${extended_debug}
+| | ... | ${export_mrr_unit}=${Empty}
| |
| | Set Test Variable | ${extended_debug}
| | Set Test Variable | ${rate}
@@ -501,14 +543,14 @@
| | ... | bind_mask=${iperf_server_bind_mask}
| | ... | namespace=${iperf_server_namespace}
| | ... | cpu_skip_cnt=${cpu_skip_cnt}
-| | Run Keyword If | '${iperf_client_namespace}' is not '${None}'
+| | Run Keyword If | '${iperf_client_namespace}' != '${None}'
| | ... | Set Linux Interface IP
| | ... | ${nodes['${iperf_client_node}']}
| | ... | interface=${iperf_client_interface}
| | ... | ip_addr=${iperf_client_bind}
| | ... | prefix=${iperf_client_bind_mask}
| | ... | namespace=${iperf_client_namespace}
-| | Run Keyword If | '${iperf_client_namespace}' is not '${None}'
+| | Run Keyword If | '${iperf_client_namespace}' != '${None}'
| | ... | Add Default Route To Namespace
| | ... | ${nodes['${iperf_client_node}']}
| | ... | namespace=${iperf_client_namespace}
@@ -539,6 +581,7 @@
| | | ... | bind=${iperf_client_bind}
| | | ... | affinity=${iperf_client_affinity}
| | | ${conv} = | Convert To Number | ${rr['sum_received']['bits_per_second']}
+| | | Append Mrr Value | ${conv} | ${export_mrr_unit}
| | | ${conv} = | Evaluate | ${conv} / ${1000} / ${1000} / ${1000}
| | | ${conv} = | Evaluate | "{:.3f}".format(${conv})
| | | Append To List
@@ -595,7 +638,6 @@
| | ... | transaction_scale=${transaction_scale}
| | ... | transaction_type=${transaction_type}
| | ... | use_latency=${use_latency}
-| | # TODO: Ramp-up?
| Stop Running Traffic
| | [Documentation]
@@ -632,21 +674,25 @@
| |
| | ... | \| Traffic should pass with maximum rate \|
| |
+| | Set Test Variable | ${telemetry_rate} | mrr
+| | Set Test Variable | ${telemetry_export} | ${True}
| | ${max_rate} = | Get Max Rate
| | ${transaction_type} = | Get Transaction Type
| | ${trial_duration} = | Get Mrr Trial Duration
| | ${trial_multiplicity} = | Get Mrr Trial Multiplicity
| | ${use_latency} = | Get Use Latency
-| | # The following also sets \${rate_for_teardown}
+| | ${unit} = | Set Variable If | """_cps""" in """${transaction_type}"""
+| | ... | cps | pps
| | ${results} = | Send traffic at specified rate
| | ... | rate=${max_rate}
| | ... | trial_duration=${trial_duration}
| | ... | trial_multiplicity=${trial_multiplicity}
| | ... | use_latency=${use_latency}
| | ... | duration_limit=${0.0}
-| | ${unit} = | Set Variable If | """_cps""" in """${transaction_type}"""
+| | ... | export_mrr_unit=${unit}
+| | ${unit_text} = | Set Variable If | """_cps""" in """${transaction_type}"""
| | ... | estimated connections per second | packets per second
| | Set Test Message | ${\n}Maximum Receive Rate trial results
-| | Set Test Message | in ${unit}: ${results}
+| | Set Test Message | in ${unit_text}: ${results}
| | ... | append=yes
| | Fail if no traffic forwarded
diff --git a/resources/libraries/robot/performance/performance_vars.robot b/resources/libraries/robot/performance/performance_vars.robot
index 4f2cc50fa3..a0fa277e4c 100644
--- a/resources/libraries/robot/performance/performance_vars.robot
+++ b/resources/libraries/robot/performance/performance_vars.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -155,11 +155,11 @@
| Get Packets Per Transaction Aggregated
| | [Documentation]
| | ... | Return value of \${packets_per_transaction_aggregated};
-| | ... | if not defined, assume traffic is symmetric and compute
-| | ... | from unidirectional values.
+| | ... | if not defined, assume traffic is symmetric (or unidirectional)
+| | ... | and compute from unidirectional values.
| |
-| | ... | The return value is used when reporting PPS values from TPS found
-| | ... | by some search (e.g. NDRPDR).
+| | ... | The return value is used when reporting PPS (and bandwidth) values
+| | ... | from TPS found by some search (e.g. NDRPDR).
| | ... | Return type: integer.
| |
| | ... | *Example:*
@@ -169,7 +169,6 @@
| | ${ppta} = | Get Variable Value | \${packets_per_transaction_aggregated}
| | ... | ${0}
| | Return From Keyword If | "${ppta}" != "0" | ${ppta}
-| | # TODO: Insert TCP computation from packet size here.
| | ${pptad} = | Get Packets Per Transaction And Direction
| | ${traffic_directions} = | Get Traffic Directions
| | # We do not support ASTF profiles with multiple transactions, yet.
@@ -181,8 +180,9 @@
| | ... | Return value of \${packets_per_transaction_and_direction},
| | ... | or ${1} if not defined.
| |
-| | ... | The return value is used when computing max rate (TPS),
-| | ... | so for asymmetric transaction use the more numerous direction.
+| | ... | The return value is used when computing max rate (TPS)
+| | ... | from packet level (pps or bps) limits.
+| | ... | For asymmetric transactions, use the more numerous direction.
| | ... | Return type: integer.
| |
| | ... | *Example:*
@@ -392,54 +392,44 @@
| Set Jumbo
| | [Documentation]
-| | ... | For jumbo frames detection, the maximal packet size is relevant,
-| | ... | encapsulation overhead (if any) has effect.
-| |
-| | ... | This keyword computes jumbo boolean (some suites need that for
-| | ... | configuration decisions).
+| | ... | Call Set Numeric Frame Sizes and set jumbo based on max framesize.
| | ... | To streamline suite autogeneration, both input and output values
| | ... | are communicated as test (or broader scope) variables,
| | ... | instead of explicit arguments and return values.
| |
| | ... | *Test (or broader scope) variables read:*
| | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
-| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
-| | ... | string
+| | ... | - frame_size - Framesize. Type: integer or string
| |
| | ... | *Test variables set:*
| | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
| | ... | enabled. Type: boolean
+| | ... | - recommended_mtu - Resonable value (with space for encap overhead)
+| | ... | according to jumbo. Type: int
| |
| | ... | *Example:*
| |
| | ... | \| Set Jumbo \|
| |
-| | # Already called by Set Max Rate And Jumbo, but some suites (e.g. device)
-| | # are calling this directly.
+| | # Some suites (e.g. device) are not calling Set Max Rate And Jumbo.
| | Set Numeric Frame Sizes
-| | ${jumbo} = | Set Variable If | ${max_frame_size} < 1522
-| | ... | ${False} | ${True}
+| | ${jumbo} = | Evaluate | ${max_frame_size} >= 1522
| | Set Test Variable | \${jumbo}
+| | ${recommended_mtu} = | Set Variable If | ${jumbo} | ${9200} | ${1800}
+| | Set Test Variable | \${recommended_mtu}
| Set Max Rate And Jumbo
| | [Documentation]
-| | ... | Input framesize can be either integer in case of a single packet
-| | ... | in stream, or IMIX string defining mix of packets.
-| | ... | For jumbo frames detection, the maximal packet size is relevant.
-| | ... | For maximal transmit rate, the average packet size is relevant.
-| | ... | In both cases, encapsulation overhead (if any) has effect.
-| | ... | The maximal rate is computed from NIC name.
-| | ... | The implementation works by mapping from exact
-| | ... | whitelisted NIC names.
-| | ... | The mapping is hardcoded in nic_limits.yaml
-| | ... | TODO: Make the mapping from NIC names case insensistive.
-| |
-| | ... | This keyword computes maximal unidirectional transmit rate
-| | ... | and jumbo boolean (some suites need that for configuration decisions).
+| | ... | This keyword computes maximal unidirectional transmit rate,
+| | ... | jumbo boolean (some suites need that for configuration decisions),
+| | ... | and recommended MTU value (depends on jumbo).
| | ... | To streamline suite autogeneration, both input and output values
| | ... | are communicated as test (or broader scope) variables,
| | ... | instead of explicit arguments and return values.
| |
+| | ... | For correctly applying bandwidth limit, average frame size is used,
+| | ... | see Set Numeric Frame Sizes keyword documentation for details.
+| |
| | ... | If this keyword detects the test is interested in (unidirectional)
| | ... | transactons per second maximal rate (tps), that is returned (not pps).
| |
@@ -448,8 +438,13 @@
| | ... | - overhead - Overhead in bytes; default value: 0. Type: integer
| | ... | - frame_size - L2 Frame Size [B] or IMIX string. Type: integer or
| | ... | string
-| | ... | - packets_per_transaction_and_direction - Pps-tps conversion.
-| | ... | Optional, default 1.
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| | ... | - TEST_TAGS - Robot tags of this test. Type: list of string
| |
| | ... | *Test variables set:*
| | ... | - max_rate - Calculated unidirectional maximal transmit rate [pps].
@@ -457,8 +452,13 @@
| | ... | Type: float
| | ... | - jumbo - Jumbo boolean, true if jumbo packet support has to be
| | ... | enabled. Type: boolean
-| | ... | avg_frame_size - Average frame size including overhead. Type: float
-| | ... | max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - recommended_mtu - Resonable value (with space for encap overhead)
+| | ... | according to jumbo. Type: int
+| | ... | - max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - avg_directional_frame_size - Average frame size including overhead
+| | ... | for the more loaded direction. Type: float
+| | ... | - avg_aggregated_frame_size - Average frame size including overhead
+| | ... | across both traffic directions. Type: float
| |
| | ... | *Example:*
| |
@@ -470,68 +470,192 @@
| | ... | ${NIC_NAME_TO_PPS_LIMIT} | ${nic_name}
| | ${bps_limit} = | Get From Dictionary
| | ... | ${NIC_NAME_TO_BPS_LIMIT} | ${nic_name}
-| | Set Numeric Frame Sizes
-| | # We need to add 20B (Ethernet preamble and inter-frame gap)
-| | # to avg_frame_size
-| | ${rate} = | Evaluate | ${bps_limit} / ((${avg_frame_size} + 20.0) * 8)
+| | # Set Jumbo also calls Set Numeric Frame Sizes.
+| | Set Jumbo
+| | # We need to add 20B (Ethernet preamble and inter-frame gap).
+| | ${adfs} = | Get Variable Value | \${avg_directional_frame_size}
+| | ${rate} = | Evaluate | ${bps_limit} / ((${adfs} + 20.0) * 8)
| | ${max_rate} = | Set Variable If | ${rate} > ${pps_limit}
| | ... | ${pps_limit} | ${rate}
| | ${pptad} = | Get Packets Per Transaction And Direction
| | ${max_rate} = | Evaluate | ${max_rate} / ${pptad}
| | Set Test Variable | \${max_rate}
-| | Set Jumbo
| Set Numeric Frame Sizes
| | [Documentation]
| | ... | Framesize can be either integer in case of a single packet
| | ... | in stream, or set of packets in case of IMIX type or simmilar.
| | ... | For jumbo decisions, we need a numeric size of the biggest packet.
-| | ... | For max rate decisions, we need a numeric average packet size.
-| | ... | This keyword computes both and sets them as test variables.
+| | ... | For bandwidth limit decisions, we need a numeric average packet size
+| | ... | in the more bit intensive direction if traffic is non-symmetric.
+| | ... | Computation of max_rate assumes it is also the more pps direction
+| | ... | (so it can have smaller average frame size than the aggregated one).
+| | ... | Average (across both directions) frame size is also used
+| | ... | for displaying the bidirectional bandwidth forwarded.
+| | ... | This keyword computes all three values (accounting for overheads)
+| | ... | and sets them as test variables.
| |
| | ... | Each suite sets a value named \${overhead},
| | ... | which describes by how many bytes the frames on DUT-DUT link
| | ... | are larger (due to encapsulation) than those
-| | ... | on the primary TG-DUT link. But for some suites that value
+| | ... | on the primary TG-DUT link. For some suites that value
| | ... | can be negaive (if TG-DUT is encapsulated more heavily).
| | ... | For calculations in this keyword, we need largest sizes
| | ... | across links, so zero is used if \${overhead} is negative.
| |
+| | ... | The other overhead is from TCP control packets (only IPv4 supported).
+| | ... | TCP_CPS tests have SYN frames of length 78B and other frames 70B.
+| | ... | The more loaded is client-to-server direction with 1 SYN and 3 other,
+| | ... | across both directions it is 2 SYN and 5 other.
+| | ... | TCP_PPS and TCP_TPUT tests have one other control packet less
+| | ... | (in the less loaded direction), but they do contain data frames.
+| |
| | ... | *Test variables read:*
| | ... | - frame_size - Framesize. Type: integer or string
| | ... | - overhead - Overhead in bytes; default value: ${0}. Type: integer
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| | ... | - TEST_TAGS - Robot tags of this test. Type: list of string
| |
| | ... | *Test variables set*
-| | ... | avg_frame_size - Average frame size including overhead. Type: float
-| | ... | max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - max_frame_size - Maximal frame size including overhead. Type: float
+| | ... | - avg_directional_frame_size - Average frame size including overhead
+| | ... | for the more loaded direction. Type: float
+| | ... | - avg_aggregated_frame_size - Average frame size including overhead
+| | ... | across both traffic directions. Type: float
| |
| | ... | *Example:*
| |
| | ... | \| Set Numeric Frame Sizes \|
| |
+| | ${bare_max_frame_size} = | Run Keyword If
+| | ... | '${frame_size}' == 'IMIX_v4_1' | Set Variable | ${1518.0}
+| | ... | ELSE | Convert To Number | ${frame_size}
+| | ${bafs} = | Run Keyword If
+| | ... | '${frame_size}' == 'IMIX_v4_1' | Set Variable | ${353.8333333333333}
+| | ... | ELSE | Convert To Number | ${frame_size}
+| | # Long boolean formula in 2 lines.
+| | ${is_cps} = | Evaluate | 'TCP_CPS' in ${TEST_TAGS}
+| | ${is_pps} = | Evaluate | 'TCP_PPS' in ${TEST_TAGS}
+| | ${is_tput} = | Evaluate | ${is_pps} or 'TCP_TPUT' in ${TEST_TAGS}
+| | # TODO: Investigate impact of values on hoststack tests.
+| | ${is_cps} = | Evaluate | ${is_cps} and 'HOSTSTACK' not in ${TEST_TAGS}
+| | ${is_tput} = | Evaluate | ${is_tput} and 'HOSTSTACK' not in ${TEST_TAGS}
+| | ${avg_dir_frame_size} | ${avg_agg_frame_size} = | Run Keyword If
+| | ... | ${is_cps} | Apply Tcp Cps Proto Overhead | ${bafs}
+| | ... | ELSE IF | ${is_tput} | Apply Tcp Tput Proto Overhead | ${bafs}
+| | ... | ELSE | Set Variable | ${bafs} | ${bafs}
| | ${max_overhead} = | Set Variable If | ${overhead} >= 0 | ${overhead} | ${0}
-| | ${bare_avg_frame_size} = | Run Keyword If | '${frame_size}' == 'IMIX_v4_1'
-| | ... | Set Variable | ${353.83333}
-| | ... | ELSE
-| | ... | Convert To Number | ${frame_size}
-| | # Do not use $max_overhead (without braces), that does not tolerate string.
-| | ${avg_frame_size} = | Evaluate | ${bare_avg_frame_size} + ${max_overhead}
-| | Set Test Variable | \${avg_frame_size}
-| | ${bare_max_frame_size} = | Run Keyword If | '${frame_size}' == 'IMIX_v4_1'
-| | ... | Set Variable | ${1518}
-| | ... | ELSE
-| | ... | Convert To Number | ${frame_size}
-| | ${max_frame_size} = | Evaluate | $bare_max_frame_size + $max_overhead
-| | Set Test Variable | ${max_frame_size}
+| | ${mfs} = | Evaluate | ${bare_max_frame_size} + ${max_overhead}
+| | ${adfs} = | Evaluate | ${avg_dir_frame_size} + ${max_overhead}
+| | ${aafs} = | Evaluate | ${avg_agg_frame_size} + ${max_overhead}
+| | Set Test Variable | \${max_frame_size} | ${mfs}
+| | Set Test Variable | \${avg_directional_frame_size} | ${adfs}
+| | Set Test Variable | \${avg_aggregated_frame_size} | ${aafs}
+
+| Apply Tcp Cps Proto Overhead
+| | [Documentation]
+| | ... | Recompute average frame size for TCP CPS test cases.
+| |
+| | ... | This is contitionally called from Set Numeric Frame Sizes.
+| | ... | In Robot Framework it is more convenient to wrap such a block
+| | ... | as a standalone keyword to Run Keyword If.
+| |
+| | ... | *Test variables read:*
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Usually set globally. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| |
+| | ... | *Arguments:*
+| | ... | - bare_avg_frame_size - Average numeric framesize without overheads.
+| |
+| | ... | *Returns:*
+| | ... | - avg_dir_frame_size - Average framesize for more loaded direction.
+| | ... | - avg_agg_frame_size - Average framesize across both directions.
+| |
+| | ... | *Example:*
+| |
+| | ... | \| \${adfs} \| \${aafs} = \| Apply Tcp Cps Proto Overhead \| \${bafs}
+| |
+| | [Arguments] | ${bare_avg_frame_size}
+| |
+| | # Increase max_frame_size for TCP tests if used for more than just jumbo.
+| | Run Keyword If | ${bare_avg_frame_size} != 64
+| | ... | Fail | TCP_CPS tests are only supported for (nominal) 64B frames.
+| | # TODO: Unify with packets_per_transaction_* variables when adding PCAP.
+| | ${pptad} = | Get Packets Per Transaction And Direction
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | ${avg_dir_frame_size} = | Evaluate | (78.0 * 1 + 70.0 * 3) / (1 + 3)
+| | Run Keyword If | '${pptad}' != '4'
+| | ... | Fail | TCP CPS with pptad '${pptad}' != '4'.
+| | ${avg_agg_frame_size} = | Evaluate | (78.0 * 2 + 70.0 * 5) / (2 + 5)
+| | Run Keyword If | '${ppta}' != '7'
+| | ... | Fail | TCP CPS with ppta '${ppta}' != '7'.
+| | Return From Keyword | ${avg_dir_frame_size} | ${avg_agg_frame_size}
+
+| Apply Tcp Tput Proto Overhead
+| | [Documentation]
+| | ... | Recompute average frame size for TCP TPUT (or PPS) test cases.
+| |
+| | ... | This is contitionally called from Set Numeric Frame Sizes.
+| | ... | In Robot Framework it is more convenient to wrap such a block
+| | ... | as a standalone keyword to Run Keyword If.
+| |
+| | ... | *Test variables read:*
+| | ... | - ASTF_N_DATA_FRAMES - Number of data frames per transaction
+| | ... | and direction. Usually set globally. Type: integer
+| | ... | - packets_per_transaction_and_direction - May be unset.
+| | ... | See Get Packets Per Transaction And Direction keyword. Type: integer
+| | ... | - packets_per_transaction_aggregated - May be unset.
+| | ... | See Get Packets Per Transaction Aggregated keyword. Type: integer
+| |
+| | ... | *Arguments:*
+| | ... | - bare_framesize - Average numeric framesize without overheads.
+| |
+| | ... | *Returns:*
+| | ... | - avg_dir_frame_size - Average framesize for more loaded direction.
+| | ... | - avg_agg_frame_size - Average framesize across both directions.
+| |
+| | ... | *Example:*
+| |
+| | ... | \| \${adfs} \| \${aafs} = \| Apply Tcp Cps Proto Overhead \| \${bafs}
+| |
+| | [Arguments] | ${bare_framesize}
+| |
+| | # TODO: Unify with packets_per_transaction_* variables when adding PCAP.
+| | ${pptad} = | Get Packets Per Transaction And Direction
+| | ${ppta} = | Get Packets Per Transaction Aggregated
+| | # Long float formula in 4 lines.
+| | ${numerator} = | Evaluate | ${bare_framesize} * ${ASTF_N_DATA_FRAMES}
+| | ${numerator} = | Evaluate | 78.0 * 1 + 70.0 * 3 + ${numerator}
+| | ${denominator} = | Evaluate | 1 + 3 + ${ASTF_N_DATA_FRAMES}
+| | ${avg_dir_frame_size} = | Evaluate | ${numerator} / ${denominator}
+| | Run Keyword If | '${pptad}' != '${denominator}'
+| | ... | Fail | TCP TPUT with pptad '${pptad}' != '${denominator}'.
+| | # Long float formula in 4 lines.
+| | ${numerator} = | Evaluate | ${bare_framesize} * 2 * ${ASTF_N_DATA_FRAMES}
+| | ${numerator} = | Evaluate | 78.0 * 2 + 70.0 * 4 + ${numerator}
+| | ${denominator} = | Evaluate | 2 + 4 + 2 * ${ASTF_N_DATA_FRAMES}
+| | ${avg_agg_frame_size} = | Evaluate | ${numerator} / ${denominator}
+| | Run Keyword If | '${ppta}' != '${denominator}'
+| | ... | Fail | TCP TPUT with ppta '${ppta}' != '${denominator}'.
+| | Return From Keyword | ${avg_dir_frame_size} | ${avg_agg_frame_size}
| Set Rates For Policer
| | [Documentation]
| | ... | Policer tests need these values,
-| | ... | currently computed from \${avg_frame_size}.
+| | ... | currently computed from \${avg_directional_frame_size}.
| | ... | TODO: Verify the units match and computation is correct.
| |
| | ... | *Test (or broader scope) variables read:*
-| | ... | - avg_frame_size - Average L2 Frame Size [B]. Type: float
+| | ... | - avg_directional_frame_size - Average L2 Frame Size [B]. Type: float
| | ... | Set by Set Max Rate And Jumbo keyword.
| |
| | ... | *Test variables set:*
@@ -542,5 +666,5 @@
| |
| | ... | \| Set Rates For Policer \|
| |
-| | Set Test Variable | \${eb} | ${avg_frame_size}
-| | Set Test Variable | \${cb} | ${avg_frame_size}
+| | Set Test Variable | \${eb} | ${avg_directional_frame_size}
+| | Set Test Variable | \${cb} | ${avg_directional_frame_size}
diff --git a/resources/libraries/robot/shared/container.robot b/resources/libraries/robot/shared/container.robot
index 4b2ad22527..9f08e6b1d4 100644
--- a/resources/libraries/robot/shared/container.robot
+++ b/resources/libraries/robot/shared/container.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -84,9 +84,9 @@
| | ... | ${nf_dtc}
| | ${nf_id}= | Evaluate | (${nf_chain} - ${1}) * ${nf_nodes} + ${nf_node}
| | ${env}= | Create List | DEBIAN_FRONTEND=noninteractive
-| | ${dut1_uuid_length} = | Get Length | ${DUT1_UUID}
-| | ${root}= | Run Keyword If | ${dut1_uuid_length}
-| | ... | Get Docker Mergeddir | ${nodes['DUT1']} | ${DUT1_UUID}
+| | ${in_container}= | Running in Container | ${nodes['${dut}']}
+| | ${root}= | Run Keyword If | ${in_container}
+| | ... | Get Docker Mergeddir | ${nodes['${dut}']}
| | ... | ELSE | Set Variable | ${EMPTY}
| | ${node_arch}= | Get Node Arch | ${nodes['${dut}']}
| | ${name}= | Set Variable | ${dut}_${container_group}${nf_id}${DUT1_UUID}
@@ -106,7 +106,7 @@
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | &{cont_args}= | Create Dictionary
| | ... | name=${name} | node=${nodes['${dut}']} | mnt=${mnt} | env=${env}
-| | ... | root=${root}
+| | ... | root=${root} | page_size=${page_size}
| | Run Keyword If | ${pinning}
| | ... | Set To Dictionary | ${cont_args} | cpuset_cpus=${nf_cpus}
| | Run Keyword | ${container_group}.Construct container | &{cont_args}
@@ -240,6 +240,10 @@
| | ... | ${container_chain_topology}
| | ... | dut1_if=${DUT1_${int}2}[0]
| | ... | dut2_if=${DUT2_${int}2}[0]
+| | ... | ELSE IF | '${container_chain_topology}' == 'chain_dma'
+| | ... | ${group}.Configure VPP In All Containers
+| | ... | ${container_chain_topology}
+| | ... | dma_wqs=${DUT1_dma_wqs}
| | ... | ELSE
| | ... | ${group}.Configure VPP In All Containers
| | ... | ${container_chain_topology}
diff --git a/resources/libraries/robot/shared/default.robot b/resources/libraries/robot/shared/default.robot
index 58bbb97acb..2dc78941b3 100644
--- a/resources/libraries/robot/shared/default.robot
+++ b/resources/libraries/robot/shared/default.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -28,12 +28,15 @@
| Library | resources.libraries.python.FlowUtil
| Library | resources.libraries.python.L2Util
| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.IPTopology
| Library | resources.libraries.python.IPUtil
| Library | resources.libraries.python.IPv6Util
| Library | resources.libraries.python.IrqUtil
+| Library | resources.libraries.python.model.ExportJson
| Library | resources.libraries.python.NodePath
| Library | resources.libraries.python.Namespaces
| Library | resources.libraries.python.PapiHistory
+| Library | resources.libraries.python.QATUtil
| Library | resources.libraries.python.SchedUtils
| Library | resources.libraries.python.Tap
| Library | resources.libraries.python.Tap.TapFeatureMask
@@ -42,6 +45,7 @@
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.Trace
| Library | resources.libraries.python.VhostUser.VirtioFeatureMask
+| Library | resources.libraries.python.VppConfigGenerator.VppInitConfig
| Library | resources.libraries.python.VppCounters
| Library | resources.libraries.python.VPPUtil
|
@@ -74,6 +78,7 @@
*** Variables ***
| ${cpu_alloc_str}= | ${0}
+| ${page_size}= | ${DEFAULT_HUGEPAGE_SIZE}
*** Keywords ***
| Call Resetter
@@ -82,8 +87,6 @@
| | ... | If it exists (and not None), call the resetter (as a Python callable).
| | ... | This is usually used to reset any state on DUT before next trial.
| |
-| | ... | TODO: Move to a more specific library if needed.
-| |
| | ... | *Example:*
| |
| | ... | \| Call Resetter \|
@@ -94,29 +97,6 @@
| | # Parens are there to perform the call.
| | Run Keyword If | $resetter | Evaluate | $resetter()
-| Configure crypto device on all DUTs
-| | [Documentation] | Verify if Crypto QAT device virtual functions are
-| | ... | initialized on all DUTs. If parameter force_init is set to True, then
-| | ... | try to initialize/disable.
-| |
-| | ... | *Arguments:*
-| | ... | - crypto_type - Crypto device type - HW_DH895xcc or HW_C3xxx; default
-| | ... | value: HW_DH895xcc. Type: string
-| | ... | - numvfs - Number of VFs to initialize, 0 - disable the VFs; default
-| | ... | value: ${32} Type: integer
-| | ... | - force_init - Force to initialize. Type: boolean
-| |
-| | ... | *Example:*
-| |
-| | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
-| |
-| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${False}
-| |
-| | FOR | ${dut} | IN | @{duts}
-| | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}
-| | | ... | ${numvfs} | force_init=${force_init}
-| | END
-
| Configure kernel module on all DUTs
| | [Documentation] | Verify if specific kernel module is loaded on all DUTs.
| | ... | If parameter force_load is set to True, then try to load.
@@ -168,18 +148,21 @@
| | | Run Keyword | ${dut}.Set Node | ${nodes['${dut}']} | node_key=${dut}
| | | Run Keyword | ${dut}.Add Unix Log
| | | Run Keyword | ${dut}.Add Unix CLI Listen
-| | | Run Keyword | ${dut}.Add Unix Nodaemon
+| | | Run Keyword | ${dut}.Add Unix CLI No Pager
+| | | Run Keyword | ${dut}.Add Unix GID
+| | | Run Keyword | ${dut}.Add API Segment Prefix | ${dut}
| | | Run Keyword | ${dut}.Add Unix Coredump
| | | Run Keyword | ${dut}.Add Socksvr | ${SOCKSVR_PATH}
-| | | Run Keyword | ${dut}.Add Main Heap Size | ${${heap_size_mult}*${2}}G
-| | | Run Keyword | ${dut}.Add Main Heap Page Size | 2M
-| | | Run Keyword | ${dut}.Add Statseg Size | 2G
-| | | Run Keyword | ${dut}.Add Statseg Page Size | 2M
+| | | Run Keyword | ${dut}.Add Main Heap Size | ${${heap_size_mult}*${3}}G
+| | | Run Keyword | ${dut}.Add Main Heap Page Size | ${page_size}
+| | | Run Keyword | ${dut}.Add Default Hugepage Size | ${page_size}
+| | | Run Keyword | ${dut}.Add Statseg Size | 3G
+| | | Run Keyword | ${dut}.Add Statseg Page Size | ${page_size}
| | | Run Keyword | ${dut}.Add Statseg Per Node Counters | on
| | | Run Keyword | ${dut}.Add Plugin | disable | default
| | | Run Keyword | ${dut}.Add Plugin | enable | @{plugins_to_enable}
| | | Run Keyword | ${dut}.Add IP6 Hash Buckets | 2000000
-| | | Run Keyword | ${dut}.Add IP6 Heap Size | 4G
+| | | Run Keyword | ${dut}.Add IP6 Heap Size | 3G
| | | Run Keyword | ${dut}.Add Graph Node Variant | ${GRAPH_NODE_VARIANT}
| | END
@@ -204,15 +187,12 @@
| | [Arguments] | ${phy_cores} | ${rx_queues}=${None} | ${rxd}=${None}
| | ... | ${txd}=${None}
| |
+| | Create compute resources variables
+| | ... | ${phy_cores} | rx_queues=${rx_queues} | rxd=${rxd} | txd=${txd}
| | FOR | ${dut} | IN | @{duts}
-| | | &{compute_resource_info}= | Get Affinity Vswitch
-| | | ... | ${nodes} | ${dut} | ${phy_cores} | rx_queues=${rx_queues}
-| | | ... | rxd=${rxd} | txd=${txd}
-| | | Set Test Variable | &{compute_resource_info}
-| | | Create compute resources variables
-| | | Run Keyword | ${dut}.Add CPU Main Core | ${cpu_main}
+| | | Run Keyword | ${dut}.Add CPU Main Core | ${${dut}_cpu_main}
| | | Run Keyword If | ${cpu_count_int} > 0
-| | | ... | ${dut}.Add CPU Corelist Workers | ${cpu_wt}
+| | | ... | ${dut}.Add CPU Corelist Workers | ${${dut}_cpu_wt}
| | | Run Keyword | ${dut}.Add Buffers Per Numa | ${buffers_numa}
| | END
@@ -223,6 +203,22 @@
| | ... | _NOTE:_ This KW sets various suite variables based on computed
| | ... | resources.
| |
+| | ... | *Arguments:*
+| | ... | - phy_cores - Number of physical cores to use. Type: integer
+| | ... | - rx_queues - Number of RX queues. Type: integer
+| | ... | - rxd - Number of RX descriptors. Type: integer
+| | ... | - txd - Number of TX descriptors. Type: integer
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Create compute resources variables \| ${1} \| ${1} \|
+| |
+| | [Arguments] | ${phy_cores} | ${rx_queues}=${None}
+| | ... | ${rxd}=${None} | ${txd}=${None}
+| |
+| | &{compute_resource_info}= | Get Affinity Vswitch
+| | ... | ${nodes} | ${phy_cores} | rx_queues=${rx_queues}
+| | ... | rxd=${rxd} | txd=${txd}
| | ${variables}= | Get Dictionary Keys | ${compute_resource_info}
| | FOR | ${variable} | IN | @{variables}
| | | ${value}= | Get From Dictionary | ${compute_resource_info} | ${variable}
@@ -232,24 +228,6 @@
| | ... | Set Tags | MTHREAD | ELSE | Set Tags | STHREAD
| | Set Tags | ${dp_count_int}T${cpu_count_int}C
-| Add DPDK VLAN strip offload switch off between DUTs
-| | [Documentation]
-| | ... | Add VLAN Strip Offload switch off on PCI devices between DUTs to VPP
-| | ... | configuration file.
-| |
-| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
-| | | ${_even}= | Evaluate | ${pf} % 2
-| | | Run Keyword Unless | ${even}
-| | | ... | DUT1.Add DPDK Dev Parameter | ${DUT1_${int}${pf}_pci}[0]
-| | | ... | vlan-strip-offload | off
-| | END
-| | FOR | ${pf} | IN RANGE | 1 | ${nic_pfs} + 1
-| | | ${_even}= | Evaluate | ${pf} % 2
-| | | Run Keyword If | ${even}
-| | | ... | DUT2.Add DPDK Dev Parameter | ${DUT2_${int}${pf}_pci}[0]
-| | | ... | vlan-strip-offload | off
-| | END
-
| Add NAT to all DUTs
| | [Documentation] | Add NAT configuration to all DUTs.
| |
diff --git a/resources/libraries/robot/shared/interfaces.robot b/resources/libraries/robot/shared/interfaces.robot
index 0c669247d6..4af68d0e28 100644
--- a/resources/libraries/robot/shared/interfaces.robot
+++ b/resources/libraries/robot/shared/interfaces.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -22,7 +22,7 @@
| Set single interfaces in path up
| | [Documentation]
| | ... | *Set UP state on single physical VPP interfaces in path on all DUT
-| | ... | nodes and set maximal MTU.*
+| | ... | nodes.*
| |
| | ... | *Arguments:*
| | ... | - pf - NIC physical function (physical port).
@@ -41,8 +41,7 @@
| Set interfaces in path up
| | [Documentation]
-| | ... | *Set UP state on VPP interfaces in path on all DUT nodes and set
-| | ... | maximal MTU.*
+| | ... | *Set UP state on VPP interfaces in path on all DUT nodes.*
| |
| | ... | *Arguments:*
| | ... | - validate - Validate interfaces are up.
@@ -58,8 +57,7 @@
| Set interfaces in path up on node
| | [Documentation]
-| | ... | *Set UP state on VPP interfaces in path on specified DUT node and
-| | ... | set maximal MTU.*
+| | ... | *Set UP state on VPP interfaces in path on specified DUT node.*
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node on which to set the interfaces up.
@@ -77,8 +75,7 @@
| Set interfaces in path up on node on PF
| | [Documentation]
-| | ... | *Set UP state on VPP interfaces in path on specified DUT node and
-| | ... | set maximal MTU.*
+| | ... | *Set UP state on VPP interfaces in path on specified DUT node.*
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node on which to set the interfaces up.
@@ -97,7 +94,6 @@
| | ${_id}= | Set Variable If | '${_chains}' == 'PASS' | _1 | ${EMPTY}
| | FOR | ${if} | IN | @{${dut}_${int}${pf}${_id}}
| | | Set Interface State | ${nodes['${dut}']} | ${if} | up
-| | | VPP Set Interface MTU | ${nodes['${dut}']} | ${if}
| | END
| Pre-initialize layer driver
@@ -137,7 +133,8 @@
| | Run Keyword If | ${index} >= 0 | Return From Keyword
| | FOR | ${dut} | IN | @{duts}
| | | Stop VPP Service | ${nodes['${dut}']}
-| | | PCI Driver Unbind List | ${nodes['${dut}']} | @{${dut}_pf_pci}
+| | | Unbind PCI Devices From Other Driver | ${nodes['${dut}']} | vfio-pci |
+| | | ... | @{${dut}_pf_pci}
| | | Run keyword | ${dut}.Add DPDK Dev | @{${dut}_pf_pci}
| | | Run Keyword If | ${dpdk_no_tx_checksum_offload}
| | | ... | ${dut}.Add DPDK No Tx Checksum Offload
@@ -154,10 +151,6 @@
| | | ... | ${dut}.Add DPDK Cryptodev | ${dp_count_int}
| | | Run Keyword | ${dut}.Add DPDK Max Simd Bitwidth | ${GRAPH_NODE_VARIANT}
| | END
-| | ${_vlan_strip} | ${value}= | Run Keyword And Ignore Error
-| | ... | Variable Should Exist | ${vlan_strip_off}
-| | Run keyword If | '${_vlan_strip}' == 'PASS' and ${duts_count} == 2
-| | ... | Add DPDK VLAN strip offload switch off between DUTs
| Pre-initialize layer avf on all DUTs
| | [Documentation]
@@ -172,6 +165,8 @@
| | FOR | ${dut} | IN | @{duts}
| | | Set Interface State PCI
| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | state=up
+| | | Set Interface XDP off
+| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci}
| | | Set Interface Channels
| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | num_queues=${rxq_count_int}
| | | ... | channel=combined
@@ -182,11 +177,8 @@
| | ... | Pre-initialize rdma-core driver.
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Run Keyword If | ${jumbo}
-| | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=9200
-| | | ... | ELSE
-| | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=1518
-| | FOR | ${dut} | IN | @{duts}
+| | | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci}
+| | | ... | mtu=${recommended_mtu}
| | | Set Interface Flow Control
| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | rxf="off" | txf="off"
| | END
@@ -196,13 +188,27 @@
| | ... | Pre-initialize mlx5_core driver.
| |
| | FOR | ${dut} | IN | @{duts}
-| | | Run Keyword If | ${jumbo}
-| | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=9200
-| | | ... | ELSE
-| | | ... | Set Interface MTU | ${nodes['${dut}']} | ${${dut}_pf_pci} | mtu=1518
| | | Set Interface Flow Control
| | | ... | ${nodes['${dut}']} | ${${dut}_pf_pci} | rxf="off" | txf="off"
| | END
+| | ${index}= | Get Index From List | ${TEST TAGS} | DPDK
+| | Run Keyword If | ${index} >= 0 | Return From Keyword
+| | FOR | ${dut} | IN | @{duts}
+| | | Run keyword | ${dut}.Add DPDK Dev | @{${dut}_pf_pci}
+| | | Run Keyword If | ${dpdk_no_tx_checksum_offload}
+| | | ... | ${dut}.Add DPDK No Tx Checksum Offload
+| | | Run Keyword | ${dut}.Add DPDK Log Level | debug
+| | | Run Keyword | ${dut}.Add DPDK Dev Default RXQ | ${rxq_count_int}
+| | | Run Keyword If | not ${jumbo}
+| | | ... | ${dut}.Add DPDK No Multi Seg
+| | | Run Keyword If | ${nic_rxq_size} > 0
+| | | ... | ${dut}.Add DPDK Dev Default RXD | ${nic_rxq_size}
+| | | Run Keyword If | ${nic_txq_size} > 0
+| | | ... | ${dut}.Add DPDK Dev Default TXD | ${nic_txq_size}
+| | | Run Keyword If | '${crypto_type}' != '${None}'
+| | | ... | ${dut}.Add DPDK Cryptodev | ${dp_count_int}
+| | | Run Keyword | ${dut}.Add DPDK Max Simd Bitwidth | ${GRAPH_NODE_VARIANT}
+| | END
| Initialize layer driver
| | [Documentation]
@@ -340,7 +346,7 @@
| Initialize layer vfio-pci on node
| | [Documentation]
| | ... | Initialize vfio-pci interfaces on DUT on NIC PF.
-| | ... | Currently no operation.
+| | ... | Currently just set MTU to the recommended value.
| |
| | ... | *Arguments:*
| | ... | - dut - DUT node. Type: string
@@ -352,7 +358,9 @@
| |
| | [Arguments] | ${dut} | ${pf}
| |
-| | No operation
+| | Set Interface State | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | down
+| | VPP Set Interface MTU
+| | ... | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | mtu=${recommended_mtu}
| Initialize layer avf on node
| | [Documentation]
@@ -440,9 +448,21 @@
| Initialize layer mlx5_core on node
| | [Documentation]
| | ... | Initialize mlx5_core interfaces on DUT on NIC PF.
-| | ... | Currently no operation.
+| | ... | Currently just set MTU to the recommended value.
| |
-| | No operation
+| | ... | *Arguments:*
+| | ... | - dut - DUT node. Type: string
+| | ... | - pf - NIC physical function (physical port). Type: integer
+| |
+| | ... | *Example:*
+| |
+| | ... | \| Initialize layer rdma-core on node \| DUT1 \| 1 \|
+| |
+| | [Arguments] | ${dut} | ${pf}
+| |
+| | Set Interface State | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | down
+| | VPP Set Interface MTU
+| | ... | ${nodes['${dut}']} | ${${dut}_pf${pf}}[0] | mtu=${recommended_mtu}
| Initialize layer interface
| | [Documentation]
@@ -832,3 +852,23 @@
| |
| | ${vhost_dump}= | Vhost User Dump | ${dut}
| | Return From Keyword | ${vhost_dump}
+
+| Lower DUT1-DUT2 MTU For Fragmentation
+| | [Documentation] | Set lower MTU on both ends of DUT1-DUT2 link.
+| |
+| | ... | This should force VPP to fragment (and reassembly) packets.
+| | ... | Should be called after Initialize Layer Interface.
+| | ... | Suite variables such as \${dut2_if1} should be defined by then.
+| |
+| | ... | As VPP (at least dpdk plugin) require interface to be down
+| | ... | before MTU can be changed, interfaces are temporarily downed.
+| |
+| | # TODO: ip_reassembly_set to increase max_reassembly_length so jumbo passes.
+| | Set Interface State | ${nodes['DUT1']} | ${dut1_if2} | down
+| | Set Interface State | ${nodes['DUT2']} | ${dut2_if1} | down
+| | VPP Set Interface MTU
+| | ... | ${nodes['DUT1']} | ${dut1_if2} | ${MTU_FOR_FRAGMENTATION}
+| | VPP Set Interface MTU
+| | ... | ${nodes['DUT2']} | ${dut2_if1} | ${MTU_FOR_FRAGMENTATION}
+| | Set Interface State | ${nodes['DUT1']} | ${dut1_if2} | up
+| | Set Interface State | ${nodes['DUT2']} | ${dut2_if1} | up
diff --git a/resources/libraries/robot/shared/suite_setup.robot b/resources/libraries/robot/shared/suite_setup.robot
index 26d7f52205..5c92ad9f52 100644
--- a/resources/libraries/robot/shared/suite_setup.robot
+++ b/resources/libraries/robot/shared/suite_setup.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,12 +18,14 @@
| Library | resources.libraries.python.InterfaceUtil
| Library | resources.libraries.python.NGINX.NGINXTools
| Library | resources.tools.ab.ABTools
+| Library | resources.libraries.python.Iperf3
| Library | resources.libraries.python.NodePath
| Library | resources.libraries.python.topology.Topology
| Library | resources.libraries.python.TrafficGenerator
| Variables | resources/libraries/python/Constants.py
|
| Documentation | Suite setup keywords.
+
*** Keywords ***
| Create suite topology variables
| | [Documentation]
@@ -83,12 +85,14 @@
| |
| | [Arguments] | @{actions}
| |
+| | Start Suite Setup Export
| | ${nic_model_list}= | Create list | ${nic_name}
| | &{info}= | Compute Circular Topology
| | ... | ${nodes} | filter_list=${nic_model_list} | nic_pfs=${nic_pfs}
| | ... | always_same_link=${False} | topo_has_tg=${True}
| | Set suite variable | &{topology_info} | &{info}
| | Create suite topology variables | @{actions}
+| | Finalize Suite Setup Export
| Setup suite topology interfaces with no TG
| | [Documentation]
@@ -104,12 +108,14 @@
| |
| | [Arguments] | @{actions}
| |
+| | Start Suite Setup Export
| | ${nic_model_list}= | Create list | ${nic_name}
| | &{info}= | Compute Circular Topology
| | ... | ${nodes} | filter_list=${nic_model_list} | nic_pfs=${nic_pfs}
| | ... | always_same_link=${True} | topo_has_tg=${False}
| | Set suite variable | &{topology_info} | &{info}
| | Create suite topology variables | @{actions}
+| | Finalize Suite Setup Export
| Setup suite topology interfaces with no DUT
| | [Documentation]
@@ -125,17 +131,20 @@
| |
| | [Arguments] | @{actions}
| |
+| | Start Suite Setup Export
| | ${nic_model_list}= | Create list | ${nic_name}
| | &{info}= | Compute Circular Topology
| | ... | ${nodes} | filter_list=${nic_model_list} | nic_pfs=${nic_pfs}
| | ... | always_same_link=${True} | topo_has_tg=${True} | topo_has_dut=${False}
| | Set suite variable | &{topology_info} | &{info}
| | Create suite topology variables | @{actions}
+| | Finalize Suite Setup Export
| Additional Suite Setup Action For scapy
| | [Documentation]
| | ... | Additional Setup for suites which uses scapy as Traffic generator.
| |
+| | Export TG Type And Version | scapy | 2.4.3
| | FOR | ${dut} | IN | @{duts}
| | | Set Suite Variable | ${${dut}_vf1} | ${${dut}_${int}1}
| | | Set Suite Variable | ${${dut}_vf2} | ${${dut}_${int}2}
@@ -147,6 +156,8 @@
| | [Documentation]
| | ... | Additional Setup for suites which uses dpdk.
| |
+| | ${version} = | Get Dpdk Version | ${nodes}[DUT1]
+| | Export Dut Type And Version | dpdk | ${version}
| | FOR | ${dut} | IN | @{duts}
| | | Initialize DPDK Framework | ${nodes['${dut}']}
| | | ... | ${${dut}_${int}1}[0] | ${${dut}_${int}2}[0] | ${nic_driver}
@@ -227,64 +238,90 @@
| | | ... | ELSE
| | | ... | Additional Suite Setup Action For performance pf | ${dut}
| | END
-| | Initialize traffic generator
-| | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
-| | ... | ${dut1} | ${DUT1_${int}1}[0]
-| | ... | ${dut${duts_count}} | ${DUT${duts_count}_${int}2}[0]
-| | ... | ${osi_layer}
+| | ${type} = | Get TG Type | ${nodes}[TG]
+| | ${version} = | Get TG Version | ${nodes}[TG]
+| | Export TG Type And Version | ${type} | ${version}
+| | Initialize traffic generator | ${osi_layer} | ${nic_pfs}
| Additional Suite Setup Action For performance_tg_nic
| | [Documentation]
| | ... | Additional Setup for suites which uses performance measurement
-| | ... | for L1 cross connect tests
+| | ... | for L1 cross connect tests.
+| |
+| | ${type} = | Get TG Type | ${nodes}[TG]
+| | ${version} = | Get TG Version | ${nodes}[TG]
+| | Export Dut Type And Version | ${type} | ${version}
+| | Export TG Type And Version | ${type} | ${version}
+| | Initialize traffic generator | ${osi_layer} | ${nic_pfs}
+
+| Additional Suite Setup Action For iPerf3
+| | [Documentation]
+| | ... | Additional Setup for suites which uses performance measurement over
+| | ... | iPerf3.
| |
-| | Initialize traffic generator
-| | ... | ${tg} | ${TG_pf1}[0] | ${TG_pf2}[0]
-| | ... | ${tg} | ${TG_pf2}[0]
-| | ... | ${tg} | ${TG_pf1}[0]
-| | ... | ${osi_layer}
+| | ${type} = | Get iPerf Type
+| | ${version} = | Get iPerf Version | ${nodes}[TG]
+| | Export TG Type And Version | ${type} | ${version}
-| Additional Suite Setup Action For ipsechw
+| Additional Suite Setup Action For cryptohw
| | [Documentation]
| | ... | Additional Setup for suites which uses QAT HW.
| |
-| | ${numvfs}= | Set Variable If
-| | ... | '${crypto_type}' == 'HW_DH895xcc' | ${32}
-| | ... | '${crypto_type}' == 'HW_C3xxx' | ${16}
-| | Configure crypto device on all DUTs | ${crypto_type} | numvfs=${numvfs}
-| | ... | force_init=${True}
-| | Configure kernel module on all DUTs | vfio_pci | force_load=${True}
+| | Crypto Device Verify on all DUTs | ${nodes}
| Additional Suite Setup Action For nginx
| | [Documentation]
| | ... | Additional Setup for suites which uses Nginx.
| |
| | Install NGINX framework on all DUTs | ${nodes} | ${packages_dir}
-| | ... | ${nginx_version}
+| | ... | ${nginx_version}
+
+| Additional Suite Setup Action For vppecho
+| | [Documentation]
+| | ... | Additional Setup for suites which uses performance measurement over
+| | ... | VPP Echo.
+| |
+| | Export DUT Type And Version | ${DUT_TYPE} | ${DUT_VERSION}
+| | Export TG Type And Version | ${DUT_TYPE} | ${DUT_VERSION}
| Additional Suite Setup Action For ab
| | [Documentation]
| | ... | Additional Setup for suites which uses ab TG.
| |
-| | Verify Program Installed | ${tg} | ab
| | Iface update numa node | ${tg}
| | ${running}= | Is TRex running | ${tg}
| | Run keyword if | ${running}==${True} | Teardown traffic generator | ${tg}
| | ${curr_driver}= | Get PCI dev driver | ${tg}
-| | ... | ${tg['interfaces']['${tg_if1}']['pci_address']}
+| | ... | ${tg['interfaces']['${TG_pf1}[0]']['pci_address']}
| | Run keyword if | '${curr_driver}'!='${None}'
| | ... | PCI Driver Unbind | ${tg} |
-| | ... | ${tg['interfaces']['${tg_if1}']['pci_address']}
-| | ${driver}= | Get Variable Value | ${tg['interfaces']['${tg_if1}']['driver']}
+| | ... | ${tg['interfaces']['${TG_pf1}[0]']['pci_address']}
+| | ${driver}= | Get Variable Value
+| | ... | ${tg['interfaces']['${TG_pf1}[0]']['driver']}
| | PCI Driver Bind | ${tg}
-| | ... | ${tg['interfaces']['${tg_if1}']['pci_address']} | ${driver}
+| | ... | ${tg['interfaces']['${TG_pf1}[0]']['pci_address']} | ${driver}
| | ${intf_name}= | Get Linux interface name | ${tg}
-| | ... | ${tg['interfaces']['${tg_if1}']['pci_address']}
+| | ... | ${tg['interfaces']['${TG_pf1}[0]']['pci_address']}
| | FOR | ${ip_addr} | IN | @{ab_ip_addrs}
| | | ${ip_addr_on_intf}= | Linux interface has IP | ${tg} | ${intf_name}
| | | ... | ${ip_addr} | ${ab_ip_prefix}
| | | Run Keyword If | ${ip_addr_on_intf}==${False} | Set Linux interface IP
| | | ... | ${tg} | ${intf_name} | ${ip_addr} | ${ab_ip_prefix}
| | END
-| | Set Linux interface up | ${tg} | ${intf_name}
-| | Check ab | ${tg}
+| | Set Linux interface up | ${nodes}[TG] | ${intf_name}
+| | ${curr_driver}= | Get PCI dev driver | ${tg}
+| | ... | ${tg['interfaces']['${TG_pf2}[0]']['pci_address']}
+| | Run keyword if | '${curr_driver}'!='${None}'
+| | ... | PCI Driver Unbind | ${tg} |
+| | ... | ${tg['interfaces']['${TG_pf2}[0]']['pci_address']}
+| | ${driver}= | Get Variable Value
+| | ... | ${tg['interfaces']['${TG_pf2}[0]']['driver']}
+| | PCI Driver Bind | ${tg}
+| | ... | ${tg['interfaces']['${TG_pf2}[0]']['pci_address']} | ${driver}
+| | ${intf_name}= | Get Linux interface name | ${tg}
+| | ... | ${tg['interfaces']['${TG_pf2}[0]']['pci_address']}
+| | Set Linux interface up | ${nodes}[TG] | ${intf_name}
+| | Check AB | ${tg}
+| | ${type} = | Get AB Type | ${nodes}[TG]
+| | ${version} = | Get AB Version | ${nodes}[TG]
+| | Export TG Type And Version | ${type} | ${version}
diff --git a/resources/libraries/robot/shared/suite_teardown.robot b/resources/libraries/robot/shared/suite_teardown.robot
index 20b2776eec..810c8bb066 100644
--- a/resources/libraries/robot/shared/suite_teardown.robot
+++ b/resources/libraries/robot/shared/suite_teardown.robot
@@ -30,10 +30,12 @@
| |
| | [Arguments] | @{actions}
| |
+| | Start Suite Teardown Export
| | FOR | ${action} | IN | @{actions}
| | | Run Keyword | Additional Suite Tear Down Action For ${action}
| | END
| | Remove All Added VIF Ports On All DUTs From Topology | ${nodes}
+| | Finalize Suite Teardown Export
| Additional Suite Tear Down Action For ab
| | [Documentation]
@@ -71,3 +73,4 @@
| | FOR | ${dut} | IN | @{duts}
| | | Kill Program | ${nodes['${dut}']} | iperf3
| | | Kill Program | ${nodes['${dut}']} | vpp_echo
+| | END
diff --git a/resources/libraries/robot/shared/test_setup.robot b/resources/libraries/robot/shared/test_setup.robot
index e2fcfc5f87..22e017fd6f 100644
--- a/resources/libraries/robot/shared/test_setup.robot
+++ b/resources/libraries/robot/shared/test_setup.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -21,13 +21,14 @@
*** Keywords ***
| Setup test
| | [Documentation]
-| | ... | Common test setup for tests.
+| | ... | Common test setup for VPP tests.
| |
| | ... | *Arguments:*
| | ... | - ${actions} - Additional setup action. Type: list
| |
| | [Arguments] | @{actions}
| |
+| | Start Test Export
| | Reset PAPI History On All DUTs | ${nodes}
| | ${int} = | Set Variable If | ${nic_vfs} > 0 | prevf | pf
| | Create base startup configuration of VPP on all DUTs
@@ -48,4 +49,4 @@
| | ... | Additional Setup for tests which uses namespace.
| |
| | ${trex_running}= | Is Trex Running | ${tg}
-| | Run Keyword Unless | ${trex_running} | Startup Trex | ${tg} | ${osi_layer}
+| | Run Keyword If | not ${trex_running} | Startup Trex | ${tg} | ${osi_layer}
diff --git a/resources/libraries/robot/shared/test_teardown.robot b/resources/libraries/robot/shared/test_teardown.robot
index 3fe5e6a8ee..f590e8a7cd 100644
--- a/resources/libraries/robot/shared/test_teardown.robot
+++ b/resources/libraries/robot/shared/test_teardown.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -14,7 +14,7 @@
"""Keywords used in test teardowns."""
*** Settings ***
-| Resource | resources/libraries/robot/shared/container.robot
+| Resource | resources/libraries/robot/shared/default.robot
| Library | resources.libraries.python.PapiHistory
| Library | resources.libraries.python.topology.Topology
| Variables | resources/libraries/python/Constants.py
@@ -45,6 +45,7 @@
| | | Run Keyword | Additional Test Tear Down Action For ${action}
| | END
| | Clean Sockets On All Nodes | ${nodes}
+| | Finalize Test Export
| Tear down test raw
| | [Documentation]
@@ -60,6 +61,7 @@
| | | Run Keyword | Additional Test Tear Down Action For ${action}
| | END
| | Clean Sockets On All Nodes | ${nodes}
+| | Finalize Test Export
# Additional Test Tear Down Actions in alphabetical order
| Additional Test Tear Down Action For acl
@@ -128,6 +130,16 @@
| | | ... | Show Ipsec Security Association | ${nodes['${dut}']}
| | END
+| Additional Test Tear Down Action For ipsec_all
+| | [Documentation]
+| | ... | Additional teardown for tests which use varied IPSec configuration.
+| | ... | Databases.
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | Run Keyword If Test Failed
+| | | ... | Vpp Ipsec Show All | ${nodes['${dut}']}
+| | END
+
| Additional Test Tear Down Action For linux_bridge
| | [Documentation]
| | ... | Additional teardown for tests which uses linux_bridge.
@@ -187,6 +199,8 @@
| | ${rate_for_teardown} = | Get Rate For Teardown
| | Call Resetter
| | Set Test Variable | \${extended_debug} | ${True}
+| | Set Test Variable | ${telemetry_rate} | ${EMPTY}
+| | Set Test Variable | ${telemetry_export} | ${False}
| | Send traffic at specified rate
| | ... | trial_duration=${1.0}
| | ... | rate=${rate_for_teardown}
@@ -220,4 +234,4 @@
| |
| | ${vnf_status} | ${value}= | Run Keyword And Ignore Error
| | ... | Keyword Should Exist | vnf_manager.Kill All VMs
-| | Run Keyword If | '${vnf_status}' == 'PASS' | vnf_manager.Kill All VMs \ No newline at end of file
+| | Run Keyword If | '${vnf_status}' == 'PASS' | vnf_manager.Kill All VMs
diff --git a/resources/libraries/robot/shared/vm.robot b/resources/libraries/robot/shared/vm.robot
index eb6acb371f..5b45718a03 100644
--- a/resources/libraries/robot/shared/vm.robot
+++ b/resources/libraries/robot/shared/vm.robot
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -38,7 +38,7 @@
| |
| | ... | *Example:*
| |
-| | ... | \| Configure chains of VMs connected via vhost-user
+| | ... | \| Configure chains of NFs connected via vhost-user
| | ... | \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \| True \|
| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False}
@@ -59,7 +59,7 @@
| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0]
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | ... | rxq_count_int=${rxq_count_int}
-| | ... | virtio_feature_mask=${virtio_feature_mask}
+| | ... | virtio_feature_mask=${virtio_feature_mask} | page_size=${page_size}
| | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning}
| | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt}
| | Set Test Variable | ${cpu_alloc_str}
@@ -114,10 +114,11 @@
| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0]
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | ... | rxq_count_int=${rxq_count_int}
-| | ... | virtio_feature_mask=${virtio_feature_mask}
+| | ... | virtio_feature_mask=${virtio_feature_mask} | page_size=${page_size}
| | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning}
-| | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt}
-| | Set Test Variable | ${cpu_alloc_str}
+| | ${cpu_alloc_str}= | Catenate | SEPARATOR=,
+| | ... | ${${node}_cpu_alloc_str} | ${cpu_wt}
+| | Set Test Variable | ${${node}_cpu_alloc_str} | ${cpu_alloc_str}
| | Run Keyword If | ${validate}
| | ... | All VPP Interfaces Ready Wait | ${nodes} | retries=${300}
| | VPP round robin RX placement on all DUTs | ${nodes} | prefix=Virtual
@@ -143,7 +144,7 @@
| |
| | ... | *Example:*
| |
-| | ... | \| Configure chains of VMs connected via passtrough
+| | ... | \| Configure chains of NFs connected via passtrough
| | ... | \| 1 \| 1 \| False \| 1024 \| False \| False \| vpp \| True \|
| |
| | [Arguments] | ${nf_chains}=${1} | ${nf_nodes}=${1} | ${jumbo}=${False}
@@ -164,7 +165,7 @@
| | ... | vnf=${vnf} | tg_pf1_mac=${TG_pf1_mac}[0] | tg_pf2_mac=${TG_pf2_mac}[0]
| | ... | vs_dtc=${cpu_count_int} | nf_dtc=${nf_dtc} | nf_dtcr=${nf_dtcr}
| | ... | rxq_count_int=${rxq_count_int}
-| | ... | virtio_feature_mask=${virtio_feature_mask}
+| | ... | virtio_feature_mask=${virtio_feature_mask} | page_size=${page_size}
| | ... | if1=${DUT1_${int}1}[0] | if2=${DUT1_${int}2}[0]
| | ${cpu_wt}= | Run Keyword | vnf_manager.Start All VMs | pinning=${pinning}
| | ${cpu_alloc_str}= | Catenate | SEPARATOR=, | ${cpu_alloc_str} | ${cpu_wt}
diff --git a/resources/libraries/robot/wireguard/wireguard.robot b/resources/libraries/robot/wireguard/wireguard.robot
new file mode 100644
index 0000000000..f85c0eb7b1
--- /dev/null
+++ b/resources/libraries/robot/wireguard/wireguard.robot
@@ -0,0 +1,66 @@
+# Copyright (c) 2022 Intel and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+*** Settings ***
+| Library | String
+| Library | resources.libraries.python.InterfaceUtil
+| Library | resources.libraries.python.WireGuardUtil
+| Library | resources.libraries.python.IPUtil
+| Library | resources.libraries.python.IPv6Util
+|
+| Documentation | Wireguard keywords.
+
+*** Keywords ***
+| Generate keys for WireGuard
+| | [Documentation] | Generate a pair of keys for WireGuard
+| |
+| | ... | _NOTE:_ This KW sets following test case variable:
+| | ... | - private_key - wireguard Private key. Type: bytes
+| | ... | - pub_key - wireguard public key. Type: bytes
+| |
+| | ... | *Example:*
+| | ... | \| ${private_key} | ${pub_key} |
+| | ... | \| Generate Wireguard Privatekey and Pubkey \|
+| |
+| | ${private_key} | ${pub_key} | Generate Wireguard Privatekey and Pubkey
+| | Set Test Variable | ${private_key}
+| | Set Test Variable | ${pub_key}
+
+| Initialize WireGuard in 3-node circular topology
+| | [Documentation]
+| | ... | Set UP state on VPP interfaces in path on nodes in 3-node circular
+| | ... | topology. Get the interface MAC addresses and setup ARP on VPP
+| | ... | interfaces towards TG. Setup IPv4 addresses with /24 prefix on DUT-TG
+| | ... | links. Set routing for decrypted traffic on both DUT nodes
+| | ... | with prefix /8 and next hop of neighbour TG interface IPv4 address.
+| |
+| | VPP Interface Set IP Address
+| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${dut1_if1_ip4} | 24
+| | VPP Interface Set IP Address
+| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${dut2_if2_ip4} | 24
+| | VPP Add IP Neighbor
+| | ... | ${dut1} | ${DUT1_${int}1}[0] | ${tg_if1_ip4} | ${TG_pf1_mac}[0]
+| | VPP Add IP Neighbor
+| | ... | ${dut2} | ${DUT2_${int}2}[0] | ${tg_if2_ip4} | ${TG_pf2_mac}[0]
+| | Vpp Route Add | ${dut1} | ${laddr_ip4} | 8 | gateway=${tg_if1_ip4}
+| | ... | interface=${DUT1_${int}1}[0]
+| | Vpp Route Add | ${dut2} | ${raddr_ip4} | 8 | gateway=${tg_if2_ip4}
+| | ... | interface=${DUT2_${int}2}[0]
+
+| VPP Enable Wireguard Async Mode on all VPP DUTs
+| | [Documentation]
+| | ... | Enable wireguard async mode on all DUT nodes.
+| |
+| | FOR | ${dut} | IN | @{duts}
+| | | VPP Wireguard Set Async Mode | ${nodes['${dut}']}
+| | END
diff --git a/resources/model_schema/test_case.schema.yaml b/resources/model_schema/test_case.schema.yaml
new file mode 100644
index 0000000000..f0d350e337
--- /dev/null
+++ b/resources/model_schema/test_case.schema.yaml
@@ -0,0 +1,752 @@
+# Copyright (c) 2023 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+---
+
+$id: https://fd.io/FIXME/CSIT/UTI/test_case/info/1.5.1
+$schema: https://json-schema.org/draft/2020-12/schema
+description: >-
+ Schema for output of test case.
+allOf:
+- description: >-
+ The main structure, without conditional relations between fields yet.
+ type: object
+ additionalProperties: false
+ properties:
+ duration:
+ description: >-
+ A derived quantity. Difference between start_time and end_time,
+ in seconds.
+ $ref: "#/$defs/types/nonnegative_number"
+ dut_type:
+ description: >-
+ DUT type used, e.g. VPP or DPDK.
+ type: string
+ minLength: 1
+ dut_version:
+ description: >-
+ Version string appropriate to DUT type used.
+ type: string
+ minLength: 1
+ end_time:
+ description: >-
+ UTC date and time in RFC 3339 format, specifying calendar time
+ just before test case ended (at the end of test case teardown).
+ $ref: "#/$defs/types/date_time"
+ hosts:
+ description: >-
+ Array of hosts this test interacted with.
+ This can be used for identifying testbed number.
+ Valid tests shoud interact with at least one DUT or TG.
+ The array is usually sorted, but that is not a requirement.
+ type: array
+ minItems: 1
+ items:
+ description: >-
+ Host identifier, usually numeric IPv4 address.
+ type: string
+ telemetry:
+ description: >-
+ Array of telemetry entries. Each entry represent one captured
+ metric.
+ type: array
+ minItems: 0
+ items:
+ description: >-
+ Telemetry entry.
+ type: string
+ message:
+ description: >-
+ If passed is true, this value is empty.
+ Otherwise, value taken directly from TEST_MESSAGE
+ Robot variable, read at the end of test case
+ (in test teardown, before export and validation).
+ It contains information from the exception
+ that caused the failure, probably with additional
+ exceptions from teardown keywords.
+ type: string
+ passed:
+ description: >-
+ Value set accordingly to TEST_STATUS Robot variable,
+ true if and only if the status is "PASS".
+ The status is read at the end of test case
+ (in test teardown, before export and validation).
+ type: boolean
+ result:
+ type: object
+ allOf:
+ - description: >-
+ Sub-schema common for all cases,
+ only result type identifier defined here.
+ properties:
+ type:
+ description: >-
+ Identifier of which result type case is applied.
+ type: string
+ required:
+ - type
+ - oneOf:
+ - description: >-
+ Result type for unknown case.
+ This case represents a test with no specific result
+ (outside message), e.g. device test;
+ or a test with result not parsed into
+ this version of model yet, e.g. GSO test.
+ additionalProperties: false
+ properties:
+ type:
+ const: unknown
+ - description: >-
+ Result type MRR case.
+ additionalProperties: false
+ properties:
+ type:
+ const: mrr
+ receive_rate:
+ description: >-
+ The results refer to receive rates for multiple
+ MRR trials. For PPS, these are aggregate
+ (bidirectional) rates.
+ Currently, the tests are exporting
+ approximated receive rates.
+ That means the actual trial duration
+ is measured (as opposed to trusting traffic
+ generator to honor its target duration),
+ so the resulting values contain noise
+ from time measurement, and can be lower
+ than the real performance
+ (due to various time overheads).
+ Bandwidth values are supported, but currently
+ Robot does not export them.
+ $ref: "#/$defs/types/rate_list_with_bandwidth"
+ required:
+ - type
+ - receive_rate
+ - description: >-
+ Result type NDRPDR case.
+ additionalProperties: false
+ properties:
+ type:
+ const: ndrpdr
+ ndr:
+ description: >-
+ The results refer to search for NDR
+ The accepted loss ratio for NDR is exact zero.
+ Exceed ratio is 50%.
+ For PPS, lowerbound is aggregate
+ (bidirectional) conditional throughput
+ (median forwarding rate among long trials),
+ upperbound is missing.
+ Note that packets the Traffic Generator
+ did not send are also counted as lost packets.
+ $ref: "#/$defs/macros/lower_and_maybe_upper_rate"
+ pdr:
+ description: >-
+ The results refer to search for PDR.
+ The accepted loss ratio for PDR is 0.5%.
+ Exceed ratio is 50%.
+ For PPS, lowerbound is aggregate
+ (bidirectional) conditional throughput
+ (median forwarding rate among long trials),
+ upperbound is missing.
+ Note that packets the Traffic Generator
+ did not send are also counted as lost packets.
+ $ref: "#/$defs/macros/lower_and_maybe_upper_rate"
+ latency_forward:
+ description: >-
+ Object with results related to latency part
+ of NDRPDR test, for forward traffic direction.
+ It is the direction used in unidirectional
+ traffic profiles.
+ ASTF profiles and IMIX STL profiles
+ do not support latency information,
+ so for those tests this object is missing.
+ It is also missing if Traffic Generator
+ fails to return valid latency results
+ for any other reasons,
+ e.g. latency rate is too high for CPU/NIC used.
+ $ref: "#/$defs/macros/latency_for_loads"
+ latency_reverse:
+ description: >-
+ Object with results related to latency part
+ of NDRPDR test, for reverse traffic diration.
+ This object is not present
+ when unidirectional traffic profiles are used.
+ ASTF profiles and IMIX STL profiles
+ do not support latency information,
+ so for those tests this object is missing.
+ It is also missing if Traffic Generator
+ fails to return valid latency results
+ for any other reasons,
+ e.g. latency rate is too high for CPU/NIC used.
+ $ref: "#/$defs/macros/latency_for_loads"
+ required:
+ - type
+ - ndr
+ - pdr
+ - description: >-
+ Result type SOAK case.
+ additionalProperties: false
+ properties:
+ type:
+ const: soak
+ critical_rate:
+ description: >-
+ The results refer to bayesian estimate
+ of critical rate corresponding to
+ average loss ratio of 10^-7.
+ For PPS, this is aggregate (bidirectional) rate.
+ The bounds are computed from
+ trial measurement results,
+ but are not equal to any target load used.
+ Note that packets the Traffic Generator
+ did not send are also counted as lost packets.
+ $ref: "#/$defs/macros/lower_and_maybe_upper_rate"
+ required:
+ - type
+ - critical_rate
+ - description: >-
+ Result type RECONF case.
+ additionalProperties: false
+ properties:
+ type:
+ const: reconf
+ aggregate_rate:
+ description: >-
+ Load used when reconfiguring, found as NDR lower
+ bound. This is an aggregate (bidirectional)
+ rate. Note that packets which the Traffic
+ Generator did not send, are also counted as lost
+ packets.
+ $ref: "#/$defs/types/rate_with_bandwidth"
+ loss:
+ description: >-
+ Number of packets lost during reconfiguration,
+ with the time that equals packet loss divided by
+ packet rate.
+ $ref: "#/$defs/types/packet_with_time"
+ required:
+ - type
+ - loss
+ - aggregate_rate
+ - description: >-
+ Result type HOSTSTACK case.
+ additionalProperties: false
+ properties:
+ type:
+ const: hoststack
+ bandwidth:
+ description: >-
+ Goodput measured in bits per second.
+ $ref: "#/$defs/types/bandwidth"
+ completed_requests:
+ description: >-
+ Number of completed requests.
+ $ref: "#/$defs/types/count_requests"
+ failed_requests:
+ description: >-
+ Number of failed requests.
+ $ref: "#/$defs/types/count_requests"
+ retransmits:
+ description: >-
+ Number of retransmits.
+ $ref: "#/$defs/types/count_packets"
+ latency:
+ description: >-
+ Value and unit of latency.
+ $ref: "#/$defs/types/value_with_unit"
+ duration:
+ description: >-
+ The relative time difference (in seconds)
+ between program start and end.
+ $ref: "#/$defs/types/time_quantity"
+ rate:
+ description: >-
+ RPS or CPS rate, with corresponding unit, as
+ reported by TG.
+ $ref: "#/$defs/types/rate_without_bandwidth"
+ required:
+ - type
+ - bandwidth
+ start_time:
+ description: >-
+ UTC date and time in RFC 3339 format, specifying calendar time
+ just after test case started (at the start of test setup).
+ $ref: "#/$defs/types/date_time"
+ tags:
+ description: >-
+ The list of strings comes directly
+ from Robot variable TEST_TAGS.
+ The content should include both static and dynamic tags
+ at the end of test case (teardown).
+ type: array
+ items:
+ type: string
+ test_documentation:
+ description: >-
+ Value taken directly from TEST_DOCUMENTATION Robot variable.
+ The content is what you see in suite file
+ at test case definition, which is usually empty
+ as CSIT uses data driven test cases.
+ type: string
+ test_id:
+ description: >-
+ A derived quantity.
+ It is the most complete and unique identifier for a test case.
+ This property has a value, of the following form:
+ {suite_name}.{test_name}
+ Here, suite name comes from SUITE_NAME robot variable,
+ test name comes from TEST_NAME robot variable,
+ but both are converted to lower case,
+ and spaces are replaced by underscores.
+ type: string
+ minLength: 3
+ test_name_long:
+ description: >-
+ A derived quantity.
+ This property has a value, of the following form:
+ {nic_short_name}-{frame_size}-{threads_and_cores}-{suite_part}
+ Here, suite part is very similar to suite tag,
+ but additionally may contain a prefix describing NIC driver used
+ (if it is not the default one, drv_vfio_pci for VPP tests).
+ Any space is replaced by underscore and letters are lower case.
+ type: string
+ minLength: 3
+ test_name_short:
+ description: >-
+ A derived quantity.
+ This property has a value very similar to suite tag,
+ but additionally may contain a prefix describing NIC driver used
+ (if it is not the default one, drv_vfio_pci for VPP tests).
+ Any space is replaced by underscore and letters are lower case.
+ type: string
+ minLength: 3
+ test_type:
+ description: >-
+ A derived quantity.
+ Test type identifier, PAL uses it to group similar tests,
+ e.g. for comparison tables.
+ Ideally, this information should be parseable from test name,
+ but the current naming scheme is not simple/consistent enough.
+ The current implementation queries the robot test tags.
+ The resulting value is frequently identical to result type,
+ but this schema version does not require any relation there,
+ as PAL may want to group tests differently.
+ type: string
+ enum:
+ - device
+ - gso
+ - hoststack
+ - mrr
+ - ndrpdr
+ - reconf
+ - soak
+ tg_type:
+ description: >-
+ TG type used, e.g. TREX.
+ type: string
+ minLength: 1
+ tg_version:
+ description: >-
+ Version string appropriate to TG type used.
+ type: string
+ minLength: 1
+ version:
+ description: >-
+ CSIT model version (semver format)
+ the exporting code adhered to.
+ type: string
+ const: 1.5.1
+ required:
+ - duration
+ - dut_type
+ - dut_version
+ - end_time
+ - hosts
+ - telemetry
+ - message
+ - passed
+ - result
+ - start_time
+ - tags
+ - test_documentation
+ - test_id
+ - test_name_long
+ - test_name_short
+ - test_type
+ - tg_type
+ - tg_version
+ - version
+- description: >-
+ Subschema validating relation between status and message.
+ oneOf:
+ - description: >-
+ Subschema for passing tests, message has to be empty.
+ type: object
+ properties:
+ passed:
+ const: true
+ message:
+ const: ""
+ - description: >-
+ Subschema for failing tests, mesage cannot be empty.
+ type: object
+ properties:
+ passed:
+ const: false
+ message:
+ minLength: 1
+
+$defs:
+ types:
+ nonnegative_number:
+ type: number
+ minimum: 0
+ positive_number:
+ type: number
+ minimum: 1
+ nonnegative_integer:
+ type: integer
+ minimum: 0
+ positive_integer:
+ type: integer
+ minimum: 1
+ date_time:
+ type: string
+ format: date-time
+ empty_array:
+ type: array
+ maxItems: 0
+ rate_unit:
+ description: >-
+ Packets per second (pps),
+ connections per second (cps),
+ requests per second (rps),
+ bits per second (bps).
+ type: string
+ enum:
+ - pps
+ - cps
+ - rps
+ - bps
+ bandwidth_unit:
+ description: >-
+ Unit of measurement for bandwidth values.
+ Currently a constant, but later versions of model
+ may allow more units.
+ enum:
+ - bps
+ count_packets:
+ description: >-
+ Type, for counting packets.
+ allOf:
+ - $ref: "#/$defs/types/value_with_unit"
+ - properties:
+ value:
+ description: >-
+ A number of packets of interest.
+ unit:
+ description: >-
+ Unit suitable for displaying packet counts.
+ enum:
+ - packets
+ count_requests:
+ description: >-
+ Type, for counting requests.
+ allOf:
+ - $ref: "#/$defs/types/value_with_unit"
+ - properties:
+ value:
+ description: >-
+ A number of requests of interest.
+ unit:
+ description: >-
+ Unit suitable for displaying request counts.
+ enum:
+ - requests
+ time_quantity:
+ description: >-
+ Reusable type, for various time quantites.
+ allOf:
+ - $ref: "#/$defs/types/value_with_unit"
+ - properties:
+ value:
+ description: >-
+ Unless specified otherwise, this is a duration
+ between two events.
+ unit:
+ description: >-
+ Only seconds are the unit supported for time
+ quantities.
+ enum:
+ - s
+ value_with_unit:
+ description: >-
+ Reusable composite type, value together with its
+ unit of measurement.
+ type: object
+ additionalProperties: false
+ properties:
+ value:
+ description: >-
+ Numeric value, context specified elsewhere.
+ The only assumption is that value is not negative.
+ $ref: "#/$defs/types/nonnegative_number"
+ unit:
+ description: >-
+ Unit of measurement for the value.
+ Context and allowed values are specified elsewhere.
+ type: string
+ required:
+ - value
+ - unit
+ rate_without_bandwidth:
+ description: >-
+ Reusable type, for various rate quantites.
+ allOf:
+ - $ref: "#/$defs/types/value_with_unit"
+ - properties:
+ value:
+ description: >-
+ Unless specified otherwise,
+ this is the aggregated rate
+ (sum of both traffic directions).
+ Depending on the usage, the value can express
+ intended load, offered load, receive rate,
+ and various approximations
+ or estimated bounds thereof.
+ unit:
+ description: >-
+ A transaction rate unit the value is expressed in.
+ $ref: "#/$defs/types/rate_unit"
+ bandwidth:
+ description: >-
+ Reusable type, for various bandwidth quantites.
+ allOf:
+ - $ref: "#/$defs/types/value_with_unit"
+ - properties:
+ value:
+ description: >-
+ Bandwidth value computed from the corresponding
+ rate.
+ unit:
+ $ref: "#/$defs/types/bandwidth_unit"
+ rate_with_bandwidth:
+ description: >-
+ Reusable composite type, joining primary rate
+ with optional derived bandwidth.
+ Not all test types currently compute bandwidth,
+ even if rate unit is pps.
+ type: object
+ additionalProperties: false
+ properties:
+ rate:
+ $ref: "#/$defs/types/rate_without_bandwidth"
+ bandwidth:
+ $ref: "#/$defs/types/bandwidth"
+ required:
+ - rate
+ packet_with_time:
+ description: >-
+ Reusable composite type, joining packet count with the
+ time quantity.
+ type: object
+ additionalProperties: false
+ properties:
+ packet:
+ $ref: "#/$defs/types/count_packets"
+ time:
+ $ref: "#/$defs/types/time_quantity"
+ required:
+ - packet
+ - time
+ value_list_with_unit_and_stats:
+ description: >-
+ Reusable composite type, multiple values together with their
+ unit of measurement and derived statistics.
+ type: object
+ additionalProperties: false
+ properties:
+ values:
+ description: >-
+ List of values of the same unit, useful for MRR.
+ type: array
+ minItmes: 1
+ items:
+ description: >-
+ Numeric value, context specified elsewhere. The only
+ assumption is that the value is nonnegative.
+ $ref: "#/$defs/types/nonnegative_number"
+ avg:
+ description: >-
+ A derived quantity. It is the arithmetic average of the
+ values list.
+ $ref: "#/$defs/types/nonnegative_number"
+ stdev:
+ description: >-
+ A derived quantity. It is the standard deviation for the
+ values list, as computed by jumpavg library.
+ $ref: "#/$defs/types/nonnegative_number"
+ unit:
+ description: >-
+ Unit of measurement for the values.
+ Context and allowed values are specified elsewhere.
+ type: string
+ required:
+ - values
+ - avg
+ - stdev
+ - unit
+ rate_list_without_bandwidth:
+ description: >-
+ Reusable composite type, multiple rate values.
+ allOf:
+ - $ref: "#/$defs/types/value_list_with_unit_and_stats"
+ - properties:
+ values:
+ items:
+ description: >-
+ Unless specified otherwise,
+ this is the aggregated rate
+ (sum of both traffic directions).
+ Depending on the usage, the value can express
+ intended load, offered load, receive rate,
+ and various approximations or estimated bounds
+ thereof.
+ unit:
+ $ref: "#/$defs/types/rate_unit"
+ bandwidth_list:
+ description: >-
+ Reusable composite type, multiple bandwidth values. This is a
+ derived quantity.
+ allOf:
+ - $ref: "#/$defs/types/value_list_with_unit_and_stats"
+ - properties:
+ values:
+ items:
+ description: >-
+ Unless specified otherwise,
+ this is the aggregated bandwidth
+ (sum of both traffic directions).
+ Depending on the usage, the value can express
+ intended load, offered load, receive rate,
+ and various approximations or estimated bounds
+ thereof.
+ unit:
+ $ref: "#/$defs/types/bandwidth_unit"
+ rate_list_with_bandwidth:
+ description: >-
+ Reusable composite type, joining primary rates
+ with optional derived bandwidths (and stats).
+ No test types currently computes the bandwidth part.
+ type: object
+ additionalProperties: false
+ properties:
+ rate:
+ $ref: "#/$defs/types/rate_list_without_bandwidth"
+ bandwidth:
+ $ref: "#/$defs/types/bandwidth_list"
+ required:
+ - rate
+ macros:
+ lower_and_maybe_upper_rate:
+ type: object
+ additionalProperties: false
+ properties:
+ lower:
+ description: >-
+ The lower bound (or min_rate) for the estimate
+ of a particular searched value.
+ $ref: "#/$defs/types/rate_with_bandwidth"
+ upper:
+ description: >-
+ The upper bound (or max_rate) for the estimate
+ of a particular searched value.
+ $ref: "#/$defs/types/rate_with_bandwidth"
+ required:
+ - lower
+ latency_numbers:
+ type: object
+ additionalProperties: false
+ properties:
+ min:
+ description: >-
+ Rounded minimal latency time measured in this trial.
+ See unit property for the unit of measurement.
+ $ref: "#/$defs/types/nonnegative_integer"
+ max:
+ description: >-
+ Rounded maximal latency time measured in this trial.
+ See unit property for the unit of measurement.
+ Zero value is not allowed, as that is one of symptoms
+ of Traffic Generator failing to get proper latency.
+ $ref: "#/$defs/types/positive_integer"
+ avg:
+ description: >-
+ Rounded average latency time measured in this trial.
+ See unit property for the unit of measurement.
+ $ref: "#/$defs/types/nonnegative_integer"
+ hdrh:
+ description: >-
+ Base64-encoded compressed representation of HDRHistogram
+ of all latency sample times encountered
+ in this latency trial.
+ See unit property for the unit of measurement.
+ Note that some bins can be several units wide.
+ type: string
+ unit:
+ description: >-
+ Unit of measurement for latency times.
+ Currently a constant, but later versions
+ of the model may allow more values.
+ type: string
+ enum:
+ - us
+ required:
+ - avg
+ - hdrh
+ - max
+ - min
+ - unit
+ latency_for_loads:
+ type: object
+ additionalProperties: false
+ properties:
+ pdr_0:
+ description: >-
+ Object related to latency measurement performed
+ at minimal rate (currently 9000 pps per direction).
+ $ref: "#/$defs/macros/latency_numbers"
+ pdr_10:
+ description: >-
+ Object related to latency measurement performed
+ at 10% of PDR lower bound, if needed rounded up
+ to minimal rate (currently 9000 pps per direction).
+ $ref: "#/$defs/macros/latency_numbers"
+ pdr_50:
+ description: >-
+ Object related to latency measurement performed
+ at 50% of PDR lower bound, if needed rounded up
+ to minimal rate (currently 9000 pps per direction).
+ $ref: "#/$defs/macros/latency_numbers"
+ pdr_90:
+ description: >-
+ Object related to latency measurement performed
+ at 90% of PDR lower bound, if needed rounded up
+ to minimal rate (currently 9000 pps per direction).
+ $ref: "#/$defs/macros/latency_numbers"
+ required:
+ - pdr_0
+ - pdr_10
+ - pdr_50
+ - pdr_90
diff --git a/resources/templates/container/memif_create_chain_dma.exec b/resources/templates/container/memif_create_chain_dma.exec
new file mode 100644
index 0000000000..e4dac71943
--- /dev/null
+++ b/resources/templates/container/memif_create_chain_dma.exec
@@ -0,0 +1,10 @@
+create memif socket id $sid1 filename $socket1
+create interface memif id $mid1 socket-id $sid1 master use-dma
+set int state memif$sid1/$mid1 up
+
+create memif socket id $sid2 filename $socket2
+create interface memif id $mid2 socket-id $sid2 master use-dma
+set int state memif$sid2/$mid2 up
+
+set interface l2 xconnect memif$sid2/$mid2 memif$sid1/$mid1
+set interface l2 xconnect memif$sid1/$mid1 memif$sid2/$mid2 \ No newline at end of file
diff --git a/resources/templates/telemetry/bpf_runtime.yaml b/resources/templates/telemetry/bpf_runtime.yaml
index 88ad7eb64f..e2e1fd52f1 100644
--- a/resources/templates/telemetry/bpf_runtime.yaml
+++ b/resources/templates/telemetry/bpf_runtime.yaml
@@ -2,16 +2,23 @@
logging:
version: 1
formatters:
- console:
+ console_stdout:
format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
prom:
format: '%(message)s'
handlers:
- console:
+ console_stdout:
class: logging.StreamHandler
level: INFO
- formatter: console
+ formatter: console_stdout
stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
prom:
class: logging.handlers.RotatingFileHandler
level: INFO
@@ -25,9 +32,10 @@ logging:
propagate: False
root:
level: INFO
- handlers: [console]
+ handlers: [console_stdout, console_stderr]
scheduler:
duration: 1
+ sample_period: 100
programs:
- name: bundle_bpf
metrics:
@@ -39,6 +47,41 @@ programs:
- name
- cpu
- pid
+ events:
+ - type: 0x4 # RAW
+ name: 0x3C # INTEL_CORE_E_CPU_CLK_UNHALTED_THREAD_P
+ target: on_cpu_cycle
+ table: cpu_cycle
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(cpu_cycle, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_cpu_cycle(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ cpu_cycle.increment(key, ctx->sample_period);
+ return 0;
+ }
+ - name: bundle_bpf
+ metrics:
+ counter:
- name: cpu_instruction
documentation: Instructions retired by CPUs
namespace: bpf
@@ -46,15 +89,85 @@ programs:
- name
- cpu
- pid
- - name: llc_reference
- documentation: Last level cache operations by type
+ events:
+ - type: 0x4 # RAW
+ name: 0xC0 # INTEL_CORE_E_INST_RETIRED_ANY_P
+ target: on_cpu_instruction
+ table: cpu_instruction
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(cpu_instruction, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_cpu_instruction(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ cpu_instruction.increment(key, ctx->sample_period);
+ return 0;
+ }
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: cache_references
+ documentation: Cache references
namespace: bpf
labelnames:
- name
- cpu
- pid
- - name: llc_miss
- documentation: Last level cache operations by type
+ events:
+ - type: 0x0 # HARDWARE
+ name: 0x2 # PERF_COUNT_HW_CACHE_REFERENCES
+ target: on_cache_reference
+ table: cache_references
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(cache_references, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_cache_reference(struct bpf_perf_event_data *ctx) {
+ struct key_t key = {};
+ get_key(&key);
+
+ cache_references.increment(key, ctx->sample_period);
+ return 0;
+ }
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: cache_miss
+ documentation: Cache misses
namespace: bpf
labelnames:
- name
@@ -62,21 +175,9 @@ programs:
- pid
events:
- type: 0x0 # HARDWARE
- name: 0x0 # PERF_COUNT_HW_CPU_CYCLES
- target: on_cpu_cycle
- table: cpu_cycle
- - type: 0x0 # HARDWARE
- name: 0x1 # PERF_COUNT_HW_INSTRUCTIONS
- target: on_cpu_instruction
- table: cpu_instruction
- - type: 0x0 # HARDWARE
- name: 0x2 # PERF_COUNT_HW_CACHE_REFERENCES
- target: on_cache_reference
- table: llc_reference
- - type: 0x0 # HARDWARE
name: 0x3 # PERF_COUNT_HW_CACHE_MISSES
target: on_cache_miss
- table: llc_miss
+ table: cache_miss
code: |
#include <linux/ptrace.h>
#include <uapi/linux/bpf_perf_event.h>
@@ -89,10 +190,7 @@ programs:
char name[TASK_COMM_LEN];
};
- BPF_HASH(llc_miss, struct key_t);
- BPF_HASH(llc_reference, struct key_t);
- BPF_HASH(cpu_instruction, struct key_t);
- BPF_HASH(cpu_cycle, struct key_t);
+ BPF_HASH(cache_miss, struct key_t);
static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
key->cpu = bpf_get_smp_processor_id();
@@ -100,31 +198,555 @@ programs:
bpf_get_current_comm(&(key->name), sizeof(key->name));
}
- int on_cpu_cycle(struct bpf_perf_event_data *ctx) {
+ int on_cache_miss(struct bpf_perf_event_data *ctx) {
struct key_t key = {};
get_key(&key);
- cpu_cycle.increment(key, ctx->sample_period);
+ cache_miss.increment(key, ctx->sample_period);
return 0;
}
- int on_cpu_instruction(struct bpf_perf_event_data *ctx) {
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: branch_instruction
+# documentation: Instructions retired by branch
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x4 # PERF_COUNT_HW_BRANCH_INSTRUCTION
+# target: on_branch_instruction
+# table: branch_instruction
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(branch_instruction, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_branch_instruction(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# branch_instruction.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: branch_misses (not supported by CPU)
+# documentation: Last level miss operations by type
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x5 # PERF_COUNT_HW_BRANCH_MISSES
+# target: on_branch_misses
+# table: branch_misses
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(branch_misses, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_branch_misses(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# branch_misses.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: bus_cycles
+# documentation: Count of bus cycles
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x6 # PERF_COUNT_HW_BUS_CYCLES
+# target: on_bus_cycles
+# table: bus_cycles
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(bus_cycles, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+# int on_bus_cycles(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# bus_cycles.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: stalled_cycles_frontend (not supported by CPU)
+# documentation: Frontend stalled cycles
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x7 # PERF_COUNT_HW_STALLED_CYCLES_FRONTEND
+# target: on_stalled_cycles_frontend
+# table: stalled_cycles_frontend
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(stalled_cycles_frontend, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_stalled_cycles_frontend(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# stalled_cycles_frontend.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: stalled_cycles_backend
+# documentation: Backend stalled cycles
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x8 # PERF_COUNT_HW_STALLED_CYCLES_BACKEND
+# target: on_stalled_cycles_backend
+# table: stalled_cycles_backend
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(stalled_cycles_backend, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_stalled_cycles_backend(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# stalled_cycles_backend.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: referenced_cpu_cycles
+# documentation: Referenced CPU cycles
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x0 # HARDWARE
+# name: 0x9 # PERF_COUNT_HW_REF_CPU_CYCLES
+# target: on_referenced_cpu_cycles
+# table: referenced_cpu_cycles
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(referenced_cpu_cycles, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_referenced_cpu_cycles(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# referenced_cpu_cycles.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: sw_cpu_clock
+# documentation: SW CPU clock
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x1 # SOFTWARE
+# name: 0x0 # PERF_COUNT_SW_CPU_CLOCK
+# target: on_sw_cpu_clock
+# table: sw_cpu_clock
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(sw_cpu_clock, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_sw_cpu_clock(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# sw_cpu_clock.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: sw_task_clock
+# documentation: SW task clock
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x1 # SOFTWARE
+# name: 0x1 # PERF_COUNT_SW_TASK_CLOCK
+# target: on_sw_task_clock
+# table: sw_task_clock
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(sw_task_clock, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_sw_task_clock(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# sw_task_clock.increment(key, ctx->sample_period);
+# return 0;
+# }
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: sw_page_faults
+# documentation: SW page faults
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x1 # SOFTWARE
+# name: 0x2 # PERF_COUNT_SW_PAGE_FAULTS
+# target: on_sw_page_faults
+# table: sw_page_faults
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(sw_page_faults, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_sw_page_faults(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# sw_page_faults.increment(key, ctx->sample_period);
+# return 0;
+# }
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: sw_context_switches
+ documentation: SW context switches
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ events:
+ - type: 0x1 # SOFTWARE
+ name: 0x3 # PERF_COUNT_SW_CONTEXT_SWITCHES
+ target: on_sw_context_switches
+ table: sw_context_switches
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(sw_context_switches, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_sw_context_switches(struct bpf_perf_event_data *ctx) {
struct key_t key = {};
get_key(&key);
- cpu_instruction.increment(key, ctx->sample_period);
+ sw_context_switches.increment(key, ctx->sample_period);
return 0;
}
- int on_cache_reference(struct bpf_perf_event_data *ctx) {
+# - name: bundle_bpf
+# metrics:
+# counter:
+# - name: sw_cpu_migrations
+# documentation: SW cpu migrations
+# namespace: bpf
+# labelnames:
+# - name
+# - cpu
+# - pid
+# events:
+# - type: 0x1 # SOFTWARE
+# name: 0x4 # PERF_COUNT_SW_CPU_MIGRATIONS
+# target: on_sw_cpu_migrations
+# table: sw_cpu_migrations
+# code: |
+# #include <linux/ptrace.h>
+# #include <uapi/linux/bpf_perf_event.h>
+#
+# const int max_cpus = 256;
+#
+# struct key_t {
+# int cpu;
+# int pid;
+# char name[TASK_COMM_LEN];
+# };
+#
+# BPF_HASH(sw_cpu_migrations, struct key_t);
+#
+# static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+# key->cpu = bpf_get_smp_processor_id();
+# key->pid = bpf_get_current_pid_tgid();
+# bpf_get_current_comm(&(key->name), sizeof(key->name));
+# }
+#
+# int on_sw_cpu_migrations(struct bpf_perf_event_data *ctx) {
+# struct key_t key = {};
+# get_key(&key);
+#
+# sw_cpu_migrations.increment(key, ctx->sample_period);
+# return 0;
+# }
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: sw_page_faults_min
+ documentation: SW page faults minor
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ events:
+ - type: 0x1 # SOFTWARE
+ name: 0x5 # PERF_COUNT_SW_PAGE_FAULTS_MIN
+ target: on_sw_page_faults_min
+ table: sw_page_faults_min
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(sw_page_faults_min, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_sw_page_faults_min(struct bpf_perf_event_data *ctx) {
struct key_t key = {};
get_key(&key);
- llc_reference.increment(key, ctx->sample_period);
+ sw_page_faults_min.increment(key, ctx->sample_period);
return 0;
}
- int on_cache_miss(struct bpf_perf_event_data *ctx) {
+ - name: bundle_bpf
+ metrics:
+ counter:
+ - name: sw_page_faults_maj
+ documentation: SW page faults major
+ namespace: bpf
+ labelnames:
+ - name
+ - cpu
+ - pid
+ events:
+ - type: 0x1 # SOFTWARE
+ name: 0x6 # PERF_COUNT_SW_PAGE_FAULTS_MAJ
+ target: on_sw_page_faults_maj
+ table: sw_page_faults_maj
+ code: |
+ #include <linux/ptrace.h>
+ #include <uapi/linux/bpf_perf_event.h>
+
+ const int max_cpus = 256;
+
+ struct key_t {
+ int cpu;
+ int pid;
+ char name[TASK_COMM_LEN];
+ };
+
+ BPF_HASH(sw_page_faults_maj, struct key_t);
+
+ static inline __attribute__((always_inline)) void get_key(struct key_t* key) {
+ key->cpu = bpf_get_smp_processor_id();
+ key->pid = bpf_get_current_pid_tgid();
+ bpf_get_current_comm(&(key->name), sizeof(key->name));
+ }
+
+ int on_sw_page_faults_maj(struct bpf_perf_event_data *ctx) {
struct key_t key = {};
get_key(&key);
- llc_miss.increment(key, ctx->sample_period);
+ sw_page_faults_maj.increment(key, ctx->sample_period);
return 0;
}
diff --git a/resources/templates/telemetry/perf_stat_runtime.yaml b/resources/templates/telemetry/perf_stat_runtime.yaml
new file mode 100644
index 0000000000..ae0f804945
--- /dev/null
+++ b/resources/templates/telemetry/perf_stat_runtime.yaml
@@ -0,0 +1,134 @@
+---
+logging:
+ version: 1
+ formatters:
+ console_stdout:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console_stdout:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console_stdout
+ stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console_stdout, console_stderr]
+scheduler:
+ duration: 1
+programs:
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: cpu_cycles
+ documentation: Cycles processed by CPUs
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0x3C # cpu-cycles
+ umask: 0x00
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: instructions
+ documentation: Instructions retired by CPUs
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xC0 # instructions
+ umask: 0x00
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l1_hit
+ documentation: L1 Hit
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L1_HIT
+ umask: 0x01
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l2_hit
+ documentation: L2 Hit
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L2_HIT
+ umask: 0x02
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l3_hit
+ documentation: L3 Hit
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L3_HIT
+ umask: 0x04
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l1_miss
+ documentation: L1 Miss
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L1_MISS
+ umask: 0x08
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l2_miss
+ documentation: L2 Miss
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L2_MISS
+ umask: 0x10
+ - name: bundle_perf_stat
+ metrics:
+ counter:
+ - name: mem_load_uops_retired_l3_miss
+ documentation: L3 Miss
+ namespace: perf_stat
+ labelnames:
+ - thread
+ - pid
+ events:
+ - eventcode: 0xD1 # MEM_LOAD_UOPS_RETIRED.L3_MISS
+ umask: 0x20
diff --git a/resources/templates/telemetry/vpp_clear_stats.yaml b/resources/templates/telemetry/vpp_clear_stats.yaml
index 9391502654..72c20604ee 100644
--- a/resources/templates/telemetry/vpp_clear_stats.yaml
+++ b/resources/templates/telemetry/vpp_clear_stats.yaml
@@ -2,16 +2,23 @@
logging:
version: 1
formatters:
- console:
+ console_stdout:
format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
prom:
format: '%(message)s'
handlers:
- console:
+ console_stdout:
class: logging.StreamHandler
level: INFO
- formatter: console
+ formatter: console_stdout
stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
prom:
class: logging.handlers.RotatingFileHandler
level: INFO
@@ -25,7 +32,7 @@ logging:
propagate: False
root:
level: INFO
- handlers: [console]
+ handlers: [console_stdout, console_stderr]
scheduler:
duration: 1
programs:
@@ -34,40 +41,50 @@ programs:
gauge:
- name: calls
documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors
documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: suspends
documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: clocks
documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors_calls
documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -79,61 +96,92 @@ programs:
gauge:
- name: rx_packets
documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_bytes
documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_packets
documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_bytes
documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: drops
documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: punt
documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip4
documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip6
documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_no_buf
documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_miss
documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
@@ -142,8 +190,57 @@ programs:
- name: bundle_vpp
metrics:
gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ clear hardware
+ - name: bundle_vpp
+ metrics:
+ gauge:
- name: node_counter
documentation: Node counter
+ namespace: vpp
+ subsystem: node
labelnames:
- name
- reason
@@ -157,12 +254,16 @@ programs:
gauge:
- name: calls
documentation: Load operations
+ namespace: vpp
+ subsystem: perfmon
labelnames:
- name
- thread_name
- thread_id
- name: packets
documentation: Load operations
+ namespace: vpp
+ subsystem: perfmon
labelnames:
- name
- thread_name
diff --git a/resources/templates/telemetry/vpp_runtime.yaml b/resources/templates/telemetry/vpp_runtime.yaml
index 4f0f6d7a7d..d7beb23cc6 100644
--- a/resources/templates/telemetry/vpp_runtime.yaml
+++ b/resources/templates/telemetry/vpp_runtime.yaml
@@ -2,16 +2,23 @@
logging:
version: 1
formatters:
- console:
+ console_stdout:
format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
prom:
format: '%(message)s'
handlers:
- console:
+ console_stdout:
class: logging.StreamHandler
level: INFO
- formatter: console
+ formatter: console_stdout
stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
prom:
class: logging.handlers.RotatingFileHandler
level: INFO
@@ -25,30 +32,19 @@ logging:
propagate: False
root:
level: INFO
- handlers: [console]
+ handlers: [console_stdout, console_stderr]
scheduler:
duration: 1
programs:
- name: bundle_vpp
metrics:
- info:
- - name: version
- documentation: VPP version
- namespace: vpp
- subsystem: version
- labelnames:
- - version
- code: |
- show version
- - name: bundle_vpp
- metrics:
gauge:
- name: calls
documentation: Number of calls total
namespace: vpp
subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -58,7 +54,7 @@ programs:
namespace: vpp
subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -68,7 +64,7 @@ programs:
namespace: vpp
subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -78,7 +74,7 @@ programs:
namespace: vpp
subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -88,7 +84,7 @@ programs:
namespace: vpp
subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -100,159 +96,12 @@ programs:
- name: bundle_vpp
metrics:
gauge:
- - name: rx_packets
- documentation: Number of received packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: rx_bytes
- documentation: Number of received bytes for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: rx_error
- documentation: Number of errors on interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: tx_packets
- documentation: Number of transitted packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: tx_bytes
- documentation: Number of transitted bytes for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: tx_error
- documentation: Number of errors on interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: drops
- documentation: Number of dropped packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: punt
- documentation: Number of punted packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: ip4
- documentation: Number of IPv4 packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: ip6
- documentation: Number of IPv6 packets for interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: rx_no_buf
- documentation: Number of out of buffer RX packets on interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- - name: rx_miss
- documentation: Number of missed RX packets on interface
- namespace: vpp
- subsystem: interface
- labelnames:
- - name
- - index
- code: |
- clear interfaces
- wait {duration}
- show interface
- - name: bundle_vpp
- metrics:
- gauge:
- - name: node_counter
- documentation: Node counter
- namespace: vpp
- subsystem: counters
- labelnames:
- - name
- - reason
- - severity
- - thread_name
- - thread_id
- code: |
- clear node counters
- wait {duration}
- show node counters verbose
- - name: bundle_vpp
- metrics:
- gauge:
- - name: context_switches
- documentation: Per-thread context switches
- namespace: vpp
- subsystem: context_switches
- labelnames:
- - name
- - id
- code: |
- perfmon reset
- perfmon start bundle context-switches
- wait {duration}
- perfmon stop
- show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- - name: minor_page_faults
- documentation: Per-thread page faults (minor)
- namespace: vpp
- subsystem: page_faults
- labelnames:
- - name
- - id
- - name: major_page_faults
- documentation: Per-thread page faults (major)
- namespace: vpp
- subsystem: page_faults
- labelnames:
- - name
- - id
- code: |
- perfmon reset
- perfmon start bundle page-faults
- wait {duration}
- perfmon stop
- show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- name: calls
documentation: Instructions/packet, cycles/packet and IPC (calls)
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: packets
@@ -260,7 +109,7 @@ programs:
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: packets_per_call
@@ -268,7 +117,7 @@ programs:
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: clocks_per_packets
@@ -276,7 +125,7 @@ programs:
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: instructions_per_packets
@@ -284,7 +133,7 @@ programs:
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: ipc
@@ -292,7 +141,7 @@ programs:
namespace: vpp
subsystem: inst_and_clock
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
code: |
@@ -309,7 +158,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: l1_miss
@@ -317,7 +166,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: l2_hit
@@ -325,7 +174,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: l2_miss
@@ -333,7 +182,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: l3_hit
@@ -341,7 +190,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
- name: l3_miss
@@ -349,7 +198,7 @@ programs:
namespace: vpp
subsystem: cache_hierarchy
labelnames:
- - name
+ - node_name
- thread_name
- thread_id
code: |
@@ -358,151 +207,3 @@ programs:
wait {duration}
perfmon stop
show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- - name: calls
- documentation: Load operations (calls)
- namespace: vpp
- subsystem: load_blocks
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: packets
- documentation: Load operations (packets)
- namespace: vpp
- subsystem: load_blocks
- labelnames:
- - name
- - thread_name
- - thread_id
- code: |
- perfmon reset
- perfmon start bundle load-blocks
- wait {duration}
- perfmon stop
- show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- - name: branches_per_call
- documentation: Branches/call
- namespace: vpp
- subsystem: branch_mispred
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: branches_per_packet
- documentation: Branches/packet
- namespace: vpp
- subsystem: branch_mispred
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: taken_per_call
- documentation: Taken/call
- namespace: vpp
- subsystem: branch_mispred
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: taken_per_packet
- documentation: Taken/packet
- namespace: vpp
- subsystem: branch_mispred
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: mis_predictions
- documentation: Mis-predictions
- namespace: vpp
- subsystem: branch_mispred
- labelnames:
- - name
- - thread_name
- - thread_id
- code: |
- perfmon reset
- perfmon start bundle branch-mispred
- wait {duration}
- perfmon stop
- show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- - name: lvl0
- documentation: Branches/call
- namespace: vpp
- subsystem: power_licensing
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: lvl1
- documentation: Branches/packet
- namespace: vpp
- subsystem: power_licensing
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: lvl2
- documentation: Taken/call
- namespace: vpp
- subsystem: power_licensing
- labelnames:
- - name
- - thread_name
- - thread_id
- - name: throttle
- documentation: Taken/packet
- namespace: vpp
- subsystem: power_licensing
- labelnames:
- - name
- - thread_name
- - thread_id
- code: |
- perfmon reset
- perfmon start bundle power-licensing
- wait {duration}
- perfmon stop
- show perfmon statistics
- - name: bundle_vpp
- metrics:
- gauge:
- - name: runtime
- documentation: RunTime
- namespace: vpp
- subsystem: memory_bandwidth
- labelnames:
- - name
- - name: reads_mbs
- documentation: Reads (MB/s)
- namespace: vpp
- subsystem: memory_bandwidth
- labelnames:
- - name
- - name: writes_mbs
- documentation: Writes (MB/s)
- namespace: vpp
- subsystem: memory_bandwidth
- labelnames:
- - name
- - name: total_mbs
- documentation: Total (MB/s)
- namespace: vpp
- subsystem: memory_bandwidth
- labelnames:
- - name
- code: |
- perfmon reset
- perfmon start bundle memory-bandwidth
- wait {duration}
- perfmon stop
- show perfmon statistics
diff --git a/resources/templates/telemetry/vpp_show_stats.yaml b/resources/templates/telemetry/vpp_show_stats.yaml
index 16c895447c..626839f410 100644
--- a/resources/templates/telemetry/vpp_show_stats.yaml
+++ b/resources/templates/telemetry/vpp_show_stats.yaml
@@ -2,16 +2,23 @@
logging:
version: 1
formatters:
- console:
+ console_stdout:
format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
prom:
format: '%(message)s'
handlers:
- console:
+ console_stdout:
class: logging.StreamHandler
level: INFO
- formatter: console
+ formatter: console_stdout
stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
prom:
class: logging.handlers.RotatingFileHandler
level: INFO
@@ -25,7 +32,7 @@ logging:
propagate: False
root:
level: INFO
- handlers: [console]
+ handlers: [console_stdout, console_stderr]
scheduler:
duration: 1
programs:
@@ -34,40 +41,50 @@ programs:
counter:
- name: calls
documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors
documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: suspends
documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: clocks
documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors_calls
documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -79,61 +96,92 @@ programs:
counter:
- name: rx_packets
documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_bytes
documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_packets
documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_bytes
documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: drops
documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: punt
documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip4
documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip6
documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_no_buf
documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_miss
documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
@@ -141,9 +189,58 @@ programs:
show interface
- name: bundle_vpp
metrics:
+ gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ show hardware verbose
+ - name: bundle_vpp
+ metrics:
counter:
- name: node_counter
documentation: Node counter
+ namespace: vpp
+ subsystem: node
labelnames:
- name
- reason
diff --git a/resources/templates/telemetry/vpp_test_teardown.yaml b/resources/templates/telemetry/vpp_test_teardown.yaml
index a1372da19a..ac096526ce 100644
--- a/resources/templates/telemetry/vpp_test_teardown.yaml
+++ b/resources/templates/telemetry/vpp_test_teardown.yaml
@@ -2,16 +2,23 @@
logging:
version: 1
formatters:
- console:
+ console_stdout:
format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
prom:
format: '%(message)s'
handlers:
- console:
+ console_stdout:
class: logging.StreamHandler
level: INFO
- formatter: console
+ formatter: console_stdout
stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
prom:
class: logging.handlers.RotatingFileHandler
level: INFO
@@ -25,7 +32,7 @@ logging:
propagate: False
root:
level: INFO
- handlers: [console]
+ handlers: [console_stdout, console_stderr]
scheduler:
duration: 0
programs:
@@ -34,40 +41,50 @@ programs:
counter:
- name: calls
documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors
documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: suspends
documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: clocks
documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
- thread_lcore
- name: vectors_calls
documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
labelnames:
- - name
+ - node_name
- state
- thread_name
- thread_id
@@ -79,61 +96,92 @@ programs:
counter:
- name: rx_packets
documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_bytes
documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_packets
documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_bytes
documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: tx_error
documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: drops
documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: punt
documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip4
documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: ip6
documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_no_buf
documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
- name: rx_miss
documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
labelnames:
- name
- index
@@ -141,9 +189,58 @@ programs:
show interface
- name: bundle_vpp
metrics:
+ gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ show hardware verbose
+ - name: bundle_vpp
+ metrics:
counter:
- name: node_counter
documentation: Node counter
+ namespace: vpp
+ subsystem: node
labelnames:
- name
- reason
diff --git a/resources/templates/telemetry/vppctl_clear_stats.yaml b/resources/templates/telemetry/vppctl_clear_stats.yaml
new file mode 100644
index 0000000000..b23081e4f2
--- /dev/null
+++ b/resources/templates/telemetry/vppctl_clear_stats.yaml
@@ -0,0 +1,272 @@
+---
+logging:
+ version: 1
+ formatters:
+ console_stdout:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console_stdout:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console_stdout
+ stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console_stdout, console_stderr]
+scheduler:
+ duration: 1
+programs:
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: calls
+ documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors
+ documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: suspends
+ documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: clocks
+ documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors_calls
+ documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ code: |
+ vppctl -s {socket} clear runtime
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: rx_packets
+ documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_packets
+ documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: drops
+ documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: punt
+ documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip4
+ documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip6
+ documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_no_buf
+ documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_miss
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} clear interfaces
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} clear hardware
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: node_counter
+ documentation: Node counter
+ namespace: vpp
+ subsystem: node
+ labelnames:
+ - name
+ - reason
+ - severity
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} clear node counters
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: calls
+ documentation: Load operations
+ namespace: vpp
+ subsystem: perfmon
+ labelnames:
+ - name
+ - thread_name
+ - thread_id
+ - name: packets
+ documentation: Load operations
+ namespace: vpp
+ subsystem: perfmon
+ labelnames:
+ - name
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} perfmon reset
diff --git a/resources/templates/telemetry/vppctl_runtime.yaml b/resources/templates/telemetry/vppctl_runtime.yaml
new file mode 100644
index 0000000000..2ac72c0b8a
--- /dev/null
+++ b/resources/templates/telemetry/vppctl_runtime.yaml
@@ -0,0 +1,209 @@
+---
+logging:
+ version: 1
+ formatters:
+ console_stdout:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console_stdout:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console_stdout
+ stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console_stdout, console_stderr]
+scheduler:
+ duration: 1
+programs:
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: calls
+ documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors
+ documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: suspends
+ documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: clocks
+ documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors_calls
+ documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ code: |
+ vppctl -s {socket} clear runtime
+ sleep {duration}
+ vppctl -s {socket} show runtime
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: calls
+ documentation: Instructions/packet, cycles/packet and IPC (calls)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: packets
+ documentation: Instructions/packet, cycles/packet and IPC (packets)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: packets_per_call
+ documentation: Instructions/packet, cycles/packet and IPC (packets/call)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: clocks_per_packets
+ documentation: Instructions/packet, cycles/packet and IPC (clocks/packets)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: instructions_per_packets
+ documentation: Instructions/packet, cycles/packet and IPC (clocks/packets)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: ipc
+ documentation: Instructions/packet, cycles/packet and IPC (clocks/packets)
+ namespace: vpp
+ subsystem: inst_and_clock
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} perfmon reset
+ vppctl -s {socket} perfmon start bundle inst-and-clock
+ sleep {duration}
+ vppctl -s {socket} perfmon stop
+ vppctl -s {socket} show perfmon statistics
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: l1_hit
+ documentation: Cache hits and misses (L1 hit)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: l1_miss
+ documentation: Cache hits and misses (L1 miss)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: l2_hit
+ documentation: Cache hits and misses (L2 hit)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: l2_miss
+ documentation: Cache hits and misses (L2 miss)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: l3_hit
+ documentation: Cache hits and misses (L3 hit)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ - name: l3_miss
+ documentation: Cache hits and misses (L3 miss)
+ namespace: vpp
+ subsystem: cache_hierarchy
+ labelnames:
+ - node_name
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} perfmon reset
+ vppctl -s {socket} perfmon start bundle cache-hierarchy
+ sleep {duration}
+ vppctl -s {socket} perfmon stop
+ vppctl -s {socket} show perfmon statistics
diff --git a/resources/templates/telemetry/vppctl_show_stats.yaml b/resources/templates/telemetry/vppctl_show_stats.yaml
new file mode 100644
index 0000000000..9f5a0240a1
--- /dev/null
+++ b/resources/templates/telemetry/vppctl_show_stats.yaml
@@ -0,0 +1,251 @@
+---
+logging:
+ version: 1
+ formatters:
+ console_stdout:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console_stdout:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console_stdout
+ stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console_stdout, console_stderr]
+scheduler:
+ duration: 1
+programs:
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: calls
+ documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors
+ documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: suspends
+ documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: clocks
+ documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors_calls
+ documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ code: |
+ vppctl -s {socket} show runtime
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: rx_packets
+ documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_packets
+ documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: drops
+ documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: punt
+ documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip4
+ documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip6
+ documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_no_buf
+ documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_miss
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} show interface
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} show hardware verbose
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: node_counter
+ documentation: Node counter
+ namespace: vpp
+ subsystem: node
+ labelnames:
+ - name
+ - reason
+ - severity
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} show node counters verbose
diff --git a/resources/templates/telemetry/vppctl_test_teardown.yaml b/resources/templates/telemetry/vppctl_test_teardown.yaml
new file mode 100644
index 0000000000..e8458f7198
--- /dev/null
+++ b/resources/templates/telemetry/vppctl_test_teardown.yaml
@@ -0,0 +1,251 @@
+---
+logging:
+ version: 1
+ formatters:
+ console_stdout:
+ format: '%(asctime)s - %(name)s - %(message)s'
+ console_stderr:
+ format: '%(message)s'
+ prom:
+ format: '%(message)s'
+ handlers:
+ console_stdout:
+ class: logging.StreamHandler
+ level: INFO
+ formatter: console_stdout
+ stream: ext://sys.stdout
+ console_stderr:
+ class: logging.StreamHandler
+ level: ERROR
+ formatter: console_stderr
+ stream: ext://sys.stderr
+ prom:
+ class: logging.handlers.RotatingFileHandler
+ level: INFO
+ formatter: prom
+ filename: /tmp/metric.prom
+ mode: w
+ loggers:
+ prom:
+ handlers: [prom]
+ level: INFO
+ propagate: False
+ root:
+ level: INFO
+ handlers: [console_stdout, console_stderr]
+scheduler:
+ duration: 0
+programs:
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: calls
+ documentation: Number of calls total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors
+ documentation: Number of vectors total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: suspends
+ documentation: Number of suspends total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: clocks
+ documentation: Number of clocks total
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ - name: vectors_calls
+ documentation: Number of vectors per call
+ namespace: vpp
+ subsystem: runtime
+ labelnames:
+ - node_name
+ - state
+ - thread_name
+ - thread_id
+ - thread_lcore
+ code: |
+ vppctl -s {socket} show runtime
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: rx_packets
+ documentation: Number of received packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of received bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_packets
+ documentation: Number of transitted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of transitted bytes for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: tx_error
+ documentation: Number of errors on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: drops
+ documentation: Number of dropped packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: punt
+ documentation: Number of punted packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip4
+ documentation: Number of IPv4 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: ip6
+ documentation: Number of IPv6 packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: mpls
+ documentation: Number of MPLS packets for interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_no_buf
+ documentation: Number of out of buffer RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ - name: rx_miss
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: interface
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} show interface
+ - name: bundle_vppctl
+ metrics:
+ gauge:
+ - name: rx_frames
+ documentation: Number of RX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_bytes
+ documentation: Number of RX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_frames
+ documentation: Number of TX frames for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_bytes
+ documentation: Number of TX bytes for interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: rx_missed
+ documentation: Number of missed RX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ - name: tx_missed
+ documentation: Number of missed TX packets on interface
+ namespace: vpp
+ subsystem: hardware
+ labelnames:
+ - name
+ - index
+ code: |
+ vppctl -s {socket} show hardware verbose
+ - name: bundle_vppctl
+ metrics:
+ counter:
+ - name: node_counter
+ documentation: Node counter
+ namespace: vpp
+ subsystem: node
+ labelnames:
+ - name
+ - reason
+ - severity
+ - thread_name
+ - thread_id
+ code: |
+ vppctl -s {socket} show node counters verbose
diff --git a/resources/templates/vat/dhcp_proxy_dump.vat b/resources/templates/vat/dhcp_proxy_dump.vat
deleted file mode 100644
index 584a58b5c6..0000000000
--- a/resources/templates/vat/dhcp_proxy_dump.vat
+++ /dev/null
@@ -1 +0,0 @@
-dhcp_proxy_dump {ipv6}
diff --git a/resources/templates/vat/dump_interfaces.vat b/resources/templates/vat/dump_interfaces.vat
deleted file mode 100644
index dfc5e6939d..0000000000
--- a/resources/templates/vat/dump_interfaces.vat
+++ /dev/null
@@ -1,3 +0,0 @@
-sw_interface_dump
-dump_interface_table
-quit
diff --git a/resources/templates/vat/ipsec/ipsec_policy_add.vat b/resources/templates/vat/ipsec/ipsec_policy_add.vat
deleted file mode 100644
index db025970b6..0000000000
--- a/resources/templates/vat/ipsec/ipsec_policy_add.vat
+++ /dev/null
@@ -1 +0,0 @@
-exec ipsec policy add spd {spd_id} priority {priority} {direction} action {action} {selector}
diff --git a/resources/templates/vat/ipsec/ipsec_show.vat b/resources/templates/vat/ipsec/ipsec_show.vat
deleted file mode 100644
index 0859d878c9..0000000000
--- a/resources/templates/vat/ipsec/ipsec_show.vat
+++ /dev/null
@@ -1 +0,0 @@
-exec show ipsec
diff --git a/resources/templates/vat/lisp/add_lisp_adjacency.vat b/resources/templates/vat/lisp/add_lisp_adjacency.vat
deleted file mode 100644
index 9c33625f6b..0000000000
--- a/resources/templates/vat/lisp/add_lisp_adjacency.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_adjacency add vni {vni} reid {deid}{deid_prefix} leid {seid}{seid_prefix}
diff --git a/resources/templates/vat/lisp/add_lisp_local_eid.vat b/resources/templates/vat/lisp/add_lisp_local_eid.vat
deleted file mode 100644
index 4f57549d75..0000000000
--- a/resources/templates/vat/lisp/add_lisp_local_eid.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_local_eid vni {vni} eid {eid}/{eid_prefix} locator-set {locator_name} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat b/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat
deleted file mode 100644
index cf0fb3221c..0000000000
--- a/resources/templates/vat/lisp/add_lisp_local_eid_mac.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_local_eid vni {vni} eid {eid} locator-set {locator_name} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/add_lisp_locator.vat b/resources/templates/vat/lisp/add_lisp_locator.vat
deleted file mode 100644
index 4d50326883..0000000000
--- a/resources/templates/vat/lisp/add_lisp_locator.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_locator locator-set {lisp_name} sw_if_index {sw_if_index} p {priority} w {weight} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/add_lisp_locator_set.vat b/resources/templates/vat/lisp/add_lisp_locator_set.vat
deleted file mode 100644
index 0dccbb71c9..0000000000
--- a/resources/templates/vat/lisp/add_lisp_locator_set.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_locator_set locator-set {lisp_name} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/add_lisp_map_resolver.vat b/resources/templates/vat/lisp/add_lisp_map_resolver.vat
deleted file mode 100644
index 8daa286e8e..0000000000
--- a/resources/templates/vat/lisp/add_lisp_map_resolver.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_map_resolver {address} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/add_lisp_remote_mapping.vat b/resources/templates/vat/lisp/add_lisp_remote_mapping.vat
deleted file mode 100644
index 6dcb4f91cd..0000000000
--- a/resources/templates/vat/lisp/add_lisp_remote_mapping.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_remote_mapping add vni {vni} eid {deid}{deid_prefix} seid {seid}{seid_prefix} rloc {rloc}
diff --git a/resources/templates/vat/lisp/del_lisp_adjacency.vat b/resources/templates/vat/lisp/del_lisp_adjacency.vat
deleted file mode 100644
index a507adce4a..0000000000
--- a/resources/templates/vat/lisp/del_lisp_adjacency.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_adjacency del vni {vni} reid {deid}/{deid_prefix} leid {seid}/{seid_prefix}
diff --git a/resources/templates/vat/lisp/del_lisp_local_eid.vat b/resources/templates/vat/lisp/del_lisp_local_eid.vat
deleted file mode 100644
index 1df6b3ffec..0000000000
--- a/resources/templates/vat/lisp/del_lisp_local_eid.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_local_eid vni {vni} eid {eid}/{eid_prefix} locator-set {locator_name} del \ No newline at end of file
diff --git a/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat b/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat
deleted file mode 100644
index 1c188bc039..0000000000
--- a/resources/templates/vat/lisp/del_lisp_local_eid_mac.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_local_eid vni <vni> eid {eid} locator-set {locator_name} del \ No newline at end of file
diff --git a/resources/templates/vat/lisp/del_lisp_locator.vat b/resources/templates/vat/lisp/del_lisp_locator.vat
deleted file mode 100644
index 243e113e59..0000000000
--- a/resources/templates/vat/lisp/del_lisp_locator.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_locator locator-set {lisp_name} sw_if_index {sw_if_index} p {priority} w {weight} del
diff --git a/resources/templates/vat/lisp/del_lisp_locator_set.vat b/resources/templates/vat/lisp/del_lisp_locator_set.vat
deleted file mode 100644
index 11049f9c50..0000000000
--- a/resources/templates/vat/lisp/del_lisp_locator_set.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_locator_set locator-set {lisp_name} del \ No newline at end of file
diff --git a/resources/templates/vat/lisp/del_lisp_map_resolver.vat b/resources/templates/vat/lisp/del_lisp_map_resolver.vat
deleted file mode 100644
index 36de8a56b2..0000000000
--- a/resources/templates/vat/lisp/del_lisp_map_resolver.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_map_resolver {address} del \ No newline at end of file
diff --git a/resources/templates/vat/lisp/del_lisp_remote_mapping.vat b/resources/templates/vat/lisp/del_lisp_remote_mapping.vat
deleted file mode 100644
index 515611ffd0..0000000000
--- a/resources/templates/vat/lisp/del_lisp_remote_mapping.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_add_del_remote_mapping del vni {vni} eid {deid}/{deid_prefix} seid {seid}/{seid_prefix} rloc {rloc}
diff --git a/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat b/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat
deleted file mode 100644
index beba91c60a..0000000000
--- a/resources/templates/vat/lisp/lisp_eid_table_add_del_map.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_eid_table_add_del_map vni {vni} {bd_or_vrf} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/lisp_gpe_iface.vat b/resources/templates/vat/lisp/lisp_gpe_iface.vat
deleted file mode 100644
index 1f5eaf0880..0000000000
--- a/resources/templates/vat/lisp/lisp_gpe_iface.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_gpe_add_del_iface {state} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/lisp_gpe_status.vat b/resources/templates/vat/lisp/lisp_gpe_status.vat
deleted file mode 100644
index 5c4080afc5..0000000000
--- a/resources/templates/vat/lisp/lisp_gpe_status.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_gpe_enable_disable {state}
diff --git a/resources/templates/vat/lisp/lisp_status.vat b/resources/templates/vat/lisp/lisp_status.vat
deleted file mode 100644
index d7e97577d6..0000000000
--- a/resources/templates/vat/lisp/lisp_status.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_enable_disable {state}
diff --git a/resources/templates/vat/lisp/show_lisp_eid_table.vat b/resources/templates/vat/lisp/show_lisp_eid_table.vat
deleted file mode 100644
index 4a47a8fdef..0000000000
--- a/resources/templates/vat/lisp/show_lisp_eid_table.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_eid_table_dump \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat b/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat
deleted file mode 100644
index 802cfbb6a0..0000000000
--- a/resources/templates/vat/lisp/show_lisp_gpe_tunnel.vat
+++ /dev/null
@@ -1 +0,0 @@
-# TODO: Implement when VPP-334 is fixed. \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_locator_set.vat b/resources/templates/vat/lisp/show_lisp_locator_set.vat
deleted file mode 100644
index 4f775ff47a..0000000000
--- a/resources/templates/vat/lisp/show_lisp_locator_set.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_locator_set_dump {filter} \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_map_register.vat b/resources/templates/vat/lisp/show_lisp_map_register.vat
deleted file mode 100644
index ea6847862e..0000000000
--- a/resources/templates/vat/lisp/show_lisp_map_register.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_map_register_state \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_map_request_mode.vat b/resources/templates/vat/lisp/show_lisp_map_request_mode.vat
deleted file mode 100644
index 2c8a44ee5c..0000000000
--- a/resources/templates/vat/lisp/show_lisp_map_request_mode.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_map_request_mode \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_map_resolver.vat b/resources/templates/vat/lisp/show_lisp_map_resolver.vat
deleted file mode 100644
index e74dab9e87..0000000000
--- a/resources/templates/vat/lisp/show_lisp_map_resolver.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_map_resolver_dump \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_map_server.vat b/resources/templates/vat/lisp/show_lisp_map_server.vat
deleted file mode 100644
index 3f7dd08a85..0000000000
--- a/resources/templates/vat/lisp/show_lisp_map_server.vat
+++ /dev/null
@@ -1 +0,0 @@
-lisp_map_server_dump \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_petr_config.vat b/resources/templates/vat/lisp/show_lisp_petr_config.vat
deleted file mode 100644
index e12be15f84..0000000000
--- a/resources/templates/vat/lisp/show_lisp_petr_config.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_use_petr \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_pitr.vat b/resources/templates/vat/lisp/show_lisp_pitr.vat
deleted file mode 100644
index e1280d16ba..0000000000
--- a/resources/templates/vat/lisp/show_lisp_pitr.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_pitr \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_rloc_config.vat b/resources/templates/vat/lisp/show_lisp_rloc_config.vat
deleted file mode 100644
index 78c58ea92e..0000000000
--- a/resources/templates/vat/lisp/show_lisp_rloc_config.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_rloc_probe_state \ No newline at end of file
diff --git a/resources/templates/vat/lisp/show_lisp_status.vat b/resources/templates/vat/lisp/show_lisp_status.vat
deleted file mode 100644
index 8d4e237ecc..0000000000
--- a/resources/templates/vat/lisp/show_lisp_status.vat
+++ /dev/null
@@ -1 +0,0 @@
-show_lisp_status
diff --git a/resources/templates/vat/show_hardware_detail.vat b/resources/templates/vat/show_hardware_detail.vat
deleted file mode 100644
index e3ac7c7576..0000000000
--- a/resources/templates/vat/show_hardware_detail.vat
+++ /dev/null
@@ -1 +0,0 @@
-exec show hardware detail
diff --git a/resources/templates/vat/vpp_route_add.vat b/resources/templates/vat/vpp_route_add.vat
deleted file mode 100644
index 73bb5acf8a..0000000000
--- a/resources/templates/vat/vpp_route_add.vat
+++ /dev/null
@@ -1 +0,0 @@
-ip_route_add_del {network}/{prefix_length} {vrf} {count} {multipath} {via} {sw_if_index} \ No newline at end of file
diff --git a/resources/templates/vcl/vcl_dma.conf b/resources/templates/vcl/vcl_dma.conf
new file mode 100644
index 0000000000..46c578b770
--- /dev/null
+++ b/resources/templates/vcl/vcl_dma.conf
@@ -0,0 +1,9 @@
+vcl {
+ segment-size 4000000000
+ add-segment-size 4000000000
+ rx-fifo-size 4000000
+ tx-fifo-size 4000000
+ use-mq-eventfd
+ event-queue-size 500000
+ api-socket-name /run/vpp/api.sock
+}
diff --git a/resources/templates/vcl/vcl_iperf3.conf b/resources/templates/vcl/vcl_iperf3.conf
index 9e4b0571dd..adf6c181bc 100644
--- a/resources/templates/vcl/vcl_iperf3.conf
+++ b/resources/templates/vcl/vcl_iperf3.conf
@@ -1,7 +1,12 @@
vcl {
+ segment-size 4000000000
+ add-segment-size 4000000000
rx-fifo-size 4000000
tx-fifo-size 4000000
app-scope-local
app-scope-global
- api-socket-name /run/vpp/api.sock
-} \ No newline at end of file
+
+ # This must be kept in sync with vpp_hoststack_attr{app_api_socket}
+ # in .../resources/libraries/robot/hoststack/hoststack.robot
+ app-socket-api /run/vpp/app_ns_sockets/default
+}
diff --git a/resources/templates/vcl/vcl_nginx.conf b/resources/templates/vcl/vcl_nginx.conf
new file mode 100644
index 0000000000..80cf0c6808
--- /dev/null
+++ b/resources/templates/vcl/vcl_nginx.conf
@@ -0,0 +1,12 @@
+vcl {
+ segment-size 4000000000
+ add-segment-size 4000000000
+ rx-fifo-size 4000000
+ tx-fifo-size 4000000
+ use-mq-eventfd
+ event-queue-size 500000
+
+ # This must be kept in sync with vpp_hoststack_attr{app_api_socket}
+ # in .../resources/libraries/robot/hoststack/hoststack.robot
+ app-socket-api /run/vpp/app_ns_sockets/default
+} \ No newline at end of file
diff --git a/resources/templates/vm/init.sh b/resources/templates/vm/init.sh
index 8edb40f411..471b3ccba9 100644
--- a/resources/templates/vm/init.sh
+++ b/resources/templates/vm/init.sh
@@ -1,6 +1,7 @@
#!/bin/bash
mkdir /dev/pts
mkdir /dev/hugepages
+mkdir /dev/shm
mount -t devpts -o "rw,noexec,nosuid,gid=5,mode=0620" devpts /dev/pts || true
mount -t tmpfs -o "rw,noexec,nosuid,size=10%,mode=0755" tmpfs /run
mount -t tmpfs -o "rw,noexec,nosuid,size=10%,mode=0755" tmpfs /tmp
diff --git a/resources/tools/ab/ABFork.py b/resources/tools/ab/ABFork.py
index 8436ed38be..55288a9c92 100755
--- a/resources/tools/ab/ABFork.py
+++ b/resources/tools/ab/ABFork.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2023 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -136,7 +136,7 @@ def main():
# Output results.
print(f"Transfer Rate: {round(info_list[6], 2)} [Kbytes/sec]")
print(f"Latency: {round(info_list[4] / 8, 2)} ms")
- print(f"Connection {mode} rate:{round(info_list[3], 2)} per sec")
+ print(f"Connection {mode} rate: {round(info_list[3], 2)} per sec")
print(f"Total data transferred: {round(info_list[2])} bytes")
print(f"Completed requests: {round(info_list[0])} ")
print(f"Failed requests: {round(info_list[1])} ")
diff --git a/resources/tools/ab/ABTools.py b/resources/tools/ab/ABTools.py
index cbd1adf21f..b929b49fdd 100644
--- a/resources/tools/ab/ABTools.py
+++ b/resources/tools/ab/ABTools.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Intel and/or its affiliates.
+# Copyright (c) 2023 Intel and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,11 +13,14 @@
"""ab implementation into CSIT framework."""
-from robot.api import logger
-from resources.libraries.python.topology import NodeType
+from re import search
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.ssh import exec_cmd_no_error
+from resources.libraries.python.model.ExportResult import (
+ export_hoststack_results
+)
from resources.libraries.python.OptionString import OptionString
+from resources.libraries.python.ssh import exec_cmd_no_error
+from resources.libraries.python.topology import NodeType
class ABTools:
@@ -36,29 +39,29 @@ class ABTools:
:rtype: OptionString
"""
cmd = OptionString()
- cmd.add(u"python3")
+ cmd.add("python3")
dirname = f"{Constants.REMOTE_FW_DIR}/resources/tools/ab"
cmd.add(f"{dirname}/ABFork.py")
- cmd_options = OptionString(prefix=u"-")
+ cmd_options = OptionString(prefix="-")
# Number of requests to perform.
- cmd_options.add_with_value_from_dict(u"r", u"requests", kwargs)
+ cmd_options.add_with_value_from_dict("r", "requests", kwargs)
# Server port number to use.
- cmd_options.add_with_value_from_dict(u"p", u"port", kwargs)
+ cmd_options.add_with_value_from_dict("p", "port", kwargs)
# Number of clients being processed at the same time.
- cmd_options.add_with_value_from_dict(u"c", u"clients", kwargs)
+ cmd_options.add_with_value_from_dict("c", "clients", kwargs)
# Filename to be requested from the servers.
- cmd_options.add_with_value_from_dict(u"f", u"files", kwargs)
+ cmd_options.add_with_value_from_dict("f", "files", kwargs)
# Server ip address.
- cmd_options.add_with_value_from_dict(u"i", u"ip", kwargs)
+ cmd_options.add_with_value_from_dict("i", "ip", kwargs)
# tg ip address.
- cmd_options.add_with_value_from_dict(u"g", u"tip", kwargs)
+ cmd_options.add_with_value_from_dict("g", "tip", kwargs)
# Specify SSL/TLS cipher suite.
- cmd_options.add_with_value_from_dict(u"z", u"cipher", kwargs, default=0)
+ cmd_options.add_with_value_from_dict("z", "cipher", kwargs, default=0)
# Specify SSL/TLS protocol.
- cmd_options.add_with_value_from_dict(u"t", u"protocol", kwargs,
+ cmd_options.add_with_value_from_dict("t", "protocol", kwargs,
default=0)
# Mode: RPS or CPS.
- cmd_options.add_with_value_from_dict(u"m", u"mode", kwargs)
+ cmd_options.add_with_value_from_dict("m", "mode", kwargs)
return cmd.extend(cmd_options)
@staticmethod
@@ -71,16 +74,41 @@ class ABTools:
command is not available.
"""
- if tg_node[u"type"] != NodeType.TG:
- raise RuntimeError(u"Node type is not a TG!")
+ if tg_node["type"] != NodeType.TG:
+ raise RuntimeError("Node type is not a TG!")
- cmd = u"command -v ab"
- message = u"ab not installed on TG node!"
+ cmd = "command -v ab"
+ message = "ab not installed on TG node!"
exec_cmd_no_error(tg_node, cmd, message=message)
@staticmethod
+ def get_ab_type(node):
+ """Log and return the installed traffic generator type.
+
+ :param node: Node from topology file.
+ :type node: dict
+ :returns: Traffic generator type string.
+ :rtype: str
+ """
+ return "AB"
+
+ @staticmethod
+ def get_ab_version(node):
+ """Log and return the installed traffic generator version.
+
+ :param node: Node from topology file.
+ :type node: dict
+ :returns: Traffic generator version string.
+ :rtype: str
+ """
+ command = f"ab -V | head -1 | cut -d',' -f2"
+ message = "Get AB version failed!"
+ stdout, _ = exec_cmd_no_error(node, command, message=message)
+ return stdout.strip()
+
+ @staticmethod
def run_ab(tg_node, ip_addr, tg_addr, tls_tcp, cipher, files_num, rps_cps,
- r_total, c_total, port, protocol=u"TLS1.3"):
+ r_total, c_total, port, protocol="TLS1.3"):
""" Run ab test.
:param tg_node: Topology node.
@@ -111,7 +139,7 @@ class ABTools:
:raises: RuntimeError if node type is not a TG.
"""
if files_num == 0:
- files = u"return"
+ files = "return"
elif files_num >= 1024:
files = f"{int(files_num / 1024)}KB.json"
else:
@@ -128,66 +156,32 @@ class ABTools:
port=port,
mode=rps_cps,
)
- stdout, _ = exec_cmd_no_error(tg_node, cmd, timeout=180, sudo=True,
- message=u"ab runtime error!")
- log_msg = ABTools._parse_ab_output(stdout, rps_cps, tls_tcp)
-
- logger.info(log_msg)
-
- return log_msg
-
- @staticmethod
- def _parse_ab_output(msg, rps_cps, tls_tcp):
- """Parse the ab stdout with the results.
-
- :param msg: Ab Stdout.
- :param rps_cps: RPS or CPS.
- :param tls_tcp: TLS or TCP.
- :type msg: str
- :type rps_cps: str
- :type tls_tcp: str
- :return: Message with measured data.
- :rtype: str
- """
-
- msg_lst = msg.splitlines(keepends=False)
-
- total_cps = u""
- latency = u""
- processing = u""
- complete_req = u""
- failed_req = u""
- total_bytes = u""
- rate = u""
-
- if tls_tcp == u"tls":
- log_msg = u"\nMeasured HTTPS values:\n"
- else:
- log_msg = u"\nMeasured HTTP values:\n"
+ stdout, _ = exec_cmd_no_error(
+ tg_node, cmd, timeout=180, sudo=True, message="ab runtime error!"
+ )
- for line in msg_lst:
+ rate_unit = rps_cps
+ rate = None
+ bandwidth = None
+ latency = None
+ completed_requests = None
+ failed_requests = None
+ for line in stdout.splitlines():
if f"Connection {rps_cps} rate:" in line:
- # rps (cps)
- total_cps = line + u"\n"
- elif u"Transfer Rate:" in line:
- # Rate
- rate = line + u"\n"
- elif u"Latency:" in line:
- # Latency
- latency = line + u"\n"
- elif u"Total data transferred" in line:
- total_bytes = line + u"\n"
- elif u"Completed requests" in line:
- complete_req = line + u"\n"
- elif u"Failed requests" in line:
- failed_req = line + u"\n"
-
- log_msg += rate
- log_msg += latency
- log_msg += processing
- log_msg += complete_req
- log_msg += failed_req
- log_msg += total_bytes
- log_msg += total_cps
-
- return log_msg
+ rate = float(search(r":\s*(\d+\.?\d+)", line).group(1))
+ elif "Transfer Rate:" in line:
+ bandwidth = \
+ float(search(r":\s*(\d+\.?\d+)", line).group(1)) * 8000
+ elif "Latency:" in line:
+ latency = float(search(r":\s*(\d+\.?\d+)", line).group(1))
+ elif "Completed requests:" in line:
+ completed_requests = int(search(r":\s*(\d+)", line).group(1))
+ elif "Failed requests" in line:
+ failed_requests = int(search(r":\s*(\d+)", line).group(1))
+
+ export_hoststack_results(
+ bandwidth, rate, rate_unit, latency, failed_requests,
+ completed_requests
+ )
+
+ return stdout
diff --git a/resources/tools/doc_gen/.gitignore b/resources/tools/doc_gen/.gitignore
deleted file mode 100644
index 02254b9e4c..0000000000
--- a/resources/tools/doc_gen/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-_build/**
-**/*tar.gz
-/tmp
diff --git a/resources/tools/doc_gen/README.rst b/resources/tools/doc_gen/README.rst
deleted file mode 100644
index 57771e80d5..0000000000
--- a/resources/tools/doc_gen/README.rst
+++ /dev/null
@@ -1,116 +0,0 @@
-How to generate documentation
-=============================
-
-
-Requirements
-------------
-
-This tool uses Sphinx and read-the-doc theme. All required modules are listed in
-src/requirements.txt. These requirements are addition to CSIT requirements
-defined in requirements.txt.
-
-The generated documentation needs Java script to be fully functional.
-
-The generated documentation is in the directory _build.
-
-
-How to generate documentation
------------------------------
-
- - pull the last changes from git
- - run: ./run_doc.sh
-
-
-What is documented
-------------------
-
-All modules which are in these directories are documented:
- - resources/libraries/python
- - resources/libraries/robot
- - tests
-
-If you add / remove / rename a module or directory to one of these
-directories, nothing is needed to be done.
-
-
-How to add or change info in generated documentation
-----------------------------------------------------
-
-There are templates for
- - index
- - Python library documentation
- - Robot library documentation
- - Functional tests documentation
- - Performance tests documenation
-in src/ directory.
-
-You can add information you want at the beginning of the file, generated
-documentation will be appended at the end of these files.
-
-See index.rst for example. The information there was copy&pasted from fd.io
-
-
-How to document code for perfect results
-----------------------------------------
-
-Follow PEP8 and guidelines on wiki https://wiki.fd.io/view/CSIT/Documentation
-
-This is the best practice when we use Sphinx:
-
-Python code
-+++++++++++
-
-.. code:: python
-
- """Module description, start with one-short-sentence-description.
-
- Add more descriptive text.
-
- You can add a list (there must be an empty line):
-
- - item,
- - second item.
-
- or numbered list (there also must be an empty line):
-
- #. The first item,
- #. The second item.
-
- """
-
- class ExampleClass(BaseClass):
- """Start with one-short-sentence-description.
-
- Add more descriptive text.
- """
-
- def example_function(parameter, param_def="def"):
- """Start with one-short-sentence-description.
-
- Add more descriptive text, and / or example.
-
- :Example:
-
- followed by a blank line!
-
- You can use also:
- .. seealso:: blabla
- .. warnings:: blabla
- .. note:: blabla
- .. todo:: blabla
-
- :param parameter: The first parameter. Capital letter at the
- beginning, full stop at the end, 80 characters long lines.
- :param param_def: The parameter with default value.
- :type param: str, int, dict, ... Use python data types.
- :type param_def: str
- :raises: ValueError - describe when this exception is raised.
- :returns: Nice string.
- :rtype: str
- """
-
-
-Robot code
-++++++++++
-
-TBD
diff --git a/resources/tools/doc_gen/gen_rst.py b/resources/tools/doc_gen/gen_rst.py
deleted file mode 100755
index d3f7d96c58..0000000000
--- a/resources/tools/doc_gen/gen_rst.py
+++ /dev/null
@@ -1,322 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-from os import walk, listdir, scandir, environ
-from os.path import isfile, isdir, join, getsize
-
-# Temporary working directory. It is created and deleted by docs.sh
-WORKING_DIR = environ.get("WORKING_DIR")
-
-# Directory with resources to be documented.
-RESOURCES_DIR = u"resources"
-
-# Directory with libraries (python, robot) to be documented.
-LIB_DIR = u"libraries"
-
-# Directory with tests (func, perf) to be documented.
-TESTS_DIR = u"tests"
-
-PY_EXT = u".py"
-RF_EXT = u".robot"
-
-PATH_PY_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, u"python")
-PATH_RF_LIBS = join(WORKING_DIR, RESOURCES_DIR, LIB_DIR, u"robot")
-PATH_TESTS = join(WORKING_DIR, TESTS_DIR)
-
-# Sections in rst files
-rst_toc = u"""
-.. toctree::
-"""
-
-rst_py_module = u"""
-.. automodule:: {}.{}
- :members:
- :undoc-members:
- :show-inheritance:
-"""
-
-rst_rf_suite_setup = u"""
-.. robot-settings::
- :source: {}
-"""
-
-rst_rf_variables = u"""
-.. robot-variables::
- :source: {}
-"""
-
-rst_rf_keywords = u"""
-.. robot-keywords::
- :source: {}
-"""
-
-rst_rf_tests = u"""
-.. robot-tests::
- :source: {}
-"""
-
-
-def get_files(path, extension):
- """Generates the list of files to process.
-
- :param path: Path to files.
- :param extension: Extension of files to process. If it is the empty string,
- all files will be processed.
- :type path: str
- :type extension: str
- :returns: List of files to process.
- :rtype: list
- """
-
- file_list = list()
- for root, dirs, files in walk(path):
- for filename in files:
- if extension:
- if filename.endswith(extension) and u"__init__" not in filename:
- file_list.append(join(root, filename))
- else:
- file_list.append(join(root, filename))
-
- return file_list
-
-
-def create_file_name(path, start):
- """Create the name of rst file.
-
- Example:
- tests.perf.rst
-
- :param path: Path to a module to be documented.
- :param start: The first directory in path which is used in the file name.
- :type path: str
- :type start: str
- :returns: File name.
- :rtype: str
- """
- dir_list = path.split(u"/")
- start_index = dir_list.index(start)
- return u".".join(dir_list[start_index:-1]) + u".rst"
-
-
-def create_rst_file_names_set(files, start):
- """Generate a set of unique rst file names.
-
- :param files: List of all files to be documented with path beginning in the
- working directory.
- :param start: The first directory in path which is used in the file name.
- :type files: list
- :type start: str
- :returns: Set of unique rst file names.
- :rtype: set
- """
- file_names = set()
- for file in files:
- file_names.add(create_file_name(file, start))
- return file_names
-
-
-def add_nested_folders_in_rst_set(file_names, path):
- """Add RST files from folders where are only folders without tests.
-
- :param file_names: List of all files to be documented with path beginning
- in the working directory.
- :param path: Path where it starts adding missing RST files.
- :type file_names: list
- :type path: str
- """
-
- # When we split directory tree by "/" we don't need to create RST file in
- # folders in depth <= 5. It's because the WORKING_DIR folder structure i
- # as following:
- # /tmp/tmp-csitXXX/tests/<subject_of_test>/<type_of_test>/<what_is_tested>
- # That splits to ie:
- # ['', 'tmp', 'tmp-csitXXX', 'tests', 'vpp', 'device', 'container_memif']
- # We need to generate RST files for folders after <subject_of_test> which
- # is in depth > 5
-
- for directory in fast_scandir(path):
- dir_list = directory.split(u"/")
- if len(dir_list) > 5:
- # cut ['', 'tmp', 'tmp-csitXXX']
- dir_rst = u".".join(dir_list[3:]) + u".rst"
- if dir_rst not in file_names and u"__pycache__" not in dir_rst:
- file_names.add(dir_rst)
-
-
-def scan_dir(path):
- """Create a list of files and directories in the given directory.
-
- :param path: Path to the directory.
- :type path: str
- :returns: List of directories and list of files sorted in alphabetical
- order.
- :rtype: tuple of two lists
- """
- files = list()
- dirs = list()
- items = listdir(path)
- for item in items:
- if isfile(join(path, item)) and u"__init__" not in item:
- files.append(item)
- elif isdir(join(path, item)):
- dirs.append(item)
- return sorted(dirs), sorted(files)
-
-
-def write_toc(fh, path, dirs):
- """Write a table of contents to given rst file.
-
- :param fh: File handler of the rst file.
- :param path: Path to package.
- :param dirs: List of directories to be included in ToC.
- :type fh: BinaryIO
- :type path: str
- :type dirs: list
- """
- fh.write(rst_toc)
- for directory in dirs:
- fh.write(f" {u'.'.join(path)}.{directory}\n")
-
-
-def write_module_title(fh, module_name):
- """Write the module title to the given rst file. The title will be on the
- second level.
-
- :param fh: File handler of the rst file.
- :param module_name: The name of module used for title.
- :type fh: BinaryIO
- :type module_name: str
- """
- title = f"{module_name} suite"
- fh.write(f"\n{title}\n{u'-' * len(title)}")
-
-
-def generate_py_rst_files():
- """Generate all rst files for all python modules."""
-
- dirs_ignore_list = [u"__pycache__", ]
-
- py_libs = get_files(PATH_PY_LIBS, PY_EXT)
- file_names = create_rst_file_names_set(py_libs, RESOURCES_DIR)
-
- for file_name in file_names:
- path = join(WORKING_DIR, *file_name.split(u".")[:-1])
- dirs, files = scan_dir(path)
-
- for item in dirs_ignore_list:
- while True:
- try:
- dirs.remove(item)
- except ValueError:
- break
-
- full_path = join(WORKING_DIR, file_name)
- with open(full_path, mode="a") as fh:
- if getsize(full_path) == 0:
- package = file_name.split(u".")[-2]
- fh.write(f"{package}\n")
- fh.write(u"=" * len(f"{package}"))
- module_path = file_name.split(u".")[:-1]
- if dirs:
- write_toc(fh, module_path, dirs)
- for file in files:
- module_name = file.split(u".")[0]
- write_module_title(fh, module_name)
- fh.write(rst_py_module.format(
- u".".join(module_path), module_name)
- )
-
-
-def generate_rf_rst_files(
- file_names, incl_tests=True, incl_keywords=True, incl_suite_setup=False,
- incl_variables=False):
- """Generate rst files for the given robot modules.
-
- :param file_names: List of file names to be included in the documentation
- (rst files).
- :param incl_tests: If True, tests will be included in the documentation.
- :param incl_keywords: If True, keywords will be included in the
- documentation.
- :param incl_suite_setup: If True, the suite setup will be included in the
- documentation.
- :param incl_variables: If True, the variables will be included in the
- documentation.
- :type file_names: set
- :type incl_tests: bool
- :type incl_keywords: bool
- :type incl_suite_setup: bool
- :type incl_variables: bool
- """
-
- for file_name in file_names:
- path = join(WORKING_DIR, *file_name.split(u".")[:-1])
- dirs, files = scan_dir(path)
-
- full_path = join(WORKING_DIR, file_name)
- with open(full_path, mode="a") as fh:
- if getsize(full_path) == 0:
- package = file_name.split(u".")[-2]
- fh.write(f"{package}\n")
- fh.write(u"=" * len(f"{package}") + u"\n")
- module_path = file_name.split(u".")[:-1]
- if dirs:
- write_toc(fh, module_path, dirs)
- for file in files:
- module_name = file.split(u".")[0]
- write_module_title(fh, module_name)
- path = join(join(*module_path), module_name + RF_EXT)
- if incl_suite_setup:
- fh.write(rst_rf_suite_setup.format(path))
- if incl_variables:
- fh.write(rst_rf_variables.format(path))
- if incl_keywords:
- fh.write(rst_rf_keywords.format(path))
- if incl_tests:
- fh.write(rst_rf_tests.format(path))
-
-
-def generate_kw_rst_files():
- """Generate all rst files for all robot modules with keywords in libraries
- directory (no tests)."""
-
- rf_libs = get_files(PATH_RF_LIBS, RF_EXT)
- file_names = create_rst_file_names_set(rf_libs, RESOURCES_DIR)
-
- generate_rf_rst_files(file_names, incl_tests=False)
-
-
-def generate_tests_rst_files():
- """Generate all rst files for all robot modules with tests in tests
- directory. Include also keywords defined in these modules."""
-
- tests = get_files(PATH_TESTS, RF_EXT)
- file_names = create_rst_file_names_set(tests, TESTS_DIR)
- add_nested_folders_in_rst_set(file_names, PATH_TESTS)
-
- generate_rf_rst_files(
- file_names, incl_suite_setup=True, incl_variables=True
- )
-
-
-def fast_scandir(dirname):
- subfolders = [f.path for f in scandir(dirname) if f.is_dir()]
- for dirname in list(subfolders):
- subfolders.extend(fast_scandir(dirname))
- return subfolders
-
-
-if __name__ == u"__main__":
-
- # Generate all rst files:
- generate_py_rst_files()
- generate_kw_rst_files()
- generate_tests_rst_files()
diff --git a/resources/tools/doc_gen/src/Makefile b/resources/tools/doc_gen/src/Makefile
deleted file mode 100644
index 087683e4eb..0000000000
--- a/resources/tools/doc_gen/src/Makefile
+++ /dev/null
@@ -1,225 +0,0 @@
-# Makefile for Sphinx documentation
-#
-
-# You can set these variables from the command line.
-SPHINXOPTS =
-SPHINXBUILD = sphinx-build
-PAPER =
-BUILDDIR = _build
-
-# Internal variables.
-PAPEROPT_a4 = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help
-help:
- @echo "Please use \`make <target>' where <target> is one of"
- @echo " html to make standalone HTML files"
- @echo " dirhtml to make HTML files named index.html in directories"
- @echo " singlehtml to make a single large HTML file"
- @echo " pickle to make pickle files"
- @echo " json to make JSON files"
- @echo " htmlhelp to make HTML files and a HTML help project"
- @echo " qthelp to make HTML files and a qthelp project"
- @echo " applehelp to make an Apple Help Book"
- @echo " devhelp to make HTML files and a Devhelp project"
- @echo " epub to make an epub"
- @echo " epub3 to make an epub3"
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
- @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
- @echo " text to make text files"
- @echo " man to make manual pages"
- @echo " texinfo to make Texinfo files"
- @echo " info to make Texinfo files and run them through makeinfo"
- @echo " gettext to make PO message catalogs"
- @echo " changes to make an overview of all changed/added/deprecated items"
- @echo " xml to make Docutils-native XML files"
- @echo " pseudoxml to make pseudoxml-XML files for display purposes"
- @echo " linkcheck to check all external links for integrity"
- @echo " doctest to run all doctests embedded in the documentation"
- @echo " coverage to run coverage check of the documentation (if enabled)"
- @echo " dummy to check syntax errors of document sources"
-
-.PHONY: clean
-clean:
- rm -rf $(BUILDDIR)/*
-
-.PHONY: html
-html:
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-.PHONY: dirhtml
-dirhtml:
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
- @echo
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-.PHONY: singlehtml
-singlehtml:
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
- @echo
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-.PHONY: pickle
-pickle:
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
- @echo
- @echo "Build finished; now you can process the pickle files."
-
-.PHONY: json
-json:
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
- @echo
- @echo "Build finished; now you can process the JSON files."
-
-.PHONY: htmlhelp
-htmlhelp:
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
- @echo
- @echo "Build finished; now you can run HTML Help Workshop with the" \
- ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-.PHONY: qthelp
-qthelp:
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
- @echo
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/CSIT.qhcp"
- @echo "To view the help file:"
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/CSIT.qhc"
-
-.PHONY: applehelp
-applehelp:
- $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
- @echo
- @echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
- @echo "N.B. You won't be able to view it unless you put it in" \
- "~/Library/Documentation/Help or install it in your application" \
- "bundle."
-
-.PHONY: devhelp
-devhelp:
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
- @echo
- @echo "Build finished."
- @echo "To view the help file:"
- @echo "# mkdir -p $$HOME/.local/share/devhelp/CSIT"
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/CSIT"
- @echo "# devhelp"
-
-.PHONY: epub
-epub:
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
- @echo
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-.PHONY: epub3
-epub3:
- $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3
- @echo
- @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
-
-.PHONY: latex
-latex:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
- "(use \`make latexpdf' here to do that automatically)."
-
-.PHONY: latexpdf
-latexpdf:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through pdflatex..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: latexpdfja
-latexpdfja:
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
- @echo "Running LaTeX files through platex and dvipdfmx..."
- $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-.PHONY: text
-text:
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
- @echo
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-.PHONY: man
-man:
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
- @echo
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-.PHONY: texinfo
-texinfo:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
- @echo "Run \`make' in that directory to run these through makeinfo" \
- "(use \`make info' here to do that automatically)."
-
-.PHONY: info
-info:
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
- @echo "Running Texinfo files through makeinfo..."
- make -C $(BUILDDIR)/texinfo info
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-.PHONY: gettext
-gettext:
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
- @echo
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-.PHONY: changes
-changes:
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
- @echo
- @echo "The overview file is in $(BUILDDIR)/changes."
-
-.PHONY: linkcheck
-linkcheck:
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
- @echo
- @echo "Link check complete; look for any errors in the above output " \
- "or in $(BUILDDIR)/linkcheck/output.txt."
-
-.PHONY: doctest
-doctest:
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
- @echo "Testing of doctests in the sources finished, look at the " \
- "results in $(BUILDDIR)/doctest/output.txt."
-
-.PHONY: coverage
-coverage:
- $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
- @echo "Testing of coverage in the sources finished, look at the " \
- "results in $(BUILDDIR)/coverage/python.txt."
-
-.PHONY: xml
-xml:
- $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
- @echo
- @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
-
-.PHONY: pseudoxml
-pseudoxml:
- $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
- @echo
- @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
-
-.PHONY: dummy
-dummy:
- $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy
- @echo
- @echo "Build finished. Dummy builder generates no files."
diff --git a/resources/tools/doc_gen/src/conf.py b/resources/tools/doc_gen/src/conf.py
deleted file mode 100644
index 02707665ad..0000000000
--- a/resources/tools/doc_gen/src/conf.py
+++ /dev/null
@@ -1,302 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# CSIT documentation build configuration file, created by
-# sphinx-quickstart on Tue Nov 8 10:19:40 2016.
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-import os
-import sys
-
-sys.path.insert(0, os.path.abspath(u"."))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [
- u"sphinx.ext.autodoc",
- u"sphinx.ext.doctest",
- u"sphinxcontrib_robotdoc"
-]
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = [u"_templates"]
-
-# The suffix(es) of source file names.
-# You can specify multiple suffix as a list of string:
-#
-source_suffix = [u".rst", u".md"]
-
-# The master toctree document.
-master_doc = u"index"
-
-# General information about the project.
-project = u"FD.io CSIT"
-copyright = u"2021, FD.io"
-author = u'FD.io CSIT'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-# version = u'master'
-# The full version, including alpha/beta/rc tags.
-# release = u'master'
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = u'en'
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#
-# today = ''
-#
-# Else, today_fmt is used as the format for a strftime call.
-#
-# today_fmt = '%B %d, %Y'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = [u"_build", u"Thumbs.db", u".DS_Store"]
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#
-# default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#
-# add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#
-# add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#
-# show_authors = False
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = u"sphinx"
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-# html_theme =u"alabaster"
-html_theme = u"sphinx_rtd_theme"
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-html_theme_options = {
- u'canonical_url': u'',
- u'analytics_id': u'',
- u'logo_only': False,
- u'display_version': True,
- u'prev_next_buttons_location': u'bottom',
- u'style_external_links': False,
- # Toc options
- u'collapse_navigation': True,
- u'sticky_navigation': True,
- u'navigation_depth': 3,
- u'includehidden': True,
- u'titles_only': False
-}
-
-# Add any paths that contain custom themes here, relative to this directory.
-html_theme_path = [u'env/lib/python3.8/site-packages/sphinx_rtd_theme']
-
-# The name for this set of Sphinx documents.
-# "<project> v<release> documentation" by default.
-#
-html_title = u"CSIT Documentation"
-
-# A shorter title for the navigation bar. Default is the same as html_title.
-#
-html_short_title = u"CSIT"
-
-# The name of an image file (relative to this directory) to use as a favicon of
-# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#
-# html_favicon = None
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = [u"_static"]
-
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#
-# html_extra_path = []
-
-# If not None, a 'Last updated on:' timestamp is inserted at every page
-# bottom, using the given strftime format.
-# The empty string is equivalent to '%b %d, %Y'.
-#
-# html_last_updated_fmt = None
-
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#
-# html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#
-# html_sidebars = {
-#
-# }
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#
-# html_additional_pages = {}
-
-# If false, no module index is generated.
-html_domain_indices = True
-
-# If false, no index is generated.
-html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-html_show_sourcelink = True
-
-# Output file base name for HTML help builder.
-htmlhelp_basename = u"csitdoc"
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- # 'papersize': 'letterpaper',
-
- # The font size ('10pt', '11pt' or '12pt').
- #
- # 'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- #
- # 'preamble': '',
-
- # Latex figure (float) alignment
- #
- # 'figure_align': 'htbp',
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (master_doc, u"CSIT.tex", u"CSIT Documentation", u"CSIT", u"manual"),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#
-# latex_logo = None
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#
-# latex_use_parts = False
-
-# If true, show page references after internal links.
-#
-# latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#
-# latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#
-# latex_appendices = []
-
-# It false, will not define \strong, \code, itleref, \crossref ... but only
-# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
-# packages.
-#
-# latex_keep_old_macro_names = True
-
-# If false, no module index is generated.
-#
-# latex_domain_indices = True
-
-
-# -- Options for manual page output ---------------------------------------
-
-# One entry per manual page. List of tuples
-# (source start file, name, description, authors, manual section).
-man_pages = [
- (master_doc, u"CSIT", u"CSIT Documentation", [author], 1)
-]
-
-# If true, show URL addresses after external links.
-#
-# man_show_urls = False
-
-
-# -- Options for Texinfo output -------------------------------------------
-
-# Grouping the document tree into Texinfo files. List of tuples
-# (source start file, target name, title, author,
-# dir menu entry, description, category)
-texinfo_documents = [
- (master_doc, u"CSIT", u"CSIT Documentation",
- author, u"CSIT", u"One line description of project.",
- u"Miscellaneous"),
-]
-
-# Documents to append as an appendix to all manuals.
-#
-# texinfo_appendices = []
-
-# If false, no module index is generated.
-#
-# texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#
-# texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#
-# texinfo_no_detailmenu = False
diff --git a/resources/tools/doc_gen/src/index.rst b/resources/tools/doc_gen/src/index.rst
deleted file mode 100644
index 82f01db0c8..0000000000
--- a/resources/tools/doc_gen/src/index.rst
+++ /dev/null
@@ -1,16 +0,0 @@
-Contents
---------
-
-.. toctree::
- :numbered:
- :maxdepth: 1
- :glob:
-
- overview
- resources.libraries.python
- resources.libraries.robot
- tests.dpdk.perf
- tests.trex.perf
- tests.vpp.device
- tests.vpp.perf
- indices
diff --git a/resources/tools/doc_gen/src/indices.rst b/resources/tools/doc_gen/src/indices.rst
deleted file mode 100644
index d46b839f66..0000000000
--- a/resources/tools/doc_gen/src/indices.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Indices and tables
-==================
-
-* :ref:`genindex`
-* :ref:`modindex`
-* :ref:`search`
diff --git a/resources/tools/doc_gen/src/overview.rst b/resources/tools/doc_gen/src/overview.rst
deleted file mode 100644
index 4b7ab20d87..0000000000
--- a/resources/tools/doc_gen/src/overview.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-.. |csit| replace:: Continuous System Integration and Testing
-
-CSIT Description
-================
-
-#. Development of software code for fully automated VPP code testing,
- functionality, performance, regression and new functions.
-
-#. Execution of CSIT test suites on VPP code running on LF FD.io virtual and
- physical compute environments.
-
-#. Integration with FD.io continuous integration systems (Gerrit, Jenkins and
- such).
-
-#. Identified existing FD.io project dependencies and interactions:
-
- - vpp - Vector Packet Processing.
- - ci-management - Management repo for Jenkins Job Builder, script and
- management related to the Jenkins CI configuration.
-
-Project Scope
--------------
-
-#. Automated regression testing of VPP code changes
-
- - Functionality of VPP data plane, network control plane, management plane
- against functional specifications.
- - Performance of VPP data plane including non-drop-rate packet throughput
- and delay, against established reference benchmarks.
- - Performance of network control plane against established reference
- benchmarks.
- - Performance of management plane against established reference benchmarks.
-
-#. Test case definitions driven by supported and planned VPP functionality,
- interfaces and performance:
-
- - Uni-dimensional tests: Data plane, (Network) Control plane, Management
- plane.
- - Multi-dimensional tests: Use case driven.
-
-#. Integration with FD.io Continuous Integration system including FD.io Gerrit
- and Jenkins
-
- - Automated test execution triggered by VPP-VERIFY jobs other VPP and CSIT
- project jobs.
-
-#. Integration with LF VPP test execution environment
-
- - Functional tests execution on LF hosted VM environment.
- - Performance and functional tests execution on LF hosted physical compute
- environment.
- - Subset of tests executed on LF hosted physical compute running VIRL
- (Virtual Internet Routing Lab).
diff --git a/resources/tools/doc_gen/src/resources.libraries.python.rst b/resources/tools/doc_gen/src/resources.libraries.python.rst
deleted file mode 100644
index a5ee9dd0c0..0000000000
--- a/resources/tools/doc_gen/src/resources.libraries.python.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Python Library
-==============
-
diff --git a/resources/tools/doc_gen/src/resources.libraries.robot.rst b/resources/tools/doc_gen/src/resources.libraries.robot.rst
deleted file mode 100644
index 9d93f6c42c..0000000000
--- a/resources/tools/doc_gen/src/resources.libraries.robot.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Robot Library
-=============
-
diff --git a/resources/tools/doc_gen/src/tests.dpdk.perf.rst b/resources/tools/doc_gen/src/tests.dpdk.perf.rst
deleted file mode 100644
index a528a41924..0000000000
--- a/resources/tools/doc_gen/src/tests.dpdk.perf.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-DPDK Performance Tests
-======================
-
diff --git a/resources/tools/doc_gen/src/tests.trex.perf.rst b/resources/tools/doc_gen/src/tests.trex.perf.rst
deleted file mode 100644
index 55ab087177..0000000000
--- a/resources/tools/doc_gen/src/tests.trex.perf.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-TREX Performance Tests
-======================
diff --git a/resources/tools/doc_gen/src/tests.vpp.device.rst b/resources/tools/doc_gen/src/tests.vpp.device.rst
deleted file mode 100644
index c042cd57b5..0000000000
--- a/resources/tools/doc_gen/src/tests.vpp.device.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-VPP Device Tests
-================
-
diff --git a/resources/tools/doc_gen/src/tests.vpp.perf.rst b/resources/tools/doc_gen/src/tests.vpp.perf.rst
deleted file mode 100644
index e349eafe8f..0000000000
--- a/resources/tools/doc_gen/src/tests.vpp.perf.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-VPP Performance Tests
-=====================
-
diff --git a/resources/tools/integrated/check_crc.py b/resources/tools/integrated/check_crc.py
index 6baa7a190d..01a557c30c 100644
--- a/resources/tools/integrated/check_crc.py
+++ b/resources/tools/integrated/check_crc.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2023 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -47,6 +47,7 @@ def main():
checker = VppApiCrcChecker(api_dir)
try:
checker.report_initial_conflicts(report_missing=True)
+ checker.print_warnings()
except RuntimeError as err:
stderr_lines = [
f"{err!r}",
diff --git a/resources/tools/integrated/compare_bisect.py b/resources/tools/integrated/compare_bisect.py
new file mode 100644
index 0000000000..7a48bcc2af
--- /dev/null
+++ b/resources/tools/integrated/compare_bisect.py
@@ -0,0 +1,134 @@
+# Copyright (c) 2024 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Script for analyzing 3 result sets for "git bisect" purposes.
+
+Jumpavg library is used for comparing description length of three groupings.
+The mid result is grouped with early or late result, or as a separate group.
+The jump we are looking for is between the mid and the smaller group
+of the grouping with less bits.
+Except when a grouping with all three sets as separate groups is the smallest.
+In that case we chose the bigger difference in averages.
+"""
+
+import sys
+
+from typing import List, Tuple
+
+from resources.libraries.python import jumpavg
+from resources.libraries.python.model.parse import parse
+
+
+def read_from_dir(dirname: str) -> Tuple[List[float], float]:
+ """Parse samples from dir, print them and stats, return them as list.
+
+ In case there are more test cases, their results are concatenated.
+
+ :param direname: The directory name (maybe with path) to parse.
+ :type dirname: str
+ :returns: The samples, deserialized from json, and the average.
+ :rtype: Tuple[List[float], float]
+ :raises RuntimeError: On parsing error.
+ """
+ results = parse(dirname)
+ samples = []
+ for result in results.values():
+ samples.extend(result)
+ print(f"Read {dirname}: {samples!r}")
+ stats = jumpavg.AvgStdevStats.for_runs(samples)
+ print(f"Stats: {stats!r}")
+ return samples, stats.avg
+
+
+def main() -> int:
+ """Execute the main logic, return the return code.
+
+ :returns: The return code, 0 or 3 depending on the comparison result.
+ :rtype: int
+ """
+ early_results, early_avg = read_from_dir("csit_early")
+ late_results, late_avg = read_from_dir("csit_late")
+ mid_results, mid_avg = read_from_dir("csit_mid")
+ max_early, abs_diff_late = max(early_avg, mid_avg), abs(late_avg - mid_avg)
+ max_late, abs_diff_early = max(late_avg, mid_avg), abs(early_avg - mid_avg)
+ rel_diff_early = abs_diff_early / max_early if max_early else 0.0
+ rel_diff_late = abs_diff_late / max_late if max_late else 0.0
+ max_value = max(early_results + mid_results + late_results)
+ # Create a common group list with just the early group.
+ common_group_list = jumpavg.BitCountingGroupList(
+ max_value=max_value
+ ).append_group_of_runs(early_results)
+ # Try grouping the mid with the early.
+ early_group_list = common_group_list.copy()
+ early_group_list.extend_runs_to_last_group(mid_results)
+ early_group_list.append_group_of_runs(late_results)
+ early_bits = early_group_list.bits
+ print(f"Early group list bits: {early_bits}")
+ # Now the same, but grouping the mid with the late.
+ late_group_list = common_group_list.copy()
+ late_group_list.append_group_of_runs(mid_results)
+ late_group_list.extend_runs_to_last_group(late_results)
+ late_bits = late_group_list.bits
+ print(f"Late group list bits: {late_bits}")
+ # Finally, group each separately, as if double anomaly happened.
+ double_group_list = common_group_list.copy()
+ double_group_list.append_group_of_runs(mid_results)
+ double_group_list.append_group_of_runs(late_results)
+ double_bits = double_group_list.bits
+ print(f"Double group list bits: {double_bits}")
+ single_bits = min(early_bits, late_bits)
+ if double_bits <= single_bits:
+ # In this case, comparing early_bits with late_bits is not the best,
+ # as that would probably select based on stdev, not based on diff.
+ # Example: mid (small stdev) is closer to early (small stdev),
+ # and farther from late (big stdev).
+ # As grouping mid with early would increase their combined stdev,
+ # it is not selected. This means a noisy late bound can affect
+ # what human perceives as the more interesting region.
+ # So we select only based on averages.
+ print("Perhaps two different anomalies. Selecting by averages only.")
+ diff = single_bits - double_bits
+ print(f"Saved {diff} ({100*diff/single_bits}%) bits.")
+ if rel_diff_early > rel_diff_late:
+ print("The mid results are considered late.")
+ print("Preferring relative difference of averages:")
+ print(f"{100*rel_diff_early}% to {100*rel_diff_late}%.")
+ # rc==1 is when command is not found.
+ # rc==2 is when python interpreter does not find the script.
+ exit_code = 3
+ else:
+ print("The mid results are considered early.")
+ print("Preferring relative difference of averages:")
+ print(f"{100*rel_diff_late}% to {100*rel_diff_early}%.")
+ exit_code = 0
+ else:
+ # When difference of averages is within stdev,
+ # we let jumpavg decide, as here difference in stdev
+ # can be the more interesting signal.
+ diff = early_bits - late_bits
+ if early_bits > late_bits:
+ print("The mid results are considered late.")
+ print(f"Saved {diff} ({100*diff/early_bits}%) bits.")
+ print(f"New relative difference is {100*rel_diff_early}%.")
+ exit_code = 3
+ else:
+ print("The mid results are considered early.")
+ print(f"Saved {-diff} ({-100*diff/late_bits}%) bits.")
+ print(f"New relative difference is {100*rel_diff_late}%.")
+ exit_code = 0
+ print(f"Exit code {exit_code}")
+ return exit_code
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/resources/tools/integrated/compare_perpatch.py b/resources/tools/integrated/compare_perpatch.py
index b4d52dcdfe..59ea7e5d0f 100644
--- a/resources/tools/integrated/compare_perpatch.py
+++ b/resources/tools/integrated/compare_perpatch.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2024 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -13,72 +13,72 @@
"""Script for determining whether per-patch perf test votes -1.
-This script assumes there exist two text files with processed BMRR results,
-located at hardcoded relative paths (subdirs thereof), having several lines
-of json-parseable lists of float values, corresponding to testcase results.
+This script expects a particular tree created on a filesystem by
+per_patch_perf.sh bootstrap script, including test results
+exported as json files according to a current model schema.
+This script extracts the results (according to result type)
+and joins them into one list of floats for parent and one for current.
+
This script then uses jumpavg library to determine whether there was
a regression, progression or no change for each testcase.
-If number of tests does not match, or there was a regression,
+
+If the set of test names does not match, or there was a regression,
this script votes -1 (by exiting with code 1), otherwise it votes +1 (exit 0).
"""
-import json
import sys
from resources.libraries.python import jumpavg
+from resources.libraries.python.model.parse import parse
+
+
+def main() -> int:
+ """Execute the main logic, return a number to return as the return code.
+ Call parse to get parent and current data.
+ Use higher fake value for parent, so changes that keep a test failing
+ are marked as regressions.
-def main():
- """Execute the main logic, return the code to return as return code.
+ If there are multiple iterations, the value lists are joined.
+ For each test, call jumpavg.classify to detect possible regression.
+
+ If there is at least one regression, return 3.
:returns: Return code, 0 or 3 based on the comparison result.
:rtype: int
"""
iteration = -1
- parent_iterations = list()
- current_iterations = list()
- num_tests = None
+ parent_aggregate = {}
+ current_aggregate = {}
+ test_names = None
while 1:
iteration += 1
- parent_lines = list()
- current_lines = list()
- filename = f"csit_parent/{iteration}/results.txt"
- try:
- with open(filename) as parent_file:
- parent_lines = parent_file.readlines()
- except IOError:
+ parent_results = {}
+ current_results = {}
+ parent_results = parse(f"csit_parent/{iteration}", fake_value=2.0)
+ parent_names = list(parent_results)
+ if test_names is None:
+ test_names = parent_names
+ if not parent_names:
+ # No more iterations.
break
- num_lines = len(parent_lines)
- filename = f"csit_current/{iteration}/results.txt"
- with open(filename) as current_file:
- current_lines = current_file.readlines()
- if num_lines != len(current_lines):
- print(
- f"Number of tests does not match within iteration {iteration}",
- file=sys.stderr
- )
- return 1
- if num_tests is None:
- num_tests = num_lines
- elif num_tests != num_lines:
- print(
- f"Number of tests does not match previous at iteration "
- f"{iteration}", file=sys.stderr
- )
- return 1
- parent_iterations.append(parent_lines)
- current_iterations.append(current_lines)
+ assert parent_names == test_names, f"{parent_names} != {test_names}"
+ current_results = parse(f"csit_current/{iteration}", fake_value=1.0)
+ current_names = list(current_results)
+ assert (
+ current_names == parent_names
+ ), f"{current_names} != {parent_names}"
+ for name in test_names:
+ if name not in parent_aggregate:
+ parent_aggregate[name] = []
+ if name not in current_aggregate:
+ current_aggregate[name] = []
+ parent_aggregate[name].extend(parent_results[name])
+ current_aggregate[name].extend(current_results[name])
exit_code = 0
- for test_index in range(num_tests):
- parent_values = list()
- current_values = list()
- for iteration_index, _ in enumerate(parent_iterations):
- parent_values.extend(
- json.loads(parent_iterations[iteration_index][test_index])
- )
- current_values.extend(
- json.loads(current_iterations[iteration_index][test_index])
- )
+ for name in test_names:
+ parent_values = parent_aggregate[name]
+ current_values = current_aggregate[name]
print(f"Time-ordered MRR values for parent build: {parent_values}")
print(f"Time-ordered MRR values for current build: {current_values}")
parent_values = sorted(parent_values)
@@ -87,11 +87,14 @@ def main():
parent_stats = jumpavg.AvgStdevStats.for_runs(parent_values)
current_stats = jumpavg.AvgStdevStats.for_runs(current_values)
parent_group_list = jumpavg.BitCountingGroupList(
- max_value=max_value).append_group_of_runs([parent_stats])
- combined_group_list = parent_group_list.copy(
- ).extend_runs_to_last_group([current_stats])
+ max_value=max_value
+ ).append_group_of_runs([parent_stats])
+ combined_group_list = (
+ parent_group_list.copy().extend_runs_to_last_group([current_stats])
+ )
separated_group_list = parent_group_list.append_group_of_runs(
- [current_stats])
+ [current_stats]
+ )
print(f"Value-ordered MRR values for parent build: {parent_values}")
print(f"Value-ordered MRR values for current build: {current_values}")
avg_diff = (current_stats.avg - parent_stats.avg) / parent_stats.avg
@@ -103,7 +106,7 @@ def main():
f" {combined_group_list[0].stats}"
)
bits_diff = separated_group_list.bits - combined_group_list.bits
- compared = u"longer" if bits_diff >= 0 else u"shorter"
+ compared = "longer" if bits_diff >= 0 else "shorter"
print(
f"Separate groups are {compared} than single group"
f" by {abs(bits_diff)} bits"
@@ -111,17 +114,17 @@ def main():
# TODO: Version of classify that takes max_value and list of stats?
# That matters if only stats (not list of floats) are given.
classified_list = jumpavg.classify([parent_values, current_values])
- if len(classified_list) < 2:
- print(f"Test test_index {test_index}: normal (no anomaly)")
- continue
- anomaly = classified_list[1].comment
- if anomaly == u"regression":
- print(f"Test test_index {test_index}: anomaly regression")
- exit_code = 3 # 1 or 2 can be caused by other errors
- continue
- print(f"Test test_index {test_index}: anomaly {anomaly}")
+ anomaly_name = "normal (no anomaly)"
+ if len(classified_list) > 1:
+ anomaly = classified_list[1].comment
+ anomaly_name = "anomaly progression"
+ if anomaly == "regression":
+ anomaly_name = "anomaly regression"
+ exit_code = 3 # 1 or 2 can be caused by other errors
+ print(f"Test name {name}: {anomaly_name}")
print(f"Exit code: {exit_code}")
return exit_code
-if __name__ == u"__main__":
+
+if __name__ == "__main__":
sys.exit(main())
diff --git a/resources/tools/presentation/README.md b/resources/tools/presentation/README.md
deleted file mode 100644
index c8e28fe12c..0000000000
--- a/resources/tools/presentation/README.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# Presentation and Analytics Layer
-
-Presentation and Analytics Layer (PAL) makes possible to present and
-analyse the test results generated by CSIT Jenkins jobs.
-
-## Using PAL in the Local mode
-
-The local mode makes possible to use:
-1. a single XML file,
-2. a directory with XML files, or
-3. a directory with directories of XML files.
-
-### Using a single XML file
-
-Run the script with the path to a local XML file, e.g.:
-
- ./run_local_report.sh --file output.xml
-
-### Using a directory of XML files
-
-Store all XML files in a directory, e.g.:
-
- csit-vpp-perf-verify-2001-3n-dnv/
- ├── csit-vpp-perf-verify-2001-3n-dnv__5__output_info.xml
- ├── csit-vpp-perf-verify-2001-3n-dnv__6__output_info.xml
- └── csit-vpp-perf-verify-2001-3n-dnv__7__output_info.xml
-
-and use:
-
- ./run_local_report.sh --directory csit-vpp-perf-verify-2001-3n-dnv/
-
-### Using a directory with directories of XML files.
-
-Store all XML files in a directory structure, e.g.:
-
- local/
- ├── csit-vpp-perf-verify-2001-2n-clx
- │   ├── csit-vpp-perf-verify-2001-2n-clx__28__output_info.xml
- │   └── csit-vpp-perf-verify-2001-2n-clx__29__output_info.xml
- └── csit-vpp-perf-verify-2001-3n-dnv
- ├── csit-vpp-perf-verify-2001-3n-dnv__5__output_info.xml
- ├── csit-vpp-perf-verify-2001-3n-dnv__6__output_info.xml
- └── csit-vpp-perf-verify-2001-3n-dnv__7__output_info.xml
-
-and use:
-
- ./run_local_report.sh --directory local/
-
-### Example
-
-For more information and for a running example see the specificaton file
-`specification_local.yaml`.
diff --git a/resources/tools/presentation/__init__.py b/resources/tools/presentation/__init__.py
deleted file mode 100644
index a85fe45c2b..0000000000
--- a/resources/tools/presentation/__init__.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""
-__init__ file for directory presentation
-
-This makes the presentation a part of the great CSIT resources package.
-"""
-
-from .pal_errors import PresentationError
-from .pal_utils import archive_input_data, classify_anomalies, \
- convert_csv_to_pretty_txt, execute_command, get_files, \
- get_last_completed_build_number, get_last_successful_build_nr, \
- get_rst_title_char, mean, relative_change, relative_change_stdev, stdev
-from .environment import Environment
-from .specification_parser import Specification
-from .input_data_parser import InputData
-from .generator_tables import generate_tables
-from .generator_plots import generate_plots
-from .generator_files import generate_files
-from .static_content import prepare_static_content
-from .generator_report import generate_report
-from .generator_cpta import generate_cpta
-from .generator_alerts import Alerting
diff --git a/resources/tools/presentation/convert_xml_json.py b/resources/tools/presentation/convert_xml_json.py
deleted file mode 100644
index 73469cd025..0000000000
--- a/resources/tools/presentation/convert_xml_json.py
+++ /dev/null
@@ -1,410 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Convert output_info.xml files into JSON structures.
-
-Version: 0.1.0
-Date: 22nd June 2021
-
-The json structure is defined in https://gerrit.fd.io/r/c/csit/+/28992
-"""
-
-import os
-import re
-import json
-import logging
-import gzip
-
-from os.path import join
-from shutil import rmtree
-from copy import deepcopy
-from json import loads
-
-from pal_utils import get_files
-
-
-class JSONData:
- """A Class storing and manipulating data from tests.
- """
-
- def __init__(self, template=None):
- """Initialization.
-
- :param template: JSON formatted template used to store data. It can
- include default values.
- :type template: dict
- """
-
- self._template = deepcopy(template)
- self._data = self._template if self._template else dict()
-
- def __str__(self):
- """Return a string with human readable data.
-
- :returns: Readable description.
- :rtype: str
- """
- return str(self._data)
-
- def __repr__(self):
- """Return a string executable as Python constructor call.
-
- :returns: Executable constructor call.
- :rtype: str
- """
- return f"JSONData(template={self._template!r})"
-
- @property
- def data(self):
- """Getter
-
- :return: Data stored in the object.
- :rtype: dict
- """
- return self._data
-
- def update(self, kwargs):
- """Update the data with new data from the dictionary.
-
- :param kwargs: Key value pairs to be added to the data.
- :type kwargs: dict
- """
- self._data.update(kwargs)
-
- def set_key(self, key, val):
- """Setter.
-
- :param key: The key to be updated / added.
- :param val: The key value.
- :type key: str
- :type val: object
- """
- self._data[key] = deepcopy(val)
-
- def add_to_list(self, key, val):
- """Add an item to the list identified by key.
-
- :param key: The key identifying the list.
- :param val: The val to be appended to the list. If val is a list,
- extend is used.
- """
- if self._data.get(key, None) is None:
- self._data[key] = list()
- if isinstance(val, list):
- self._data[key].extend(val)
- else:
- self._data[key].append(val)
-
- def dump(self, file_out, indent=None):
- """Write JSON data to a file.
-
- :param file_out: Path to the output JSON file.
- :param indent: Indentation of items in JSON string. It is directly
- passed to json.dump method.
- :type file_out: str
- :type indent: str
- """
- try:
- with open(file_out, u"w") as file_handler:
- json.dump(self._data, file_handler, indent=indent)
- except OSError as err:
- logging.warning(f"{repr(err)} Skipping")
-
- def load(self, file_in):
- """Load JSON data from a file.
-
- :param file_in: Path to the input JSON file.
- :type file_in: str
- :raises: ValueError if the data being deserialized is not a valid
- JSON document.
- :raises: IOError if the file is not found or corrupted.
- """
- with open(file_in, u"r") as file_handler:
- self._data = json.load(file_handler)
-
-
-def _export_test_from_xml_to_json(tid, in_data, out, template, metadata):
- """Export data from a test to a json structure.
-
- :param tid: Test ID.
- :param in_data: Test data.
- :param out: Path to output json file.
- :param template: JSON template with optional default values.
- :param metadata: Data which are not stored in XML structure.
- :type tid: str
- :type in_data: dict
- :type out: str
- :type template: dict
- :type metadata: dict
- """
-
- data = JSONData(template=template)
-
- data.update(metadata)
- data.set_key(u"test_id", tid)
- t_type = in_data.get(u"type", u"")
- t_type = u"NDRPDR" if t_type == u"CPS" else t_type # It is NDRPDR
- data.set_key(u"test_type", t_type)
- tags = in_data.get(u"tags", list())
- data.set_key(u"tags", tags)
- data.set_key(u"documentation", in_data.get(u"documentation", u""))
- data.set_key(u"message", in_data.get(u"msg", u""))
- data.set_key(u"start_time", in_data.get(u"starttime", u""))
- data.set_key(u"end_time", in_data.get(u"endtime", u""))
- data.set_key(u"status", in_data.get(u"status", u"FAILED"))
- sut_type = u""
- if u"vpp" in tid:
- sut_type = u"vpp"
- elif u"dpdk" in tid:
- sut_type = u"dpdk"
- data.set_key(u"sut_type", sut_type)
-
- # Process configuration history:
- in_papi = deepcopy(in_data.get(u"conf_history", None))
- if in_papi:
- regex_dut = re.compile(r'\*\*DUT(\d):\*\*')
- node_id = u"dut1"
- for line in in_papi.split(u"\n"):
- if not line:
- continue
- groups = re.search(regex_dut, line)
- if groups:
- node_id = f"dut{groups.group(1)}"
- else:
- data.add_to_list(
- u"log",
- {
- u"source_type": u"node",
- u"source_id": node_id,
- u"msg_type": u"papi",
- u"log_level": u"INFO",
- u"timestamp": in_data.get(u"starttime", u""),
- u"msg": line,
- u"data": list()
- }
- )
-
- # Process show runtime:
- if in_data.get(u"telemetry-show-run", None):
- for item in in_data[u"telemetry-show-run"].values():
- data.add_to_list(u"log", item.get(u"runtime", dict()))
- else:
- in_sh_run = deepcopy(in_data.get(u"show-run", None))
- if in_sh_run:
- # Transform to openMetrics format
- for key, val in in_sh_run.items():
- log_item = {
- u"source_type": u"node",
- u"source_id": key,
- u"msg_type": u"metric",
- u"log_level": u"INFO",
- u"timestamp": in_data.get(u"starttime", u""),
- u"msg": u"show_runtime",
- u"data": list()
- }
- runtime = loads(val.get(u"runtime", list()))
- for item in runtime:
- for metric, m_data in item.items():
- if metric == u"name":
- continue
- for idx, m_item in enumerate(m_data):
- log_item[u"data"].append(
- {
- u"name": metric,
- u"value": m_item,
- u"labels": {
- u"host": val.get(u"host", u""),
- u"socket": val.get(u"socket", u""),
- u"graph_node": item.get(u"name", u""),
- u"thread_id": str(idx)
- }
- }
- )
- data.add_to_list(u"log", log_item)
-
- # Process results:
- results = dict()
- if t_type == u"DEVICETEST":
- pass # Nothing to add.
- elif t_type == u"NDRPDR":
- results = {
- u"throughput": {
- u"unit":
- u"cps" if u"TCP_CPS" in tags or u"UDP_CPS" in tags
- else u"pps",
- u"ndr": {
- u"value": {
- u"lower": in_data.get(u"throughput", dict()).
- get(u"NDR", dict()).get(u"LOWER", u"NaN"),
- u"upper": in_data.get(u"throughput", dict()).
- get(u"NDR", dict()).get(u"UPPER", u"NaN")
- },
- u"value_gbps": {
- u"lower": in_data.get(u"gbps", dict()).
- get(u"NDR", dict()).get(u"LOWER", u"NaN"),
- u"upper": in_data.get(u"gbps", dict()).
- get(u"NDR", dict()).get(u"UPPER", u"NaN")
- }
- },
- u"pdr": {
- u"value": {
- u"lower": in_data.get(u"throughput", dict()).
- get(u"PDR", dict()).get(u"LOWER", u"NaN"),
- u"upper": in_data.get(u"throughput", dict()).
- get(u"PDR", dict()).get(u"UPPER", u"NaN")
- },
- u"value_gbps": {
- u"lower": in_data.get(u"gbps", dict()).
- get(u"PDR", dict()).get(u"LOWER", u"NaN"),
- u"upper": in_data.get(u"gbps", dict()).
- get(u"PDR", dict()).get(u"UPPER", u"NaN")
- }
- }
- },
- u"latency": {
- u"forward": {
- u"pdr_90": in_data.get(u"latency", dict()).
- get(u"PDR90", dict()).get(u"direction1", u"NaN"),
- u"pdr_50": in_data.get(u"latency", dict()).
- get(u"PDR50", dict()).get(u"direction1", u"NaN"),
- u"pdr_10": in_data.get(u"latency", dict()).
- get(u"PDR10", dict()).get(u"direction1", u"NaN"),
- u"pdr_0": in_data.get(u"latency", dict()).
- get(u"LAT0", dict()).get(u"direction1", u"NaN")
- },
- u"reverse": {
- u"pdr_90": in_data.get(u"latency", dict()).
- get(u"PDR90", dict()).get(u"direction2", u"NaN"),
- u"pdr_50": in_data.get(u"latency", dict()).
- get(u"PDR50", dict()).get(u"direction2", u"NaN"),
- u"pdr_10": in_data.get(u"latency", dict()).
- get(u"PDR10", dict()).get(u"direction2", u"NaN"),
- u"pdr_0": in_data.get(u"latency", dict()).
- get(u"LAT0", dict()).get(u"direction2", u"NaN")
- }
- }
- }
- elif t_type == "MRR":
- results = {
- u"unit": u"pps", # Old data use only pps
- u"samples": in_data.get(u"result", dict()).get(u"samples", list()),
- u"avg": in_data.get(u"result", dict()).get(u"receive-rate", u"NaN"),
- u"stdev": in_data.get(u"result", dict()).
- get(u"receive-stdev", u"NaN")
- }
- elif t_type == "SOAK":
- results = {
- u"critical_rate": {
- u"lower": in_data.get(u"throughput", dict()).
- get(u"LOWER", u"NaN"),
- u"upper": in_data.get(u"throughput", dict()).
- get(u"UPPER", u"NaN"),
- }
- }
- elif t_type == "HOSTSTACK":
- results = in_data.get(u"result", dict())
- # elif t_type == "TCP": # Not used ???
- # results = in_data.get(u"result", u"NaN")
- elif t_type == "RECONF":
- results = {
- u"loss": in_data.get(u"result", dict()).get(u"loss", u"NaN"),
- u"time": in_data.get(u"result", dict()).get(u"time", u"NaN")
- }
- else:
- pass
- data.set_key(u"results", results)
-
- data.dump(out, indent=u" ")
-
-
-def convert_xml_to_json(spec, data):
- """Convert downloaded XML files into JSON.
-
- Procedure:
- - create one json file for each test,
- - gzip all json files one by one,
- - delete json files.
-
- :param spec: Specification read from the specification files.
- :param data: Input data parsed from output.xml files.
- :type spec: Specification
- :type data: InputData
- """
-
- logging.info(u"Converting downloaded XML files to JSON ...")
-
- template_name = spec.output.get(u"use-template", None)
- structure = spec.output.get(u"structure", u"tree")
- if template_name:
- with open(template_name, u"r") as file_handler:
- template = json.load(file_handler)
- else:
- template = None
-
- build_dir = spec.environment[u"paths"][u"DIR[BUILD,JSON]"]
- try:
- rmtree(build_dir)
- except FileNotFoundError:
- pass # It does not exist
-
- os.mkdir(build_dir)
-
- for job, builds in data.data.items():
- logging.info(f" Processing job {job}")
- if structure == "tree":
- os.makedirs(join(build_dir, job), exist_ok=True)
- for build_nr, build in builds.items():
- logging.info(f" Processing build {build_nr}")
- if structure == "tree":
- os.makedirs(join(build_dir, job, build_nr), exist_ok=True)
- for test_id, test_data in build[u"tests"].items():
- groups = re.search(re.compile(r'-(\d+[tT](\d+[cC]))-'), test_id)
- if groups:
- test_id = test_id.replace(groups.group(1), groups.group(2))
- logging.info(f" Processing test {test_id}")
- if structure == "tree":
- dirs = test_id.split(u".")[:-1]
- name = test_id.split(u".")[-1]
- os.makedirs(
- join(build_dir, job, build_nr, *dirs), exist_ok=True
- )
- file_name = \
- f"{join(build_dir, job, build_nr, *dirs, name)}.json"
- else:
- file_name = join(
- build_dir,
- u'.'.join((job, build_nr, test_id, u'json'))
- )
- suite_id = test_id.rsplit(u".", 1)[0].replace(u" ", u"_")
- _export_test_from_xml_to_json(
- test_id, test_data, file_name, template,
- {
- u"ci": u"jenkins.fd.io",
- u"job": job,
- u"build_number": build_nr,
- u"suite_id": suite_id,
- u"suite_doc": build[u"suites"].get(suite_id, dict()).
- get(u"doc", u""),
- u"testbed": build[u"metadata"].get(u"testbed", u""),
- u"sut_version": build[u"metadata"].get(u"version", u"")
- }
- )
-
- # gzip the json files:
- for file in get_files(build_dir, u"json"):
- with open(file, u"rb") as src:
- with gzip.open(f"{file}.gz", u"wb") as dst:
- dst.writelines(src)
- os.remove(file)
-
- logging.info(u"Done.")
diff --git a/resources/tools/presentation/doc/graphs_improvements.css b/resources/tools/presentation/doc/graphs_improvements.css
deleted file mode 100644
index bd0ffa6435..0000000000
--- a/resources/tools/presentation/doc/graphs_improvements.css
+++ /dev/null
@@ -1,5 +0,0 @@
-body {
- background-color: #F0FFFF;
- width: 820px;
- margin: 10px auto;
-}
diff --git a/resources/tools/presentation/doc/graphs_improvements.rst b/resources/tools/presentation/doc/graphs_improvements.rst
deleted file mode 100644
index 331905cabb..0000000000
--- a/resources/tools/presentation/doc/graphs_improvements.rst
+++ /dev/null
@@ -1,590 +0,0 @@
-================================
- Envisioning information by PAL
-================================
-
-Introduction
-------------
-
-This document describes possible improvements in data presentation provided by
-PAL for the `Report <https://s3-docs.fd.io/csit/master/report/>`_ and the
-`Trending <https://s3-docs.fd.io/csit/master/trending/>`_
-
-You can generate a standalone html version of this document using e.g.
-rst2html5 tool:
-
-.. code:: bash
-
- rst2html5 --stylesheet graphs_improvements.css graphs_improvements.rst >> graphs_improvements.html
-
-**Modifications of existing graphs**
-
-- `Speedup Multi-core`_
-- `Packet Throughput`_
-- `Packet Latency`_
-
-**New graphs to be added**
-
-- `Comparison between releases`_
-- `Comparison between processor architectures`_
-- `Comparison between 2-node and 3-node topologies`_
-- `Comparison between different physical testbed instances`_
-- `Comparison between NICs`_
-- `Other comparisons`_
-
-**Export of static images**
-
-- low priority
-- make possible to `export static images`_ which are available via link on the
- web page.
-- vector formats (svg, pdf) are preferred
-
-Priorities
-----------
-
-**Target CSIT-18.10**
-
-- `Speedup Multi-core`_
-- `Packet Throughput`_
-
-**Nice to have in CSIT-18.10**
-
-.. note::
-
- Only if above done, and target CSIT-18.10 is in time , otherwise next
- release.
-
-- `Packet Latency`_
-
-Modifications of existing graphs
---------------------------------
-
-The proposed modifications include the changes in:
-
-- the layout of the graphs,
-- the data and way how it is presented,
-- the test cases presented in the graphs.
-
-The first two points are described below, the last one will be added later as a
-separate chapter.
-
-.. _Speedup Multi-core:
-
-Speedup Multi-core
-``````````````````
-
-The "Speedup Multicore" graph will display the measured data together with
-perfect values calculated as multiples of the best value measured using one
-core. The relative difference between measured and perfect values will be
-displayed in the hover next to each data point.
-
-.. image:: pic/graph-speedup.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Speedup Multi-core: not found.
-
-**Description:**
-
-*Data displayed:*
-
-- one or more data series from the same area, keep the number of displayed
- data series as low as possible (max 6)
-- x-axis: number of cores
-- y-axis: throughput (measured and perfect) [Mpps], linear scale, beginning
- with 0
-- hover information: Throughput [Mpps], Speedup [1], Relative difference between
- measured and ideal values [%], Perfect Throughput [%]
-- Limits of ethernet links, NICs and PCIe. See `Physical performance limits`_.
-
-*Layout:*
-
-- plot type: lines with data points (plotly.graph_objs.Scatter)
-- data series format:
- - measured: solid line with data points
- - perfect: dashed line with data points, the same color as "measured"
-- title: "Speedup Multi-core: <area, scaling, features, ...>",
- top, centered, font size 18; configurable in specification file: visible /
- hidden, text
-- x-axis: integers, starting with 1 (core), linear, font size 16, bottom
-- x-axis label: "Number of cores [qty]", bottom, centered, font size 16
-- y-axis: float, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left
-- legend: list of presented test cases, bottom, left, font size 16; the order
- of displayed tests is configurable in the specification file
-- annotation: text: "dashed: perfect<br>solid: measured", top, left,
- font size 16
-
-.. _Packet Throughput:
-
-Packet Throughput
-`````````````````
-
-The "Packet Throughput" graph will display the measured data using
-statistical box graph. Each data point is constructed from 10 samples.
-The statistical data are displayed as hover information.
-
-.. image:: pic/graph-throughput.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Packet Throughput" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- one or more data points from the same area, keep the number of displayed
- data points as low as possible (max 6)
-- x-axis: indexed test cases
-- y-axis: throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (min, lower fence, q1, median, q3,
- higher fence, max), test case name
-
-*Layout:*
-
-- plot type: statistical box (plotly.graph_objs.Box)
-- data series format: box
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18; configurable in specification file: visible /
- hidden, text
-- x-axis: integers, starting with 1, linear, font size 16, bottom; the order
- of displayed tests is configurable in the specification file
-- x-axis label: "Indices of Test Cases [Index]", bottom, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left
-- legend: "Indexed Test Cases [idx]", bottom, left, font size 16
-
-.. _Packet Latency:
-
-Packet Latency
-``````````````
-
-The "Packet Latency" graph will display the measured data using
-statistical box graph. Each data point is constructed from 10 samples.
-The statistical data are displayed as hover information.
-
-.. image:: pic/graph-latency.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Packet Latency" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- one or more data points from the same area, keep the number of displayed
- data points as low as possible (max 6)
-- x-axis: data flow directions
-- y-axis: latency min/avg/max [uSec], linear scale, beginning with 0
-- hover information: statistical data (min, avg, max), test case name, direction
-
-*Layout:*
-
-- plot type: scatter with errors (plotly.graph_objs.Scatter)
-- data series format: data point with min amd max values
-- title: "Packet Latency: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18; configurable in specification file: visible /
- hidden, text
-- x-axis: text, font size 16, bottom; the order of displayed tests is
- configurable in the specification file
-- x-axis label: "Direction", bottom, centered
-- y-axis: integers, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Latency min/avg/max [uSec]", middle, left
-- legend: "Indexed Test Cases [idx]", bottom, left, font size 16
-
-New graphs to be added
-----------------------
-
-- *Comparison between releases*
-
- - compare MRR, NDR, PDR between releases
- - use as many releases as available
-
-- *Comparison between processor architectures*
-
- - compare MRR, NDR, PDR between processor architectures
- - HSW vs SKX (vs ARM when available)
-
-- *Comparison between 2-node and 3-node topologies*
-
- - compare MRR, NDR, PDR between topologies
- - 3n-skx vs 2n-skx
-
-- *Comparison between different physical testbed instances*
-
- - compare the results of the same test (MRR, NDR, PDR) run on different
- instances of the same testbed, e.g. HSW
- - HSW vs HSW, SKX vs SKX
-
-- *Comparison between NICs*
-
- - compare the results of the same test (MRR, NDR, PDR) run on different NICs
- but on the same instance of a physical testbed.
- - x520 vs x710 vs xl710 on HSW
- - x710 vs xxv710 on SKX
-
-- *Other comparisons*
-
-.. note::
-
- - Partially based on the existing tables in the Report
- - Only selected TCs
-
-.. _Comparison between releases:
-
-Comparison between releases
-```````````````````````````
-
-This graph will compare the results of the same test from different releases.
-One graph can present the data from one or more tests logically grouped. See
-`Grouping of tests in graphs`_ for more information.
-Each data point is constructed from 10 samples. The statistical data are
-displayed as hover information.
-
-.. image:: pic/graph_cmp_releases.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Comparison between releases" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- data: packet throughput
-- x-axis: release
-- y-axis: packet throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (median, stdev), test case name, release
-
-*Layout:*
-
-- plot type: scatter with line
-- data series format: line with markers
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18
-- x-axis: strings, font size 16, bottom
-- x-axis label: "Release", bototm, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, bottom, font size 16
-- y-axis label: "Packet Throughput [Mpps]", middle, left, font size 16
-- legend: "Test Cases", bottom, left, font size 16
-
-.. _Comparison between processor architectures:
-
-Comparison between processor architectures
-``````````````````````````````````````````
-
-This graph will compare the results of the same test from the same release run
-on the different processor architectures (HSW, SKX, later ARM).
-One graph can present the data from one or more tests logically grouped. See
-`Grouping of tests in graphs`_ for more information.
-Each data point is constructed from 10 samples. The statistical data are
-displayed as hover information.
-
-.. image:: pic/graph_cmp_arch.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Comparison between processor architectures" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- data: packet throughput
-- x-axis: processor architecture
-- y-axis: throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (median, stdev), test case name, processor
- architecture
-
-*Layout:*
-
-- plot type: scatter with line
-- data series format: line with markers
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18
-- x-axis: strings, font size 16, bottom, centered
-- x-axis label: "Processor architecture", bottom, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left
-- legend: "Test cases", bottom, left, font size 16
-
-.. _Comparison between 2-node and 3-node topologies:
-
-Comparison between 2-node and 3-node topologies
-```````````````````````````````````````````````
-
-This graph will compare the results of the same test from the same release run
-on the same processor architecture but different topologies (3n-skx, 2n-skx).
-One graph can present the data from one or more tests logically grouped. See
-`Grouping of tests in graphs`_ for more information.
-Each data point is constructed from 10 samples. The statistical data are
-displayed as hover information.
-
-.. image:: pic/graph_cmp_topo.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Comparison between 2-node and 3-node topologies" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- data: packet throughput
-- x-axis: topology
-- y-axis: throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (median, stdev), test case name, topology
-
-*Layout:*
-
-- plot type: scatter with line
-- data series format: line with markers
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18
-- x-axis: strings, font size 16, bottom, centered
-- x-axis label: "Topology", bottom, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left, font size 16
-- legend: "Test cases", bottom, left, font size 16
-
-.. _Comparison between different physical testbed instances:
-
-Comparison between different physical testbed instances
-```````````````````````````````````````````````````````
-
-This graph will compare the results of the same test from the same release run
-on the same processor architecture, the same topology but different physical
-testbed instances.
-One graph can present the data from one or more tests logically grouped. See
-`Grouping of tests in graphs`_ for more information.
-Each data point is constructed from 10 samples. The statistical data are
-displayed as hover information.
-
-
-.. image:: pic/graph_cmp_testbed.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Comparison between different physical testbed instances" not
- found.
-
-**Description:**
-
-*Data displayed:*
-
-- data: packet throughput
-- x-axis: physical testbed instances
-- y-axis: throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (median, stdev), test case name, physical
- testbed instance
-
-*Layout:*
-
-- plot type: scatter with line
-- data series format: line with markers
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18
-- x-axis: strings, font size 16, bottom, centered
-- x-axis label: "Physical Testbed Instance", bottom, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left, font size 16
-- legend: "Test cases", bottom, left, font size 16
-
-.. _Comparison between NICs:
-
-Comparison between NICs
-```````````````````````
-
-This graph will compare the results of the same test from the same release run
-on the same processor architecture, the same topology but different NICs.
-One graph can present the data from one or more tests logically grouped. See
-`Grouping of tests in graphs`_ for more information.
-Each data point is constructed from 10 samples. The statistical data are
-displayed as hover information.
-
-.. image:: pic/graph_cmp_nics.svg
- :width: 800 px
- :scale: 50 %
- :align: center
- :alt: Graph "Comparison between NICs" not found.
-
-**Description:**
-
-*Data displayed:*
-
-- data: packet throughput
-- x-axis: NICs
-- y-axis: packet throughput [Mpps], linear scale, beginning with 0
-- hover information: statistical data (median, stdev), test case name, NIC
-
-*Layout:*
-
-- plot type: scatter with line
-- data series format: line with markers
-- title: "Packet Throughput: <area, scaling, features, framesize, cores, ...>",
- top, centered, font size 18
-- x-axis: strings, font size 16, bottom
-- x-axis label: "NIC", bottom, centered, font size 16
-- y-axis: floats, starting with 0, dynamic range, linear, font size 16, left
-- y-axis label: "Packet Throughput [Mpps]", middle, left, font size 16
-- legend: "Test cases", bottom, left, font size 16
-
-.. _Other comparisons:
-
-Other comparisons
-`````````````````
-
-**Other tests results comparisons**
-
-- compare packet throughput for vhost vs memif
-
-**Other views on collected data**
-
-- per `Vratko Polak email on csit-dev <https://lists.fd.io/g/csit-dev/message/3008>`_.
-
-.. _Grouping of tests in graphs:
-
-Grouping of tests in graphs
----------------------------
-
-A graph can present results of one or more tests. The tests are grouped
-according to the defined criteria. In the ideal case, all graphs use the same
-groups of tests.
-
-The grouping of tests is described in a separate document.
-
-.. TODO: [MK], [TF]: Create the document.
-.. TODO: [TF]: Add the link.
-.. TODO: [TF]: Remove/edit the next paragraph when the document is ready.
-
-**Example of data grouping:**
-
-- ip4: ip4base, ip4scale20k, ip4scale200k, ip4scale2m
- - data presented in this order from left to right
-- ip6: similar to ip4
-- l2bd: similar to ip4.
-
-.. _Sorting of tests presented in a graph:
-
-Sorting of tests presented in a graph
--------------------------------------
-
-It is possible to specify the order of tests (suites) on the x-axis presented in
-a graph:
-
-- `Packet Throughput`_
-- `Packet Latency`_
-
-It is possible to specify the order of tests (suites) in the legend presented in
-a graph:
-
-- `Speedup Multi-core`_
-
-In both cases the order is defined in the specification file for each plot
-separately, e.g.:
-
-.. code:: yaml
-
- -
- type: "plot"
- <other parameters>
- sort:
- - "IP4BASE"
- - "FIB_20K"
- - "FIB_200K"
- - "FIB_2M"
-
-The sorting is based on tags. If more then one test has the same tag, only the
-first one is taken. The remaining tests and the tests without listed tags are
-placed at the end of the list in random order.
-
-.. _export static images:
-
-Export of static images
------------------------
-
-Not implemented yet. For more information see:
-
-- `Plotly: Static image export <https://plot.ly/python/static-image-export/>`_
-- prefered vector formats (svg, pdf)
-- requirements:
- - plotly-orca
- - `Orca <https://github.com/plotly/orca>`_
- - `Orca releases <https://github.com/plotly/orca/releases>`_
- - `Orca management in Python <https://plot.ly/python/orca-management/>`_
- - psutil
-
-.. _Physical performance limits:
-
-Physical performance limits
----------------------------
-
-+-----------------+----------------+
-| Ethernet links | pps @64B |
-+=================+================+
-| 10ge | 14,880,952.38 |
-+-----------------+----------------+
-| 25ge | 37,202,380.95 |
-+-----------------+----------------+
-| 40ge | 59,523,809.52 |
-+-----------------+----------------+
-| 100ge | 148,809,523.81 |
-+-----------------+----------------+
-
-
-+-----------------+----------------+
-| Ethernet links | bps |
-+=================+================+
-| 64B | |
-+-----------------+----------------+
-| IMIX | |
-+-----------------+----------------+
-| 1518B | |
-+-----------------+----------------+
-| 9000B | |
-+-----------------+----------------+
-
-
-+-----------------+----------------+
-| NIC | pps @64B |
-+=================+================+
-| x520 | 24,460,000 |
-+-----------------+----------------+
-| x710 | 35,800,000 |
-+-----------------+----------------+
-| xxv710 | 35,800,000 |
-+-----------------+----------------+
-| xl710 | 35,800,000 |
-+-----------------+----------------+
-
-
-+-----------------+----------------+
-| NIC | bw ??B |
-+=================+================+
-| x520 | |
-+-----------------+----------------+
-| x710 | |
-+-----------------+----------------+
-| xxv710 | |
-+-----------------+----------------+
-| xl710 | |
-+-----------------+----------------+
-
-
-+-----------------+----------------+
-| PCIe | bps |
-+=================+================+
-| PCIe Gen3 x8 | 50,000,000,000 |
-+-----------------+----------------+
-| PCIe Gen3 x16 | 100,000,000,000|
-+-----------------+----------------+
-
-
-+-----------------+----------------+
-| PCIe | pps @64B |
-+=================+================+
-| PCIe Gen3 x8 | 74,404,761.90 |
-+-----------------+----------------+
-| PCIe Gen3 x16 | 148,809,523.81 |
-+-----------------+----------------+
diff --git a/resources/tools/presentation/doc/pal_func_diagram.svg b/resources/tools/presentation/doc/pal_func_diagram.svg
deleted file mode 100644
index 14f59605f9..0000000000
--- a/resources/tools/presentation/doc/pal_func_diagram.svg
+++ /dev/null
@@ -1,1413 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<svg version="1.2" baseProfile="tiny" width="210.06mm" height="270.76mm" viewBox="0 0 21006 27076" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
- <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
- <rect x="0" y="0" width="21006" height="27076"/>
- </clipPath>
- </defs>
- <defs>
- <font id="EmbeddedFont_1" horiz-adv-x="2048">
- <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="423"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="x" horiz-adv-x="1033" d="M 801,0 L 510,444 217,0 23,0 408,556 41,1082 240,1082 510,661 778,1082 979,1082 612,558 1002,0 801,0 Z"/>
- <glyph unicode="u" horiz-adv-x="901" d="M 314,1082 L 314,396 C 314,343 318,299 326,264 333,229 346,200 363,179 380,157 403,142 432,133 460,124 495,119 537,119 580,119 618,127 653,142 687,157 716,178 741,207 765,235 784,270 797,312 810,353 817,401 817,455 L 817,1082 997,1082 997,231 C 997,208 997,185 998,160 998,135 998,111 999,89 1000,66 1000,47 1001,31 1002,15 1002,5 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 827,116 826,136 825,155 825,172 825,185 L 822,185 C 805,154 786,125 765,100 744,75 720,53 693,36 666,18 634,4 599,-6 564,-15 523,-20 476,-20 416,-20 364,-13 321,2 278,17 242,39 214,70 186,101 166,140 153,188 140,236 133,294 133,361 L 133,1082 314,1082 Z"/>
- <glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 527,1 499,-5 471,-10 442,-14 409,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 467,127 484,128 501,131 517,134 535,137 554,141 L 554,8 Z"/>
- <glyph unicode="s" horiz-adv-x="927" d="M 950,299 C 950,248 940,203 921,164 901,124 872,91 835,64 798,37 752,16 698,2 643,-13 581,-20 511,-20 448,-20 392,-15 342,-6 291,4 247,20 209,41 171,62 139,91 114,126 88,161 69,203 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 550,117 585,120 618,125 650,130 678,140 701,153 724,166 743,183 756,205 769,226 775,253 775,285 775,318 767,345 752,366 737,387 715,404 688,418 661,432 628,444 589,455 550,465 507,476 460,489 417,500 374,513 331,527 288,541 250,560 216,583 181,606 153,634 132,668 111,702 100,745 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 763,842 752,866 736,885 720,904 701,919 678,931 655,942 630,951 602,956 573,961 544,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,785 282,761 297,742 311,723 331,707 357,694 382,681 413,669 449,660 485,650 525,640 568,629 597,622 626,614 656,606 686,597 715,587 744,576 772,564 799,550 824,535 849,519 870,500 889,478 908,456 923,430 934,401 945,372 950,338 950,299 Z"/>
- <glyph unicode="r" horiz-adv-x="556" d="M 142,0 L 142,830 C 142,853 142,876 142,900 141,923 141,946 140,968 139,990 139,1011 138,1030 137,1049 137,1067 136,1082 L 306,1082 C 307,1067 308,1049 309,1030 310,1010 311,990 312,969 313,948 313,929 314,910 314,891 314,874 314,861 L 318,861 C 331,902 344,938 359,969 373,999 390,1024 409,1044 428,1063 451,1078 478,1088 505,1097 537,1102 575,1102 590,1102 604,1101 617,1099 630,1096 641,1094 648,1092 L 648,927 C 636,930 622,933 606,935 590,936 572,937 552,937 511,937 476,928 447,909 418,890 394,865 376,832 357,799 344,759 335,714 326,668 322,618 322,564 L 322,0 142,0 Z"/>
- <glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,464 1046,388 1033,319 1020,250 998,190 967,140 936,90 895,51 844,23 793,-6 730,-20 655,-20 578,-20 510,-5 452,24 394,53 350,101 319,168 L 314,168 C 315,167 315,161 316,150 316,139 316,126 317,110 317,94 317,76 318,57 318,37 318,17 318,-2 L 318,-425 138,-425 138,861 C 138,887 138,912 138,936 137,960 137,982 136,1002 135,1021 135,1038 134,1052 133,1066 133,1076 132,1082 L 306,1082 C 307,1080 308,1073 309,1061 310,1049 311,1035 312,1018 313,1001 314,982 315,963 316,944 316,925 316,908 L 320,908 C 337,943 356,972 377,997 398,1021 423,1041 450,1057 477,1072 508,1084 542,1091 575,1098 613,1101 655,1101 730,1101 793,1088 844,1061 895,1034 936,997 967,949 998,900 1020,842 1033,774 1046,705 1053,629 1053,546 Z M 864,542 C 864,609 860,668 852,720 844,772 830,816 811,852 791,888 765,915 732,934 699,953 658,962 609,962 569,962 531,956 496,945 461,934 430,912 404,880 377,848 356,804 341,748 326,691 318,618 318,528 318,451 324,387 337,334 350,281 368,238 393,205 417,172 447,149 483,135 519,120 560,113 607,113 657,113 699,123 732,142 765,161 791,189 811,226 830,263 844,308 852,361 860,414 864,474 864,542 Z"/>
- <glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 490,-20 422,-9 363,14 304,37 254,71 213,118 172,165 140,223 119,294 97,364 86,447 86,542 86,915 248,1102 571,1102 655,1102 728,1090 789,1067 850,1044 900,1009 939,962 978,915 1006,857 1025,787 1044,717 1053,635 1053,542 Z M 864,542 C 864,626 858,695 845,750 832,805 813,848 788,881 763,914 732,937 696,950 660,963 619,969 574,969 528,969 487,962 450,949 413,935 381,912 355,879 329,846 309,802 296,747 282,692 275,624 275,542 275,458 282,389 297,334 312,279 332,235 358,202 383,169 414,146 449,133 484,120 522,113 563,113 609,113 651,120 688,133 725,146 757,168 783,201 809,234 829,278 843,333 857,388 864,458 864,542 Z"/>
- <glyph unicode="n" horiz-adv-x="900" d="M 825,0 L 825,686 C 825,739 821,783 814,818 806,853 793,882 776,904 759,925 736,941 708,950 679,959 644,963 602,963 559,963 521,956 487,941 452,926 423,904 399,876 374,847 355,812 342,771 329,729 322,681 322,627 L 322,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 334,928 353,957 374,982 395,1007 419,1029 446,1047 473,1064 505,1078 540,1088 575,1097 616,1102 663,1102 723,1102 775,1095 818,1080 861,1065 897,1043 925,1012 953,981 974,942 987,894 1000,845 1006,788 1006,721 L 1006,0 825,0 Z"/>
- <glyph unicode="m" horiz-adv-x="1456" d="M 768,0 L 768,686 C 768,739 765,783 758,818 751,853 740,882 725,904 709,925 688,941 663,950 638,959 607,963 570,963 532,963 498,956 467,941 436,926 410,904 389,876 367,847 350,812 339,771 327,729 321,681 321,627 L 321,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 333,928 350,957 369,982 388,1007 410,1029 435,1047 460,1064 488,1078 521,1088 553,1097 590,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 946,928 964,957 984,982 1004,1007 1027,1029 1054,1047 1081,1064 1111,1078 1144,1088 1177,1097 1215,1102 1258,1102 1313,1102 1360,1095 1400,1080 1439,1065 1472,1043 1497,1012 1522,981 1541,942 1553,894 1565,845 1571,788 1571,721 L 1571,0 1393,0 1393,686 C 1393,739 1390,783 1383,818 1376,853 1365,882 1350,904 1334,925 1313,941 1288,950 1263,959 1232,963 1195,963 1157,963 1123,956 1092,942 1061,927 1035,906 1014,878 992,850 975,815 964,773 952,731 946,682 946,627 L 946,0 768,0 Z"/>
- <glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
- <glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
- <glyph unicode="g" horiz-adv-x="954" d="M 548,-425 C 486,-425 431,-419 383,-406 335,-393 294,-375 260,-352 226,-328 198,-300 177,-267 156,-234 140,-198 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 594,-288 631,-282 664,-271 697,-260 726,-241 749,-217 772,-191 790,-159 803,-119 816,-79 822,-30 822,27 L 822,201 820,201 C 807,174 790,148 771,123 751,98 727,75 699,56 670,37 637,21 600,10 563,-2 520,-8 472,-8 403,-8 345,4 296,27 247,50 207,84 176,130 145,176 122,233 108,302 93,370 86,449 86,539 86,626 93,704 108,773 122,842 145,901 178,950 210,998 252,1035 304,1061 355,1086 418,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,914 825,932 826,953 827,974 828,993 829,1012 830,1030 831,1046 832,1059 833,1072 835,1080 836,1082 L 1007,1082 C 1006,1076 1006,1066 1005,1052 1004,1037 1004,1020 1003,1000 1002,980 1002,958 1002,934 1001,909 1001,884 1001,858 L 1001,31 C 1001,-120 964,-234 890,-311 815,-387 701,-425 548,-425 Z M 822,541 C 822,616 814,681 798,735 781,788 760,832 733,866 706,900 676,925 642,941 607,957 572,965 536,965 490,965 451,957 418,941 385,925 357,900 336,866 314,831 298,787 288,734 277,680 272,616 272,541 272,463 277,398 288,345 298,292 314,249 335,216 356,183 383,160 416,146 449,132 488,125 533,125 569,125 604,133 639,148 673,163 704,188 731,221 758,254 780,297 797,350 814,403 822,466 822,541 Z"/>
- <glyph unicode="f" horiz-adv-x="557" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1243 185,1280 192,1314 199,1347 213,1377 233,1402 252,1427 279,1446 313,1461 347,1475 391,1482 445,1482 466,1482 489,1481 512,1479 535,1477 555,1474 572,1470 L 572,1333 C 561,1335 548,1337 533,1339 518,1340 504,1341 492,1341 465,1341 444,1337 427,1330 410,1323 396,1312 387,1299 377,1285 370,1268 367,1248 363,1228 361,1205 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
- <glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,446 282,394 294,347 305,299 323,258 348,224 372,189 403,163 441,144 479,125 525,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 1008,206 992,176 972,146 951,115 924,88 890,64 856,39 814,19 763,4 712,-12 650,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,649 100,735 125,806 150,876 185,933 229,977 273,1021 324,1053 383,1073 442,1092 504,1102 571,1102 662,1102 738,1087 799,1058 860,1029 909,988 946,937 983,885 1009,824 1025,754 1040,684 1048,608 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 538,969 507,964 474,955 441,945 410,928 382,903 354,878 330,845 311,803 292,760 281,706 278,641 L 862,641 Z"/>
- <glyph unicode="d" horiz-adv-x="954" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 C 823,921 823,931 823,946 822,960 822,975 822,991 821,1006 821,1021 821,1035 821,1049 821,1059 821,1065 L 821,1484 1001,1484 1001,223 C 1001,197 1001,172 1002,148 1002,124 1002,102 1003,82 1004,62 1004,45 1005,31 1006,16 1006,6 1007,0 L 835,0 C 834,7 833,16 832,29 831,41 830,55 829,71 828,87 827,104 826,122 825,139 825,157 825,174 L 821,174 Z M 275,542 C 275,467 280,403 289,350 298,297 313,253 334,219 355,184 381,159 413,143 445,127 484,119 530,119 577,119 619,127 656,142 692,157 722,182 747,217 771,251 789,296 802,351 815,406 821,474 821,554 821,631 815,696 802,749 789,802 771,844 746,877 721,910 691,933 656,948 620,962 579,969 532,969 488,969 450,961 418,946 386,931 359,906 338,872 317,838 301,794 291,740 280,685 275,619 275,542 Z"/>
- <glyph unicode="c" horiz-adv-x="875" d="M 275,546 C 275,484 280,427 289,375 298,323 313,278 334,241 355,203 384,174 419,153 454,132 497,122 548,122 612,122 666,139 709,173 752,206 778,258 788,328 L 970,328 C 964,283 951,239 931,197 911,155 884,118 850,86 815,54 773,28 724,9 675,-10 618,-20 553,-20 468,-20 396,-6 337,23 278,52 230,91 193,142 156,192 129,251 112,320 95,388 87,462 87,542 87,615 93,679 105,735 117,790 134,839 156,881 177,922 203,957 232,986 261,1014 293,1037 328,1054 362,1071 398,1083 436,1091 474,1098 512,1102 551,1102 612,1102 666,1094 713,1077 760,1060 801,1038 836,1009 870,980 898,945 919,906 940,867 955,824 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 495,961 452,953 418,936 383,919 355,893 334,859 313,824 298,781 289,729 280,677 275,616 275,546 Z"/>
- <glyph unicode="b" horiz-adv-x="953" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,151 316,133 315,114 314,95 313,78 312,62 311,46 310,32 309,21 308,10 307,3 306,0 L 132,0 C 133,6 133,16 134,31 135,45 135,62 136,82 137,102 137,124 138,148 138,172 138,197 138,223 L 138,1484 318,1484 318,1061 C 318,1041 318,1022 318,1004 317,985 317,969 316,955 315,938 315,923 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,615 859,679 850,732 841,785 826,829 805,864 784,898 758,923 726,939 694,955 655,963 609,963 562,963 520,955 484,940 447,925 417,900 393,866 368,832 350,787 337,732 324,677 318,609 318,529 318,452 324,387 337,334 350,281 368,239 393,206 417,173 447,149 483,135 519,120 560,113 607,113 651,113 689,121 721,136 753,151 780,176 801,210 822,244 838,288 849,343 859,397 864,463 864,540 Z"/>
- <glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,124 87,203 87,303 87,375 101,434 128,480 155,526 190,562 234,588 277,614 327,632 383,642 439,652 496,657 554,657 L 797,657 797,717 C 797,762 792,800 783,832 774,863 759,889 740,908 721,928 697,942 668,951 639,960 604,965 565,965 530,965 499,963 471,958 443,953 419,944 398,931 377,918 361,900 348,878 335,855 327,827 323,793 L 135,810 C 142,853 154,892 173,928 192,963 218,994 253,1020 287,1046 330,1066 382,1081 433,1095 496,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1090,111 1100,112 1110,113 1120,114 1130,116 1139,118 L 1139,6 C 1116,1 1094,-3 1072,-6 1049,-9 1025,-10 1000,-10 966,-10 937,-5 913,4 888,13 868,26 853,45 838,63 826,86 818,113 810,140 805,171 803,207 L 797,207 C 778,172 757,141 734,113 711,85 684,61 653,42 622,22 588,7 549,-4 510,-15 465,-20 414,-20 Z M 455,115 C 512,115 563,125 606,146 649,167 684,194 713,226 741,259 762,294 776,332 790,371 797,408 797,443 L 797,531 600,531 C 556,531 514,528 475,522 435,517 400,506 370,489 340,472 316,449 299,418 281,388 272,349 272,300 272,241 288,195 320,163 351,131 396,115 455,115 Z"/>
- <glyph unicode="_" horiz-adv-x="1191" d="M -31,-407 L -31,-277 1162,-277 1162,-407 -31,-407 Z"/>
- <glyph unicode="Y" horiz-adv-x="1244" d="M 777,584 L 777,0 587,0 587,584 45,1409 255,1409 684,738 1111,1409 1321,1409 777,584 Z"/>
- <glyph unicode="T" horiz-adv-x="1139" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
- <glyph unicode="S" horiz-adv-x="1139" d="M 1272,389 C 1272,330 1261,275 1238,225 1215,175 1179,132 1131,96 1083,59 1023,31 950,11 877,-10 790,-20 690,-20 515,-20 378,11 280,72 182,133 120,222 93,338 L 278,375 C 287,338 302,305 321,275 340,245 367,219 400,198 433,176 473,159 522,147 571,135 629,129 697,129 754,129 806,134 853,144 900,153 941,168 975,188 1009,208 1036,234 1055,266 1074,297 1083,335 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 613,659 573,668 534,679 494,689 456,701 420,716 383,730 349,747 317,766 285,785 257,809 234,836 211,863 192,894 179,930 166,965 159,1006 159,1053 159,1120 173,1177 200,1225 227,1272 264,1311 312,1342 360,1373 417,1395 482,1409 547,1423 618,1430 694,1430 781,1430 856,1423 918,1410 980,1396 1032,1375 1075,1348 1118,1321 1152,1287 1178,1247 1203,1206 1224,1159 1239,1106 L 1051,1073 C 1042,1107 1028,1137 1011,1164 993,1191 970,1213 941,1231 912,1249 878,1263 837,1272 796,1281 747,1286 692,1286 627,1286 572,1280 528,1269 483,1257 448,1241 421,1221 394,1201 374,1178 363,1151 351,1124 345,1094 345,1063 345,1021 356,987 377,960 398,933 426,910 462,892 498,874 540,859 587,847 634,835 685,823 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
- <glyph unicode="R" horiz-adv-x="1218" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 911,1409 982,1400 1044,1382 1105,1363 1157,1337 1199,1302 1241,1267 1273,1225 1295,1175 1317,1125 1328,1069 1328,1006 1328,961 1322,917 1309,874 1296,831 1275,791 1247,755 1219,719 1183,688 1140,662 1097,636 1045,618 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1047 1129,1084 1114,1115 1099,1146 1078,1173 1050,1194 1022,1215 988,1230 948,1241 908,1251 863,1256 812,1256 L 359,1256 359,736 820,736 C 875,736 922,743 962,757 1002,770 1035,789 1061,813 1086,837 1105,865 1118,898 1130,931 1136,966 1136,1004 Z"/>
- <glyph unicode="P" horiz-adv-x="1086" d="M 1258,985 C 1258,924 1248,867 1228,814 1207,761 1177,715 1137,676 1096,637 1046,606 985,583 924,560 854,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 844,1409 917,1399 979,1379 1041,1358 1093,1330 1134,1293 1175,1256 1206,1211 1227,1159 1248,1106 1258,1048 1258,985 Z M 1066,983 C 1066,1072 1039,1140 984,1187 929,1233 847,1256 738,1256 L 359,1256 359,700 746,700 C 856,700 937,724 989,773 1040,822 1066,892 1066,983 Z"/>
- <glyph unicode="M" horiz-adv-x="1324" d="M 1366,0 L 1366,940 C 1366,974 1366,1009 1367,1044 1368,1079 1369,1112 1370,1141 1371,1175 1373,1208 1375,1240 1366,1206 1356,1172 1346,1139 1337,1110 1328,1080 1318,1048 1307,1015 1297,986 1287,960 L 923,0 789,0 420,960 C 416,970 412,982 408,995 403,1008 399,1023 394,1038 389,1053 384,1068 379,1084 374,1099 369,1115 364,1130 353,1165 342,1202 331,1240 332,1203 333,1166 334,1129 335,1098 336,1065 337,1031 338,996 338,966 338,940 L 338,0 168,0 168,1409 419,1409 794,432 C 799,419 804,402 811,381 818,360 824,338 830,316 836,294 842,273 847,254 852,234 855,219 857,208 859,219 863,234 868,254 873,274 880,295 887,317 894,339 900,360 907,381 914,402 920,419 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
- <glyph unicode="L" horiz-adv-x="900" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
- <glyph unicode="I" horiz-adv-x="186" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
- <glyph unicode="F" horiz-adv-x="1006" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
- <glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,602 1363,498 1328,409 1293,319 1244,244 1183,184 1122,123 1049,78 966,47 882,16 792,0 695,0 L 168,0 168,1409 634,1409 C 743,1409 843,1396 935,1369 1026,1342 1105,1300 1171,1244 1237,1187 1289,1116 1326,1029 1363,942 1381,839 1381,719 Z M 1189,719 C 1189,814 1175,896 1148,964 1121,1031 1082,1087 1033,1130 984,1173 925,1205 856,1226 787,1246 712,1256 630,1256 L 359,1256 359,153 673,153 C 747,153 816,165 879,189 942,213 996,249 1042,296 1088,343 1124,402 1150,473 1176,544 1189,626 1189,719 Z"/>
- <glyph unicode="A" horiz-adv-x="1350" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 768,1026 C 757,1053 747,1080 738,1107 728,1134 719,1159 712,1182 705,1204 699,1223 694,1238 689,1253 686,1262 685,1265 684,1262 681,1252 676,1237 671,1222 665,1203 658,1180 650,1157 641,1132 632,1105 622,1078 612,1051 602,1024 L 422,561 949,561 768,1026 Z"/>
- <glyph unicode="4" horiz-adv-x="1033" d="M 881,319 L 881,0 711,0 711,319 47,319 47,459 692,1409 881,1409 881,461 1079,461 1079,319 881,319 Z M 711,1206 C 710,1203 706,1196 701,1187 696,1177 690,1166 683,1154 676,1142 670,1130 663,1118 656,1105 649,1095 644,1087 L 283,555 C 280,550 275,543 269,534 262,525 256,517 249,508 242,499 236,490 229,481 222,472 217,466 213,461 L 711,461 711,1206 Z"/>
- <glyph unicode="3" horiz-adv-x="980" d="M 1049,389 C 1049,324 1039,267 1018,216 997,165 966,123 926,88 885,53 835,26 776,8 716,-11 648,-20 571,-20 484,-20 410,-9 351,13 291,34 242,63 203,99 164,134 135,175 116,221 97,266 84,313 78,362 L 264,379 C 269,342 279,308 294,277 308,246 327,220 352,198 377,176 407,159 443,147 479,135 522,129 571,129 662,129 733,151 785,196 836,241 862,307 862,395 862,447 851,489 828,521 805,552 776,577 742,595 707,612 670,624 630,630 589,636 552,639 518,639 L 416,639 416,795 514,795 C 548,795 583,799 620,806 657,813 690,825 721,844 751,862 776,887 796,918 815,949 825,989 825,1038 825,1113 803,1173 759,1217 714,1260 648,1282 561,1282 482,1282 418,1262 369,1221 320,1180 291,1123 283,1049 L 102,1063 C 109,1125 126,1179 153,1225 180,1271 214,1309 255,1340 296,1370 342,1393 395,1408 448,1423 504,1430 563,1430 642,1430 709,1420 766,1401 823,1381 869,1354 905,1321 941,1287 968,1247 985,1202 1002,1157 1010,1108 1010,1057 1010,1016 1004,977 993,941 982,905 964,873 940,844 916,815 886,791 849,770 812,749 767,734 715,723 L 715,719 C 772,713 821,700 863,681 905,661 940,636 967,607 994,578 1015,544 1029,507 1042,470 1049,430 1049,389 Z"/>
- <glyph unicode="2" horiz-adv-x="927" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1078 823,1113 811,1144 799,1174 782,1199 759,1220 736,1241 709,1256 678,1267 646,1277 611,1282 572,1282 536,1282 502,1277 471,1267 439,1257 411,1242 386,1222 361,1202 341,1177 326,1148 310,1118 300,1083 295,1044 L 111,1061 C 117,1112 131,1159 153,1204 175,1249 205,1288 244,1322 283,1355 329,1382 384,1401 438,1420 501,1430 572,1430 642,1430 704,1422 759,1405 814,1388 860,1364 898,1331 935,1298 964,1258 984,1210 1004,1162 1014,1107 1014,1044 1014,997 1006,952 989,909 972,866 949,826 921,787 892,748 859,711 822,675 785,639 746,604 705,570 664,535 623,501 582,468 541,434 502,400 466,366 429,332 397,298 368,263 339,228 317,191 301,153 L 1036,153 1036,0 103,0 Z"/>
- <glyph unicode="1" horiz-adv-x="874" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
- <glyph unicode="." horiz-adv-x="186" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
- <glyph unicode="-" horiz-adv-x="504" d="M 91,464 L 91,624 591,624 591,464 91,464 Z"/>
- <glyph unicode=" " horiz-adv-x="556"/>
- </font>
- </defs>
- <defs class="TextShapeIndex">
- <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49 id50 id51 id52"/>
- </defs>
- <defs class="EmbeddedBulletChars">
- <g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
- </g>
- <g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
- </g>
- <g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
- </g>
- <g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
- </g>
- <g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
- </g>
- <g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
- </g>
- <g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
- </g>
- <g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
- </g>
- <g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
- </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
- <g id="id2" class="Master_Slide">
- <g id="bg-id2" class="Background"/>
- <g id="bo-id2" class="BackgroundObjects"/>
- </g>
- </g>
- <g class="SlideGroup">
- <g>
- <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
- <g class="Page">
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id3">
- <rect class="BoundingBox" stroke="none" fill="none" x="3069" y="1769" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 4975,3040 L 3070,3040 3070,1770 6880,1770 6880,3040 4975,3040 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 4975,3040 L 3070,3040 3070,1770 6880,1770 6880,3040 4975,3040 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3568" y="2299"/><tspan class="TextPosition" x="3568" y="2299"><tspan fill="rgb(0,0,0)" stroke="none">Specification</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4253" y="2854"/><tspan class="TextPosition" x="4253" y="2854"><tspan fill="rgb(0,0,0)" stroke="none">.YAML</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id4">
- <rect class="BoundingBox" stroke="none" fill="none" x="8146" y="1769" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10052,3040 L 8147,3040 8147,1770 11957,1770 11957,3040 10052,3040 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10052,3040 L 8147,3040 8147,1770 11957,1770 11957,3040 10052,3040 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8310" y="2299"/><tspan class="TextPosition" x="8310" y="2299"><tspan fill="rgb(0,0,0)" stroke="none">Data to process</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9599" y="2854"/><tspan class="TextPosition" x="9599" y="2854"><tspan fill="rgb(0,0,0)" stroke="none">.xml</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id5">
- <rect class="BoundingBox" stroke="none" fill="none" x="13169" y="1769" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 15075,3040 L 13170,3040 13170,1770 16980,1770 16980,3040 15075,3040 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 15075,3040 L 13170,3040 13170,1770 16980,1770 16980,3040 15075,3040 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13568" y="2299"/><tspan class="TextPosition" x="13568" y="2299"><tspan fill="rgb(0,0,0)" stroke="none">Static content</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14728" y="2854"/><tspan class="TextPosition" x="14728" y="2854"><tspan fill="rgb(0,0,0)" stroke="none">.rst</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id6">
- <rect class="BoundingBox" stroke="none" fill="none" x="2630" y="4279" width="4703" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 4980,4280 C 6312,4280 7330,4555 7330,4915 7330,5275 6312,5550 4980,5550 3648,5550 2631,5275 2631,4915 2631,4555 3648,4280 4980,4280 Z M 2631,4280 L 2631,4280 Z M 7331,5551 L 7331,5551 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 4980,4280 C 6312,4280 7330,4555 7330,4915 7330,5275 6312,5550 4980,5550 3648,5550 2631,5275 2631,4915 2631,4555 3648,4280 4980,4280 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 2631,4280 L 2631,4280 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7331,5551 L 7331,5551 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="2980" y="5087"/><tspan class="TextPosition" x="2980" y="5087"><tspan fill="rgb(0,0,0)" stroke="none">read_specification</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id7">
- <rect class="BoundingBox" stroke="none" fill="none" x="7611" y="4280" width="4830" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 10025,4281 C 11393,4281 12438,4556 12438,4916 12438,5276 11393,5551 10025,5551 8657,5551 7612,5276 7612,4916 7612,4556 8657,4281 10025,4281 Z M 7612,4281 L 7612,4281 Z M 12439,5552 L 12439,5552 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,4281 C 11393,4281 12438,4556 12438,4916 12438,5276 11393,5551 10025,5551 8657,5551 7612,5276 7612,4916 7612,4556 8657,4281 10025,4281 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7612,4281 L 7612,4281 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 12439,5552 L 12439,5552 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8910" y="5088"/><tspan class="TextPosition" x="8910" y="5088"><tspan fill="rgb(0,0,0)" stroke="none">read_data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id8">
- <rect class="BoundingBox" stroke="none" fill="none" x="3069" y="6789" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 4975,8060 L 3070,8060 3070,6790 6880,6790 6880,8060 4975,8060 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 4975,8060 L 3070,8060 3070,6790 6880,6790 6880,8060 4975,8060 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3568" y="7597"/><tspan class="TextPosition" x="3568" y="7597"><tspan fill="rgb(0,0,0)" stroke="none">Specification</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id9">
- <rect class="BoundingBox" stroke="none" fill="none" x="8119" y="6789" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10025,8060 L 8120,8060 8120,6790 11930,6790 11930,8060 10025,8060 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,8060 L 8120,8060 8120,6790 11930,6790 11930,8060 10025,8060 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8920" y="7597"/><tspan class="TextPosition" x="8920" y="7597"><tspan fill="rgb(0,0,0)" stroke="none">Input data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id10">
- <rect class="BoundingBox" stroke="none" fill="none" x="2657" y="10199" width="4703" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 5007,10200 C 6339,10200 7357,10475 7357,10835 7357,11195 6339,11470 5007,11470 3675,11470 2658,11195 2658,10835 2658,10475 3675,10200 5007,10200 Z M 2658,10200 L 2658,10200 Z M 7358,11471 L 7358,11471 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 5007,10200 C 6339,10200 7357,10475 7357,10835 7357,11195 6339,11470 5007,11470 3675,11470 2658,11195 2658,10835 2658,10475 3675,10200 5007,10200 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 2658,10200 L 2658,10200 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7358,11471 L 7358,11471 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3918" y="11007"/><tspan class="TextPosition" x="3918" y="11007"><tspan fill="rgb(0,0,0)" stroke="none">filter_data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id11">
- <rect class="BoundingBox" stroke="none" fill="none" x="7611" y="10199" width="4830" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 10025,10200 C 11393,10200 12438,10475 12438,10835 12438,11195 11393,11470 10025,11470 8657,11470 7612,11195 7612,10835 7612,10475 8657,10200 10025,10200 Z M 7612,10200 L 7612,10200 Z M 12439,11471 L 12439,11471 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,10200 C 11393,10200 12438,10475 12438,10835 12438,11195 11393,11470 10025,11470 8657,11470 7612,11195 7612,10835 7612,10475 8657,10200 10025,10200 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7612,10200 L 7612,10200 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 12439,11471 L 12439,11471 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8935" y="11007"/><tspan class="TextPosition" x="8935" y="11007"><tspan fill="rgb(0,0,0)" stroke="none">filter_data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id12">
- <rect class="BoundingBox" stroke="none" fill="none" x="12817" y="16899" width="4449" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 15040,16900 C 16300,16900 17263,17175 17263,17535 17263,17895 16300,18170 15040,18170 13780,18170 12818,17895 12818,17535 12818,17175 13780,16900 15040,16900 Z M 12818,16900 L 12818,16900 Z M 17264,18171 L 17264,18171 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 15040,16900 C 16300,16900 17263,17175 17263,17535 17263,17895 16300,18170 15040,18170 13780,18170 12818,17895 12818,17535 12818,17175 13780,16900 15040,16900 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 12818,16900 L 12818,16900 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 17264,18171 L 17264,18171 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13482" y="17707"/><tspan class="TextPosition" x="13482" y="17707"><tspan fill="rgb(0,0,0)" stroke="none">generate_files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id13">
- <rect class="BoundingBox" stroke="none" fill="none" x="3069" y="14409" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 4975,15680 L 3070,15680 3070,14410 6880,14410 6880,15680 4975,15680 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 4975,15680 L 3070,15680 3070,14410 6880,14410 6880,15680 4975,15680 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4260" y="15217"/><tspan class="TextPosition" x="4260" y="15217"><tspan fill="rgb(0,0,0)" stroke="none">Tables</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id14">
- <rect class="BoundingBox" stroke="none" fill="none" x="8119" y="14409" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10025,15680 L 8120,15680 8120,14410 11930,14410 11930,15680 10025,15680 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,15680 L 8120,15680 8120,14410 11930,14410 11930,15680 10025,15680 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9473" y="15217"/><tspan class="TextPosition" x="9473" y="15217"><tspan fill="rgb(0,0,0)" stroke="none">Plots</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id15">
- <rect class="BoundingBox" stroke="none" fill="none" x="13169" y="19509" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 15075,20780 L 13170,20780 13170,19510 16980,19510 16980,20780 15075,20780 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 15075,20780 L 13170,20780 13170,19510 16980,19510 16980,20780 15075,20780 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="14552" y="20317"/><tspan class="TextPosition" x="14552" y="20317"><tspan fill="rgb(0,0,0)" stroke="none">Files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id16">
- <rect class="BoundingBox" stroke="none" fill="none" x="7611" y="22019" width="4830" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 10025,22020 C 11393,22020 12438,22295 12438,22655 12438,23015 11393,23290 10025,23290 8657,23290 7612,23015 7612,22655 7612,22295 8657,22020 10025,22020 Z M 7612,22020 L 7612,22020 Z M 12439,23291 L 12439,23291 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,22020 C 11393,22020 12438,22295 12438,22655 12438,23015 11393,23290 10025,23290 8657,23290 7612,23015 7612,22655 7612,22295 8657,22020 10025,22020 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7612,22020 L 7612,22020 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 12439,23291 L 12439,23291 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8262" y="22827"/><tspan class="TextPosition" x="8262" y="22827"><tspan fill="rgb(0,0,0)" stroke="none">generate_report</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id17">
- <rect class="BoundingBox" stroke="none" fill="none" x="8119" y="24629" width="3813" height="1273"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10025,25900 L 8120,25900 8120,24630 11930,24630 11930,25900 10025,25900 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,25900 L 8120,25900 8120,24630 11930,24630 11930,25900 10025,25900 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9280" y="25437"/><tspan class="TextPosition" x="9280" y="25437"><tspan fill="rgb(0,0,0)" stroke="none">Report</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id18">
- <rect class="BoundingBox" stroke="none" fill="none" x="1303" y="2404" width="6310" height="20387"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3070,2405 C 1171,2405 -1037,22093 7253,22643"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 7612,22655 L 7167,22489 7157,22789 7612,22655 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id19">
- <rect class="BoundingBox" stroke="none" fill="none" x="4830" y="3039" width="302" height="1242"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,3040 C 4975,3970 4979,3554 4981,3845"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 4982,4280 L 5131,3830 4831,3830 4982,4280 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id20">
- <rect class="BoundingBox" stroke="none" fill="none" x="9879" y="3039" width="302" height="1243"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10052,3040 C 10052,3971 10036,3555 10029,3846"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,4281 L 10179,3832 9879,3830 10025,4281 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id21">
- <rect class="BoundingBox" stroke="none" fill="none" x="4826" y="5549" width="302" height="1242"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4982,5550 C 4982,6481 4978,6066 4976,6355"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 4975,6790 L 5126,6340 4826,6340 4975,6790 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id22">
- <rect class="BoundingBox" stroke="none" fill="none" x="9875" y="5550" width="301" height="1241"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,5551 L 10025,6360"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,6790 L 10175,6340 9875,6340 10025,6790 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id23">
- <rect class="BoundingBox" stroke="none" fill="none" x="4857" y="8059" width="302" height="2142"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,8060 C 4975,9665 5002,8796 5008,9766"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 5009,10200 L 5158,9750 4858,9750 5009,10200 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id24">
- <rect class="BoundingBox" stroke="none" fill="none" x="4974" y="8059" width="3418" height="2328"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,8060 C 4975,9665 7780,8678 8251,9972"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 8318,10386 L 8390,9917 8095,9968 8318,10386 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id25">
- <rect class="BoundingBox" stroke="none" fill="none" x="4974" y="8059" width="10214" height="8842"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,8060 C 4975,10304 14789,5995 15037,16490"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 15042,16900 L 15186,16448 14886,16452 15042,16900 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id26">
- <rect class="BoundingBox" stroke="none" fill="none" x="6597" y="8059" width="3430" height="2328"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,8060 C 10025,9665 7210,8678 6737,9972"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 6670,10386 L 6894,9968 6598,9917 6670,10386 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id27">
- <rect class="BoundingBox" stroke="none" fill="none" x="9875" y="8059" width="301" height="2142"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,8060 L 10025,9770"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,10200 L 10175,9750 9875,9750 10025,10200 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id28">
- <rect class="BoundingBox" stroke="none" fill="none" x="10024" y="8059" width="6737" height="9028"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,8060 C 10025,9957 16448,5557 16610,16654"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 16613,17086 L 16760,16635 16460,16637 16613,17086 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id29">
- <rect class="BoundingBox" stroke="none" fill="none" x="4806" y="13570" width="301" height="841"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4945,13571 C 4945,14201 4952,13931 4959,13981"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 4975,14410 L 5106,13954 4806,13967 4975,14410 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id30">
- <rect class="BoundingBox" stroke="none" fill="none" x="9875" y="13570" width="301" height="841"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,13571 L 10025,13980"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,14410 L 10175,13960 9875,13960 10025,14410 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id31">
- <rect class="BoundingBox" stroke="none" fill="none" x="14920" y="18169" width="302" height="1342"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15042,18170 C 15042,19176 15063,18709 15072,19080"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 15075,19510 L 15221,19059 14921,19061 15075,19510 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id32">
- <rect class="BoundingBox" stroke="none" fill="none" x="4974" y="15679" width="3485" height="6528"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,15680 C 4975,20435 8106,17374 8308,21746"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 8318,22206 L 8458,21753 8158,21760 8318,22206 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id33">
- <rect class="BoundingBox" stroke="none" fill="none" x="9875" y="15679" width="301" height="6342"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,15680 L 10025,21590"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,22020 L 10175,21570 9875,21570 10025,22020 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id34">
- <rect class="BoundingBox" stroke="none" fill="none" x="11732" y="20779" width="3345" height="1428"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15075,20780 C 15075,21710 12525,21151 11879,21832"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 11732,22206 L 12043,21848 11766,21733 11732,22206 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id35">
- <rect class="BoundingBox" stroke="none" fill="none" x="12438" y="2404" width="7822" height="20393"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16980,2405 C 20904,2405 23125,22213 12786,22648"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 12438,22655 L 12891,22795 12885,22495 12438,22655 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id36">
- <rect class="BoundingBox" stroke="none" fill="none" x="9875" y="23289" width="301" height="1342"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10025,23290 L 10025,24200"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10025,24630 L 10175,24180 9875,24180 10025,24630 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id37">
- <rect class="BoundingBox" stroke="none" fill="none" x="2658" y="12300" width="4576" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 4945,12301 C 6241,12301 7231,12576 7231,12936 7231,13296 6241,13571 4945,13571 3649,13571 2659,13296 2659,12936 2659,12576 3649,12301 4945,12301 Z M 2659,12301 L 2659,12301 Z M 7232,13572 L 7232,13572 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 4945,12301 C 6241,12301 7231,12576 7231,12936 7231,13296 6241,13571 4945,13571 3649,13571 2659,13296 2659,12936 2659,12576 3649,12301 4945,12301 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 2659,12301 L 2659,12301 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7232,13572 L 7232,13572 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="3167" y="13108"/><tspan class="TextPosition" x="3167" y="13108"><tspan fill="rgb(0,0,0)" stroke="none">generate_tables</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id38">
- <rect class="BoundingBox" stroke="none" fill="none" x="7611" y="12300" width="4830" height="1274"/>
- <path fill="rgb(207,231,245)" stroke="none" d="M 10025,12301 C 11393,12301 12438,12576 12438,12936 12438,13296 11393,13571 10025,13571 8657,13571 7612,13296 7612,12936 7612,12576 8657,12301 10025,12301 Z M 7612,12301 L 7612,12301 Z M 12439,13572 L 12439,13572 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10025,12301 C 11393,12301 12438,12576 12438,12936 12438,13296 11393,13571 10025,13571 8657,13571 7612,13296 7612,12936 7612,12576 8657,12301 10025,12301 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 7612,12301 L 7612,12301 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 12439,13572 L 12439,13572 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="8384" y="13108"/><tspan class="TextPosition" x="8384" y="13108"><tspan fill="rgb(0,0,0)" stroke="none">generate_plots</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id39">
- <rect class="BoundingBox" stroke="none" fill="none" x="4797" y="11452" width="302" height="850"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4977,11871 C 4977,11387 4954,11245 4947,11868"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 4945,12301 L 5097,11852 4797,11850 4945,12301 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id40">
- <rect class="BoundingBox" stroke="none" fill="none" x="9827" y="11487" width="302" height="803"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9978,11859 C 9978,11436 9977,11298 9977,11857"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 9977,12289 L 10127,11839 9827,11839 9977,12289 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id41">
- <rect class="BoundingBox" stroke="none" fill="none" x="11929" y="15044" width="1671" height="2043"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11930,15045 C 12957,15045 13350,15582 13451,16658"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 13470,17086 L 13599,16629 13299,16643 13470,17086 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id42">
- <rect class="BoundingBox" stroke="none" fill="none" x="4974" y="15679" width="7846" height="2006"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4975,15680 C 4975,16917 7443,17500 12382,17534"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 12819,17535 L 12370,17383 12368,17683 12819,17535 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ConnectorShape">
- <g id="id43">
- <rect class="BoundingBox" stroke="none" fill="none" x="15074" y="3039" width="3534" height="14497"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15075,3040 C 15075,3524 16775,3443 17776,6946 18777,10449 19027,16449 17651,17410"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 17264,17535 L 17738,17533 17642,17249 17264,17535 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id44">
- <rect class="BoundingBox" stroke="none" fill="none" x="499" y="499" width="20003" height="6"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 500,503 L 553,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 606,503 L 659,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 712,503 L 765,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 819,503 L 872,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 925,503 L 978,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1031,503 L 1084,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1137,503 L 1190,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1243,503 L 1296,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1349,503 L 1403,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1456,503 L 1509,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1562,503 L 1615,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1668,503 L 1721,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1774,503 L 1827,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1880,503 L 1933,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1987,503 L 2040,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2093,503 L 2146,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2199,503 L 2252,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2305,503 L 2358,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2411,503 L 2464,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2517,503 L 2571,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2624,503 L 2677,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2730,503 L 2783,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2836,503 L 2889,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2942,503 L 2995,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3048,503 L 3101,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3155,503 L 3208,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3261,503 L 3314,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3367,503 L 3420,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3473,503 L 3526,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3579,503 L 3632,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3685,503 L 3739,503"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3792,503 L 3845,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3898,502 L 3951,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4004,502 L 4057,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4110,502 L 4163,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4216,502 L 4269,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4323,502 L 4376,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4429,502 L 4482,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4535,502 L 4588,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4641,502 L 4694,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4747,502 L 4800,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4854,502 L 4907,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4960,502 L 5013,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5066,502 L 5119,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5172,502 L 5225,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5278,502 L 5331,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5384,502 L 5438,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5491,502 L 5544,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5597,502 L 5650,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5703,502 L 5756,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5809,502 L 5862,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5915,502 L 5968,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6022,502 L 6075,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6128,502 L 6181,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6234,502 L 6287,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6340,502 L 6393,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6446,502 L 6499,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6552,502 L 6606,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6659,502 L 6712,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6765,502 L 6818,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6871,502 L 6924,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6977,502 L 7030,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7083,502 L 7136,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7190,502 L 7243,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7296,502 L 7349,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7402,502 L 7455,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7508,502 L 7561,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7614,502 L 7667,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7720,502 L 7774,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7827,502 L 7880,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7933,502 L 7986,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8039,502 L 8092,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8145,502 L 8198,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8251,502 L 8304,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8358,502 L 8411,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8464,502 L 8517,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8570,502 L 8623,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8676,502 L 8729,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8782,502 L 8835,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8888,502 L 8942,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8995,502 L 9048,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9101,502 L 9154,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9207,502 L 9260,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9313,502 L 9366,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9419,502 L 9472,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9526,502 L 9579,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9632,502 L 9685,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9738,502 L 9791,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9844,502 L 9897,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9950,502 L 10003,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10056,502 L 10110,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10163,502 L 10216,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10269,502 L 10322,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10375,502 L 10428,502"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10481,502 L 10534,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10587,501 L 10640,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10694,501 L 10747,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10800,501 L 10853,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10906,501 L 10959,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11012,501 L 11065,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11118,501 L 11171,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11224,501 L 11278,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11331,501 L 11384,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11437,501 L 11490,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11543,501 L 11596,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11649,501 L 11702,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11755,501 L 11808,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11862,501 L 11915,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11968,501 L 12021,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12074,501 L 12127,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12180,501 L 12233,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12286,501 L 12339,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12392,501 L 12446,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12499,501 L 12552,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12605,501 L 12658,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12711,501 L 12764,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12817,501 L 12870,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12923,501 L 12977,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13030,501 L 13083,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13136,501 L 13189,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13242,501 L 13295,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13348,501 L 13401,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13454,501 L 13507,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13561,501 L 13614,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13667,501 L 13720,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13773,501 L 13826,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13879,501 L 13932,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13985,501 L 14038,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14091,501 L 14145,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14198,501 L 14251,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14304,501 L 14357,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14410,501 L 14463,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14516,501 L 14569,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14622,501 L 14675,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14729,501 L 14782,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14835,501 L 14888,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14941,501 L 14994,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15047,501 L 15100,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15153,501 L 15206,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15259,501 L 15313,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15366,501 L 15419,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15472,501 L 15525,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15578,501 L 15631,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15684,501 L 15737,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15790,501 L 15843,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15897,501 L 15950,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16003,501 L 16056,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16109,501 L 16162,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16215,501 L 16268,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16321,501 L 16374,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16427,501 L 16481,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16534,501 L 16587,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16640,501 L 16693,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16746,501 L 16799,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16852,501 L 16905,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16958,501 L 17011,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17065,501 L 17118,501"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17171,500 L 17224,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17277,500 L 17330,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17383,500 L 17436,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17489,500 L 17542,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17595,500 L 17649,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17702,500 L 17755,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17808,500 L 17861,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17914,500 L 17967,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18020,500 L 18073,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18126,500 L 18179,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18233,500 L 18286,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18339,500 L 18392,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18445,500 L 18498,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18551,500 L 18604,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18657,500 L 18710,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18763,500 L 18817,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18870,500 L 18923,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18976,500 L 19029,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19082,500 L 19135,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19188,500 L 19241,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19294,500 L 19347,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19401,500 L 19454,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19507,500 L 19560,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19613,500 L 19666,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19719,500 L 19772,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19825,500 L 19878,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19931,500 L 19985,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20038,500 L 20091,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20144,500 L 20197,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20250,500 L 20303,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20356,500 L 20409,500"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20462,500 L 20500,500"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id45">
- <rect class="BoundingBox" stroke="none" fill="none" x="499" y="3600" width="20003" height="6"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 500,3604 L 553,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 606,3604 L 659,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 712,3604 L 765,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 819,3604 L 872,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 925,3604 L 978,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1031,3604 L 1084,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1137,3604 L 1190,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1243,3604 L 1296,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1349,3604 L 1403,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1456,3604 L 1509,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1562,3604 L 1615,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1668,3604 L 1721,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1774,3604 L 1827,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1880,3604 L 1933,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1987,3604 L 2040,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2093,3604 L 2146,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2199,3604 L 2252,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2305,3604 L 2358,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2411,3604 L 2464,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2517,3604 L 2571,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2624,3604 L 2677,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2730,3604 L 2783,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2836,3604 L 2889,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2942,3604 L 2995,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3048,3604 L 3101,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3155,3604 L 3208,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3261,3604 L 3314,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3367,3604 L 3420,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3473,3604 L 3526,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3579,3604 L 3632,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3685,3604 L 3739,3604"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3792,3604 L 3845,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3898,3603 L 3951,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4004,3603 L 4057,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4110,3603 L 4163,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4216,3603 L 4269,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4323,3603 L 4376,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4429,3603 L 4482,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4535,3603 L 4588,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4641,3603 L 4694,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4747,3603 L 4800,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4854,3603 L 4907,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4960,3603 L 5013,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5066,3603 L 5119,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5172,3603 L 5225,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5278,3603 L 5331,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5384,3603 L 5438,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5491,3603 L 5544,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5597,3603 L 5650,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5703,3603 L 5756,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5809,3603 L 5862,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5915,3603 L 5968,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6022,3603 L 6075,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6128,3603 L 6181,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6234,3603 L 6287,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6340,3603 L 6393,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6446,3603 L 6499,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6552,3603 L 6606,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6659,3603 L 6712,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6765,3603 L 6818,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6871,3603 L 6924,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6977,3603 L 7030,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7083,3603 L 7136,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7190,3603 L 7243,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7296,3603 L 7349,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7402,3603 L 7455,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7508,3603 L 7561,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7614,3603 L 7667,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7720,3603 L 7774,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7827,3603 L 7880,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7933,3603 L 7986,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8039,3603 L 8092,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8145,3603 L 8198,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8251,3603 L 8304,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8358,3603 L 8411,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8464,3603 L 8517,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8570,3603 L 8623,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8676,3603 L 8729,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8782,3603 L 8835,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8888,3603 L 8942,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8995,3603 L 9048,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9101,3603 L 9154,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9207,3603 L 9260,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9313,3603 L 9366,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9419,3603 L 9472,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9526,3603 L 9579,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9632,3603 L 9685,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9738,3603 L 9791,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9844,3603 L 9897,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9950,3603 L 10003,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10056,3603 L 10110,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10163,3603 L 10216,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10269,3603 L 10322,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10375,3603 L 10428,3603"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10481,3603 L 10534,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10587,3602 L 10640,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10694,3602 L 10747,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10800,3602 L 10853,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10906,3602 L 10959,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11012,3602 L 11065,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11118,3602 L 11171,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11224,3602 L 11278,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11331,3602 L 11384,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11437,3602 L 11490,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11543,3602 L 11596,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11649,3602 L 11702,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11755,3602 L 11808,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11862,3602 L 11915,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11968,3602 L 12021,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12074,3602 L 12127,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12180,3602 L 12233,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12286,3602 L 12339,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12392,3602 L 12446,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12499,3602 L 12552,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12605,3602 L 12658,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12711,3602 L 12764,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12817,3602 L 12870,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12923,3602 L 12977,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13030,3602 L 13083,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13136,3602 L 13189,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13242,3602 L 13295,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13348,3602 L 13401,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13454,3602 L 13507,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13561,3602 L 13614,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13667,3602 L 13720,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13773,3602 L 13826,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13879,3602 L 13932,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13985,3602 L 14038,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14091,3602 L 14145,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14198,3602 L 14251,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14304,3602 L 14357,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14410,3602 L 14463,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14516,3602 L 14569,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14622,3602 L 14675,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14729,3602 L 14782,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14835,3602 L 14888,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14941,3602 L 14994,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15047,3602 L 15100,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15153,3602 L 15206,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15259,3602 L 15313,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15366,3602 L 15419,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15472,3602 L 15525,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15578,3602 L 15631,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15684,3602 L 15737,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15790,3602 L 15843,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15897,3602 L 15950,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16003,3602 L 16056,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16109,3602 L 16162,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16215,3602 L 16268,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16321,3602 L 16374,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16427,3602 L 16481,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16534,3602 L 16587,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16640,3602 L 16693,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16746,3602 L 16799,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16852,3602 L 16905,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16958,3602 L 17011,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17065,3602 L 17118,3602"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17171,3601 L 17224,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17277,3601 L 17330,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17383,3601 L 17436,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17489,3601 L 17542,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17595,3601 L 17649,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17702,3601 L 17755,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17808,3601 L 17861,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17914,3601 L 17967,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18020,3601 L 18073,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18126,3601 L 18179,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18233,3601 L 18286,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18339,3601 L 18392,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18445,3601 L 18498,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18551,3601 L 18604,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18657,3601 L 18710,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18763,3601 L 18817,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18870,3601 L 18923,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18976,3601 L 19029,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19082,3601 L 19135,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19188,3601 L 19241,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19294,3601 L 19347,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19401,3601 L 19454,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19507,3601 L 19560,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19613,3601 L 19666,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19719,3601 L 19772,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19825,3601 L 19878,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19931,3601 L 19985,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20038,3601 L 20091,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20144,3601 L 20197,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20250,3601 L 20303,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20356,3601 L 20409,3601"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20462,3601 L 20500,3601"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id46">
- <rect class="BoundingBox" stroke="none" fill="none" x="499" y="11701" width="20003" height="6"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 500,11705 L 553,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 606,11705 L 659,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 712,11705 L 765,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 819,11705 L 872,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 925,11705 L 978,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1031,11705 L 1084,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1137,11705 L 1190,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1243,11705 L 1296,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1349,11705 L 1403,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1456,11705 L 1509,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1562,11705 L 1615,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1668,11705 L 1721,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1774,11705 L 1827,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1880,11705 L 1933,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1987,11705 L 2040,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2093,11705 L 2146,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2199,11705 L 2252,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2305,11705 L 2358,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2411,11705 L 2464,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2517,11705 L 2571,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2624,11705 L 2677,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2730,11705 L 2783,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2836,11705 L 2889,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2942,11705 L 2995,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3048,11705 L 3101,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3155,11705 L 3208,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3261,11705 L 3314,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3367,11705 L 3420,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3473,11705 L 3526,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3579,11705 L 3632,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3685,11705 L 3739,11705"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3792,11705 L 3845,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3898,11704 L 3951,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4004,11704 L 4057,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4110,11704 L 4163,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4216,11704 L 4269,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4323,11704 L 4376,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4429,11704 L 4482,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4535,11704 L 4588,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4641,11704 L 4694,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4747,11704 L 4800,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4854,11704 L 4907,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4960,11704 L 5013,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5066,11704 L 5119,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5172,11704 L 5225,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5278,11704 L 5331,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5384,11704 L 5438,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5491,11704 L 5544,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5597,11704 L 5650,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5703,11704 L 5756,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5809,11704 L 5862,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5915,11704 L 5968,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6022,11704 L 6075,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6128,11704 L 6181,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6234,11704 L 6287,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6340,11704 L 6393,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6446,11704 L 6499,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6552,11704 L 6606,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6659,11704 L 6712,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6765,11704 L 6818,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6871,11704 L 6924,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6977,11704 L 7030,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7083,11704 L 7136,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7190,11704 L 7243,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7296,11704 L 7349,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7402,11704 L 7455,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7508,11704 L 7561,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7614,11704 L 7667,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7720,11704 L 7774,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7827,11704 L 7880,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7933,11704 L 7986,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8039,11704 L 8092,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8145,11704 L 8198,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8251,11704 L 8304,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8358,11704 L 8411,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8464,11704 L 8517,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8570,11704 L 8623,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8676,11704 L 8729,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8782,11704 L 8835,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8888,11704 L 8942,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8995,11704 L 9048,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9101,11704 L 9154,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9207,11704 L 9260,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9313,11704 L 9366,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9419,11704 L 9472,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9526,11704 L 9579,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9632,11704 L 9685,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9738,11704 L 9791,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9844,11704 L 9897,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9950,11704 L 10003,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10056,11704 L 10110,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10163,11704 L 10216,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10269,11704 L 10322,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10375,11704 L 10428,11704"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10481,11704 L 10534,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10587,11703 L 10640,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10694,11703 L 10747,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10800,11703 L 10853,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10906,11703 L 10959,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11012,11703 L 11065,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11118,11703 L 11171,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11224,11703 L 11278,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11331,11703 L 11384,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11437,11703 L 11490,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11543,11703 L 11596,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11649,11703 L 11702,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11755,11703 L 11808,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11862,11703 L 11915,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11968,11703 L 12021,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12074,11703 L 12127,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12180,11703 L 12233,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12286,11703 L 12339,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12392,11703 L 12446,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12499,11703 L 12552,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12605,11703 L 12658,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12711,11703 L 12764,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12817,11703 L 12870,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12923,11703 L 12977,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13030,11703 L 13083,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13136,11703 L 13189,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13242,11703 L 13295,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13348,11703 L 13401,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13454,11703 L 13507,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13561,11703 L 13614,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13667,11703 L 13720,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13773,11703 L 13826,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13879,11703 L 13932,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13985,11703 L 14038,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14091,11703 L 14145,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14198,11703 L 14251,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14304,11703 L 14357,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14410,11703 L 14463,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14516,11703 L 14569,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14622,11703 L 14675,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14729,11703 L 14782,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14835,11703 L 14888,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14941,11703 L 14994,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15047,11703 L 15100,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15153,11703 L 15206,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15259,11703 L 15313,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15366,11703 L 15419,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15472,11703 L 15525,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15578,11703 L 15631,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15684,11703 L 15737,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15790,11703 L 15843,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15897,11703 L 15950,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16003,11703 L 16056,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16109,11703 L 16162,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16215,11703 L 16268,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16321,11703 L 16374,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16427,11703 L 16481,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16534,11703 L 16587,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16640,11703 L 16693,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16746,11703 L 16799,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16852,11703 L 16905,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16958,11703 L 17011,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17065,11703 L 17118,11703"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17171,11702 L 17224,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17277,11702 L 17330,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17383,11702 L 17436,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17489,11702 L 17542,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17595,11702 L 17649,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17702,11702 L 17755,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17808,11702 L 17861,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17914,11702 L 17967,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18020,11702 L 18073,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18126,11702 L 18179,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18233,11702 L 18286,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18339,11702 L 18392,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18445,11702 L 18498,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18551,11702 L 18604,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18657,11702 L 18710,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18763,11702 L 18817,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18870,11702 L 18923,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18976,11702 L 19029,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19082,11702 L 19135,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19188,11702 L 19241,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19294,11702 L 19347,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19401,11702 L 19454,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19507,11702 L 19560,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19613,11702 L 19666,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19719,11702 L 19772,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19825,11702 L 19878,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19931,11702 L 19985,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20038,11702 L 20091,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20144,11702 L 20197,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20250,11702 L 20303,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20356,11702 L 20409,11702"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20462,11702 L 20500,11702"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id47">
- <rect class="BoundingBox" stroke="none" fill="none" x="499" y="21402" width="20003" height="6"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 500,21406 L 553,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 606,21406 L 659,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 712,21406 L 765,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 819,21406 L 872,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 925,21406 L 978,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1031,21406 L 1084,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1137,21406 L 1190,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1243,21406 L 1296,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1349,21406 L 1403,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1456,21406 L 1509,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1562,21406 L 1615,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1668,21406 L 1721,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1774,21406 L 1827,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1880,21406 L 1933,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1987,21406 L 2040,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2093,21406 L 2146,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2199,21406 L 2252,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2305,21406 L 2358,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2411,21406 L 2464,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2517,21406 L 2571,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2624,21406 L 2677,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2730,21406 L 2783,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2836,21406 L 2889,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2942,21406 L 2995,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3048,21406 L 3101,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3155,21406 L 3208,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3261,21406 L 3314,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3367,21406 L 3420,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3473,21406 L 3526,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3579,21406 L 3632,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3685,21406 L 3739,21406"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3792,21406 L 3845,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3898,21405 L 3951,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4004,21405 L 4057,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4110,21405 L 4163,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4216,21405 L 4269,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4323,21405 L 4376,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4429,21405 L 4482,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4535,21405 L 4588,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4641,21405 L 4694,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4747,21405 L 4800,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4854,21405 L 4907,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4960,21405 L 5013,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5066,21405 L 5119,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5172,21405 L 5225,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5278,21405 L 5331,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5384,21405 L 5438,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5491,21405 L 5544,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5597,21405 L 5650,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5703,21405 L 5756,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5809,21405 L 5862,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5915,21405 L 5968,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6022,21405 L 6075,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6128,21405 L 6181,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6234,21405 L 6287,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6340,21405 L 6393,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6446,21405 L 6499,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6552,21405 L 6606,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6659,21405 L 6712,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6765,21405 L 6818,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6871,21405 L 6924,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6977,21405 L 7030,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7083,21405 L 7136,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7190,21405 L 7243,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7296,21405 L 7349,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7402,21405 L 7455,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7508,21405 L 7561,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7614,21405 L 7667,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7720,21405 L 7774,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7827,21405 L 7880,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7933,21405 L 7986,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8039,21405 L 8092,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8145,21405 L 8198,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8251,21405 L 8304,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8358,21405 L 8411,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8464,21405 L 8517,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8570,21405 L 8623,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8676,21405 L 8729,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8782,21405 L 8835,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8888,21405 L 8942,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8995,21405 L 9048,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9101,21405 L 9154,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9207,21405 L 9260,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9313,21405 L 9366,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9419,21405 L 9472,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9526,21405 L 9579,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9632,21405 L 9685,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9738,21405 L 9791,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9844,21405 L 9897,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9950,21405 L 10003,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10056,21405 L 10110,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10163,21405 L 10216,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10269,21405 L 10322,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10375,21405 L 10428,21405"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10481,21405 L 10534,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10587,21404 L 10640,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10694,21404 L 10747,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10800,21404 L 10853,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10906,21404 L 10959,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11012,21404 L 11065,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11118,21404 L 11171,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11224,21404 L 11278,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11331,21404 L 11384,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11437,21404 L 11490,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11543,21404 L 11596,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11649,21404 L 11702,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11755,21404 L 11808,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11862,21404 L 11915,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11968,21404 L 12021,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12074,21404 L 12127,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12180,21404 L 12233,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12286,21404 L 12339,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12392,21404 L 12446,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12499,21404 L 12552,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12605,21404 L 12658,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12711,21404 L 12764,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12817,21404 L 12870,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12923,21404 L 12977,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13030,21404 L 13083,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13136,21404 L 13189,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13242,21404 L 13295,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13348,21404 L 13401,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13454,21404 L 13507,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13561,21404 L 13614,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13667,21404 L 13720,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13773,21404 L 13826,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13879,21404 L 13932,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13985,21404 L 14038,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14091,21404 L 14145,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14198,21404 L 14251,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14304,21404 L 14357,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14410,21404 L 14463,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14516,21404 L 14569,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14622,21404 L 14675,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14729,21404 L 14782,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14835,21404 L 14888,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14941,21404 L 14994,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15047,21404 L 15100,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15153,21404 L 15206,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15259,21404 L 15313,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15366,21404 L 15419,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15472,21404 L 15525,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15578,21404 L 15631,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15684,21404 L 15737,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15790,21404 L 15843,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15897,21404 L 15950,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16003,21404 L 16056,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16109,21404 L 16162,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16215,21404 L 16268,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16321,21404 L 16374,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16427,21404 L 16481,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16534,21404 L 16587,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16640,21404 L 16693,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16746,21404 L 16799,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16852,21404 L 16905,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16958,21404 L 17011,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17065,21404 L 17118,21404"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17171,21403 L 17224,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17277,21403 L 17330,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17383,21403 L 17436,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17489,21403 L 17542,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17595,21403 L 17649,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17702,21403 L 17755,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17808,21403 L 17861,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17914,21403 L 17967,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18020,21403 L 18073,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18126,21403 L 18179,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18233,21403 L 18286,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18339,21403 L 18392,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18445,21403 L 18498,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18551,21403 L 18604,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18657,21403 L 18710,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18763,21403 L 18817,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18870,21403 L 18923,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18976,21403 L 19029,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19082,21403 L 19135,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19188,21403 L 19241,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19294,21403 L 19347,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19401,21403 L 19454,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19507,21403 L 19560,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19613,21403 L 19666,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19719,21403 L 19772,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19825,21403 L 19878,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19931,21403 L 19985,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20038,21403 L 20091,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20144,21403 L 20197,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20250,21403 L 20303,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20356,21403 L 20409,21403"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20462,21403 L 20500,21403"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id48">
- <rect class="BoundingBox" stroke="none" fill="none" x="499" y="26503" width="20003" height="6"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 500,26507 L 553,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 606,26507 L 659,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 712,26507 L 765,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 819,26507 L 872,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 925,26507 L 978,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1031,26507 L 1084,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1137,26507 L 1190,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1243,26507 L 1296,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1349,26507 L 1403,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1456,26507 L 1509,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1562,26507 L 1615,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1668,26507 L 1721,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1774,26507 L 1827,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1880,26507 L 1933,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 1987,26507 L 2040,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2093,26507 L 2146,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2199,26507 L 2252,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2305,26507 L 2358,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2411,26507 L 2464,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2517,26507 L 2571,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2624,26507 L 2677,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2730,26507 L 2783,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2836,26507 L 2889,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 2942,26507 L 2995,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3048,26507 L 3101,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3155,26507 L 3208,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3261,26507 L 3314,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3367,26507 L 3420,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3473,26507 L 3526,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3579,26507 L 3632,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3685,26507 L 3739,26507"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3792,26507 L 3845,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 3898,26506 L 3951,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4004,26506 L 4057,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4110,26506 L 4163,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4216,26506 L 4269,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4323,26506 L 4376,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4429,26506 L 4482,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4535,26506 L 4588,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4641,26506 L 4694,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4747,26506 L 4800,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4854,26506 L 4907,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 4960,26506 L 5013,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5066,26506 L 5119,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5172,26506 L 5225,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5278,26506 L 5331,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5384,26506 L 5438,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5491,26506 L 5544,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5597,26506 L 5650,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5703,26506 L 5756,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5809,26506 L 5862,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 5915,26506 L 5968,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6022,26506 L 6075,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6128,26506 L 6181,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6234,26506 L 6287,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6340,26506 L 6393,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6446,26506 L 6499,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6552,26506 L 6606,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6659,26506 L 6712,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6765,26506 L 6818,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6871,26506 L 6924,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 6977,26506 L 7030,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7083,26506 L 7136,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7190,26506 L 7243,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7296,26506 L 7349,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7402,26506 L 7455,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7508,26506 L 7561,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7614,26506 L 7667,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7720,26506 L 7774,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7827,26506 L 7880,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 7933,26506 L 7986,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8039,26506 L 8092,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8145,26506 L 8198,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8251,26506 L 8304,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8358,26506 L 8411,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8464,26506 L 8517,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8570,26506 L 8623,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8676,26506 L 8729,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8782,26506 L 8835,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8888,26506 L 8942,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 8995,26506 L 9048,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9101,26506 L 9154,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9207,26506 L 9260,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9313,26506 L 9366,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9419,26506 L 9472,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9526,26506 L 9579,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9632,26506 L 9685,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9738,26506 L 9791,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9844,26506 L 9897,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 9950,26506 L 10003,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10056,26506 L 10110,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10163,26506 L 10216,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10269,26506 L 10322,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10375,26506 L 10428,26506"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10481,26506 L 10534,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10587,26505 L 10640,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10694,26505 L 10747,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10800,26505 L 10853,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 10906,26505 L 10959,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11012,26505 L 11065,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11118,26505 L 11171,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11224,26505 L 11278,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11331,26505 L 11384,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11437,26505 L 11490,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11543,26505 L 11596,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11649,26505 L 11702,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11755,26505 L 11808,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11862,26505 L 11915,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 11968,26505 L 12021,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12074,26505 L 12127,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12180,26505 L 12233,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12286,26505 L 12339,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12392,26505 L 12446,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12499,26505 L 12552,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12605,26505 L 12658,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12711,26505 L 12764,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12817,26505 L 12870,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 12923,26505 L 12977,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13030,26505 L 13083,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13136,26505 L 13189,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13242,26505 L 13295,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13348,26505 L 13401,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13454,26505 L 13507,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13561,26505 L 13614,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13667,26505 L 13720,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13773,26505 L 13826,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13879,26505 L 13932,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 13985,26505 L 14038,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14091,26505 L 14145,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14198,26505 L 14251,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14304,26505 L 14357,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14410,26505 L 14463,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14516,26505 L 14569,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14622,26505 L 14675,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14729,26505 L 14782,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14835,26505 L 14888,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 14941,26505 L 14994,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15047,26505 L 15100,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15153,26505 L 15206,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15259,26505 L 15313,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15366,26505 L 15419,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15472,26505 L 15525,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15578,26505 L 15631,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15684,26505 L 15737,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15790,26505 L 15843,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 15897,26505 L 15950,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16003,26505 L 16056,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16109,26505 L 16162,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16215,26505 L 16268,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16321,26505 L 16374,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16427,26505 L 16481,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16534,26505 L 16587,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16640,26505 L 16693,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16746,26505 L 16799,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16852,26505 L 16905,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 16958,26505 L 17011,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17065,26505 L 17118,26505"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17171,26504 L 17224,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17277,26504 L 17330,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17383,26504 L 17436,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17489,26504 L 17542,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17595,26504 L 17649,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17702,26504 L 17755,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17808,26504 L 17861,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 17914,26504 L 17967,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18020,26504 L 18073,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18126,26504 L 18179,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18233,26504 L 18286,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18339,26504 L 18392,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18445,26504 L 18498,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18551,26504 L 18604,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18657,26504 L 18710,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18763,26504 L 18817,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18870,26504 L 18923,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 18976,26504 L 19029,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19082,26504 L 19135,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19188,26504 L 19241,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19294,26504 L 19347,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19401,26504 L 19454,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19507,26504 L 19560,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19613,26504 L 19666,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19719,26504 L 19772,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19825,26504 L 19878,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 19931,26504 L 19985,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20038,26504 L 20091,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20144,26504 L 20197,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20250,26504 L 20303,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20356,26504 L 20409,26504"/>
- <path fill="none" stroke="rgb(0,0,0)" d="M 20462,26504 L 20500,26504"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id49">
- <rect class="BoundingBox" stroke="none" fill="none" x="500" y="554" width="5081" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="750" y="1128"/><tspan class="TextPosition" x="750" y="1128"><tspan fill="rgb(0,0,0)" stroke="none">sL1 - Data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id50">
- <rect class="BoundingBox" stroke="none" fill="none" x="500" y="8554" width="4827" height="1362"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="750" y="9128"/><tspan class="TextPosition" x="750" y="9128"><tspan fill="rgb(0,0,0)" stroke="none">sL2 - Data </tspan></tspan><tspan class="TextPosition" x="750" y="9683"/><tspan class="TextPosition" x="750" y="9683"><tspan fill="rgb(0,0,0)" stroke="none">processing</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id51">
- <rect class="BoundingBox" stroke="none" fill="none" x="500" y="19754" width="5081" height="1362"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="750" y="20328"/><tspan class="TextPosition" x="750" y="20328"><tspan fill="rgb(0,0,0)" stroke="none">sL3 - Data </tspan></tspan><tspan class="TextPosition" x="750" y="20883"/><tspan class="TextPosition" x="750" y="20883"><tspan fill="rgb(0,0,0)" stroke="none">presentation</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id52">
- <rect class="BoundingBox" stroke="none" fill="none" x="500" y="24554" width="5081" height="1362"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="750" y="25128"/><tspan class="TextPosition" x="750" y="25128"><tspan fill="rgb(0,0,0)" stroke="none">sL4 - Report </tspan></tspan><tspan class="TextPosition" x="750" y="25683"/><tspan class="TextPosition" x="750" y="25683"><tspan fill="rgb(0,0,0)" stroke="none">generation</tspan></tspan></tspan></text>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/resources/tools/presentation/doc/pal_layers.svg b/resources/tools/presentation/doc/pal_layers.svg
deleted file mode 100644
index dfb05d3106..0000000000
--- a/resources/tools/presentation/doc/pal_layers.svg
+++ /dev/null
@@ -1,441 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<svg version="1.2" baseProfile="tiny" width="215.9mm" height="152.4mm" viewBox="0 0 21590 15240" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
- <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
- <rect x="0" y="0" width="21590" height="15240"/>
- </clipPath>
- </defs>
- <defs>
- <font id="EmbeddedFont_1" horiz-adv-x="2048">
- <font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1852" descent="423"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="→" horiz-adv-x="1218" d="M 1407,637 C 1388,660 1368,687 1349,720 1329,753 1309,791 1288,834 L 1360,834 C 1399,789 1440,747 1483,710 1526,673 1575,640 1630,612 L 1630,576 C 1575,548 1526,515 1483,478 1440,441 1399,399 1360,354 L 1288,354 C 1309,397 1329,435 1349,468 1368,501 1388,528 1407,551 L 418,551 418,637 1407,637 Z"/>
- <glyph unicode="y" horiz-adv-x="1059" d="M 604,1 C 579,-64 553,-123 527,-175 500,-227 471,-272 438,-309 405,-346 369,-374 329,-394 289,-413 243,-423 191,-423 168,-423 147,-423 128,-423 109,-423 88,-420 67,-414 L 67,-279 C 80,-282 94,-284 110,-284 126,-284 140,-284 151,-284 204,-284 253,-264 298,-225 343,-186 383,-123 417,-37 L 434,6 5,1082 197,1082 425,484 C 432,466 440,442 451,412 461,382 471,352 482,322 492,292 501,265 509,241 517,217 522,202 523,196 525,203 530,218 538,240 545,261 554,285 564,312 573,339 583,366 593,393 603,420 611,444 618,464 L 830,1082 1020,1082 604,1 Z"/>
- <glyph unicode="x" horiz-adv-x="1033" d="M 801,0 L 510,444 217,0 23,0 408,556 41,1082 240,1082 510,661 778,1082 979,1082 612,558 1002,0 801,0 Z"/>
- <glyph unicode="v" horiz-adv-x="1059" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 442,363 447,346 454,325 460,304 466,282 473,259 480,236 486,215 492,194 497,173 502,155 506,141 510,155 515,173 522,194 528,215 534,236 541,258 548,280 555,302 562,323 569,344 575,361 580,376 L 826,1082 1017,1082 613,0 Z"/>
- <glyph unicode="u" horiz-adv-x="901" d="M 314,1082 L 314,396 C 314,343 318,299 326,264 333,229 346,200 363,179 380,157 403,142 432,133 460,124 495,119 537,119 580,119 618,127 653,142 687,157 716,178 741,207 765,235 784,270 797,312 810,353 817,401 817,455 L 817,1082 997,1082 997,231 C 997,208 997,185 998,160 998,135 998,111 999,89 1000,66 1000,47 1001,31 1002,15 1002,5 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 827,116 826,136 825,155 825,172 825,185 L 822,185 C 805,154 786,125 765,100 744,75 720,53 693,36 666,18 634,4 599,-6 564,-15 523,-20 476,-20 416,-20 364,-13 321,2 278,17 242,39 214,70 186,101 166,140 153,188 140,236 133,294 133,361 L 133,1082 314,1082 Z"/>
- <glyph unicode="t" horiz-adv-x="531" d="M 554,8 C 527,1 499,-5 471,-10 442,-14 409,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 467,127 484,128 501,131 517,134 535,137 554,141 L 554,8 Z"/>
- <glyph unicode="s" horiz-adv-x="927" d="M 950,299 C 950,248 940,203 921,164 901,124 872,91 835,64 798,37 752,16 698,2 643,-13 581,-20 511,-20 448,-20 392,-15 342,-6 291,4 247,20 209,41 171,62 139,91 114,126 88,161 69,203 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 550,117 585,120 618,125 650,130 678,140 701,153 724,166 743,183 756,205 769,226 775,253 775,285 775,318 767,345 752,366 737,387 715,404 688,418 661,432 628,444 589,455 550,465 507,476 460,489 417,500 374,513 331,527 288,541 250,560 216,583 181,606 153,634 132,668 111,702 100,745 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 763,842 752,866 736,885 720,904 701,919 678,931 655,942 630,951 602,956 573,961 544,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,785 282,761 297,742 311,723 331,707 357,694 382,681 413,669 449,660 485,650 525,640 568,629 597,622 626,614 656,606 686,597 715,587 744,576 772,564 799,550 824,535 849,519 870,500 889,478 908,456 923,430 934,401 945,372 950,338 950,299 Z"/>
- <glyph unicode="r" horiz-adv-x="556" d="M 142,0 L 142,830 C 142,853 142,876 142,900 141,923 141,946 140,968 139,990 139,1011 138,1030 137,1049 137,1067 136,1082 L 306,1082 C 307,1067 308,1049 309,1030 310,1010 311,990 312,969 313,948 313,929 314,910 314,891 314,874 314,861 L 318,861 C 331,902 344,938 359,969 373,999 390,1024 409,1044 428,1063 451,1078 478,1088 505,1097 537,1102 575,1102 590,1102 604,1101 617,1099 630,1096 641,1094 648,1092 L 648,927 C 636,930 622,933 606,935 590,936 572,937 552,937 511,937 476,928 447,909 418,890 394,865 376,832 357,799 344,759 335,714 326,668 322,618 322,564 L 322,0 142,0 Z"/>
- <glyph unicode="p" horiz-adv-x="953" d="M 1053,546 C 1053,464 1046,388 1033,319 1020,250 998,190 967,140 936,90 895,51 844,23 793,-6 730,-20 655,-20 578,-20 510,-5 452,24 394,53 350,101 319,168 L 314,168 C 315,167 315,161 316,150 316,139 316,126 317,110 317,94 317,76 318,57 318,37 318,17 318,-2 L 318,-425 138,-425 138,861 C 138,887 138,912 138,936 137,960 137,982 136,1002 135,1021 135,1038 134,1052 133,1066 133,1076 132,1082 L 306,1082 C 307,1080 308,1073 309,1061 310,1049 311,1035 312,1018 313,1001 314,982 315,963 316,944 316,925 316,908 L 320,908 C 337,943 356,972 377,997 398,1021 423,1041 450,1057 477,1072 508,1084 542,1091 575,1098 613,1101 655,1101 730,1101 793,1088 844,1061 895,1034 936,997 967,949 998,900 1020,842 1033,774 1046,705 1053,629 1053,546 Z M 864,542 C 864,609 860,668 852,720 844,772 830,816 811,852 791,888 765,915 732,934 699,953 658,962 609,962 569,962 531,956 496,945 461,934 430,912 404,880 377,848 356,804 341,748 326,691 318,618 318,528 318,451 324,387 337,334 350,281 368,238 393,205 417,172 447,149 483,135 519,120 560,113 607,113 657,113 699,123 732,142 765,161 791,189 811,226 830,263 844,308 852,361 860,414 864,474 864,542 Z"/>
- <glyph unicode="o" horiz-adv-x="980" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 490,-20 422,-9 363,14 304,37 254,71 213,118 172,165 140,223 119,294 97,364 86,447 86,542 86,915 248,1102 571,1102 655,1102 728,1090 789,1067 850,1044 900,1009 939,962 978,915 1006,857 1025,787 1044,717 1053,635 1053,542 Z M 864,542 C 864,626 858,695 845,750 832,805 813,848 788,881 763,914 732,937 696,950 660,963 619,969 574,969 528,969 487,962 450,949 413,935 381,912 355,879 329,846 309,802 296,747 282,692 275,624 275,542 275,458 282,389 297,334 312,279 332,235 358,202 383,169 414,146 449,133 484,120 522,113 563,113 609,113 651,120 688,133 725,146 757,168 783,201 809,234 829,278 843,333 857,388 864,458 864,542 Z"/>
- <glyph unicode="n" horiz-adv-x="900" d="M 825,0 L 825,686 C 825,739 821,783 814,818 806,853 793,882 776,904 759,925 736,941 708,950 679,959 644,963 602,963 559,963 521,956 487,941 452,926 423,904 399,876 374,847 355,812 342,771 329,729 322,681 322,627 L 322,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 334,928 353,957 374,982 395,1007 419,1029 446,1047 473,1064 505,1078 540,1088 575,1097 616,1102 663,1102 723,1102 775,1095 818,1080 861,1065 897,1043 925,1012 953,981 974,942 987,894 1000,845 1006,788 1006,721 L 1006,0 825,0 Z"/>
- <glyph unicode="m" horiz-adv-x="1456" d="M 768,0 L 768,686 C 768,739 765,783 758,818 751,853 740,882 725,904 709,925 688,941 663,950 638,959 607,963 570,963 532,963 498,956 467,941 436,926 410,904 389,876 367,847 350,812 339,771 327,729 321,681 321,627 L 321,0 142,0 142,851 C 142,874 142,898 142,923 141,948 141,971 140,994 139,1016 139,1035 138,1051 137,1067 137,1077 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 312,966 313,947 314,927 314,910 314,897 L 317,897 C 333,928 350,957 369,982 388,1007 410,1029 435,1047 460,1064 488,1078 521,1088 553,1097 590,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 946,928 964,957 984,982 1004,1007 1027,1029 1054,1047 1081,1064 1111,1078 1144,1088 1177,1097 1215,1102 1258,1102 1313,1102 1360,1095 1400,1080 1439,1065 1472,1043 1497,1012 1522,981 1541,942 1553,894 1565,845 1571,788 1571,721 L 1571,0 1393,0 1393,686 C 1393,739 1390,783 1383,818 1376,853 1365,882 1350,904 1334,925 1313,941 1288,950 1263,959 1232,963 1195,963 1157,963 1123,956 1092,942 1061,927 1035,906 1014,878 992,850 975,815 964,773 952,731 946,682 946,627 L 946,0 768,0 Z"/>
- <glyph unicode="l" horiz-adv-x="187" d="M 138,0 L 138,1484 318,1484 318,0 138,0 Z"/>
- <glyph unicode="k" horiz-adv-x="927" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 816,0 Z"/>
- <glyph unicode="i" horiz-adv-x="187" d="M 137,1312 L 137,1484 317,1484 317,1312 137,1312 Z M 137,0 L 137,1082 317,1082 317,0 137,0 Z"/>
- <glyph unicode="h" horiz-adv-x="874" d="M 317,897 C 337,934 359,965 382,991 405,1016 431,1037 459,1054 487,1071 518,1083 551,1091 584,1098 622,1102 663,1102 732,1102 789,1093 834,1074 878,1055 913,1029 939,996 964,962 982,922 992,875 1001,828 1006,777 1006,721 L 1006,0 825,0 825,686 C 825,732 822,772 817,807 811,842 800,871 784,894 768,917 745,934 716,946 687,957 649,963 602,963 559,963 521,955 487,940 452,925 423,903 399,875 374,847 355,813 342,773 329,733 322,688 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1076 322,1054 321,1032 320,1010 320,990 319,971 318,952 317,937 316,924 315,911 315,902 314,897 L 317,897 Z"/>
- <glyph unicode="g" horiz-adv-x="954" d="M 548,-425 C 486,-425 431,-419 383,-406 335,-393 294,-375 260,-352 226,-328 198,-300 177,-267 156,-234 140,-198 131,-158 L 312,-132 C 324,-182 351,-220 392,-248 433,-274 486,-288 553,-288 594,-288 631,-282 664,-271 697,-260 726,-241 749,-217 772,-191 790,-159 803,-119 816,-79 822,-30 822,27 L 822,201 820,201 C 807,174 790,148 771,123 751,98 727,75 699,56 670,37 637,21 600,10 563,-2 520,-8 472,-8 403,-8 345,4 296,27 247,50 207,84 176,130 145,176 122,233 108,302 93,370 86,449 86,539 86,626 93,704 108,773 122,842 145,901 178,950 210,998 252,1035 304,1061 355,1086 418,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,914 825,932 826,953 827,974 828,993 829,1012 830,1030 831,1046 832,1059 833,1072 835,1080 836,1082 L 1007,1082 C 1006,1076 1006,1066 1005,1052 1004,1037 1004,1020 1003,1000 1002,980 1002,958 1002,934 1001,909 1001,884 1001,858 L 1001,31 C 1001,-120 964,-234 890,-311 815,-387 701,-425 548,-425 Z M 822,541 C 822,616 814,681 798,735 781,788 760,832 733,866 706,900 676,925 642,941 607,957 572,965 536,965 490,965 451,957 418,941 385,925 357,900 336,866 314,831 298,787 288,734 277,680 272,616 272,541 272,463 277,398 288,345 298,292 314,249 335,216 356,183 383,160 416,146 449,132 488,125 533,125 569,125 604,133 639,148 673,163 704,188 731,221 758,254 780,297 797,350 814,403 822,466 822,541 Z"/>
- <glyph unicode="f" horiz-adv-x="557" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1243 185,1280 192,1314 199,1347 213,1377 233,1402 252,1427 279,1446 313,1461 347,1475 391,1482 445,1482 466,1482 489,1481 512,1479 535,1477 555,1474 572,1470 L 572,1333 C 561,1335 548,1337 533,1339 518,1340 504,1341 492,1341 465,1341 444,1337 427,1330 410,1323 396,1312 387,1299 377,1285 370,1268 367,1248 363,1228 361,1205 361,1179 L 361,1082 572,1082 572,951 361,951 Z"/>
- <glyph unicode="e" horiz-adv-x="980" d="M 276,503 C 276,446 282,394 294,347 305,299 323,258 348,224 372,189 403,163 441,144 479,125 525,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 1008,206 992,176 972,146 951,115 924,88 890,64 856,39 814,19 763,4 712,-12 650,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,649 100,735 125,806 150,876 185,933 229,977 273,1021 324,1053 383,1073 442,1092 504,1102 571,1102 662,1102 738,1087 799,1058 860,1029 909,988 946,937 983,885 1009,824 1025,754 1040,684 1048,608 1048,527 L 1048,503 276,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 538,969 507,964 474,955 441,945 410,928 382,903 354,878 330,845 311,803 292,760 281,706 278,641 L 862,641 Z"/>
- <glyph unicode="d" horiz-adv-x="954" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 C 823,921 823,931 823,946 822,960 822,975 822,991 821,1006 821,1021 821,1035 821,1049 821,1059 821,1065 L 821,1484 1001,1484 1001,223 C 1001,197 1001,172 1002,148 1002,124 1002,102 1003,82 1004,62 1004,45 1005,31 1006,16 1006,6 1007,0 L 835,0 C 834,7 833,16 832,29 831,41 830,55 829,71 828,87 827,104 826,122 825,139 825,157 825,174 L 821,174 Z M 275,542 C 275,467 280,403 289,350 298,297 313,253 334,219 355,184 381,159 413,143 445,127 484,119 530,119 577,119 619,127 656,142 692,157 722,182 747,217 771,251 789,296 802,351 815,406 821,474 821,554 821,631 815,696 802,749 789,802 771,844 746,877 721,910 691,933 656,948 620,962 579,969 532,969 488,969 450,961 418,946 386,931 359,906 338,872 317,838 301,794 291,740 280,685 275,619 275,542 Z"/>
- <glyph unicode="c" horiz-adv-x="875" d="M 275,546 C 275,484 280,427 289,375 298,323 313,278 334,241 355,203 384,174 419,153 454,132 497,122 548,122 612,122 666,139 709,173 752,206 778,258 788,328 L 970,328 C 964,283 951,239 931,197 911,155 884,118 850,86 815,54 773,28 724,9 675,-10 618,-20 553,-20 468,-20 396,-6 337,23 278,52 230,91 193,142 156,192 129,251 112,320 95,388 87,462 87,542 87,615 93,679 105,735 117,790 134,839 156,881 177,922 203,957 232,986 261,1014 293,1037 328,1054 362,1071 398,1083 436,1091 474,1098 512,1102 551,1102 612,1102 666,1094 713,1077 760,1060 801,1038 836,1009 870,980 898,945 919,906 940,867 955,824 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 495,961 452,953 418,936 383,919 355,893 334,859 313,824 298,781 289,729 280,677 275,616 275,546 Z"/>
- <glyph unicode="b" horiz-adv-x="953" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,151 316,133 315,114 314,95 313,78 312,62 311,46 310,32 309,21 308,10 307,3 306,0 L 132,0 C 133,6 133,16 134,31 135,45 135,62 136,82 137,102 137,124 138,148 138,172 138,197 138,223 L 138,1484 318,1484 318,1061 C 318,1041 318,1022 318,1004 317,985 317,969 316,955 315,938 315,923 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,615 859,679 850,732 841,785 826,829 805,864 784,898 758,923 726,939 694,955 655,963 609,963 562,963 520,955 484,940 447,925 417,900 393,866 368,832 350,787 337,732 324,677 318,609 318,529 318,452 324,387 337,334 350,281 368,239 393,206 417,173 447,149 483,135 519,120 560,113 607,113 651,113 689,121 721,136 753,151 780,176 801,210 822,244 838,288 849,343 859,397 864,463 864,540 Z"/>
- <glyph unicode="a" horiz-adv-x="1060" d="M 414,-20 C 305,-20 224,9 169,66 114,124 87,203 87,303 87,375 101,434 128,480 155,526 190,562 234,588 277,614 327,632 383,642 439,652 496,657 554,657 L 797,657 797,717 C 797,762 792,800 783,832 774,863 759,889 740,908 721,928 697,942 668,951 639,960 604,965 565,965 530,965 499,963 471,958 443,953 419,944 398,931 377,918 361,900 348,878 335,855 327,827 323,793 L 135,810 C 142,853 154,892 173,928 192,963 218,994 253,1020 287,1046 330,1066 382,1081 433,1095 496,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1090,111 1100,112 1110,113 1120,114 1130,116 1139,118 L 1139,6 C 1116,1 1094,-3 1072,-6 1049,-9 1025,-10 1000,-10 966,-10 937,-5 913,4 888,13 868,26 853,45 838,63 826,86 818,113 810,140 805,171 803,207 L 797,207 C 778,172 757,141 734,113 711,85 684,61 653,42 622,22 588,7 549,-4 510,-15 465,-20 414,-20 Z M 455,115 C 512,115 563,125 606,146 649,167 684,194 713,226 741,259 762,294 776,332 790,371 797,408 797,443 L 797,531 600,531 C 556,531 514,528 475,522 435,517 400,506 370,489 340,472 316,449 299,418 281,388 272,349 272,300 272,241 288,195 320,163 351,131 396,115 455,115 Z"/>
- <glyph unicode="Z" horiz-adv-x="1139" d="M 1187,0 L 65,0 65,143 923,1253 138,1253 138,1409 1140,1409 1140,1270 282,156 1187,156 1187,0 Z"/>
- <glyph unicode="Y" horiz-adv-x="1244" d="M 777,584 L 777,0 587,0 587,584 45,1409 255,1409 684,738 1111,1409 1321,1409 777,584 Z"/>
- <glyph unicode="X" horiz-adv-x="1324" d="M 1112,0 L 689,616 257,0 46,0 582,732 87,1409 298,1409 690,856 1071,1409 1282,1409 800,739 1323,0 1112,0 Z"/>
- <glyph unicode="T" horiz-adv-x="1139" d="M 720,1253 L 720,0 530,0 530,1253 46,1253 46,1409 1204,1409 1204,1253 720,1253 Z"/>
- <glyph unicode="S" horiz-adv-x="1139" d="M 1272,389 C 1272,330 1261,275 1238,225 1215,175 1179,132 1131,96 1083,59 1023,31 950,11 877,-10 790,-20 690,-20 515,-20 378,11 280,72 182,133 120,222 93,338 L 278,375 C 287,338 302,305 321,275 340,245 367,219 400,198 433,176 473,159 522,147 571,135 629,129 697,129 754,129 806,134 853,144 900,153 941,168 975,188 1009,208 1036,234 1055,266 1074,297 1083,335 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 613,659 573,668 534,679 494,689 456,701 420,716 383,730 349,747 317,766 285,785 257,809 234,836 211,863 192,894 179,930 166,965 159,1006 159,1053 159,1120 173,1177 200,1225 227,1272 264,1311 312,1342 360,1373 417,1395 482,1409 547,1423 618,1430 694,1430 781,1430 856,1423 918,1410 980,1396 1032,1375 1075,1348 1118,1321 1152,1287 1178,1247 1203,1206 1224,1159 1239,1106 L 1051,1073 C 1042,1107 1028,1137 1011,1164 993,1191 970,1213 941,1231 912,1249 878,1263 837,1272 796,1281 747,1286 692,1286 627,1286 572,1280 528,1269 483,1257 448,1241 421,1221 394,1201 374,1178 363,1151 351,1124 345,1094 345,1063 345,1021 356,987 377,960 398,933 426,910 462,892 498,874 540,859 587,847 634,835 685,823 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
- <glyph unicode="R" horiz-adv-x="1218" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 911,1409 982,1400 1044,1382 1105,1363 1157,1337 1199,1302 1241,1267 1273,1225 1295,1175 1317,1125 1328,1069 1328,1006 1328,961 1322,917 1309,874 1296,831 1275,791 1247,755 1219,719 1183,688 1140,662 1097,636 1045,618 984,607 L 1384,0 1164,0 Z M 1136,1004 C 1136,1047 1129,1084 1114,1115 1099,1146 1078,1173 1050,1194 1022,1215 988,1230 948,1241 908,1251 863,1256 812,1256 L 359,1256 359,736 820,736 C 875,736 922,743 962,757 1002,770 1035,789 1061,813 1086,837 1105,865 1118,898 1130,931 1136,966 1136,1004 Z"/>
- <glyph unicode="P" horiz-adv-x="1086" d="M 1258,985 C 1258,924 1248,867 1228,814 1207,761 1177,715 1137,676 1096,637 1046,606 985,583 924,560 854,549 773,549 L 359,549 359,0 168,0 168,1409 761,1409 C 844,1409 917,1399 979,1379 1041,1358 1093,1330 1134,1293 1175,1256 1206,1211 1227,1159 1248,1106 1258,1048 1258,985 Z M 1066,983 C 1066,1072 1039,1140 984,1187 929,1233 847,1256 738,1256 L 359,1256 359,700 746,700 C 856,700 937,724 989,773 1040,822 1066,892 1066,983 Z"/>
- <glyph unicode="O" horiz-adv-x="1377" d="M 1495,711 C 1495,601 1479,501 1448,411 1416,321 1370,244 1310,180 1250,116 1177,67 1090,32 1003,-3 905,-20 795,-20 679,-20 577,-2 490,35 403,71 330,122 272,187 214,252 170,329 141,418 112,507 97,605 97,711 97,821 112,920 143,1009 174,1098 219,1173 278,1236 337,1298 411,1346 498,1380 585,1413 684,1430 797,1430 909,1430 1009,1413 1096,1379 1183,1345 1256,1297 1315,1234 1374,1171 1418,1096 1449,1007 1480,918 1495,820 1495,711 Z M 1300,711 C 1300,796 1289,873 1268,942 1246,1011 1214,1071 1172,1120 1129,1169 1077,1207 1014,1234 951,1261 879,1274 797,1274 713,1274 639,1261 576,1234 513,1207 460,1169 418,1120 375,1071 344,1011 323,942 302,873 291,796 291,711 291,626 302,549 324,479 345,408 377,348 420,297 462,246 515,206 578,178 641,149 713,135 795,135 883,135 959,149 1023,178 1086,207 1139,247 1180,298 1221,349 1251,409 1271,480 1290,551 1300,628 1300,711 Z"/>
- <glyph unicode="N" horiz-adv-x="1138" d="M 1082,0 L 328,1200 C 329,1167 331,1135 333,1103 334,1076 336,1047 337,1017 338,986 338,959 338,936 L 338,0 168,0 168,1409 390,1409 1152,201 C 1150,234 1148,266 1146,299 1145,327 1143,358 1142,391 1141,424 1140,455 1140,485 L 1140,1409 1312,1409 1312,0 1082,0 Z"/>
- <glyph unicode="M" horiz-adv-x="1324" d="M 1366,0 L 1366,940 C 1366,974 1366,1009 1367,1044 1368,1079 1369,1112 1370,1141 1371,1175 1373,1208 1375,1240 1366,1206 1356,1172 1346,1139 1337,1110 1328,1080 1318,1048 1307,1015 1297,986 1287,960 L 923,0 789,0 420,960 C 416,970 412,982 408,995 403,1008 399,1023 394,1038 389,1053 384,1068 379,1084 374,1099 369,1115 364,1130 353,1165 342,1202 331,1240 332,1203 333,1166 334,1129 335,1098 336,1065 337,1031 338,996 338,966 338,940 L 338,0 168,0 168,1409 419,1409 794,432 C 799,419 804,402 811,381 818,360 824,338 830,316 836,294 842,273 847,254 852,234 855,219 857,208 859,219 863,234 868,254 873,274 880,295 887,317 894,339 900,360 907,381 914,402 920,419 925,432 L 1293,1409 1538,1409 1538,0 1366,0 Z"/>
- <glyph unicode="L" horiz-adv-x="900" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 168,0 Z"/>
- <glyph unicode="J" horiz-adv-x="848" d="M 457,-20 C 343,-20 250,10 177,69 104,128 55,222 32,350 L 219,381 C 226,338 237,301 252,270 267,239 286,213 307,193 328,173 352,158 378,149 404,140 431,135 458,135 527,135 582,159 622,207 662,254 682,324 682,416 L 682,1253 411,1253 411,1409 872,1409 872,420 C 872,353 863,292 844,238 825,184 798,138 763,100 727,61 683,32 632,11 581,-10 522,-20 457,-20 Z"/>
- <glyph unicode="I" horiz-adv-x="186" d="M 189,0 L 189,1409 380,1409 380,0 189,0 Z"/>
- <glyph unicode="F" horiz-adv-x="1006" d="M 359,1253 L 359,729 1145,729 1145,571 359,571 359,0 168,0 168,1409 1169,1409 1169,1253 359,1253 Z"/>
- <glyph unicode="D" horiz-adv-x="1218" d="M 1381,719 C 1381,602 1363,498 1328,409 1293,319 1244,244 1183,184 1122,123 1049,78 966,47 882,16 792,0 695,0 L 168,0 168,1409 634,1409 C 743,1409 843,1396 935,1369 1026,1342 1105,1300 1171,1244 1237,1187 1289,1116 1326,1029 1363,942 1381,839 1381,719 Z M 1189,719 C 1189,814 1175,896 1148,964 1121,1031 1082,1087 1033,1130 984,1173 925,1205 856,1226 787,1246 712,1256 630,1256 L 359,1256 359,153 673,153 C 747,153 816,165 879,189 942,213 996,249 1042,296 1088,343 1124,402 1150,473 1176,544 1189,626 1189,719 Z"/>
- <glyph unicode="C" horiz-adv-x="1297" d="M 792,1274 C 712,1274 641,1261 580,1234 518,1207 466,1169 425,1120 383,1071 351,1011 330,942 309,873 298,796 298,711 298,626 310,549 333,479 356,408 389,348 432,297 475,246 527,207 590,179 652,151 722,137 800,137 855,137 905,144 950,159 995,173 1035,193 1072,219 1108,245 1140,276 1169,312 1198,347 1223,387 1245,430 L 1401,352 C 1376,299 1344,250 1307,205 1270,160 1226,120 1176,87 1125,54 1068,28 1005,9 941,-10 870,-20 791,-20 677,-20 577,-2 492,35 406,71 334,122 277,187 219,252 176,329 147,418 118,507 104,605 104,711 104,821 119,920 150,1009 180,1098 224,1173 283,1236 341,1298 413,1346 498,1380 583,1413 681,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1194,1054 1176,1086 1153,1117 1130,1147 1102,1174 1068,1197 1034,1220 994,1239 949,1253 903,1267 851,1274 792,1274 Z"/>
- <glyph unicode="A" horiz-adv-x="1350" d="M 1167,0 L 1006,412 364,412 202,0 4,0 579,1409 796,1409 1362,0 1167,0 Z M 768,1026 C 757,1053 747,1080 738,1107 728,1134 719,1159 712,1182 705,1204 699,1223 694,1238 689,1253 686,1262 685,1265 684,1262 681,1252 676,1237 671,1222 665,1203 658,1180 650,1157 641,1132 632,1105 622,1078 612,1051 602,1024 L 422,561 949,561 768,1026 Z"/>
- <glyph unicode="4" horiz-adv-x="1033" d="M 881,319 L 881,0 711,0 711,319 47,319 47,459 692,1409 881,1409 881,461 1079,461 1079,319 881,319 Z M 711,1206 C 710,1203 706,1196 701,1187 696,1177 690,1166 683,1154 676,1142 670,1130 663,1118 656,1105 649,1095 644,1087 L 283,555 C 280,550 275,543 269,534 262,525 256,517 249,508 242,499 236,490 229,481 222,472 217,466 213,461 L 711,461 711,1206 Z"/>
- <glyph unicode="3" horiz-adv-x="980" d="M 1049,389 C 1049,324 1039,267 1018,216 997,165 966,123 926,88 885,53 835,26 776,8 716,-11 648,-20 571,-20 484,-20 410,-9 351,13 291,34 242,63 203,99 164,134 135,175 116,221 97,266 84,313 78,362 L 264,379 C 269,342 279,308 294,277 308,246 327,220 352,198 377,176 407,159 443,147 479,135 522,129 571,129 662,129 733,151 785,196 836,241 862,307 862,395 862,447 851,489 828,521 805,552 776,577 742,595 707,612 670,624 630,630 589,636 552,639 518,639 L 416,639 416,795 514,795 C 548,795 583,799 620,806 657,813 690,825 721,844 751,862 776,887 796,918 815,949 825,989 825,1038 825,1113 803,1173 759,1217 714,1260 648,1282 561,1282 482,1282 418,1262 369,1221 320,1180 291,1123 283,1049 L 102,1063 C 109,1125 126,1179 153,1225 180,1271 214,1309 255,1340 296,1370 342,1393 395,1408 448,1423 504,1430 563,1430 642,1430 709,1420 766,1401 823,1381 869,1354 905,1321 941,1287 968,1247 985,1202 1002,1157 1010,1108 1010,1057 1010,1016 1004,977 993,941 982,905 964,873 940,844 916,815 886,791 849,770 812,749 767,734 715,723 L 715,719 C 772,713 821,700 863,681 905,661 940,636 967,607 994,578 1015,544 1029,507 1042,470 1049,430 1049,389 Z"/>
- <glyph unicode="2" horiz-adv-x="927" d="M 103,0 L 103,127 C 137,205 179,274 228,334 277,393 328,447 382,496 436,544 490,589 543,630 596,671 643,713 686,754 729,795 763,839 790,884 816,929 829,981 829,1038 829,1078 823,1113 811,1144 799,1174 782,1199 759,1220 736,1241 709,1256 678,1267 646,1277 611,1282 572,1282 536,1282 502,1277 471,1267 439,1257 411,1242 386,1222 361,1202 341,1177 326,1148 310,1118 300,1083 295,1044 L 111,1061 C 117,1112 131,1159 153,1204 175,1249 205,1288 244,1322 283,1355 329,1382 384,1401 438,1420 501,1430 572,1430 642,1430 704,1422 759,1405 814,1388 860,1364 898,1331 935,1298 964,1258 984,1210 1004,1162 1014,1107 1014,1044 1014,997 1006,952 989,909 972,866 949,826 921,787 892,748 859,711 822,675 785,639 746,604 705,570 664,535 623,501 582,468 541,434 502,400 466,366 429,332 397,298 368,263 339,228 317,191 301,153 L 1036,153 1036,0 103,0 Z"/>
- <glyph unicode="1" horiz-adv-x="874" d="M 156,0 L 156,153 515,153 515,1237 197,1010 197,1180 530,1409 696,1409 696,153 1039,153 1039,0 156,0 Z"/>
- <glyph unicode="/" horiz-adv-x="583" d="M 0,-20 L 411,1484 569,1484 162,-20 0,-20 Z"/>
- <glyph unicode="." horiz-adv-x="186" d="M 187,0 L 187,219 382,219 382,0 187,0 Z"/>
- <glyph unicode="," horiz-adv-x="212" d="M 385,219 L 385,51 C 385,16 384,-16 381,-46 378,-74 373,-101 366,-127 359,-151 351,-175 342,-197 332,-219 320,-241 307,-262 L 184,-262 C 214,-219 237,-175 254,-131 270,-87 278,-43 278,0 L 190,0 190,219 385,219 Z"/>
- <glyph unicode=")" horiz-adv-x="557" d="M 555,528 C 555,435 548,346 534,262 520,177 498,96 468,18 438,-60 400,-136 353,-209 306,-282 251,-354 186,-424 L 12,-424 C 75,-354 129,-282 175,-209 220,-136 258,-60 287,19 316,98 338,179 353,264 367,349 374,437 374,530 374,623 367,711 353,796 338,881 316,962 287,1041 258,1119 220,1195 175,1269 129,1342 75,1414 12,1484 L 186,1484 C 251,1414 306,1342 353,1269 400,1196 438,1120 468,1042 498,964 520,883 534,798 548,713 555,625 555,532 L 555,528 Z"/>
- <glyph unicode="(" horiz-adv-x="557" d="M 127,532 C 127,625 134,713 148,798 162,883 184,964 214,1042 244,1120 282,1196 329,1269 376,1342 431,1414 496,1484 L 670,1484 C 607,1414 553,1342 508,1269 462,1195 424,1119 395,1041 366,962 344,881 330,796 315,711 308,623 308,530 308,437 315,349 330,264 344,179 366,98 395,19 424,-60 462,-136 508,-209 553,-282 607,-354 670,-424 L 496,-424 C 431,-354 376,-282 329,-209 282,-136 244,-60 214,18 184,96 162,177 148,262 134,346 127,435 127,528 L 127,532 Z"/>
- <glyph unicode=" " horiz-adv-x="556"/>
- </font>
- </defs>
- <defs class="TextShapeIndex">
- <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49"/>
- </defs>
- <defs class="EmbeddedBulletChars">
- <g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
- </g>
- <g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
- </g>
- <g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
- </g>
- <g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
- </g>
- <g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
- </g>
- <g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
- </g>
- <g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
- </g>
- <g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
- </g>
- <g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
- </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
- <g id="id2" class="Master_Slide">
- <g id="bg-id2" class="Background"/>
- <g id="bo-id2" class="BackgroundObjects"/>
- </g>
- </g>
- <g class="SlideGroup">
- <g>
- <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
- <g class="Page">
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id3">
- <rect class="BoundingBox" stroke="none" fill="none" x="1748" y="12039" width="19180" height="2543"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 11338,14580 L 1749,14580 1749,12040 20926,12040 20926,14580 11338,14580 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 11338,14580 L 1749,14580 1749,12040 20926,12040 20926,14580 11338,14580 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id4">
- <rect class="BoundingBox" stroke="none" fill="none" x="8426" y="12673" width="5845" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 11348,14325 L 8427,14325 8427,12674 14269,12674 14269,14325 11348,14325 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 11348,14325 L 8427,14325 8427,12674 14269,12674 14269,14325 11348,14325 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="10626" y="13277"/><tspan class="TextPosition" x="10626" y="13277"><tspan fill="rgb(255,255,255)" stroke="none">.YAML</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9340" y="14095"/><tspan class="TextPosition" x="9340" y="14095"><tspan fill="rgb(255,255,255)" stroke="none">Specification (CSIT gerrit)</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id5">
- <rect class="BoundingBox" stroke="none" fill="none" x="1815" y="11940" width="1553" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="2065" y="12514"/><tspan class="TextPosition" x="2065" y="12514"><tspan fill="rgb(255,255,255)" stroke="none">Data</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id6">
- <rect class="BoundingBox" stroke="none" fill="none" x="2026" y="12673" width="5845" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 4948,14325 L 2027,14325 2027,12674 7869,12674 7869,14325 4948,14325 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 4948,14325 L 2027,14325 2027,12674 7869,12674 7869,14325 4948,14325 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4383" y="13277"/><tspan class="TextPosition" x="4383" y="13277"><tspan fill="rgb(255,255,255)" stroke="none">.RST</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="2872" y="14095"/><tspan class="TextPosition" x="2872" y="14095"><tspan fill="rgb(255,255,255)" stroke="none">Static content (CSIT gerrit)</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id7">
- <rect class="BoundingBox" stroke="none" fill="none" x="14826" y="12673" width="5845" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 17748,14325 L 14827,14325 14827,12674 20669,12674 20669,14325 17748,14325 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 17748,14325 L 14827,14325 14827,12674 20669,12674 20669,14325 17748,14325 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="16485" y="13277"/><tspan class="TextPosition" x="16485" y="13277"><tspan fill="rgb(255,255,255)" stroke="none">.ZIP (.XML)</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="15750" y="14095"/><tspan class="TextPosition" x="15750" y="14095"><tspan fill="rgb(255,255,255)" stroke="none">Data to process (Jenkins)</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id8">
- <rect class="BoundingBox" stroke="none" fill="none" x="4289" y="8239" width="11433" height="2543"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10005,10780 L 4290,10780 4290,8240 15720,8240 15720,10780 10005,10780 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10005,10780 L 4290,10780 4290,8240 15720,8240 15720,10780 10005,10780 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id9">
- <rect class="BoundingBox" stroke="none" fill="none" x="4289" y="4439" width="11433" height="2543"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10005,6980 L 4290,6980 4290,4440 15720,4440 15720,6980 10005,6980 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 10005,6980 L 4290,6980 4290,4440 15720,4440 15720,6980 10005,6980 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id10">
- <rect class="BoundingBox" stroke="none" fill="none" x="1749" y="639" width="13973" height="2543"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 8735,3180 L 1750,3180 1750,640 15720,640 15720,3180 8735,3180 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 8735,3180 L 1750,3180 1750,640 15720,640 15720,3180 8735,3180 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id11">
- <rect class="BoundingBox" stroke="none" fill="none" x="16099" y="609" width="4822" height="10173"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 18510,10780 L 16100,10780 16100,610 20919,610 20919,10780 18510,10780 Z"/>
- <path fill="none" stroke="rgb(52,101,164)" d="M 18510,10780 L 16100,10780 16100,610 20919,610 20919,10780 18510,10780 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id12">
- <rect class="BoundingBox" stroke="none" fill="none" x="4525" y="8873" width="10942" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 9996,10525 L 4526,10525 4526,8874 15465,8874 15465,10525 9996,10525 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 9996,10525 L 4526,10525 4526,8874 15465,8874 15465,10525 9996,10525 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9183" y="9477"/><tspan class="TextPosition" x="9183" y="9477"><tspan fill="rgb(255,255,255)" stroke="none">pandas</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="8393" y="9901"/><tspan class="TextPosition" x="8393" y="9901"><tspan fill="rgb(255,255,255)" stroke="none">Data model in JSON</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6817" y="10295"/><tspan class="TextPosition" x="6817" y="10295"><tspan fill="rgb(255,255,255)" stroke="none">Specification, Input data (Pandas.Series)</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id13">
- <rect class="BoundingBox" stroke="none" fill="none" x="4315" y="8140" width="5437" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4565" y="8714"/><tspan class="TextPosition" x="4565" y="8714"><tspan fill="rgb(255,255,255)" stroke="none">Data processing</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id14">
- <rect class="BoundingBox" stroke="none" fill="none" x="4315" y="4340" width="5437" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="4565" y="4914"/><tspan class="TextPosition" x="4565" y="4914"><tspan fill="rgb(255,255,255)" stroke="none">Data presentation</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id15">
- <rect class="BoundingBox" stroke="none" fill="none" x="4525" y="5073" width="2560" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 5805,6725 L 4526,6725 4526,5074 7083,5074 7083,6725 5805,6725 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 5805,6725 L 4526,6725 4526,5074 7083,5074 7083,6725 5805,6725 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="5252" y="5677"/><tspan class="TextPosition" x="5252" y="5677"><tspan fill="rgb(255,255,255)" stroke="none">Plots</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="4697" y="6495"/><tspan class="TextPosition" x="4697" y="6495"><tspan fill="rgb(255,255,255)" stroke="none">plot.ly → .html</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id16">
- <rect class="BoundingBox" stroke="none" fill="none" x="8826" y="5073" width="2451" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 10051,6725 L 8827,6725 8827,5074 11275,5074 11275,6725 10051,6725 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 10051,6725 L 8827,6725 8827,5074 11275,5074 11275,6725 10051,6725 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="9528" y="5677"/><tspan class="TextPosition" x="9528" y="5677"><tspan fill="rgb(255,255,255)" stroke="none">Files</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="9649" y="6495"/><tspan class="TextPosition" x="9649" y="6495"><tspan fill="rgb(255,255,255)" stroke="none">.RST</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id17">
- <rect class="BoundingBox" stroke="none" fill="none" x="12925" y="5073" width="2560" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 14205,6725 L 12926,6725 12926,5074 15483,5074 15483,6725 14205,6725 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 14205,6725 L 12926,6725 12926,5074 15483,5074 15483,6725 14205,6725 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="13489" y="5677"/><tspan class="TextPosition" x="13489" y="5677"><tspan fill="rgb(255,255,255)" stroke="none">Tables</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13023" y="6495"/><tspan class="TextPosition" x="13023" y="6495"><tspan fill="rgb(255,255,255)" stroke="none">Pandas → .csv</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id18">
- <rect class="BoundingBox" stroke="none" fill="none" x="1715" y="540" width="5437" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="1965" y="1114"/><tspan class="TextPosition" x="1965" y="1114"><tspan fill="rgb(255,255,255)" stroke="none">Report generation</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id19">
- <rect class="BoundingBox" stroke="none" fill="none" x="2003" y="1273" width="13465" height="1654"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 8735,2925 L 2004,2925 2004,1274 15466,1274 15466,2925 8735,2925 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 8735,2925 L 2004,2925 2004,1274 15466,1274 15466,2925 8735,2925 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="7982" y="1877"/><tspan class="TextPosition" x="7982" y="1877"><tspan fill="rgb(255,255,255)" stroke="none">Sphinx</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="6163" y="2695"/><tspan class="TextPosition" x="6163" y="2695"><tspan fill="rgb(255,255,255)" stroke="none">.html / .pdf (then stored in nexus)</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id20">
- <rect class="BoundingBox" stroke="none" fill="none" x="16015" y="540" width="4659" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="16265" y="1114"/><tspan class="TextPosition" x="16265" y="1114"><tspan fill="rgb(255,255,255)" stroke="none">Jenkins plots</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.CustomShape">
- <g id="id21">
- <rect class="BoundingBox" stroke="none" fill="none" x="16354" y="1243" width="4317" height="9284"/>
- <path fill="rgb(114,159,207)" stroke="none" d="M 18512,10525 L 16355,10525 16355,1244 20669,1244 20669,10525 18512,10525 Z"/>
- <path fill="none" stroke="rgb(255,255,255)" d="M 18512,10525 L 16355,10525 16355,1244 20669,1244 20669,10525 18512,10525 Z"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17200" y="5385"/><tspan class="TextPosition" x="17200" y="5385"><tspan fill="rgb(255,255,255)" stroke="none">Jenkins plot</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="17852" y="5940"/><tspan class="TextPosition" x="17852" y="5940"><tspan fill="rgb(255,255,255)" stroke="none">plugin</tspan></tspan></tspan><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="18129" y="6758"/><tspan class="TextPosition" x="18129" y="6758"><tspan fill="rgb(255,255,255)" stroke="none">.html</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id22">
- <rect class="BoundingBox" stroke="none" fill="none" x="415" y="11840" width="1303" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="665" y="12414"/><tspan class="TextPosition" x="665" y="12414"><tspan fill="rgb(0,0,0)" stroke="none">sL1</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id23">
- <rect class="BoundingBox" stroke="none" fill="none" x="415" y="8140" width="1303" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="665" y="8714"/><tspan class="TextPosition" x="665" y="8714"><tspan fill="rgb(0,0,0)" stroke="none">sL2</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id24">
- <rect class="BoundingBox" stroke="none" fill="none" x="415" y="4340" width="1303" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="665" y="4914"/><tspan class="TextPosition" x="665" y="4914"><tspan fill="rgb(0,0,0)" stroke="none">sL3</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id25">
- <rect class="BoundingBox" stroke="none" fill="none" x="415" y="540" width="1303" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="494px" font-weight="400"><tspan class="TextPosition" x="665" y="1114"/><tspan class="TextPosition" x="665" y="1114"><tspan fill="rgb(0,0,0)" stroke="none">sL4</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id26">
- <rect class="BoundingBox" stroke="none" fill="none" x="3031" y="2896" width="431" height="10007"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 3222,12548 L 3271,3439"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 3257,12528 L 3291,12537 3325,12555 3356,12579 3380,12610 3397,12645 3406,12679 3411,12714 3406,12748 3396,12784 3379,12818 3355,12847 3323,12871 3289,12888 3255,12899 3219,12902 3185,12899 3150,12887 3117,12870 3086,12846 3062,12816 3045,12782 3036,12746 3032,12712 3036,12677 3046,12643 3063,12609 3088,12578 3119,12554 3152,12537 3187,12527 3221,12523 3257,12528 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 3274,2896 L 3081,3463 3460,3466 3274,2896 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id27">
- <rect class="BoundingBox" stroke="none" fill="none" x="11096" y="10516" width="411" height="2388"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 11313,12548 L 11285,11059"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 11348,12527 L 11382,12536 11416,12552 11448,12576 11473,12607 11491,12640 11501,12674 11506,12709 11502,12744 11493,12779 11477,12814 11453,12844 11422,12869 11389,12886 11355,12898 11319,12902 11285,12900 11250,12889 11216,12873 11185,12849 11160,12820 11142,12786 11132,12751 11127,12717 11131,12681 11140,12647 11156,12612 11180,12581 11210,12556 11243,12538 11278,12528 11312,12523 11348,12527 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 11275,10516 L 11096,11088 11475,11081 11275,10516 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id28">
- <rect class="BoundingBox" stroke="none" fill="none" x="15000" y="10517" width="411" height="2388"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 15217,12549 L 15189,11060"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 15252,12528 L 15286,12537 15320,12553 15352,12577 15377,12608 15395,12641 15405,12675 15410,12710 15406,12745 15397,12780 15381,12815 15357,12845 15326,12870 15293,12887 15259,12899 15223,12903 15189,12901 15154,12890 15120,12874 15089,12850 15064,12821 15046,12787 15036,12752 15031,12718 15035,12682 15044,12648 15060,12613 15084,12582 15114,12557 15147,12539 15182,12529 15216,12524 15252,12528 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 15179,10517 L 15000,11089 15379,11082 15179,10517 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id29">
- <rect class="BoundingBox" stroke="none" fill="none" x="18304" y="10518" width="411" height="2388"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 18521,12550 L 18493,11061"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 18556,12529 L 18590,12538 18624,12554 18656,12578 18681,12609 18699,12642 18709,12676 18714,12711 18710,12746 18701,12781 18685,12816 18661,12846 18630,12871 18597,12888 18563,12900 18527,12904 18493,12902 18458,12891 18424,12875 18393,12851 18368,12822 18350,12788 18340,12753 18335,12719 18339,12683 18348,12649 18364,12614 18388,12583 18418,12558 18451,12540 18486,12530 18520,12525 18556,12529 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 18483,10518 L 18304,11090 18683,11083 18483,10518 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id30">
- <rect class="BoundingBox" stroke="none" fill="none" x="5497" y="2896" width="381" height="2414"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 5687,4955 L 5687,3439"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 5722,4934 L 5756,4944 5790,4961 5821,4985 5845,5016 5862,5051 5872,5085 5877,5120 5872,5154 5862,5190 5845,5224 5821,5254 5790,5278 5756,5295 5722,5306 5686,5309 5652,5306 5617,5295 5584,5278 5553,5254 5529,5224 5512,5190 5502,5154 5498,5120 5502,5085 5512,5051 5529,5016 5553,4985 5584,4961 5617,4944 5652,4934 5686,4930 5722,4934 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 5687,2896 L 5498,3465 5877,3465 5687,2896 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id31">
- <rect class="BoundingBox" stroke="none" fill="none" x="9815" y="2896" width="381" height="2414"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 10005,4955 L 10005,3439"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 10040,4934 L 10074,4944 10108,4961 10139,4985 10163,5016 10180,5051 10190,5085 10195,5120 10190,5154 10180,5190 10163,5224 10139,5254 10108,5278 10074,5295 10040,5306 10004,5309 9970,5306 9935,5295 9902,5278 9871,5254 9847,5224 9830,5190 9820,5154 9816,5120 9820,5085 9830,5051 9847,5016 9871,4985 9902,4961 9935,4944 9970,4934 10004,4930 10040,4934 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 10005,2896 L 9816,3465 10195,3465 10005,2896 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id32">
- <rect class="BoundingBox" stroke="none" fill="none" x="13999" y="2919" width="387" height="2392"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 14195,4955 L 14189,3462"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 14229,4934 L 14263,4944 14298,4961 14329,4985 14353,5016 14370,5050 14380,5084 14385,5119 14381,5153 14371,5189 14354,5223 14330,5253 14299,5277 14265,5294 14231,5306 14195,5309 14161,5306 14126,5295 14093,5278 14062,5254 14037,5224 14020,5190 14010,5155 14006,5121 14010,5086 14020,5051 14037,5017 14061,4986 14092,4962 14124,4944 14160,4934 14194,4930 14229,4934 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 14187,2919 L 14000,3488 14379,3487 14187,2919 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id33">
- <rect class="BoundingBox" stroke="none" fill="none" x="6957" y="5627" width="1906" height="381"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 7311,5817 L 8319,5817"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 7332,5852 L 7322,5886 7305,5920 7281,5951 7250,5975 7215,5992 7181,6002 7146,6007 7112,6002 7076,5992 7042,5975 7012,5951 6988,5920 6971,5886 6960,5852 6957,5816 6960,5782 6971,5747 6988,5714 7012,5683 7042,5659 7076,5642 7112,5632 7146,5628 7181,5632 7215,5642 7250,5659 7281,5683 7305,5714 7322,5747 7332,5782 7336,5816 7332,5852 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 8862,5817 L 8294,5628 8294,6007 8862,5817 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id34">
- <rect class="BoundingBox" stroke="none" fill="none" x="11275" y="5627" width="1779" height="381"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 12699,5817 L 11818,5817"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 12678,5782 L 12688,5748 12705,5714 12729,5683 12760,5659 12795,5642 12829,5632 12864,5628 12898,5632 12934,5642 12968,5659 12998,5683 13022,5714 13039,5748 13050,5782 13053,5818 13050,5852 13039,5887 13022,5920 12998,5951 12968,5975 12934,5992 12898,6002 12864,6007 12829,6002 12795,5992 12760,5975 12729,5951 12705,5920 12688,5887 12678,5852 12674,5818 12678,5782 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 11275,5817 L 11844,6007 11844,5628 11275,5817 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id35">
- <rect class="BoundingBox" stroke="none" fill="none" x="5524" y="6706" width="381" height="2160"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 5714,7249 L 5714,8322"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 5714,6706 L 5525,7275 5904,7275 5714,6706 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 5714,8865 L 5904,8297 5525,8297 5714,8865 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id36">
- <rect class="BoundingBox" stroke="none" fill="none" x="9824" y="6707" width="381" height="2160"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 10014,7250 L 10014,8323"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 10014,6707 L 9825,7276 10204,7276 10014,6707 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 10014,8866 L 10204,8298 9825,8298 10014,8866 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id37">
- <rect class="BoundingBox" stroke="none" fill="none" x="14024" y="6708" width="381" height="2160"/>
- <path fill="none" stroke="rgb(0,102,204)" stroke-width="53" stroke-linejoin="round" d="M 14214,7251 L 14214,8324"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 14214,6708 L 14025,7277 14404,7277 14214,6708 Z"/>
- <path fill="rgb(0,102,204)" stroke="none" d="M 14214,8867 L 14404,8299 14025,8299 14214,8867 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id38">
- <rect class="BoundingBox" stroke="none" fill="none" x="3115" y="11440" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="3365" y="11883"/><tspan class="TextPosition" x="3365" y="11883"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id39">
- <rect class="BoundingBox" stroke="none" fill="none" x="11215" y="11440" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11465" y="11883"/><tspan class="TextPosition" x="11465" y="11883"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id40">
- <rect class="BoundingBox" stroke="none" fill="none" x="15115" y="11440" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="15365" y="11883"/><tspan class="TextPosition" x="15365" y="11883"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id41">
- <rect class="BoundingBox" stroke="none" fill="none" x="18415" y="11440" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="18665" y="11883"/><tspan class="TextPosition" x="18665" y="11883"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id42">
- <rect class="BoundingBox" stroke="none" fill="none" x="14115" y="3840" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="14365" y="4283"/><tspan class="TextPosition" x="14365" y="4283"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id43">
- <rect class="BoundingBox" stroke="none" fill="none" x="9915" y="3840" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10165" y="4283"/><tspan class="TextPosition" x="10165" y="4283"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id44">
- <rect class="BoundingBox" stroke="none" fill="none" x="5615" y="3840" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5865" y="4283"/><tspan class="TextPosition" x="5865" y="4283"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id45">
- <rect class="BoundingBox" stroke="none" fill="none" x="6915" y="5140" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="7165" y="5583"/><tspan class="TextPosition" x="7165" y="5583"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id46">
- <rect class="BoundingBox" stroke="none" fill="none" x="11115" y="5140" width="2065" height="807"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="11365" y="5583"/><tspan class="TextPosition" x="11365" y="5583"><tspan fill="rgb(0,69,134)" stroke="none">Read files</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id47">
- <rect class="BoundingBox" stroke="none" fill="none" x="5615" y="7640" width="2613" height="718"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="5865" y="8083"/><tspan class="TextPosition" x="5865" y="8083"><tspan fill="rgb(0,69,134)" stroke="none">Python calls</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id48">
- <rect class="BoundingBox" stroke="none" fill="none" x="9915" y="7641" width="2613" height="718"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="10165" y="8084"/><tspan class="TextPosition" x="10165" y="8084"><tspan fill="rgb(0,69,134)" stroke="none">Python calls</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id49">
- <rect class="BoundingBox" stroke="none" fill="none" x="12915" y="7642" width="2613" height="718"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="353px" font-weight="400"><tspan class="TextPosition" x="13165" y="8085"/><tspan class="TextPosition" x="13165" y="8085"><tspan fill="rgb(0,69,134)" stroke="none">Python calls</tspan></tspan></tspan></text>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/resources/tools/presentation/doc/pal_lld.rst b/resources/tools/presentation/doc/pal_lld.rst
deleted file mode 100644
index 3f58044f21..0000000000
--- a/resources/tools/presentation/doc/pal_lld.rst
+++ /dev/null
@@ -1,1715 +0,0 @@
-Presentation and Analytics
-==========================
-
-Overview
---------
-
-The presentation and analytics layer (PAL) is the fourth layer of CSIT
-hierarchy. The model of presentation and analytics layer consists of four
-sub-layers, bottom up:
-
- - sL1 - Data - input data to be processed:
-
- - Static content - .rst text files, .svg static figures, and other files
- stored in the CSIT git repository.
- - Data to process - .xml files generated by Jenkins jobs executing tests,
- stored as robot results files (output.xml).
- - Specification - .yaml file with the models of report elements (tables,
- plots, layout, ...) generated by this tool. There is also the configuration
- of the tool and the specification of input data (jobs and builds).
-
- - sL2 - Data processing
-
- - The data are read from the specified input files (.xml) and stored as
- multi-indexed `pandas.Series <https://pandas.pydata.org/pandas-docs/stable/
- generated/pandas.Series.html>`_.
- - This layer provides also interface to input data and filtering of the input
- data.
-
- - sL3 - Data presentation - This layer generates the elements specified in the
- specification file:
-
- - Tables: .csv files linked to static .rst files.
- - Plots: .html files generated using plot.ly linked to static .rst files.
-
- - sL4 - Report generation - Sphinx generates required formats and versions:
-
- - formats: html, pdf
- - versions: minimal, full (TODO: define the names and scope of versions)
-
-.. only:: latex
-
- .. raw:: latex
-
- \begin{figure}[H]
- \centering
- \graphicspath{{../_tmp/src/csit_framework_documentation/}}
- \includegraphics[width=0.90\textwidth]{pal_layers}
- \label{fig:pal_layers}
- \end{figure}
-
-.. only:: html
-
- .. figure:: pal_layers.svg
- :alt: PAL Layers
- :align: center
-
-Data
-----
-
-Report Specification
-````````````````````
-
-The report specification file defines which data is used and which outputs are
-generated. It is human readable and structured. It is easy to add / remove /
-change items. The specification includes:
-
- - Specification of the environment.
- - Configuration of debug mode (optional).
- - Specification of input data (jobs, builds, files, ...).
- - Specification of the output.
- - What and how is generated:
- - What: plots, tables.
- - How: specification of all properties and parameters.
- - .yaml format.
-
-Structure of the specification file
-'''''''''''''''''''''''''''''''''''
-
-The specification file is organized as a list of dictionaries distinguished by
-the type:
-
-::
-
- -
- type: "environment"
- -
- type: "configuration"
- -
- type: "debug"
- -
- type: "static"
- -
- type: "input"
- -
- type: "output"
- -
- type: "table"
- -
- type: "plot"
- -
- type: "file"
-
-Each type represents a section. The sections "environment", "debug", "static",
-"input" and "output" are listed only once in the specification; "table", "file"
-and "plot" can be there multiple times.
-
-Sections "debug", "table", "file" and "plot" are optional.
-
-Table(s), files(s) and plot(s) are referred as "elements" in this text. It is
-possible to define and implement other elements if needed.
-
-
-Section: Environment
-''''''''''''''''''''
-
-This section has the following parts:
-
- - type: "environment" - says that this is the section "environment".
- - configuration - configuration of the PAL.
- - paths - paths used by the PAL.
- - urls - urls pointing to the data sources.
- - make-dirs - a list of the directories to be created by the PAL while
- preparing the environment.
- - remove-dirs - a list of the directories to be removed while cleaning the
- environment.
- - build-dirs - a list of the directories where the results are stored.
-
-The structure of the section "Environment" is as follows (example):
-
-::
-
- -
- type: "environment"
- configuration:
- # Debug mode:
- # - Skip:
- # - Download of input data files
- # - Do:
- # - Read data from given zip / xml files
- # - Set the configuration as it is done in normal mode
- # If the section "type: debug" is missing, CFG[DEBUG] is set to 0.
- CFG[DEBUG]: 0
-
- paths:
- # Top level directories:
- ## Working directory
- DIR[WORKING]: "_tmp"
- ## Build directories
- DIR[BUILD,HTML]: "_build"
- DIR[BUILD,LATEX]: "_build_latex"
-
- # Static .rst files
- DIR[RST]: "../../../docs/report"
-
- # Working directories
- ## Input data files (.zip, .xml)
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
- ## Static source files from git
- DIR[WORKING,SRC]: "{DIR[WORKING]}/src"
- DIR[WORKING,SRC,STATIC]: "{DIR[WORKING,SRC]}/_static"
-
- # Static html content
- DIR[STATIC]: "{DIR[BUILD,HTML]}/_static"
- DIR[STATIC,VPP]: "{DIR[STATIC]}/vpp"
- DIR[STATIC,DPDK]: "{DIR[STATIC]}/dpdk"
- DIR[STATIC,ARCH]: "{DIR[STATIC]}/archive"
-
- # Detailed test results
- DIR[DTR]: "{DIR[WORKING,SRC]}/detailed_test_results"
- DIR[DTR,PERF,DPDK]: "{DIR[DTR]}/dpdk_performance_results"
- DIR[DTR,PERF,VPP]: "{DIR[DTR]}/vpp_performance_results"
- DIR[DTR,FUNC,VPP]: "{DIR[DTR]}/vpp_functional_results"
- DIR[DTR,PERF,VPP,IMPRV]: "{DIR[WORKING,SRC]}/vpp_performance_tests/performance_improvements"
-
- # Detailed test configurations
- DIR[DTC]: "{DIR[WORKING,SRC]}/test_configuration"
- DIR[DTC,PERF,VPP]: "{DIR[DTC]}/vpp_performance_configuration"
- DIR[DTC,FUNC,VPP]: "{DIR[DTC]}/vpp_functional_configuration"
-
- # Detailed tests operational data
- DIR[DTO]: "{DIR[WORKING,SRC]}/test_operational_data"
- DIR[DTO,PERF,VPP]: "{DIR[DTO]}/vpp_performance_operational_data"
-
- # .css patch file to fix tables generated by Sphinx
- DIR[CSS_PATCH_FILE]: "{DIR[STATIC]}/theme_overrides.css"
- DIR[CSS_PATCH_FILE2]: "{DIR[WORKING,SRC,STATIC]}/theme_overrides.css"
-
- urls:
- URL[JENKINS,CSIT]: "https://jenkins.fd.io/view/csit/job"
- URL[S3_STORAGE,LOG]: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- URL[NEXUS,LOG]: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- URL[NEXUS,DOC]: "https://docs.fd.io/csit"
- DIR[NEXUS,DOC]: "report/_static/archive"
-
- make-dirs:
- # List the directories which are created while preparing the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
- - "DIR[STATIC,VPP]"
- - "DIR[STATIC,DPDK]"
- - "DIR[STATIC,ARCH]"
- - "DIR[BUILD,LATEX]"
- - "DIR[WORKING,SRC]"
- - "DIR[WORKING,SRC,STATIC]"
-
- remove-dirs:
- # List the directories which are deleted while cleaning the environment.
- # All directories MUST be defined in "paths" section.
- #- "DIR[BUILD,HTML]"
-
- build-dirs:
- # List the directories where the results (build) is stored.
- # All directories MUST be defined in "paths" section.
- - "DIR[BUILD,HTML]"
- - "DIR[BUILD,LATEX]"
-
-It is possible to use defined items in the definition of other items, e.g.:
-
-::
-
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
-
-will be automatically changed to
-
-::
-
- DIR[WORKING,DATA]: "_tmp/data"
-
-
-Section: Configuration
-''''''''''''''''''''''
-
-This section specifies the groups of parameters which are repeatedly used in the
-elements defined later in the specification file. It has the following parts:
-
- - data sets - Specification of data sets used later in element's specifications
- to define the input data.
- - plot layouts - Specification of plot layouts used later in plots'
- specifications to define the plot layout.
-
-The structure of the section "Configuration" is as follows (example):
-
-::
-
- -
- type: "configuration"
- data-sets:
- plot-vpp-throughput-latency:
- csit-vpp-perf-1710-all:
- - 11
- - 12
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 20
- vpp-perf-results:
- csit-vpp-perf-1710-all:
- - 20
- - 23
- plot-layouts:
- plot-throughput:
- xaxis:
- autorange: True
- autotick: False
- fixedrange: False
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- title: "Indexed Test Cases"
- zeroline: False
- yaxis:
- gridcolor: "rgb(238, 238, 238)'"
- hoverformat: ".4s"
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- range: []
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- title: "Packets Per Second [pps]"
- zeroline: False
- boxmode: "group"
- boxgroupgap: 0.5
- autosize: False
- margin:
- t: 50
- b: 20
- l: 50
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- width: 700
- height: 1000
-
-The definitions from this sections are used in the elements, e.g.:
-
-::
-
- -
- type: "plot"
- title: "VPP Performance 64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- algorithm: "plot_performance_box"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/64B-1t1c-l2-sel1-ndrdisc"
- data:
- "plot-vpp-throughput-latency"
- filter: "'64B' and ('BASE' or 'SCALE') and 'NDRDISC' and '1T1C' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST'"
- parameters:
- - "throughput"
- - "parent"
- traces:
- hoverinfo: "x+y"
- boxpoints: "outliers"
- whiskerwidth: 0
- layout:
- title: "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- layout:
- "plot-throughput"
-
-
-Section: Debug mode
-'''''''''''''''''''
-
-This section is optional as it configures the debug mode. It is used if one
-does not want to download input data files and use local files instead.
-
-If the debug mode is configured, the "input" section is ignored.
-
-This section has the following parts:
-
- - type: "debug" - says that this is the section "debug".
- - general:
-
- - input-format - xml or zip.
- - extract - if "zip" is defined as the input format, this file is extracted
- from the zip file, otherwise this parameter is ignored.
-
- - builds - list of builds from which the data is used. Must include a job
- name as a key and then a list of builds and their output files.
-
-The structure of the section "Debug" is as follows (example):
-
-::
-
- -
- type: "debug"
- general:
- input-format: "zip" # zip or xml
- extract: "robot-plugin/output.xml" # Only for zip
- builds:
- # The files must be in the directory DIR[WORKING,DATA]
- csit-dpdk-perf-1707-all:
- -
- build: 10
- file: "csit-dpdk-perf-1707-all__10.xml"
- -
- build: 9
- file: "csit-dpdk-perf-1707-all__9.xml"
- csit-vpp-functional-1707-ubuntu1604-virl:
- -
- build: lastSuccessfulBuild
- file: "csit-vpp-functional-1707-ubuntu1604-virl-lastSuccessfulBuild.xml"
- hc2vpp-csit-integration-1707-ubuntu1604:
- -
- build: lastSuccessfulBuild
- file: "hc2vpp-csit-integration-1707-ubuntu1604-lastSuccessfulBuild.xml"
- csit-vpp-perf-1707-all:
- -
- build: 16
- file: "csit-vpp-perf-1707-all__16__output.xml"
- -
- build: 17
- file: "csit-vpp-perf-1707-all__17__output.xml"
-
-
-Section: Static
-'''''''''''''''
-
-This section defines the static content which is stored in git and will be used
-as a source to generate the report.
-
-This section has these parts:
-
- - type: "static" - says that this section is the "static".
- - src-path - path to the static content.
- - dst-path - destination path where the static content is copied and then
- processed.
-
-::
-
- -
- type: "static"
- src-path: "{DIR[RST]}"
- dst-path: "{DIR[WORKING,SRC]}"
-
-
-Section: Input
-''''''''''''''
-
-This section defines the data used to generate elements. It is mandatory
-if the debug mode is not used.
-
-This section has the following parts:
-
- - type: "input" - says that this section is the "input".
- - general - parameters common to all builds:
-
- - file-name: file to be downloaded.
- - file-format: format of the downloaded file, ".zip" or ".xml" are supported.
- - download-path: path to be added to url pointing to the file, e.g.:
- "{job}/{build}/robot/report/*zip*/{filename}"; {job}, {build} and
- {filename} are replaced by proper values defined in this section.
- - extract: file to be extracted from downloaded zip file, e.g.: "output.xml";
- if xml file is downloaded, this parameter is ignored.
-
- - builds - list of jobs (keys) and numbers of builds which output data will be
- downloaded.
-
-The structure of the section "Input" is as follows (example from 17.07 report):
-
-::
-
- -
- type: "input" # Ignored in debug mode
- general:
- file-name: "robot-plugin.zip"
- file-format: ".zip"
- download-path: "{job}/{build}/robot/report/*zip*/{filename}"
- extract: "robot-plugin/output.xml"
- builds:
- csit-vpp-perf-1707-all:
- - 9
- - 10
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 21
- - 22
- csit-dpdk-perf-1707-all:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
- - 9
- - 10
- csit-vpp-functional-1707-ubuntu1604-virl:
- - lastSuccessfulBuild
- hc2vpp-csit-perf-master-ubuntu1604:
- - 8
- - 9
- hc2vpp-csit-integration-1707-ubuntu1604:
- - lastSuccessfulBuild
-
-Section: Output
-'''''''''''''''
-
-This section specifies which format(s) will be generated (html, pdf) and which
-versions will be generated for each format.
-
-This section has the following parts:
-
- - type: "output" - says that this section is the "output".
- - format: html or pdf.
- - version: defined for each format separately.
-
-The structure of the section "Output" is as follows (example):
-
-::
-
- -
- type: "output"
- format:
- html:
- - full
- pdf:
- - full
- - minimal
-
-TODO: define the names of versions
-
-
-Content of "minimal" version
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-TODO: define the name and content of this version
-
-
-Section: Table
-''''''''''''''
-
-This section defines a table to be generated. There can be 0 or more "table"
-sections.
-
-This section has the following parts:
-
- - type: "table" - says that this section defines a table.
- - title: Title of the table.
- - algorithm: Algorithm which is used to generate the table. The other
- parameters in this section must provide all information needed by the used
- algorithm.
- - template: (optional) a .csv file used as a template while generating the
- table.
- - output-file-ext: extension of the output file.
- - output-file: file which the table will be written to.
- - columns: specification of table columns:
-
- - title: The title used in the table header.
- - data: Specification of the data, it has two parts - command and arguments:
-
- - command:
-
- - template - take the data from template, arguments:
-
- - number of column in the template.
-
- - data - take the data from the input data, arguments:
-
- - jobs and builds which data will be used.
-
- - operation - performs an operation with the data already in the table,
- arguments:
-
- - operation to be done, e.g.: mean, stdev, relative_change (compute
- the relative change between two columns) and display number of data
- samples ~= number of test jobs. The operations are implemented in the
- utils.py
- TODO: Move from utils,py to e.g. operations.py
- - numbers of columns which data will be used (optional).
-
- - data: Specify the jobs and builds which data is used to generate the table.
- - filter: filter based on tags applied on the input data, if "template" is
- used, filtering is based on the template.
- - parameters: Only these parameters will be put to the output data structure.
-
-The structure of the section "Table" is as follows (example of
-"table_performance_improvements"):
-
-::
-
- -
- type: "table"
- title: "Performance improvements"
- algorithm: "table_performance_improvements"
- template: "{DIR[DTR,PERF,VPP,IMPRV]}/tmpl_performance_improvements.csv"
- output-file-ext: ".csv"
- output-file: "{DIR[DTR,PERF,VPP,IMPRV]}/performance_improvements"
- columns:
- -
- title: "VPP Functionality"
- data: "template 1"
- -
- title: "Test Name"
- data: "template 2"
- -
- title: "VPP-16.09 mean [Mpps]"
- data: "template 3"
- -
- title: "VPP-17.01 mean [Mpps]"
- data: "template 4"
- -
- title: "VPP-17.04 mean [Mpps]"
- data: "template 5"
- -
- title: "VPP-17.07 mean [Mpps]"
- data: "data csit-vpp-perf-1707-all mean"
- -
- title: "VPP-17.07 stdev [Mpps]"
- data: "data csit-vpp-perf-1707-all stdev"
- -
- title: "17.04 to 17.07 change [%]"
- data: "operation relative_change 5 4"
- data:
- csit-vpp-perf-1707-all:
- - 9
- - 10
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 21
- filter: "template"
- parameters:
- - "throughput"
-
-Example of "table_details" which generates "Detailed Test Results - VPP
-Performance Results":
-
-::
-
- -
- type: "table"
- title: "Detailed Test Results - VPP Performance Results"
- algorithm: "table_details"
- output-file-ext: ".csv"
- output-file: "{DIR[WORKING]}/vpp_performance_results"
- columns:
- -
- title: "Name"
- data: "data test_name"
- -
- title: "Documentation"
- data: "data test_documentation"
- -
- title: "Status"
- data: "data test_msg"
- data:
- csit-vpp-perf-1707-all:
- - 17
- filter: "all"
- parameters:
- - "parent"
- - "doc"
- - "msg"
-
-Example of "table_details" which generates "Test configuration - VPP Performance
-Test Configs":
-
-::
-
- -
- type: "table"
- title: "Test configuration - VPP Performance Test Configs"
- algorithm: "table_details"
- output-file-ext: ".csv"
- output-file: "{DIR[WORKING]}/vpp_test_configuration"
- columns:
- -
- title: "Name"
- data: "data name"
- -
- title: "VPP API Test (VAT) Commands History - Commands Used Per Test Case"
- data: "data show-run"
- data:
- csit-vpp-perf-1707-all:
- - 17
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "show-run"
-
-
-Section: Plot
-'''''''''''''
-
-This section defines a plot to be generated. There can be 0 or more "plot"
-sections.
-
-This section has these parts:
-
- - type: "plot" - says that this section defines a plot.
- - title: Plot title used in the logs. Title which is displayed is in the
- section "layout".
- - output-file-type: format of the output file.
- - output-file: file which the plot will be written to.
- - algorithm: Algorithm used to generate the plot. The other parameters in this
- section must provide all information needed by plot.ly to generate the plot.
- For example:
-
- - traces
- - layout
-
- - These parameters are transparently passed to plot.ly.
-
- - data: Specify the jobs and numbers of builds which data is used to generate
- the plot.
- - filter: filter applied on the input data.
- - parameters: Only these parameters will be put to the output data structure.
-
-The structure of the section "Plot" is as follows (example of a plot showing
-throughput in a chart box-with-whiskers):
-
-::
-
- -
- type: "plot"
- title: "VPP Performance 64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- algorithm: "plot_performance_box"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/64B-1t1c-l2-sel1-ndrdisc"
- data:
- csit-vpp-perf-1707-all:
- - 9
- - 10
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 21
- # Keep this formatting, the filter is enclosed with " (quotation mark) and
- # each tag is enclosed with ' (apostrophe).
- filter: "'64B' and 'BASE' and 'NDRDISC' and '1T1C' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST'"
- parameters:
- - "throughput"
- - "parent"
- traces:
- hoverinfo: "x+y"
- boxpoints: "outliers"
- whiskerwidth: 0
- layout:
- title: "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- xaxis:
- autorange: True
- autotick: False
- fixedrange: False
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- title: "Indexed Test Cases"
- zeroline: False
- yaxis:
- gridcolor: "rgb(238, 238, 238)'"
- hoverformat: ".4s"
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- range: []
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- title: "Packets Per Second [pps]"
- zeroline: False
- boxmode: "group"
- boxgroupgap: 0.5
- autosize: False
- margin:
- t: 50
- b: 20
- l: 50
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- width: 700
- height: 1000
-
-The structure of the section "Plot" is as follows (example of a plot showing
-latency in a box chart):
-
-::
-
- -
- type: "plot"
- title: "VPP Latency 64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- algorithm: "plot_latency_box"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/64B-1t1c-l2-sel1-ndrdisc-lat50"
- data:
- csit-vpp-perf-1707-all:
- - 9
- - 10
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 21
- filter: "'64B' and 'BASE' and 'NDRDISC' and '1T1C' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST'"
- parameters:
- - "latency"
- - "parent"
- traces:
- boxmean: False
- layout:
- title: "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- xaxis:
- autorange: True
- autotick: False
- fixedrange: False
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- title: "Indexed Test Cases"
- zeroline: False
- yaxis:
- gridcolor: "rgb(238, 238, 238)'"
- hoverformat: ""
- linecolor: "rgb(238, 238, 238)"
- linewidth: 1
- range: []
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- title: "Latency min/avg/max [uSec]"
- zeroline: False
- boxmode: "group"
- boxgroupgap: 0.5
- autosize: False
- margin:
- t: 50
- b: 20
- l: 50
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- width: 700
- height: 1000
-
-The structure of the section "Plot" is as follows (example of a plot showing
-VPP HTTP server performance in a box chart with pre-defined data
-"plot-vpp-http-server-performance" set and plot layout "plot-cps"):
-
-::
-
- -
- type: "plot"
- title: "VPP HTTP Server Performance"
- algorithm: "plot_http_server_perf_box"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/http-server-performance-cps"
- data:
- "plot-vpp-httlp-server-performance"
- # Keep this formatting, the filter is enclosed with " (quotation mark) and
- # each tag is enclosed with ' (apostrophe).
- filter: "'HTTP' and 'TCP_CPS'"
- parameters:
- - "result"
- - "name"
- traces:
- hoverinfo: "x+y"
- boxpoints: "outliers"
- whiskerwidth: 0
- layout:
- title: "VPP HTTP Server Performance"
- layout:
- "plot-cps"
-
-
-Section: file
-'''''''''''''
-
-This section defines a file to be generated. There can be 0 or more "file"
-sections.
-
-This section has the following parts:
-
- - type: "file" - says that this section defines a file.
- - title: Title of the table.
- - algorithm: Algorithm which is used to generate the file. The other
- parameters in this section must provide all information needed by the used
- algorithm.
- - output-file-ext: extension of the output file.
- - output-file: file which the file will be written to.
- - file-header: The header of the generated .rst file.
- - dir-tables: The directory with the tables.
- - data: Specify the jobs and builds which data is used to generate the table.
- - filter: filter based on tags applied on the input data, if "all" is
- used, no filtering is done.
- - parameters: Only these parameters will be put to the output data structure.
- - chapters: the hierarchy of chapters in the generated file.
- - start-level: the level of the the top-level chapter.
-
-The structure of the section "file" is as follows (example):
-
-::
-
- -
- type: "file"
- title: "VPP Performance Results"
- algorithm: "file_test_results"
- output-file-ext: ".rst"
- output-file: "{DIR[DTR,PERF,VPP]}/vpp_performance_results"
- file-header: "\n.. |br| raw:: html\n\n <br />\n\n\n.. |prein| raw:: html\n\n <pre>\n\n\n.. |preout| raw:: html\n\n </pre>\n\n"
- dir-tables: "{DIR[DTR,PERF,VPP]}"
- data:
- csit-vpp-perf-1707-all:
- - 22
- filter: "all"
- parameters:
- - "name"
- - "doc"
- - "level"
- data-start-level: 2 # 0, 1, 2, ...
- chapters-start-level: 2 # 0, 1, 2, ...
-
-
-Static content
-``````````````
-
- - Manually created / edited files.
- - .rst files, static .csv files, static pictures (.svg), ...
- - Stored in CSIT git repository.
-
-No more details about the static content in this document.
-
-
-Data to process
-```````````````
-
-The PAL processes tests results and other information produced by Jenkins jobs.
-The data are now stored as robot results in Jenkins (TODO: store the data in
-nexus) either as .zip and / or .xml files.
-
-
-Data processing
----------------
-
-As the first step, the data are downloaded and stored locally (typically on a
-Jenkins slave). If .zip files are used, the given .xml files are extracted for
-further processing.
-
-Parsing of the .xml files is performed by a class derived from
-"robot.api.ResultVisitor", only necessary methods are overridden. All and only
-necessary data is extracted from .xml file and stored in a structured form.
-
-The parsed data are stored as the multi-indexed pandas.Series data type. Its
-structure is as follows:
-
-::
-
- <job name>
- <build>
- <metadata>
- <suites>
- <tests>
-
-"job name", "build", "metadata", "suites", "tests" are indexes to access the
-data. For example:
-
-::
-
- data =
-
- job 1 name:
- build 1:
- metadata: metadata
- suites: suites
- tests: tests
- ...
- build N:
- metadata: metadata
- suites: suites
- tests: tests
- ...
- job M name:
- build 1:
- metadata: metadata
- suites: suites
- tests: tests
- ...
- build N:
- metadata: metadata
- suites: suites
- tests: tests
-
-Using indexes data["job 1 name"]["build 1"]["tests"] (e.g.:
-data["csit-vpp-perf-1704-all"]["17"]["tests"]) we get a list of all tests with
-all tests data.
-
-Data will not be accessible directly using indexes, but using getters and
-filters.
-
-**Structure of metadata:**
-
-::
-
- "metadata": {
- "version": "VPP version",
- "job": "Jenkins job name"
- "build": "Information about the build"
- },
-
-**Structure of suites:**
-
-::
-
- "suites": {
- "Suite name 1": {
- "doc": "Suite 1 documentation"
- "parent": "Suite 1 parent"
- }
- "Suite name N": {
- "doc": "Suite N documentation"
- "parent": "Suite N parent"
- }
-
-**Structure of tests:**
-
-Performance tests:
-
-::
-
- "tests": {
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation"
- "msg": "Test message"
- "tags": ["tag 1", "tag 2", "tag n"],
- "type": "PDR" | "NDR",
- "throughput": {
- "value": int,
- "unit": "pps" | "bps" | "percentage"
- },
- "latency": {
- "direction1": {
- "100": {
- "min": int,
- "avg": int,
- "max": int
- },
- "50": { # Only for NDR
- "min": int,
- "avg": int,
- "max": int
- },
- "10": { # Only for NDR
- "min": int,
- "avg": int,
- "max": int
- }
- },
- "direction2": {
- "100": {
- "min": int,
- "avg": int,
- "max": int
- },
- "50": { # Only for NDR
- "min": int,
- "avg": int,
- "max": int
- },
- "10": { # Only for NDR
- "min": int,
- "avg": int,
- "max": int
- }
- }
- },
- "lossTolerance": "lossTolerance" # Only for PDR
- "vat-history": "DUT1 and DUT2 VAT History"
- },
- "show-run": "Show Run"
- },
- "ID" {
- # next test
- }
-
-Functional tests:
-
-::
-
- "tests": {
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation"
- "msg": "Test message"
- "tags": ["tag 1", "tag 2", "tag n"],
- "vat-history": "DUT1 and DUT2 VAT History"
- "show-run": "Show Run"
- "status": "PASS" | "FAIL"
- },
- "ID" {
- # next test
- }
- }
-
-Note: ID is the lowercase full path to the test.
-
-
-Data filtering
-``````````````
-
-The first step when generating an element is getting the data needed to
-construct the element. The data are filtered from the processed input data.
-
-The data filtering is based on:
-
- - job name(s).
- - build number(s).
- - tag(s).
- - required data - only this data is included in the output.
-
-WARNING: The filtering is based on tags, so be careful with tagging.
-
-For example, the element which specification includes:
-
-::
-
- data:
- csit-vpp-perf-1707-all:
- - 9
- - 10
- - 13
- - 14
- - 15
- - 16
- - 17
- - 18
- - 19
- - 21
- filter:
- - "'64B' and 'BASE' and 'NDRDISC' and '1T1C' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST'"
-
-will be constructed using data from the job "csit-vpp-perf-1707-all", for all
-listed builds and the tests with the list of tags matching the filter
-conditions.
-
-The output data structure for filtered test data is:
-
-::
-
- - job 1
- - build 1
- - test 1
- - parameter 1
- - parameter 2
- ...
- - parameter n
- ...
- - test n
- ...
- ...
- - build n
- ...
- - job n
-
-
-Data analytics
-``````````````
-
-Data analytics part implements:
-
- - methods to compute statistical data from the filtered input data.
- - trending.
-
-Throughput Speedup Analysis - Multi-Core with Multi-Threading
-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-Throughput Speedup Analysis (TSA) calculates throughput speedup ratios
-for tested 1-, 2- and 4-core multi-threaded VPP configurations using the
-following formula:
-
-::
-
- N_core_throughput
- N_core_throughput_speedup = -----------------
- 1_core_throughput
-
-Multi-core throughput speedup ratios are plotted in grouped bar graphs
-for throughput tests with 64B/78B frame size, with number of cores on
-X-axis and speedup ratio on Y-axis.
-
-For better comparison multiple test results' data sets are plotted per
-each graph:
-
- - graph type: grouped bars;
- - graph X-axis: (testcase index, number of cores);
- - graph Y-axis: speedup factor.
-
-Subset of existing performance tests is covered by TSA graphs.
-
-**Model for TSA:**
-
-::
-
- -
- type: "plot"
- title: "TSA: 64B-*-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- algorithm: "plot_throughput_speedup_analysis"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/10ge2p1x520-64B-l2-tsa-ndrdisc"
- data:
- "plot-throughput-speedup-analysis"
- filter: "'NIC_Intel-X520-DA2' and '64B' and 'BASE' and 'NDRDISC' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST'"
- parameters:
- - "throughput"
- - "parent"
- - "tags"
- layout:
- title: "64B-*-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc"
- layout:
- "plot-throughput-speedup-analysis"
-
-
-Comparison of results from two sets of the same test executions
-'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
-
-This algorithm enables comparison of results coming from two sets of the
-same test executions. It is used to quantify performance changes across
-all tests after test environment changes e.g. Operating System
-upgrades/patches, Hardware changes.
-
-It is assumed that each set of test executions includes multiple runs
-of the same tests, 10 or more, to verify test results repeatibility and
-to yield statistically meaningful results data.
-
-Comparison results are presented in a table with a specified number of
-the best and the worst relative changes between the two sets. Following table
-columns are defined:
-
- - name of the test;
- - throughput mean values of the reference set;
- - throughput standard deviation of the reference set;
- - throughput mean values of the set to compare;
- - throughput standard deviation of the set to compare;
- - relative change of the mean values.
-
-**The model**
-
-The model specifies:
-
- - type: "table" - means this section defines a table.
- - title: Title of the table.
- - algorithm: Algorithm which is used to generate the table. The other
- parameters in this section must provide all information needed by the used
- algorithm.
- - output-file-ext: Extension of the output file.
- - output-file: File which the table will be written to.
- - reference - the builds which are used as the reference for comparison.
- - compare - the builds which are compared to the reference.
- - data: Specify the sources, jobs and builds, providing data for generating
- the table.
- - filter: Filter based on tags applied on the input data, if "template" is
- used, filtering is based on the template.
- - parameters: Only these parameters will be put to the output data
- structure.
- - nr-of-tests-shown: Number of the best and the worst tests presented in the
- table. Use 0 (zero) to present all tests.
-
-*Example:*
-
-::
-
- -
- type: "table"
- title: "Performance comparison"
- algorithm: "table_perf_comparison"
- output-file-ext: ".csv"
- output-file: "{DIR[DTR,PERF,VPP,IMPRV]}/vpp_performance_comparison"
- reference:
- title: "csit-vpp-perf-1801-all - 1"
- data:
- csit-vpp-perf-1801-all:
- - 1
- - 2
- compare:
- title: "csit-vpp-perf-1801-all - 2"
- data:
- csit-vpp-perf-1801-all:
- - 1
- - 2
- data:
- "vpp-perf-comparison"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- nr-of-tests-shown: 20
-
-
-Advanced data analytics
-```````````````````````
-
-In the future advanced data analytics (ADA) will be added to analyze the
-telemetry data collected from SUT telemetry sources and correlate it to
-performance test results.
-
-:TODO:
-
- - describe the concept of ADA.
- - add specification.
-
-
-Data presentation
------------------
-
-Generates the plots and tables according to the report models per
-specification file. The elements are generated using algorithms and data
-specified in their models.
-
-
-Tables
-``````
-
- - tables are generated by algorithms implemented in PAL, the model includes the
- algorithm and all necessary information.
- - output format: csv
- - generated tables are stored in specified directories and linked to .rst
- files.
-
-
-Plots
-`````
-
- - `plot.ly <https://plot.ly/>`_ is currently used to generate plots, the model
- includes the type of plot and all the necessary information to render it.
- - output format: html.
- - generated plots are stored in specified directories and linked to .rst files.
-
-
-Report generation
------------------
-
-Report is generated using Sphinx and Read_the_Docs template. PAL generates html
-and pdf formats. It is possible to define the content of the report by
-specifying the version (TODO: define the names and content of versions).
-
-
-The process
-```````````
-
-1. Read the specification.
-2. Read the input data.
-3. Process the input data.
-4. For element (plot, table, file) defined in specification:
-
- a. Get the data needed to construct the element using a filter.
- b. Generate the element.
- c. Store the element.
-
-5. Generate the report.
-6. Store the report (Nexus).
-
-The process is model driven. The elements' models (tables, plots, files
-and report itself) are defined in the specification file. Script reads
-the elements' models from specification file and generates the elements.
-
-It is easy to add elements to be generated in the report. If a new type
-of an element is required, only a new algorithm needs to be implemented
-and integrated.
-
-
-Continuous Performance Measurements and Trending
-------------------------------------------------
-
-Performance analysis and trending execution sequence:
-`````````````````````````````````````````````````````
-
-CSIT PA runs performance analysis, change detection and trending using specified
-trend analysis metrics over the rolling window of last <N> sets of historical
-measurement data. PA is defined as follows:
-
- #. PA job triggers:
-
- #. By PT job at its completion.
- #. Manually from Jenkins UI.
-
- #. Download and parse archived historical data and the new data:
-
- #. New data from latest PT job is evaluated against the rolling window
- of <N> sets of historical data.
- #. Download RF output.xml files and compressed archived data.
- #. Parse out the data filtering test cases listed in PA specification
- (part of CSIT PAL specification file).
-
- #. Calculate trend metrics for the rolling window of <N> sets of historical
- data:
-
- #. Calculate quartiles Q1, Q2, Q3.
- #. Trim outliers using IQR.
- #. Calculate TMA and TMSD.
- #. Calculate normal trending range per test case based on TMA and TMSD.
-
- #. Evaluate new test data against trend metrics:
-
- #. If within the range of (TMA +/- 3*TMSD) => Result = Pass,
- Reason = Normal.
- #. If below the range => Result = Fail, Reason = Regression.
- #. If above the range => Result = Pass, Reason = Progression.
-
- #. Generate and publish results
-
- #. Relay evaluation result to job result.
- #. Generate a new set of trend analysis summary graphs and drill-down
- graphs.
-
- #. Summary graphs to include measured values with Normal,
- Progression and Regression markers. MM shown in the background if
- possible.
- #. Drill-down graphs to include MM, TMA and TMSD.
-
- #. Publish trend analysis graphs in html format on
- https://s3-docs.fd.io/csit/master/trending/.
-
-
-Parameters to specify:
-``````````````````````
-
-*General section - parameters common to all plots:*
-
- - type: "cpta";
- - title: The title of this section;
- - output-file-type: only ".html" is supported;
- - output-file: path where the generated files will be stored.
-
-*Plots section:*
-
- - plot title;
- - output file name;
- - input data for plots;
-
- - job to be monitored - the Jenkins job which results are used as input
- data for this test;
- - builds used for trending plot(s) - specified by a list of build
- numbers or by a range of builds defined by the first and the last
- build number;
-
- - tests to be displayed in the plot defined by a filter;
- - list of parameters to extract from the data;
- - plot layout
-
-*Example:*
-
-::
-
- -
- type: "cpta"
- title: "Continuous Performance Trending and Analysis"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/cpta"
- plots:
-
- - title: "VPP 1T1C L2 64B Packet Throughput - Trending"
- output-file-name: "l2-1t1c-x520"
- data: "plot-performance-trending-vpp"
- filter: "'NIC_Intel-X520-DA2' and 'MRR' and '64B' and ('BASE' or 'SCALE') and '1T1C' and ('L2BDMACSTAT' or 'L2BDMACLRN' or 'L2XCFWD') and not 'VHOST' and not 'MEMIF'"
- parameters:
- - "result"
- layout: "plot-cpta-vpp"
-
- - title: "DPDK 4T4C IMIX MRR Trending"
- output-file-name: "dpdk-imix-4t4c-xl710"
- data: "plot-performance-trending-dpdk"
- filter: "'NIC_Intel-XL710' and 'IMIX' and 'MRR' and '4T4C' and 'DPDK'"
- parameters:
- - "result"
- layout: "plot-cpta-dpdk"
-
-The Dashboard
-`````````````
-
-Performance dashboard tables provide the latest VPP throughput trend, trend
-compliance and detected anomalies, all on a per VPP test case basis.
-The Dashboard is generated as three tables for 1t1c, 2t2c and 4t4c MRR tests.
-
-At first, the .csv tables are generated (only the table for 1t1c is shown):
-
-::
-
- -
- type: "table"
- title: "Performance trending dashboard"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c"
- data: "plot-performance-trending-all"
- filter: "'MRR' and '1T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- ignore-list:
- - "tests.vpp.perf.l2.10ge2p1x520-eth-l2bdscale1mmaclrn-mrr.tc01-64b-1t1c-eth-l2bdscale1mmaclrn-ndrdisc"
- outlier-const: 1.5
- window: 14
- evaluated-window: 14
- long-trend-window: 180
-
-Then, html tables stored inside .rst files are generated:
-
-::
-
- -
- type: "table"
- title: "HTML performance trending dashboard 1t1c"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c.rst"
-
-Root Cause Analysis
--------------------
-
-Root Cause Analysis (RCA) by analysing archived performance results – re-analyse
-available data for specified:
-
- - range of jobs builds,
- - set of specific tests and
- - PASS/FAIL criteria to detect performance change.
-
-In addition, PAL generates trending plots to show performance over the specified
-time interval.
-
-Root Cause Analysis - Option 1: Analysing Archived VPP Results
-``````````````````````````````````````````````````````````````
-
-It can be used to speed-up the process, or when the existing data is sufficient.
-In this case, PAL uses existing data saved in Nexus, searches for performance
-degradations and generates plots to show performance over the specified time
-interval for the selected tests.
-
-Execution Sequence
-''''''''''''''''''
-
- #. Download and parse archived historical data and the new data.
- #. Calculate trend metrics.
- #. Find regression / progression.
- #. Generate and publish results:
-
- #. Summary graphs to include measured values with Progression and
- Regression markers.
- #. List the DUT build(s) where the anomalies were detected.
-
-CSIT PAL Specification
-''''''''''''''''''''''
-
- - What to test:
-
- - first build (Good); specified by the Jenkins job name and the build
- number
- - last build (Bad); specified by the Jenkins job name and the build
- number
- - step (1..n).
-
- - Data:
-
- - tests of interest; list of tests (full name is used) which results are
- used
-
-*Example:*
-
-::
-
- TODO
-
-
-API
----
-
-List of modules, classes, methods and functions
-```````````````````````````````````````````````
-
-::
-
- specification_parser.py
-
- class Specification
-
- Methods:
- read_specification
- set_input_state
- set_input_file_name
-
- Getters:
- specification
- environment
- debug
- is_debug
- input
- builds
- output
- tables
- plots
- files
- static
-
-
- input_data_parser.py
-
- class InputData
-
- Methods:
- read_data
- filter_data
-
- Getters:
- data
- metadata
- suites
- tests
-
-
- environment.py
-
- Functions:
- clean_environment
-
- class Environment
-
- Methods:
- set_environment
-
- Getters:
- environment
-
-
- input_data_files.py
-
- Functions:
- download_data_files
- unzip_files
-
-
- generator_tables.py
-
- Functions:
- generate_tables
-
- Functions implementing algorithms to generate particular types of
- tables (called by the function "generate_tables"):
- table_details
- table_performance_improvements
-
-
- generator_plots.py
-
- Functions:
- generate_plots
-
- Functions implementing algorithms to generate particular types of
- plots (called by the function "generate_plots"):
- plot_performance_box
- plot_latency_box
-
-
- generator_files.py
-
- Functions:
- generate_files
-
- Functions implementing algorithms to generate particular types of
- files (called by the function "generate_files"):
- file_test_results
-
-
- report.py
-
- Functions:
- generate_report
-
- Functions implementing algorithms to generate particular types of
- report (called by the function "generate_report"):
- generate_html_report
- generate_pdf_report
-
- Other functions called by the function "generate_report":
- archive_input_data
- archive_report
-
-
-PAL functional diagram
-``````````````````````
-
-.. only:: latex
-
- .. raw:: latex
-
- \begin{figure}[H]
- \centering
- \graphicspath{{../_tmp/src/csit_framework_documentation/}}
- \includegraphics[width=0.90\textwidth]{pal_func_diagram}
- \label{fig:pal_func_diagram}
- \end{figure}
-
-.. only:: html
-
- .. figure:: pal_func_diagram.svg
- :alt: PAL functional diagram
- :align: center
-
-
-How to add an element
-`````````````````````
-
-Element can be added by adding it's model to the specification file. If
-the element is to be generated by an existing algorithm, only it's
-parameters must be set.
-
-If a brand new type of element needs to be added, also the algorithm
-must be implemented. Element generation algorithms are implemented in
-the files with names starting with "generator" prefix. The name of the
-function implementing the algorithm and the name of algorithm in the
-specification file have to be the same.
diff --git a/resources/tools/presentation/doc/pic/graph-latency.svg b/resources/tools/presentation/doc/pic/graph-latency.svg
deleted file mode 100644
index 2d2eef2ee6..0000000000
--- a/resources/tools/presentation/doc/pic/graph-latency.svg
+++ /dev/null
@@ -1,1127 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.2" width="150mm" height="150mm" viewBox="0 0 15000 15000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
- <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
- <rect x="0" y="0" width="15000" height="15000"/>
- </clipPath>
- <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
- <rect x="15" y="15" width="14970" height="14970"/>
- </clipPath>
- </defs>
- <defs>
- <font id="EmbeddedFont_1" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="y" horiz-adv-x="1086" d="M 659,-104 C 607,-237 556,-324 507,-365 458,-406 392,-426 309,-426 L 162,-426 162,-272 270,-272 C 321,-272 360,-260 388,-236 416,-212 447,-155 481,-66 L 514,18 61,1120 256,1120 606,244 956,1120 1151,1120 659,-104 Z"/>
- <glyph unicode="x" horiz-adv-x="1086" d="M 1124,1120 L 719,575 1145,0 928,0 602,440 276,0 59,0 494,586 96,1120 313,1120 610,721 907,1120 1124,1120 Z"/>
- <glyph unicode="w" horiz-adv-x="1510" d="M 86,1120 L 270,1120 500,246 729,1120 946,1120 1176,246 1405,1120 1589,1120 1296,0 1079,0 838,918 596,0 379,0 86,1120 Z"/>
- <glyph unicode="u" horiz-adv-x="927" d="M 174,442 L 174,1120 358,1120 358,449 C 358,343 379,264 420,211 461,158 523,131 606,131 705,131 784,163 842,226 899,289 928,376 928,485 L 928,1120 1112,1120 1112,0 928,0 928,172 C 883,104 832,54 773,21 714,-12 645,-29 567,-29 438,-29 341,11 274,91 207,171 174,288 174,442 Z "/>
- <glyph unicode="t" horiz-adv-x="689" d="M 375,1438 L 375,1120 754,1120 754,977 375,977 375,369 C 375,278 388,219 413,193 438,167 488,154 565,154 L 754,154 754,0 565,0 C 423,0 325,27 271,80 217,133 190,229 190,369 L 190,977 55,977 55,1120 190,1120 190,1438 375,1438 Z"/>
- <glyph unicode="s" horiz-adv-x="848" d="M 907,1087 L 907,913 C 855,940 801,960 745,973 689,986 631,993 571,993 480,993 411,979 366,951 320,923 297,881 297,825 297,782 313,749 346,725 379,700 444,677 543,655 L 606,641 C 737,613 830,574 885,523 940,472 967,400 967,309 967,205 926,123 844,62 761,1 648,-29 504,-29 444,-29 382,-23 317,-12 252,0 183,18 111,41 L 111,231 C 179,196 246,169 312,152 378,134 443,125 508,125 595,125 661,140 708,170 755,199 778,241 778,295 778,345 761,383 728,410 694,437 620,462 506,487 L 442,502 C 328,526 246,563 195,613 144,662 119,730 119,817 119,922 156,1004 231,1061 306,1118 412,1147 549,1147 617,1147 681,1142 741,1132 801,1122 856,1107 907,1087 Z"/>
- <glyph unicode="r" horiz-adv-x="663" d="M 842,948 C 821,960 799,969 775,975 750,980 723,983 694,983 590,983 510,949 455,882 399,814 371,717 371,590 L 371,0 186,0 186,1120 371,1120 371,946 C 410,1014 460,1065 522,1098 584,1131 659,1147 748,1147 761,1147 775,1146 790,1145 805,1143 822,1140 841,1137 L 842,948 Z"/>
- <glyph unicode="p" horiz-adv-x="1007" d="M 371,168 L 371,-426 186,-426 186,1120 371,1120 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 Z M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z"/>
- <glyph unicode="o" horiz-adv-x="1033" d="M 627,991 C 528,991 450,953 393,876 336,799 307,693 307,559 307,425 336,320 393,243 450,166 528,127 627,127 725,127 803,166 860,243 917,320 946,426 946,559 946,692 917,797 860,875 803,952 725,991 627,991 Z M 627,1147 C 787,1147 913,1095 1004,991 1095,887 1141,743 1141,559 1141,376 1095,232 1004,128 913,23 787,-29 627,-29 466,-29 341,23 250,128 159,232 113,376 113,559 113,743 159,887 250,991 341,1095 466,1147 627,1147 Z"/>
- <glyph unicode="n" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="m" horiz-adv-x="1615" d="M 1065,905 C 1111,988 1166,1049 1230,1088 1294,1127 1369,1147 1456,1147 1573,1147 1663,1106 1726,1025 1789,943 1821,827 1821,676 L 1821,0 1636,0 1636,670 C 1636,777 1617,857 1579,909 1541,961 1483,987 1405,987 1310,987 1234,955 1179,892 1124,829 1096,742 1096,633 L 1096,0 911,0 911,670 C 911,778 892,858 854,910 816,961 757,987 678,987 584,987 509,955 454,892 399,828 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 413,1015 463,1065 522,1098 581,1131 650,1147 731,1147 812,1147 882,1126 939,1085 996,1044 1038,984 1065,905 Z"/>
- <glyph unicode="l" horiz-adv-x="186" d="M 193,1556 L 377,1556 377,0 193,0 193,1556 Z"/>
- <glyph unicode="k" horiz-adv-x="980" d="M 186,1556 L 371,1556 371,637 920,1120 1155,1120 561,596 1180,0 940,0 371,547 371,0 186,0 186,1556 Z"/>
- <glyph unicode="i" horiz-adv-x="186" d="M 193,1120 L 377,1120 377,0 193,0 193,1120 Z M 193,1556 L 377,1556 377,1323 193,1323 193,1556 Z"/>
- <glyph unicode="h" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1556 371,1556 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="e" horiz-adv-x="1033" d="M 1151,606 L 1151,516 305,516 C 313,389 351,293 420,227 488,160 583,127 705,127 776,127 844,136 911,153 977,170 1043,196 1108,231 L 1108,57 C 1042,29 974,8 905,-7 836,-22 765,-29 694,-29 515,-29 374,23 270,127 165,231 113,372 113,549 113,732 163,878 262,986 361,1093 494,1147 662,1147 813,1147 932,1099 1020,1002 1107,905 1151,773 1151,606 Z M 967,659 C 966,760 938,841 883,901 828,961 755,991 664,991 561,991 479,962 418,904 356,846 320,764 311,659 L 967,659 Z"/>
- <glyph unicode="d" horiz-adv-x="1006" d="M 930,950 L 930,1556 1114,1556 1114,0 930,0 930,168 C 891,101 843,52 784,20 725,-13 654,-29 571,-29 436,-29 326,25 241,133 156,241 113,383 113,559 113,735 156,877 241,985 326,1093 436,1147 571,1147 654,1147 725,1131 784,1099 843,1066 891,1017 930,950 Z M 303,559 C 303,424 331,318 387,241 442,164 519,125 616,125 713,125 790,164 846,241 902,318 930,424 930,559 930,694 902,801 846,878 790,955 713,993 616,993 519,993 442,955 387,878 331,801 303,694 303,559 Z"/>
- <glyph unicode="c" horiz-adv-x="874" d="M 999,1077 L 999,905 C 947,934 895,955 843,970 790,984 737,991 684,991 565,991 472,953 406,878 340,802 307,696 307,559 307,422 340,316 406,241 472,165 565,127 684,127 737,127 790,134 843,149 895,163 947,184 999,213 L 999,43 C 948,19 895,1 840,-11 785,-23 726,-29 664,-29 495,-29 361,24 262,130 163,236 113,379 113,559 113,742 163,885 264,990 364,1095 501,1147 676,1147 733,1147 788,1141 842,1130 896,1118 948,1100 999,1077 Z"/>
- <glyph unicode="b" horiz-adv-x="1007" d="M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z M 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 L 371,0 186,0 186,1556 371,1556 371,950 Z"/>
- <glyph unicode="a" horiz-adv-x="953" d="M 702,563 C 553,563 450,546 393,512 336,478 307,420 307,338 307,273 329,221 372,183 415,144 473,125 547,125 649,125 731,161 793,234 854,306 885,402 885,522 L 885,563 702,563 Z M 1069,639 L 1069,0 885,0 885,170 C 843,102 791,52 728,20 665,-13 589,-29 498,-29 383,-29 292,3 225,68 157,132 123,218 123,326 123,452 165,547 250,611 334,675 460,707 627,707 L 885,707 885,725 C 885,810 857,875 802,922 746,968 668,991 567,991 503,991 441,983 380,968 319,953 261,930 205,899 L 205,1069 C 272,1095 338,1115 401,1128 464,1141 526,1147 586,1147 748,1147 869,1105 949,1021 1029,937 1069,810 1069,639 Z"/>
- <glyph unicode="]" horiz-adv-x="425" d="M 623,1556 L 623,-270 199,-270 199,-127 438,-127 438,1413 199,1413 199,1556 623,1556 Z"/>
- <glyph unicode="[" horiz-adv-x="425" d="M 176,1556 L 600,1556 600,1413 360,1413 360,-127 600,-127 600,-270 176,-270 176,1556 Z"/>
- <glyph unicode="W" horiz-adv-x="1880" d="M 68,1493 L 272,1493 586,231 899,1493 1126,1493 1440,231 1753,1493 1958,1493 1583,0 1329,0 1014,1296 696,0 442,0 68,1493 Z"/>
- <glyph unicode="S" horiz-adv-x="1060" d="M 1096,1444 L 1096,1247 C 1019,1284 947,1311 879,1329 811,1347 745,1356 682,1356 572,1356 487,1335 428,1292 368,1249 338,1189 338,1110 338,1044 358,994 398,961 437,927 512,900 623,879 L 745,854 C 896,825 1007,775 1079,703 1150,630 1186,533 1186,412 1186,267 1138,158 1041,83 944,8 801,-29 614,-29 543,-29 468,-21 389,-5 309,11 226,35 141,66 L 141,274 C 223,228 303,193 382,170 461,147 538,135 614,135 729,135 818,158 881,203 944,248 975,313 975,397 975,470 953,528 908,569 863,610 789,641 686,662 L 563,686 C 412,716 303,763 236,827 169,891 135,980 135,1094 135,1226 182,1330 275,1406 368,1482 496,1520 659,1520 729,1520 800,1514 873,1501 946,1488 1020,1469 1096,1444 Z"/>
- <glyph unicode="P" horiz-adv-x="954" d="M 403,1327 L 403,766 657,766 C 751,766 824,790 875,839 926,888 952,957 952,1047 952,1136 926,1205 875,1254 824,1303 751,1327 657,1327 L 403,1327 Z M 201,1493 L 657,1493 C 824,1493 951,1455 1037,1380 1122,1304 1165,1193 1165,1047 1165,900 1122,788 1037,713 951,638 824,600 657,600 L 403,600 403,0 201,0 201,1493 Z"/>
- <glyph unicode="L" horiz-adv-x="927" d="M 201,1493 L 403,1493 403,170 1130,170 1130,0 201,0 201,1493 Z"/>
- <glyph unicode="E" horiz-adv-x="954" d="M 201,1493 L 1145,1493 1145,1323 403,1323 403,881 1114,881 1114,711 403,711 403,170 1163,170 1163,0 201,0 201,1493 Z"/>
- <glyph unicode="D" horiz-adv-x="1245" d="M 403,1327 L 403,166 647,166 C 853,166 1004,213 1100,306 1195,399 1243,547 1243,748 1243,948 1195,1095 1100,1188 1004,1281 853,1327 647,1327 L 403,1327 Z M 201,1493 L 616,1493 C 905,1493 1118,1433 1253,1313 1388,1192 1456,1004 1456,748 1456,491 1388,302 1252,181 1116,60 904,0 616,0 L 201,0 201,1493 Z"/>
- <glyph unicode="7" horiz-adv-x="953" d="M 168,1493 L 1128,1493 1128,1407 586,0 375,0 885,1323 168,1323 168,1493 Z"/>
- <glyph unicode="6" horiz-adv-x="1033" d="M 676,827 C 585,827 514,796 461,734 408,672 381,587 381,479 381,372 408,287 461,225 514,162 585,131 676,131 767,131 839,162 892,225 945,287 971,372 971,479 971,587 945,672 892,734 839,796 767,827 676,827 Z M 1077,1460 L 1077,1276 C 1026,1300 975,1318 924,1331 872,1344 821,1350 770,1350 637,1350 535,1305 465,1215 394,1125 354,989 344,807 383,865 433,910 492,941 551,972 617,987 688,987 838,987 957,942 1044,851 1131,760 1174,636 1174,479 1174,326 1129,203 1038,110 947,17 827,-29 676,-29 503,-29 371,37 280,170 189,302 143,494 143,745 143,981 199,1169 311,1310 423,1450 573,1520 762,1520 813,1520 864,1515 916,1505 967,1495 1021,1480 1077,1460 Z"/>
- <glyph unicode="5" horiz-adv-x="953" d="M 221,1493 L 1014,1493 1014,1323 406,1323 406,957 C 435,967 465,975 494,980 523,985 553,987 582,987 749,987 881,941 978,850 1075,759 1124,635 1124,479 1124,318 1074,194 974,105 874,16 733,-29 551,-29 488,-29 425,-24 360,-13 295,-2 227,14 158,35 L 158,238 C 218,205 280,181 344,165 408,149 476,141 547,141 662,141 754,171 821,232 888,293 922,375 922,479 922,583 888,665 821,726 754,787 662,817 547,817 493,817 439,811 386,799 332,787 277,768 221,743 L 221,1493 Z"/>
- <glyph unicode="4" horiz-adv-x="1086" d="M 774,1317 L 264,520 774,520 774,1317 Z M 721,1493 L 975,1493 975,520 1188,520 1188,352 975,352 975,0 774,0 774,352 100,352 100,547 721,1493 Z"/>
- <glyph unicode="3" horiz-adv-x="980" d="M 831,805 C 928,784 1003,741 1058,676 1112,611 1139,530 1139,434 1139,287 1088,173 987,92 886,11 742,-29 555,-29 492,-29 428,-23 362,-11 295,2 227,20 156,45 L 156,240 C 212,207 273,183 340,166 407,149 476,141 549,141 676,141 772,166 839,216 905,266 938,339 938,434 938,522 907,591 846,641 784,690 698,715 588,715 L 414,715 414,881 596,881 C 695,881 771,901 824,941 877,980 903,1037 903,1112 903,1189 876,1248 822,1289 767,1330 689,1350 588,1350 533,1350 473,1344 410,1332 347,1320 277,1301 201,1276 L 201,1456 C 278,1477 350,1493 417,1504 484,1515 547,1520 606,1520 759,1520 881,1485 970,1416 1059,1346 1104,1252 1104,1133 1104,1050 1080,981 1033,924 986,867 918,827 831,805 Z"/>
- <glyph unicode="2" horiz-adv-x="953" d="M 393,170 L 1098,170 1098,0 150,0 150,170 C 227,249 331,356 464,490 596,623 679,709 713,748 778,821 823,882 849,933 874,983 887,1032 887,1081 887,1160 859,1225 804,1275 748,1325 675,1350 586,1350 523,1350 456,1339 386,1317 315,1295 240,1262 160,1217 L 160,1421 C 241,1454 317,1478 388,1495 459,1512 523,1520 582,1520 737,1520 860,1481 952,1404 1044,1327 1090,1223 1090,1094 1090,1033 1079,975 1056,920 1033,865 991,800 930,725 913,706 860,650 771,558 682,465 556,336 393,170 Z"/>
- <glyph unicode="1" horiz-adv-x="900" d="M 254,170 L 584,170 584,1309 225,1237 225,1421 582,1493 784,1493 784,170 1114,170 1114,0 254,0 254,170 Z"/>
- <glyph unicode="0" horiz-adv-x="1033" d="M 651,1360 C 547,1360 469,1309 417,1207 364,1104 338,950 338,745 338,540 364,387 417,285 469,182 547,131 651,131 756,131 834,182 887,285 939,387 965,540 965,745 965,950 939,1104 887,1207 834,1309 756,1360 651,1360 Z M 651,1520 C 818,1520 946,1454 1035,1322 1123,1189 1167,997 1167,745 1167,494 1123,302 1035,170 946,37 818,-29 651,-29 484,-29 356,37 268,170 179,302 135,494 135,745 135,997 179,1189 268,1322 356,1454 484,1520 651,1520 Z"/>
- <glyph unicode="." horiz-adv-x="213" d="M 219,254 L 430,254 430,0 219,0 219,254 Z"/>
- <glyph unicode="-" horiz-adv-x="530" d="M 100,643 L 639,643 639,479 100,479 100,643 Z"/>
- <glyph unicode=" " horiz-adv-x="635"/>
- </font>
- </defs>
- <defs>
- <font id="EmbeddedFont_2" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="bold" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="y" horiz-adv-x="1271" d="M 25,1120 L 383,1120 684,360 940,1120 1298,1120 827,-106 C 780,-231 725,-318 662,-368 599,-417 515,-442 412,-442 L 205,-442 205,-207 317,-207 C 378,-207 422,-197 450,-178 477,-159 499,-124 514,-74 L 524,-43 25,1120 Z"/>
- <glyph unicode="t" horiz-adv-x="901" d="M 563,1438 L 563,1120 932,1120 932,864 563,864 563,389 C 563,337 573,302 594,284 615,265 656,256 717,256 L 901,256 901,0 594,0 C 453,0 353,30 294,89 235,148 205,248 205,389 L 205,864 27,864 27,1120 205,1120 205,1438 563,1438 Z"/>
- <glyph unicode="n" horiz-adv-x="1112" d="M 1298,682 L 1298,0 938,0 938,111 938,522 C 938,619 936,685 932,722 927,759 920,786 909,803 895,826 876,845 852,858 828,871 801,877 770,877 695,877 637,848 594,791 551,733 530,653 530,551 L 530,0 172,0 172,1120 530,1120 530,956 C 584,1021 641,1070 702,1101 763,1132 830,1147 903,1147 1032,1147 1131,1107 1198,1028 1265,949 1298,833 1298,682 Z"/>
- <glyph unicode="k" horiz-adv-x="1218" d="M 172,1556 L 530,1556 530,709 942,1120 1358,1120 811,606 1401,0 967,0 530,467 530,0 172,0 172,1556 Z"/>
- <glyph unicode="e" horiz-adv-x="1192" d="M 1290,563 L 1290,461 453,461 C 462,377 492,314 544,272 596,230 669,209 762,209 837,209 915,220 994,243 1073,265 1154,299 1237,344 L 1237,68 C 1152,36 1068,12 983,-5 898,-21 814,-29 729,-29 526,-29 369,23 257,126 144,229 88,373 88,559 88,742 143,885 254,990 364,1095 516,1147 709,1147 885,1147 1026,1094 1132,988 1237,882 1290,740 1290,563 Z M 922,682 C 922,750 902,805 863,847 823,888 771,909 707,909 638,909 581,890 538,851 495,812 468,755 457,682 L 922,682 Z"/>
- <glyph unicode="c" horiz-adv-x="980" d="M 1077,1085 L 1077,793 C 1028,826 980,851 931,867 882,883 831,891 778,891 678,891 600,862 545,804 489,745 461,664 461,559 461,454 489,373 545,315 600,256 678,227 778,227 834,227 887,235 938,252 988,269 1034,293 1077,326 L 1077,33 C 1021,12 964,-3 907,-14 849,-24 791,-29 733,-29 531,-29 373,23 259,127 145,230 88,374 88,559 88,744 145,888 259,992 373,1095 531,1147 733,1147 792,1147 850,1142 907,1132 964,1121 1020,1106 1077,1085 Z"/>
- <glyph unicode="a" horiz-adv-x="1139" d="M 674,504 C 599,504 543,491 506,466 468,441 449,403 449,354 449,309 464,273 495,248 525,222 567,209 621,209 688,209 745,233 791,282 837,330 860,390 860,463 L 860,504 674,504 Z M 1221,639 L 1221,0 860,0 860,166 C 812,98 758,49 698,18 638,-13 565,-29 479,-29 363,-29 269,5 197,73 124,140 88,228 88,336 88,467 133,564 224,625 314,686 456,717 649,717 L 860,717 860,745 C 860,802 838,843 793,870 748,896 679,909 584,909 507,909 436,901 370,886 304,871 243,848 186,817 L 186,1090 C 263,1109 340,1123 417,1133 494,1142 572,1147 649,1147 851,1147 997,1107 1087,1028 1176,948 1221,818 1221,639 Z"/>
- <glyph unicode="P" horiz-adv-x="1218" d="M 188,1493 L 827,1493 C 1017,1493 1163,1451 1265,1367 1366,1282 1417,1162 1417,1006 1417,849 1366,729 1265,645 1163,560 1017,518 827,518 L 573,518 573,0 188,0 188,1493 Z M 573,1214 L 573,797 786,797 C 861,797 918,815 959,852 1000,888 1020,939 1020,1006 1020,1073 1000,1124 959,1160 918,1196 861,1214 786,1214 L 573,1214 Z"/>
- <glyph unicode="L" horiz-adv-x="1060" d="M 188,1493 L 573,1493 573,291 1249,291 1249,0 188,0 188,1493 Z"/>
- <glyph unicode=":" horiz-adv-x="345" d="M 229,1120 L 590,1120 590,733 229,733 229,1120 Z M 229,387 L 590,387 590,0 229,0 229,387 Z"/>
- <glyph unicode=" " horiz-adv-x="714"/>
- </font>
- </defs>
- <defs class="TextShapeIndex">
- <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49 id50 id51 id52 id53 id54 id55 id56 id57 id58 id59 id60 id61 id62 id63 id64 id65 id66 id67 id68 id69 id70 id71 id72 id73 id74 id75 id76 id77 id78 id79 id80 id81 id82 id83 id84 id85 id86 id87 id88 id89 id90 id91 id92 id93 id94 id95 id96 id97 id98 id99 id100 id101 id102 id103 id104 id105 id106 id107 id108 id109 id110 id111 id112 id113 id114 id115 id116 id117 id118 id119 id120 id121 id122 id123 id124 id125 id126 id127 id128 id129 id130 id131 id132 id133 id134 id135 id136 id137 id138 id139 id140 id141 id142 id143 id144 id145 id146 id147 id148 id149 id150 id151 id152 id153 id154 id155 id156 id157 id158 id159 id160 id161 id162 id163 id164 id165 id166 id167 id168 id169 id170 id171 id172 id173 id174 id175 id176"/>
- </defs>
- <defs class="EmbeddedBulletChars">
- <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
- </g>
- <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
- </g>
- <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
- </g>
- <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
- </g>
- <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
- </g>
- <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
- </g>
- <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
- </g>
- <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
- </g>
- <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
- </g>
- <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
- </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
- <g id="id2" class="Master_Slide">
- <g id="bg-id2" class="Background"/>
- <g id="bo-id2" class="BackgroundObjects"/>
- </g>
- </g>
- <g class="SlideGroup">
- <g>
- <g id="container-id1">
- <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
- <g class="Page">
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id3">
- <rect class="BoundingBox" stroke="none" fill="none" x="2141" y="12815" width="30295" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id4">
- <rect class="BoundingBox" stroke="none" fill="none" x="7189" y="12815" width="30294" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id5">
- <rect class="BoundingBox" stroke="none" fill="none" x="2141" y="13299" width="30295" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id6">
- <rect class="BoundingBox" stroke="none" fill="none" x="7189" y="13299" width="30294" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id7">
- <rect class="BoundingBox" stroke="none" fill="none" x="2141" y="13783" width="30295" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id8">
- <rect class="BoundingBox" stroke="none" fill="none" x="7189" y="13783" width="30294" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id9">
- <rect class="BoundingBox" stroke="none" fill="none" x="416" y="416" width="14233" height="14233"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 416,416 L 14648,416 14648,14648 416,14648 416,416 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id10">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="1432" width="12403" height="10167"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 2042,1432 L 14444,1432 14444,11598 2042,11598 2042,1432 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id11">
- <rect class="BoundingBox" stroke="none" fill="none" x="2789" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id12">
- <rect class="BoundingBox" stroke="none" fill="none" x="2779" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2789,1432 L 2789,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id13">
- <rect class="BoundingBox" stroke="none" fill="none" x="3781" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id14">
- <rect class="BoundingBox" stroke="none" fill="none" x="3771" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 3781,1432 L 3781,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id15">
- <rect class="BoundingBox" stroke="none" fill="none" x="4772" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id16">
- <rect class="BoundingBox" stroke="none" fill="none" x="4762" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 4772,1432 L 4772,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id17">
- <rect class="BoundingBox" stroke="none" fill="none" x="5764" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id18">
- <rect class="BoundingBox" stroke="none" fill="none" x="5754" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 5764,1432 L 5764,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id19">
- <rect class="BoundingBox" stroke="none" fill="none" x="6755" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id20">
- <rect class="BoundingBox" stroke="none" fill="none" x="6745" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 6755,1432 L 6755,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id21">
- <rect class="BoundingBox" stroke="none" fill="none" x="7747" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id22">
- <rect class="BoundingBox" stroke="none" fill="none" x="7737" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 7747,1432 L 7747,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id23">
- <rect class="BoundingBox" stroke="none" fill="none" x="8739" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id24">
- <rect class="BoundingBox" stroke="none" fill="none" x="8729" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 8739,1432 L 8739,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id25">
- <rect class="BoundingBox" stroke="none" fill="none" x="9730" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id26">
- <rect class="BoundingBox" stroke="none" fill="none" x="9720" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 9730,1432 L 9730,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id27">
- <rect class="BoundingBox" stroke="none" fill="none" x="10722" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id28">
- <rect class="BoundingBox" stroke="none" fill="none" x="10712" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 10722,1432 L 10722,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id29">
- <rect class="BoundingBox" stroke="none" fill="none" x="11713" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id30">
- <rect class="BoundingBox" stroke="none" fill="none" x="11703" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 11713,1432 L 11713,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id31">
- <rect class="BoundingBox" stroke="none" fill="none" x="12705" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id32">
- <rect class="BoundingBox" stroke="none" fill="none" x="12695" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 12705,1432 L 12705,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id33">
- <rect class="BoundingBox" stroke="none" fill="none" x="13696" y="1432" width="1" height="10166"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id34">
- <rect class="BoundingBox" stroke="none" fill="none" x="13686" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 13696,1432 L 13696,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id35">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="10058" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id36">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="10048" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,10058 L 14443,10058"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id37">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="8519" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id38">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="8509" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,8519 L 14443,8519"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id39">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="6980" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id40">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="6970" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,6980 L 14443,6980"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id41">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="5440" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id42">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="5430" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,5440 L 14443,5440"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id43">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="3901" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id44">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="3891" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,3901 L 14443,3901"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id45">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="2362" width="12402" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id46">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="2352" width="12402" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,2362 L 14443,2362"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id47">
- <rect class="BoundingBox" stroke="none" fill="none" x="2708" y="8786" width="164" height="2641"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 2708,8786 L 2871,8786 2708,8786 Z M 2790,8786 L 2790,11425 2790,8786 Z M 2708,11425 L 2871,11425 2708,11425 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id48">
- <rect class="BoundingBox" stroke="none" fill="none" x="2708" y="8766" width="164" height="2681"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2708,8786 L 2871,8786"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2790,8786 L 2790,11425"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2708,11425 L 2871,11425"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id49">
- <rect class="BoundingBox" stroke="none" fill="none" x="2688" y="10330" width="205" height="205"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 2892,10432 C 2892,10488 2846,10534 2789,10534 2733,10534 2688,10488 2688,10432 2688,10376 2733,10330 2789,10330 2846,10330 2892,10376 2892,10432 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id50">
- <rect class="BoundingBox" stroke="none" fill="none" x="3699" y="8842" width="165" height="2584"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 3699,8842 L 3863,8842 3699,8842 Z M 3782,8842 L 3782,11425 3782,8842 Z M 3699,11425 L 3863,11425 3699,11425 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id51">
- <rect class="BoundingBox" stroke="none" fill="none" x="3699" y="8822" width="165" height="2624"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3699,8842 L 3863,8842"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3782,8842 L 3782,11425"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3699,11425 L 3863,11425"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id52">
- <rect class="BoundingBox" stroke="none" fill="none" x="3679" y="10281" width="205" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 3883,10384 C 3883,10440 3837,10486 3781,10486 3725,10486 3679,10440 3679,10384 3679,10327 3725,10281 3781,10281 3837,10281 3883,10327 3883,10384 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id53">
- <rect class="BoundingBox" stroke="none" fill="none" x="4691" y="5527" width="165" height="5857"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 4691,5527 L 4855,5527 4691,5527 Z M 4772,5527 L 4772,11383 4772,5527 Z M 4691,11383 L 4855,11383 4691,11383 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id54">
- <rect class="BoundingBox" stroke="none" fill="none" x="4691" y="5507" width="165" height="5897"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4691,5527 L 4855,5527"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4772,5527 L 4772,11383"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4691,11383 L 4855,11383"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id55">
- <rect class="BoundingBox" stroke="none" fill="none" x="4671" y="10038" width="205" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 4875,10140 C 4875,10197 4829,10242 4772,10242 4716,10242 4671,10197 4671,10140 4671,10083 4716,10038 4772,10038 4829,10038 4875,10083 4875,10140 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id56">
- <rect class="BoundingBox" stroke="none" fill="none" x="5683" y="5521" width="164" height="5817"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 5683,5521 L 5846,5521 5683,5521 Z M 5764,5521 L 5764,11337 5764,5521 Z M 5683,11337 L 5846,11337 5683,11337 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id57">
- <rect class="BoundingBox" stroke="none" fill="none" x="5683" y="5501" width="164" height="5857"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5683,5521 L 5846,5521"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5764,5521 L 5764,11337"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5683,11337 L 5846,11337"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id58">
- <rect class="BoundingBox" stroke="none" fill="none" x="5662" y="10021" width="206" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 5867,10123 C 5867,10180 5821,10225 5765,10225 5709,10225 5662,10180 5662,10123 5662,10067 5709,10021 5765,10021 5821,10021 5867,10067 5867,10123 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id59">
- <rect class="BoundingBox" stroke="none" fill="none" x="6674" y="4799" width="165" height="6508"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 6674,4799 L 6838,4799 6674,4799 Z M 6755,4799 L 6755,11306 6755,4799 Z M 6674,11306 L 6838,11306 6674,11306 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id60">
- <rect class="BoundingBox" stroke="none" fill="none" x="6674" y="4779" width="165" height="6548"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6674,4799 L 6838,4799"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6755,4799 L 6755,11306"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6674,11306 L 6838,11306"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id61">
- <rect class="BoundingBox" stroke="none" fill="none" x="6654" y="9527" width="205" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 6858,9630 C 6858,9686 6813,9731 6756,9731 6699,9731 6654,9686 6654,9630 6654,9574 6699,9527 6756,9527 6813,9527 6858,9574 6858,9630 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id62">
- <rect class="BoundingBox" stroke="none" fill="none" x="7666" y="4688" width="164" height="6650"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 7666,4688 L 7829,4688 7666,4688 Z M 7747,4688 L 7747,11337 7747,4688 Z M 7666,11337 L 7829,11337 7666,11337 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id63">
- <rect class="BoundingBox" stroke="none" fill="none" x="7666" y="4668" width="164" height="6690"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7666,4688 L 7829,4688"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7747,4688 L 7747,11337"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7666,11337 L 7829,11337"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id64">
- <rect class="BoundingBox" stroke="none" fill="none" x="7645" y="9461" width="206" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 7850,9563 C 7850,9620 7804,9665 7748,9665 7691,9665 7645,9620 7645,9563 7645,9506 7691,9461 7748,9461 7804,9461 7850,9506 7850,9563 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id65">
- <rect class="BoundingBox" stroke="none" fill="none" x="8657" y="5952" width="165" height="5305"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 8657,5952 L 8821,5952 8657,5952 Z M 8740,5952 L 8740,11256 8740,5952 Z M 8657,11256 L 8821,11256 8657,11256 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id66">
- <rect class="BoundingBox" stroke="none" fill="none" x="8657" y="5932" width="165" height="5345"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8657,5952 L 8821,5952"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8740,5952 L 8740,11256"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8657,11256 L 8821,11256"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id67">
- <rect class="BoundingBox" stroke="none" fill="none" x="8637" y="8552" width="205" height="206"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 8841,8654 C 8841,8710 8796,8757 8740,8757 8682,8757 8637,8710 8637,8654 8637,8598 8682,8552 8740,8552 8796,8552 8841,8598 8841,8654 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id68">
- <rect class="BoundingBox" stroke="none" fill="none" x="9649" y="5652" width="164" height="5657"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 9649,5652 L 9812,5652 9649,5652 Z M 9731,5652 L 9731,11308 9731,5652 Z M 9649,11308 L 9812,11308 9649,11308 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id69">
- <rect class="BoundingBox" stroke="none" fill="none" x="9649" y="5632" width="164" height="5697"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9649,5652 L 9812,5652"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9731,5652 L 9731,11308"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9649,11308 L 9812,11308"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id70">
- <rect class="BoundingBox" stroke="none" fill="none" x="9628" y="8451" width="206" height="206"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 9833,8554 C 9833,8610 9787,8656 9730,8656 9674,8656 9628,8610 9628,8554 9628,8497 9674,8451 9730,8451 9787,8451 9833,8497 9833,8554 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id71">
- <rect class="BoundingBox" stroke="none" fill="none" x="10640" y="2110" width="165" height="9228"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 10640,2110 L 10804,2110 10640,2110 Z M 10723,2110 L 10723,11337 10723,2110 Z M 10640,11337 L 10804,11337 10640,11337 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id72">
- <rect class="BoundingBox" stroke="none" fill="none" x="10640" y="2090" width="165" height="9268"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10640,2110 L 10804,2110"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10723,2110 L 10723,11337"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10640,11337 L 10804,11337"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id73">
- <rect class="BoundingBox" stroke="none" fill="none" x="10620" y="8768" width="205" height="205"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 10824,8870 C 10824,8926 10779,8972 10722,8972 10665,8972 10620,8926 10620,8870 10620,8814 10665,8768 10722,8768 10779,8768 10824,8814 10824,8870 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id74">
- <rect class="BoundingBox" stroke="none" fill="none" x="11632" y="1940" width="164" height="9382"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 11632,1940 L 11795,1940 11632,1940 Z M 11714,1940 L 11714,11321 11714,1940 Z M 11632,11321 L 11795,11321 11632,11321 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id75">
- <rect class="BoundingBox" stroke="none" fill="none" x="11632" y="1920" width="164" height="9422"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 11632,1940 L 11795,1940"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 11714,1940 L 11714,11321"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 11632,11321 L 11795,11321"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id76">
- <rect class="BoundingBox" stroke="none" fill="none" x="11611" y="8730" width="206" height="205"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 11816,8832 C 11816,8888 11769,8934 11713,8934 11657,8934 11611,8888 11611,8832 11611,8776 11657,8730 11713,8730 11769,8730 11816,8776 11816,8832 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id77">
- <rect class="BoundingBox" stroke="none" fill="none" x="12623" y="2957" width="165" height="8369"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 12623,2957 L 12787,2957 12623,2957 Z M 12705,2957 L 12705,11325 12705,2957 Z M 12623,11325 L 12787,11325 12623,11325 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id78">
- <rect class="BoundingBox" stroke="none" fill="none" x="12623" y="2937" width="165" height="8409"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12623,2957 L 12787,2957"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12705,2957 L 12705,11325"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12623,11325 L 12787,11325"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id79">
- <rect class="BoundingBox" stroke="none" fill="none" x="12602" y="8340" width="206" height="206"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 12807,8442 C 12807,8498 12761,8545 12705,8545 12649,8545 12603,8498 12603,8442 12603,8386 12649,8340 12705,8340 12761,8340 12807,8386 12807,8442 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id80">
- <rect class="BoundingBox" stroke="none" fill="none" x="13615" y="3018" width="165" height="8291"/>
- <path fill="rgb(0,0,0)" stroke="none" d="M 13615,3019 L 13779,3019 13615,3019 Z M 13696,3019 L 13696,11308 13696,3019 Z M 13615,11308 L 13779,11308 13615,11308 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id81">
- <rect class="BoundingBox" stroke="none" fill="none" x="13615" y="2998" width="165" height="8331"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 13615,3019 L 13779,3019"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 13696,3019 L 13696,11308"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 13615,11308 L 13779,11308"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id82">
- <rect class="BoundingBox" stroke="none" fill="none" x="13595" y="8318" width="205" height="205"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 13799,8421 C 13799,8477 13753,8522 13697,8522 13641,8522 13595,8477 13595,8421 13595,8364 13641,8318 13697,8318 13753,8318 13799,8364 13799,8421 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id83">
- <rect class="BoundingBox" stroke="none" fill="none" x="2022" y="11597" width="12422" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,11607 L 14443,11607"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id84">
- <rect class="BoundingBox" stroke="none" fill="none" x="2022" y="1432" width="21" height="10166"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2032,1432 L 2032,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id85">
- <rect class="BoundingBox" stroke="none" fill="none" x="2789" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id86">
- <rect class="BoundingBox" stroke="none" fill="none" x="2779" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2789,11618 L 2789,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id87">
- <rect class="BoundingBox" stroke="none" fill="none" x="3781" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id88">
- <rect class="BoundingBox" stroke="none" fill="none" x="3771" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 3781,11618 L 3781,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id89">
- <rect class="BoundingBox" stroke="none" fill="none" x="4772" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id90">
- <rect class="BoundingBox" stroke="none" fill="none" x="4762" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 4772,11618 L 4772,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id91">
- <rect class="BoundingBox" stroke="none" fill="none" x="5764" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id92">
- <rect class="BoundingBox" stroke="none" fill="none" x="5754" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 5764,11618 L 5764,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id93">
- <rect class="BoundingBox" stroke="none" fill="none" x="6755" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id94">
- <rect class="BoundingBox" stroke="none" fill="none" x="6745" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 6755,11618 L 6755,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id95">
- <rect class="BoundingBox" stroke="none" fill="none" x="7747" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id96">
- <rect class="BoundingBox" stroke="none" fill="none" x="7737" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 7747,11618 L 7747,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id97">
- <rect class="BoundingBox" stroke="none" fill="none" x="8739" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id98">
- <rect class="BoundingBox" stroke="none" fill="none" x="8729" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 8739,11618 L 8739,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id99">
- <rect class="BoundingBox" stroke="none" fill="none" x="9730" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id100">
- <rect class="BoundingBox" stroke="none" fill="none" x="9720" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 9730,11618 L 9730,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id101">
- <rect class="BoundingBox" stroke="none" fill="none" x="10722" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id102">
- <rect class="BoundingBox" stroke="none" fill="none" x="10712" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 10722,11618 L 10722,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id103">
- <rect class="BoundingBox" stroke="none" fill="none" x="11713" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id104">
- <rect class="BoundingBox" stroke="none" fill="none" x="11703" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 11713,11618 L 11713,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id105">
- <rect class="BoundingBox" stroke="none" fill="none" x="12705" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id106">
- <rect class="BoundingBox" stroke="none" fill="none" x="12695" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 12705,11618 L 12705,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id107">
- <rect class="BoundingBox" stroke="none" fill="none" x="13696" y="11618" width="1" height="102"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id108">
- <rect class="BoundingBox" stroke="none" fill="none" x="13686" y="11618" width="21" height="102"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 13696,11618 L 13696,11719"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id109">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="11597" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id110">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="11587" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,11597 L 1920,11597"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id111">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="10058" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id112">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="10048" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,10058 L 1920,10058"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id113">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="8519" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id114">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="8509" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,8519 L 1920,8519"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id115">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="6980" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id116">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="6970" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,6980 L 1920,6980"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id117">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="5440" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id118">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="5430" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,5440 L 1920,5440"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id119">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="3901" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id120">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="3891" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,3901 L 1920,3901"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id121">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="2362" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id122">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="2352" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,2362 L 1920,2362"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id123">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="11410" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="11711"><tspan fill="rgb(68,68,68)" stroke="none">0.000</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id124">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="9870" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="10171"><tspan fill="rgb(68,68,68)" stroke="none">100.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id125">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="8331" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="8632"><tspan fill="rgb(68,68,68)" stroke="none">200.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id126">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="6792" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="7093"><tspan fill="rgb(68,68,68)" stroke="none">300.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id127">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="5253" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="5554"><tspan fill="rgb(68,68,68)" stroke="none">400.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id128">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="3714" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="4015"><tspan fill="rgb(68,68,68)" stroke="none">500.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id129">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="12613" width="12403" height="1670"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 2042,12614 L 14444,12614 14444,14282 2042,14282 2042,12614 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id130">
- <rect class="BoundingBox" stroke="none" fill="none" x="2347" y="12856" width="205" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 2551,12957 C 2551,13014 2506,13060 2450,13060 2393,13060 2347,13014 2347,12957 2347,12901 2393,12856 2450,12856 2506,12856 2551,12901 2551,12957 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id131">
- <rect class="BoundingBox" stroke="none" fill="none" x="925" y="2174" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="925" y="2475"><tspan fill="rgb(68,68,68)" stroke="none">600.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id132">
- <rect class="BoundingBox" stroke="none" fill="none" x="7394" y="12856" width="205" height="206"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 7598,12957 C 7598,13014 7553,13060 7496,13060 7439,13060 7394,13014 7394,12957 7394,12901 7439,12856 7496,12856 7553,12856 7598,12901 7598,12957 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id133">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="12783" width="1870" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="13084"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2patch</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id134">
- <rect class="BoundingBox" stroke="none" fill="none" x="2347" y="13340" width="205" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 2551,13442 C 2551,13498 2506,13544 2450,13544 2393,13544 2347,13498 2347,13442 2347,13385 2393,13340 2450,13340 2506,13340 2551,13385 2551,13442 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id135">
- <rect class="BoundingBox" stroke="none" fill="none" x="7903" y="12783" width="2099" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7903" y="13084"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2xcbase</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id136">
- <rect class="BoundingBox" stroke="none" fill="none" x="7394" y="13340" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 7598,13442 C 7598,13498 7553,13544 7496,13544 7439,13544 7394,13498 7394,13442 7394,13385 7439,13340 7496,13340 7553,13340 7598,13385 7598,13442 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id137">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="13267" width="3267" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="13568"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdbasemaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id138">
- <rect class="BoundingBox" stroke="none" fill="none" x="2347" y="13823" width="205" height="206"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 2551,13925 C 2551,13981 2506,14028 2450,14028 2393,14028 2347,13981 2347,13925 2347,13869 2393,13823 2450,13823 2506,13823 2551,13869 2551,13925 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id139">
- <rect class="BoundingBox" stroke="none" fill="none" x="7903" y="13267" width="3932" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7903" y="13568"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale10kmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id140">
- <rect class="BoundingBox" stroke="none" fill="none" x="7394" y="13823" width="205" height="206"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 7598,13925 C 7598,13981 7553,14028 7496,14028 7439,14028 7394,13981 7394,13925 7394,13869 7439,13823 7496,13823 7553,13823 7598,13869 7598,13925 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id141">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="13750" width="4139" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="14051"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale100kmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id142">
- <rect class="BoundingBox" stroke="none" fill="none" x="7903" y="13750" width="3851" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7903" y="14051"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale1mmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id143">
- <rect class="BoundingBox" stroke="none" fill="none" x="1450" y="585" width="12136" height="426"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="365px" font-weight="700"><tspan class="TextPosition" x="1462" y="924"><tspan fill="rgb(68,68,68)" stroke="none">Packet Latency: </tspan><tspan font-weight="400" fill="rgb(68,68,68)" stroke="none">l2sw-3n-hsw-x710-64b-1t1c-ndr-base-and-scale</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id144">
- <rect class="BoundingBox" stroke="none" fill="none" x="7494" y="12150" width="1496" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7505" y="12451"><tspan fill="rgb(68,68,68)" stroke="none">Direction</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id145">
- <rect class="BoundingBox" stroke="none" fill="none" x="2437" y="11607" width="715" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id146">
- <rect class="BoundingBox" stroke="none" fill="none" x="2428" y="11597" width="735" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id147">
- <rect class="BoundingBox" stroke="none" fill="none" x="501" y="4702" width="379" height="3638"/>
- <text class="TextShape" transform="translate(802,8328) rotate(-90) translate(-802,-8328)"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="802" y="8328"><tspan fill="rgb(68,68,68)" stroke="none">Packet Latency [uSec]</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id148">
- <rect class="BoundingBox" stroke="none" fill="none" x="3435" y="11607" width="713" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id149">
- <rect class="BoundingBox" stroke="none" fill="none" x="3424" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id150">
- <rect class="BoundingBox" stroke="none" fill="none" x="4411" y="11607" width="713" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id151">
- <rect class="BoundingBox" stroke="none" fill="none" x="4400" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id152">
- <rect class="BoundingBox" stroke="none" fill="none" x="5407" y="11607" width="713" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id153">
- <rect class="BoundingBox" stroke="none" fill="none" x="5397" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id154">
- <rect class="BoundingBox" stroke="none" fill="none" x="3466" y="11641" width="1835" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="3466" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">E-W W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id155">
- <rect class="BoundingBox" stroke="none" fill="none" x="6403" y="11607" width="713" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id156">
- <rect class="BoundingBox" stroke="none" fill="none" x="6393" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id157">
- <rect class="BoundingBox" stroke="none" fill="none" x="7399" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id158">
- <rect class="BoundingBox" stroke="none" fill="none" x="7389" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id159">
- <rect class="BoundingBox" stroke="none" fill="none" x="5400" y="11622" width="1801" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="5400" y="11923"><tspan fill="rgb(68,68,68)" stroke="none">E-W W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id160">
- <rect class="BoundingBox" stroke="none" fill="none" x="8375" y="11607" width="713" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id161">
- <rect class="BoundingBox" stroke="none" fill="none" x="8365" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id162">
- <rect class="BoundingBox" stroke="none" fill="none" x="9371" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id163">
- <rect class="BoundingBox" stroke="none" fill="none" x="9361" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id164">
- <rect class="BoundingBox" stroke="none" fill="none" x="7430" y="11641" width="1771" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7430" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">E-W W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id165">
- <rect class="BoundingBox" stroke="none" fill="none" x="10367" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id166">
- <rect class="BoundingBox" stroke="none" fill="none" x="10357" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id167">
- <rect class="BoundingBox" stroke="none" fill="none" x="11363" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id168">
- <rect class="BoundingBox" stroke="none" fill="none" x="11353" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id169">
- <rect class="BoundingBox" stroke="none" fill="none" x="9402" y="11641" width="1899" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="9402" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">E-W W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id170">
- <rect class="BoundingBox" stroke="none" fill="none" x="12339" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id171">
- <rect class="BoundingBox" stroke="none" fill="none" x="12329" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id172">
- <rect class="BoundingBox" stroke="none" fill="none" x="13335" y="11607" width="714" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id173">
- <rect class="BoundingBox" stroke="none" fill="none" x="13325" y="11597" width="734" height="470"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id174">
- <rect class="BoundingBox" stroke="none" fill="none" x="11394" y="11641" width="1807" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="11394" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">E-W W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id175">
- <rect class="BoundingBox" stroke="none" fill="none" x="13366" y="11641" width="651" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="13366" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">E-W</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id176">
- <rect class="BoundingBox" stroke="none" fill="none" x="2469" y="11641" width="651" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2469" y="11942"><tspan fill="rgb(68,68,68)" stroke="none">W-E</tspan></tspan></tspan></text>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/resources/tools/presentation/doc/pic/graph-speedup.svg b/resources/tools/presentation/doc/pic/graph-speedup.svg
deleted file mode 100644
index c55e8ac548..0000000000
--- a/resources/tools/presentation/doc/pic/graph-speedup.svg
+++ /dev/null
@@ -1,1554 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.2" width="150mm" height="150mm" viewBox="0 0 15000 15000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
- <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
- <rect x="0" y="0" width="15000" height="15000"/>
- </clipPath>
- <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
- <rect x="15" y="15" width="14970" height="14970"/>
- </clipPath>
- </defs>
- <defs>
- <font id="EmbeddedFont_1" horiz-adv-x="2048">
- <font-face font-family="Courier embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1693" descent="609"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="u" horiz-adv-x="901" d="M 365,1082 L 365,396 C 365,343 369,299 377,264 384,229 397,200 415,179 432,157 455,142 484,133 512,124 547,119 589,119 632,119 670,127 705,142 739,157 768,178 793,207 817,235 836,270 849,312 862,353 868,401 868,455 L 868,1082 1049,1082 1049,228 C 1049,205 1049,181 1050,156 1050,131 1050,107 1051,85 1052,62 1052,43 1053,27 1054,11 1054,3 1055,3 L 885,3 C 884,6 884,15 883,30 882,44 882,61 881,79 880,98 879,117 878,136 877,156 877,172 877,185 L 874,185 C 857,154 838,125 817,100 796,75 772,53 745,36 718,18 686,4 651,-6 616,-15 575,-20 528,-20 468,-20 416,-13 373,2 330,17 294,39 266,70 238,101 218,140 205,189 192,237 185,294 185,361 L 185,1082 365,1082 Z"/>
- <glyph unicode="t" horiz-adv-x="821" d="M 190,940 L 190,1082 360,1082 418,1364 538,1364 538,1082 970,1082 970,940 538,940 538,288 C 538,235 552,196 581,171 609,146 655,133 720,133 747,133 774,134 803,137 831,139 858,142 885,145 911,148 936,152 959,156 982,160 1001,164 1017,167 L 1017,30 C 1002,26 983,21 960,16 937,11 911,6 882,1 853,-4 821,-8 787,-11 753,-14 718,-16 682,-16 574,-16 493,7 439,53 385,98 358,170 358,269 L 358,940 190,940 Z"/>
- <glyph unicode="s" horiz-adv-x="874" d="M 1060,309 C 1060,258 1050,213 1031,172 1011,131 982,97 945,69 908,40 862,18 808,3 753,-12 691,-20 621,-20 558,-20 502,-15 452,-7 401,3 357,17 319,38 281,59 249,86 224,121 198,155 179,197 167,248 L 326,279 C 334,242 347,213 365,192 382,170 404,153 429,142 454,131 482,123 515,120 548,116 583,114 621,114 660,114 696,117 729,123 762,128 790,138 814,152 838,165 857,183 871,205 884,226 891,253 891,285 891,318 883,345 866,366 849,386 825,403 796,417 767,431 732,443 692,453 651,463 607,474 560,487 517,498 475,511 433,524 391,537 354,555 321,577 288,598 261,626 241,659 220,692 210,735 210,786 210,884 245,961 316,1016 387,1071 489,1099 623,1099 676,1099 725,1094 771,1085 817,1075 858,1060 894,1039 930,1018 960,991 985,958 1009,925 1026,885 1035,839 L 873,819 C 868,849 858,873 843,892 828,911 809,926 787,937 764,948 739,955 711,959 683,963 654,965 623,965 460,965 378,915 378,814 378,783 385,759 400,740 414,721 434,705 460,692 486,679 517,669 553,660 589,651 629,640 672,629 715,618 760,606 806,592 851,578 893,559 931,536 968,513 999,483 1024,447 1048,410 1060,364 1060,309 Z"/>
- <glyph unicode="r" horiz-adv-x="768" d="M 1045,918 C 1014,923 981,928 947,932 912,935 874,937 833,937 777,937 727,926 682,903 637,880 600,850 569,811 538,772 515,726 499,674 482,622 474,567 474,508 L 474,0 294,0 294,701 C 294,738 292,776 288,815 284,854 279,890 274,925 269,959 263,990 257,1017 251,1044 246,1066 242,1082 L 413,1082 C 418,1066 423,1048 428,1027 433,1006 437,985 442,963 447,940 451,918 454,895 457,872 460,851 461,832 L 466,832 C 485,873 504,911 525,944 546,977 570,1006 599,1029 627,1052 660,1070 699,1083 738,1096 784,1102 839,1102 876,1102 913,1100 949,1097 985,1094 1017,1090 1045,1085 L 1045,918 Z"/>
- <glyph unicode="p" horiz-adv-x="927" d="M 1090,546 C 1090,464 1083,388 1070,319 1057,250 1035,190 1004,140 973,90 933,51 883,23 833,-6 771,-20 698,-20 661,-20 626,-17 593,-10 560,-3 529,7 500,22 471,37 446,56 424,79 401,102 382,131 367,164 L 362,164 C 363,163 363,157 364,147 364,136 364,123 365,108 365,93 365,75 366,56 366,37 366,17 366,-2 L 366,-425 185,-425 185,861 C 185,888 185,914 185,939 184,963 184,986 183,1005 182,1025 182,1042 181,1056 180,1070 180,1077 179,1077 L 354,1077 C 355,1075 356,1068 357,1056 358,1044 359,1030 360,1013 361,996 362,978 363,958 364,939 364,921 364,904 L 368,904 C 385,939 404,969 425,994 446,1019 469,1040 496,1057 523,1073 553,1085 586,1093 619,1100 657,1104 698,1104 771,1104 833,1091 883,1064 933,1037 973,1000 1004,951 1035,902 1057,843 1070,774 1083,705 1090,629 1090,546 Z M 904,546 C 904,613 900,672 892,724 884,776 870,820 851,856 831,891 805,918 773,937 740,956 700,965 651,965 612,965 575,959 540,947 505,934 475,912 450,880 424,847 404,802 389,745 374,688 366,614 366,524 366,447 372,383 385,331 397,278 415,236 439,204 463,171 493,148 528,134 563,120 604,113 649,113 698,113 738,123 771,142 804,161 830,188 850,225 869,262 883,307 892,361 900,415 904,477 904,546 Z"/>
- <glyph unicode="m" horiz-adv-x="1033" d="M 531,0 L 531,686 C 531,739 529,783 525,818 521,853 515,882 506,904 497,925 485,941 471,950 456,959 438,963 417,963 395,963 375,955 358,938 341,921 326,897 313,866 300,835 291,797 284,754 277,710 274,661 274,607 L 274,0 105,0 105,853 C 105,876 105,900 105,925 104,950 104,974 103,996 102,1019 102,1038 101,1054 100,1070 100,1078 99,1078 L 248,1078 C 249,1075 249,1066 250,1053 251,1040 251,1024 252,1007 253,990 253,972 254,954 254,936 254,920 254,907 L 256,907 C 265,933 275,958 287,982 299,1005 314,1026 331,1044 348,1062 368,1076 391,1087 414,1097 441,1102 472,1102 531,1102 575,1086 604,1054 633,1022 653,973 666,906 L 668,906 C 680,937 693,965 708,990 722,1014 738,1034 757,1051 776,1068 797,1080 821,1089 845,1098 873,1102 904,1102 945,1102 979,1095 1007,1080 1035,1065 1058,1043 1075,1012 1092,981 1105,942 1113,894 1120,846 1124,788 1124,721 L 1124,0 956,0 956,686 C 956,739 954,783 950,818 946,853 940,882 931,904 922,925 910,941 896,950 881,959 863,963 842,963 798,963 763,935 738,879 712,823 699,739 699,627 L 699,0 531,0 Z"/>
- <glyph unicode="f" horiz-adv-x="954" d="M 580,940 L 580,0 400,0 400,940 138,940 138,1082 400,1082 400,1107 C 400,1174 408,1231 423,1279 438,1326 462,1365 495,1395 528,1425 572,1447 625,1461 678,1475 742,1482 818,1482 837,1482 860,1482 887,1482 914,1482 940,1481 967,1479 994,1477 1019,1474 1043,1471 1066,1469 1085,1466 1099,1463 L 1099,1318 C 1087,1321 1069,1324 1045,1327 1021,1330 996,1331 970,1331 943,1331 918,1331 894,1331 870,1331 852,1331 839,1331 795,1331 757,1328 724,1321 691,1314 664,1302 643,1284 622,1266 606,1241 596,1210 585,1178 580,1137 580,1087 L 580,1087 1071,1087 1071,940 580,940 Z"/>
- <glyph unicode="e" horiz-adv-x="954" d="M 322,503 C 322,446 328,394 341,347 354,299 373,258 398,224 423,189 455,163 493,144 530,125 574,115 623,115 660,115 694,119 725,128 756,136 783,147 808,162 833,177 853,194 870,215 887,235 899,257 907,281 L 1065,236 C 1054,206 1038,176 1017,146 996,115 967,88 932,64 897,39 854,19 803,4 752,-12 692,-20 623,-20 546,-20 478,-8 417,16 356,40 305,76 263,123 221,170 189,230 167,301 144,372 133,454 133,548 133,652 146,739 173,810 199,881 234,938 279,981 324,1024 375,1055 434,1074 492,1093 553,1102 617,1102 704,1102 778,1088 839,1060 899,1032 948,993 986,943 1024,892 1052,832 1069,761 1086,690 1094,612 1094,527 L 1094,503 322,503 Z M 619,969 C 588,969 556,964 523,955 489,945 458,928 429,903 400,878 376,845 357,803 337,760 326,706 324,641 L 908,641 C 903,704 891,756 874,798 857,840 835,874 810,899 784,924 755,942 722,953 689,964 655,969 619,969 Z"/>
- <glyph unicode="d" horiz-adv-x="927" d="M 862,174 C 829,104 786,53 732,22 678,-10 611,-26 530,-26 395,-26 296,20 233,113 170,206 138,345 138,532 138,909 269,1098 530,1098 611,1098 678,1084 733,1055 787,1026 830,979 863,914 L 865,914 C 865,917 865,926 865,940 864,954 864,969 864,986 864,1003 864,1019 864,1034 863,1049 863,1059 863,1065 L 863,1484 1043,1484 1043,219 C 1043,193 1043,168 1044,143 1044,119 1044,97 1045,77 1046,57 1046,40 1047,26 1048,11 1048,4 1049,4 L 877,4 C 876,7 875,14 874,25 873,37 872,51 871,68 870,84 869,101 868,120 867,139 867,157 867,174 L 862,174 Z M 324,538 C 324,463 329,399 339,346 348,293 363,249 384,214 404,179 430,154 462,138 494,121 532,113 577,113 623,113 664,121 700,137 735,153 765,179 790,214 814,249 832,294 845,350 857,406 863,474 863,554 863,631 857,696 845,749 832,801 814,843 790,875 766,907 736,930 701,944 666,958 625,965 579,965 536,965 499,957 467,942 435,927 409,902 388,868 367,834 351,790 340,736 329,681 324,615 324,538 Z"/>
- <glyph unicode="c" horiz-adv-x="927" d="M 130,542 C 130,651 144,741 173,813 202,885 240,942 287,985 334,1028 387,1058 447,1076 507,1093 569,1102 632,1102 697,1102 756,1094 807,1077 858,1060 903,1038 940,1009 977,980 1007,945 1030,906 1053,867 1069,824 1078,779 L 886,765 C 875,826 849,874 806,909 763,944 703,961 624,961 567,961 519,952 480,934 441,915 409,889 386,854 362,819 345,775 335,724 324,672 319,613 319,546 319,479 324,420 335,367 345,314 362,269 386,232 409,195 441,167 480,148 519,129 566,119 623,119 695,119 755,136 802,171 849,205 879,257 890,328 L 1080,328 C 1074,283 1060,239 1037,197 1014,155 984,118 946,86 908,54 863,28 810,9 757,-10 698,-20 631,-20 540,-20 462,-6 399,23 335,52 283,91 244,142 204,192 175,251 157,320 139,388 130,462 130,542 Z"/>
- <glyph unicode="a" horiz-adv-x="1033" d="M 1101,111 C 1111,111 1121,112 1131,113 1141,114 1151,116 1160,118 L 1160,6 C 1137,1 1115,-3 1093,-6 1070,-9 1046,-10 1021,-10 987,-10 958,-5 934,4 909,13 889,26 874,45 859,63 847,86 839,113 831,140 826,171 824,207 L 818,207 C 799,172 779,141 756,113 733,85 707,61 678,42 649,22 615,7 577,-4 539,-15 495,-20 446,-20 341,-20 261,9 208,66 155,124 128,203 128,303 128,375 141,433 168,479 194,525 228,561 271,587 314,613 362,631 417,641 471,652 526,657 582,657 L 818,657 818,717 C 818,762 814,800 805,832 796,863 782,889 764,908 745,928 722,942 694,951 666,960 633,965 596,965 563,965 533,963 506,958 479,953 455,944 436,931 417,918 401,900 389,878 376,855 368,827 364,793 L 176,810 C 183,853 195,892 214,928 232,963 258,994 291,1020 324,1046 366,1066 417,1081 467,1095 528,1102 599,1102 732,1102 833,1071 900,1009 967,946 1000,856 1000,738 L 1000,272 C 1000,219 1007,179 1021,152 1035,125 1062,111 1101,111 Z M 492,117 C 547,117 595,127 636,148 677,169 711,195 738,227 765,259 785,294 798,332 811,371 818,408 818,443 L 818,531 628,531 C 591,531 555,528 518,523 481,518 447,508 418,492 388,476 364,452 345,422 326,391 317,351 317,300 317,245 332,201 362,167 391,134 435,117 492,117 Z"/>
- <glyph unicode="_" horiz-adv-x="1218" d="M -5,-220 L -5,-124 1233,-124 1233,-220 -5,-220 Z"/>
- <glyph unicode=" " horiz-adv-x="1217"/>
- </font>
- </defs>
- <defs>
- <font id="EmbeddedFont_2" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="y" horiz-adv-x="1086" d="M 659,-104 C 607,-237 556,-324 507,-365 458,-406 392,-426 309,-426 L 162,-426 162,-272 270,-272 C 321,-272 360,-260 388,-236 416,-212 447,-155 481,-66 L 514,18 61,1120 256,1120 606,244 956,1120 1151,1120 659,-104 Z"/>
- <glyph unicode="x" horiz-adv-x="1086" d="M 1124,1120 L 719,575 1145,0 928,0 602,440 276,0 59,0 494,586 96,1120 313,1120 610,721 907,1120 1124,1120 Z"/>
- <glyph unicode="w" horiz-adv-x="1510" d="M 86,1120 L 270,1120 500,246 729,1120 946,1120 1176,246 1405,1120 1589,1120 1296,0 1079,0 838,918 596,0 379,0 86,1120 Z"/>
- <glyph unicode="u" horiz-adv-x="927" d="M 174,442 L 174,1120 358,1120 358,449 C 358,343 379,264 420,211 461,158 523,131 606,131 705,131 784,163 842,226 899,289 928,376 928,485 L 928,1120 1112,1120 1112,0 928,0 928,172 C 883,104 832,54 773,21 714,-12 645,-29 567,-29 438,-29 341,11 274,91 207,171 174,288 174,442 Z "/>
- <glyph unicode="t" horiz-adv-x="689" d="M 375,1438 L 375,1120 754,1120 754,977 375,977 375,369 C 375,278 388,219 413,193 438,167 488,154 565,154 L 754,154 754,0 565,0 C 423,0 325,27 271,80 217,133 190,229 190,369 L 190,977 55,977 55,1120 190,1120 190,1438 375,1438 Z"/>
- <glyph unicode="s" horiz-adv-x="848" d="M 907,1087 L 907,913 C 855,940 801,960 745,973 689,986 631,993 571,993 480,993 411,979 366,951 320,923 297,881 297,825 297,782 313,749 346,725 379,700 444,677 543,655 L 606,641 C 737,613 830,574 885,523 940,472 967,400 967,309 967,205 926,123 844,62 761,1 648,-29 504,-29 444,-29 382,-23 317,-12 252,0 183,18 111,41 L 111,231 C 179,196 246,169 312,152 378,134 443,125 508,125 595,125 661,140 708,170 755,199 778,241 778,295 778,345 761,383 728,410 694,437 620,462 506,487 L 442,502 C 328,526 246,563 195,613 144,662 119,730 119,817 119,922 156,1004 231,1061 306,1118 412,1147 549,1147 617,1147 681,1142 741,1132 801,1122 856,1107 907,1087 Z"/>
- <glyph unicode="r" horiz-adv-x="663" d="M 842,948 C 821,960 799,969 775,975 750,980 723,983 694,983 590,983 510,949 455,882 399,814 371,717 371,590 L 371,0 186,0 186,1120 371,1120 371,946 C 410,1014 460,1065 522,1098 584,1131 659,1147 748,1147 761,1147 775,1146 790,1145 805,1143 822,1140 841,1137 L 842,948 Z"/>
- <glyph unicode="p" horiz-adv-x="1007" d="M 371,168 L 371,-426 186,-426 186,1120 371,1120 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 Z M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z"/>
- <glyph unicode="o" horiz-adv-x="1033" d="M 627,991 C 528,991 450,953 393,876 336,799 307,693 307,559 307,425 336,320 393,243 450,166 528,127 627,127 725,127 803,166 860,243 917,320 946,426 946,559 946,692 917,797 860,875 803,952 725,991 627,991 Z M 627,1147 C 787,1147 913,1095 1004,991 1095,887 1141,743 1141,559 1141,376 1095,232 1004,128 913,23 787,-29 627,-29 466,-29 341,23 250,128 159,232 113,376 113,559 113,743 159,887 250,991 341,1095 466,1147 627,1147 Z"/>
- <glyph unicode="n" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="m" horiz-adv-x="1615" d="M 1065,905 C 1111,988 1166,1049 1230,1088 1294,1127 1369,1147 1456,1147 1573,1147 1663,1106 1726,1025 1789,943 1821,827 1821,676 L 1821,0 1636,0 1636,670 C 1636,777 1617,857 1579,909 1541,961 1483,987 1405,987 1310,987 1234,955 1179,892 1124,829 1096,742 1096,633 L 1096,0 911,0 911,670 C 911,778 892,858 854,910 816,961 757,987 678,987 584,987 509,955 454,892 399,828 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 413,1015 463,1065 522,1098 581,1131 650,1147 731,1147 812,1147 882,1126 939,1085 996,1044 1038,984 1065,905 Z"/>
- <glyph unicode="l" horiz-adv-x="186" d="M 193,1556 L 377,1556 377,0 193,0 193,1556 Z"/>
- <glyph unicode="k" horiz-adv-x="980" d="M 186,1556 L 371,1556 371,637 920,1120 1155,1120 561,596 1180,0 940,0 371,547 371,0 186,0 186,1556 Z"/>
- <glyph unicode="i" horiz-adv-x="186" d="M 193,1120 L 377,1120 377,0 193,0 193,1120 Z M 193,1556 L 377,1556 377,1323 193,1323 193,1556 Z"/>
- <glyph unicode="h" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1556 371,1556 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="g" horiz-adv-x="1006" d="M 930,573 C 930,706 903,810 848,883 793,956 715,993 616,993 517,993 441,956 386,883 331,810 303,706 303,573 303,440 331,337 386,264 441,191 517,154 616,154 715,154 793,191 848,264 903,337 930,440 930,573 Z M 1114,139 C 1114,-52 1072,-193 987,-287 902,-379 773,-426 598,-426 533,-426 472,-421 415,-412 358,-402 302,-387 248,-367 L 248,-188 C 302,-217 355,-239 408,-253 461,-267 514,-274 569,-274 690,-274 780,-242 840,-180 900,-116 930,-21 930,106 L 930,197 C 892,131 843,82 784,49 725,16 654,0 571,0 434,0 323,52 239,157 155,262 113,400 113,573 113,746 155,885 239,990 323,1095 434,1147 571,1147 654,1147 725,1131 784,1098 843,1065 892,1016 930,950 L 930,1120 1114,1120 1114,139 Z"/>
- <glyph unicode="f" horiz-adv-x="716" d="M 760,1556 L 760,1403 584,1403 C 518,1403 472,1390 447,1363 421,1336 408,1288 408,1219 L 408,1120 711,1120 711,977 408,977 408,0 223,0 223,977 47,977 47,1120 223,1120 223,1198 C 223,1323 252,1414 310,1471 368,1528 460,1556 586,1556 L 760,1556 Z"/>
- <glyph unicode="e" horiz-adv-x="1033" d="M 1151,606 L 1151,516 305,516 C 313,389 351,293 420,227 488,160 583,127 705,127 776,127 844,136 911,153 977,170 1043,196 1108,231 L 1108,57 C 1042,29 974,8 905,-7 836,-22 765,-29 694,-29 515,-29 374,23 270,127 165,231 113,372 113,549 113,732 163,878 262,986 361,1093 494,1147 662,1147 813,1147 932,1099 1020,1002 1107,905 1151,773 1151,606 Z M 967,659 C 966,760 938,841 883,901 828,961 755,991 664,991 561,991 479,962 418,904 356,846 320,764 311,659 L 967,659 Z"/>
- <glyph unicode="d" horiz-adv-x="1006" d="M 930,950 L 930,1556 1114,1556 1114,0 930,0 930,168 C 891,101 843,52 784,20 725,-13 654,-29 571,-29 436,-29 326,25 241,133 156,241 113,383 113,559 113,735 156,877 241,985 326,1093 436,1147 571,1147 654,1147 725,1131 784,1099 843,1066 891,1017 930,950 Z M 303,559 C 303,424 331,318 387,241 442,164 519,125 616,125 713,125 790,164 846,241 902,318 930,424 930,559 930,694 902,801 846,878 790,955 713,993 616,993 519,993 442,955 387,878 331,801 303,694 303,559 Z"/>
- <glyph unicode="c" horiz-adv-x="874" d="M 999,1077 L 999,905 C 947,934 895,955 843,970 790,984 737,991 684,991 565,991 472,953 406,878 340,802 307,696 307,559 307,422 340,316 406,241 472,165 565,127 684,127 737,127 790,134 843,149 895,163 947,184 999,213 L 999,43 C 948,19 895,1 840,-11 785,-23 726,-29 664,-29 495,-29 361,24 262,130 163,236 113,379 113,559 113,742 163,885 264,990 364,1095 501,1147 676,1147 733,1147 788,1141 842,1130 896,1118 948,1100 999,1077 Z"/>
- <glyph unicode="b" horiz-adv-x="1007" d="M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z M 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 L 371,0 186,0 186,1556 371,1556 371,950 Z"/>
- <glyph unicode="a" horiz-adv-x="953" d="M 702,563 C 553,563 450,546 393,512 336,478 307,420 307,338 307,273 329,221 372,183 415,144 473,125 547,125 649,125 731,161 793,234 854,306 885,402 885,522 L 885,563 702,563 Z M 1069,639 L 1069,0 885,0 885,170 C 843,102 791,52 728,20 665,-13 589,-29 498,-29 383,-29 292,3 225,68 157,132 123,218 123,326 123,452 165,547 250,611 334,675 460,707 627,707 L 885,707 885,725 C 885,810 857,875 802,922 746,968 668,991 567,991 503,991 441,983 380,968 319,953 261,930 205,899 L 205,1069 C 272,1095 338,1115 401,1128 464,1141 526,1147 586,1147 748,1147 869,1105 949,1021 1029,937 1069,810 1069,639 Z"/>
- <glyph unicode="]" horiz-adv-x="425" d="M 623,1556 L 623,-270 199,-270 199,-127 438,-127 438,1413 199,1413 199,1556 623,1556 Z"/>
- <glyph unicode="[" horiz-adv-x="425" d="M 176,1556 L 600,1556 600,1413 360,1413 360,-127 600,-127 600,-270 176,-270 176,1556 Z"/>
- <glyph unicode="T" horiz-adv-x="1271" d="M -6,1493 L 1257,1493 1257,1323 727,1323 727,0 524,0 524,1323 -6,1323 -6,1493 Z"/>
- <glyph unicode="Q" horiz-adv-x="1377" d="M 807,1356 C 660,1356 544,1301 458,1192 371,1083 328,934 328,745 328,557 371,408 458,299 544,190 660,135 807,135 954,135 1070,190 1156,299 1241,408 1284,557 1284,745 1284,934 1241,1083 1156,1192 1070,1301 954,1356 807,1356 Z M 1090,27 L 1356,-264 1112,-264 891,-27 C 869,-27 852,-27 841,-27 829,-27 818,-27 807,-27 597,-27 429,43 304,183 178,323 115,511 115,746 115,982 178,1170 304,1310 429,1450 597,1520 807,1520 1016,1520 1184,1450 1309,1310 1434,1169 1497,981 1497,745 1497,572 1462,423 1393,300 1323,177 1222,86 1090,27 Z"/>
- <glyph unicode="P" horiz-adv-x="954" d="M 403,1327 L 403,766 657,766 C 751,766 824,790 875,839 926,888 952,957 952,1047 952,1136 926,1205 875,1254 824,1303 751,1327 657,1327 L 403,1327 Z M 201,1493 L 657,1493 C 824,1493 951,1455 1037,1380 1122,1304 1165,1193 1165,1047 1165,900 1122,788 1037,713 951,638 824,600 657,600 L 403,600 403,0 201,0 201,1493 Z"/>
- <glyph unicode="N" horiz-adv-x="1112" d="M 201,1493 L 473,1493 1135,244 1135,1493 1331,1493 1331,0 1059,0 397,1249 397,0 201,0 201,1493 Z"/>
- <glyph unicode="M" horiz-adv-x="1351" d="M 201,1493 L 502,1493 883,477 1266,1493 1567,1493 1567,0 1370,0 1370,1311 985,287 782,287 397,1311 397,0 201,0 201,1493 Z"/>
- <glyph unicode="L" horiz-adv-x="927" d="M 201,1493 L 403,1493 403,170 1130,170 1130,0 201,0 201,1493 Z"/>
- <glyph unicode="I" horiz-adv-x="213" d="M 201,1493 L 403,1493 403,0 201,0 201,1493 Z"/>
- <glyph unicode="C" horiz-adv-x="1191" d="M 1319,1378 L 1319,1165 C 1251,1228 1179,1276 1102,1307 1025,1338 943,1354 856,1354 685,1354 555,1302 464,1198 373,1093 328,942 328,745 328,548 373,398 464,294 555,189 685,137 856,137 943,137 1025,153 1102,184 1179,215 1251,263 1319,326 L 1319,115 C 1248,67 1174,31 1095,7 1016,-17 932,-29 844,-29 618,-29 440,40 310,179 180,317 115,506 115,745 115,985 180,1174 310,1313 440,1451 618,1520 844,1520 933,1520 1018,1508 1097,1485 1176,1461 1250,1425 1319,1378 Z"/>
- <glyph unicode=":" horiz-adv-x="213" d="M 240,254 L 451,254 451,0 240,0 240,254 Z M 240,1059 L 451,1059 451,805 240,805 240,1059 Z"/>
- <glyph unicode="9" horiz-adv-x="1033" d="M 225,31 L 225,215 C 276,191 327,173 379,160 431,147 482,141 532,141 665,141 767,186 838,276 908,365 948,501 958,684 919,627 870,583 811,552 752,521 686,506 614,506 465,506 347,551 260,642 173,732 129,855 129,1012 129,1165 174,1288 265,1381 356,1474 476,1520 627,1520 800,1520 932,1454 1023,1322 1114,1189 1159,997 1159,745 1159,510 1103,322 992,182 880,41 730,-29 541,-29 490,-29 439,-24 387,-14 335,-4 281,11 225,31 Z M 627,664 C 718,664 790,695 843,757 896,819 922,904 922,1012 922,1119 896,1204 843,1267 790,1329 718,1360 627,1360 536,1360 465,1329 412,1267 359,1204 332,1119 332,1012 332,904 359,819 412,757 465,695 536,664 627,664 Z"/>
- <glyph unicode="8" horiz-adv-x="1033" d="M 651,709 C 555,709 480,683 425,632 370,581 342,510 342,420 342,330 370,259 425,208 480,157 555,131 651,131 747,131 823,157 878,209 933,260 961,331 961,420 961,510 934,581 879,632 824,683 748,709 651,709 Z M 449,795 C 362,816 295,857 247,916 198,975 174,1048 174,1133 174,1252 217,1347 302,1416 387,1485 503,1520 651,1520 800,1520 916,1485 1001,1416 1086,1347 1128,1252 1128,1133 1128,1048 1104,975 1056,916 1007,857 940,816 854,795 951,772 1027,728 1082,662 1136,596 1163,515 1163,420 1163,275 1119,164 1031,87 942,10 816,-29 651,-29 486,-29 360,10 272,87 183,164 139,275 139,420 139,515 166,596 221,662 276,728 352,772 449,795 Z M 375,1114 C 375,1037 399,976 448,933 496,890 564,868 651,868 738,868 806,890 855,933 904,976 928,1037 928,1114 928,1191 904,1252 855,1295 806,1338 738,1360 651,1360 564,1360 496,1338 448,1295 399,1252 375,1191 375,1114 Z"/>
- <glyph unicode="7" horiz-adv-x="953" d="M 168,1493 L 1128,1493 1128,1407 586,0 375,0 885,1323 168,1323 168,1493 Z"/>
- <glyph unicode="6" horiz-adv-x="1033" d="M 676,827 C 585,827 514,796 461,734 408,672 381,587 381,479 381,372 408,287 461,225 514,162 585,131 676,131 767,131 839,162 892,225 945,287 971,372 971,479 971,587 945,672 892,734 839,796 767,827 676,827 Z M 1077,1460 L 1077,1276 C 1026,1300 975,1318 924,1331 872,1344 821,1350 770,1350 637,1350 535,1305 465,1215 394,1125 354,989 344,807 383,865 433,910 492,941 551,972 617,987 688,987 838,987 957,942 1044,851 1131,760 1174,636 1174,479 1174,326 1129,203 1038,110 947,17 827,-29 676,-29 503,-29 371,37 280,170 189,302 143,494 143,745 143,981 199,1169 311,1310 423,1450 573,1520 762,1520 813,1520 864,1515 916,1505 967,1495 1021,1480 1077,1460 Z"/>
- <glyph unicode="5" horiz-adv-x="953" d="M 221,1493 L 1014,1493 1014,1323 406,1323 406,957 C 435,967 465,975 494,980 523,985 553,987 582,987 749,987 881,941 978,850 1075,759 1124,635 1124,479 1124,318 1074,194 974,105 874,16 733,-29 551,-29 488,-29 425,-24 360,-13 295,-2 227,14 158,35 L 158,238 C 218,205 280,181 344,165 408,149 476,141 547,141 662,141 754,171 821,232 888,293 922,375 922,479 922,583 888,665 821,726 754,787 662,817 547,817 493,817 439,811 386,799 332,787 277,768 221,743 L 221,1493 Z"/>
- <glyph unicode="4" horiz-adv-x="1086" d="M 774,1317 L 264,520 774,520 774,1317 Z M 721,1493 L 975,1493 975,520 1188,520 1188,352 975,352 975,0 774,0 774,352 100,352 100,547 721,1493 Z"/>
- <glyph unicode="3" horiz-adv-x="980" d="M 831,805 C 928,784 1003,741 1058,676 1112,611 1139,530 1139,434 1139,287 1088,173 987,92 886,11 742,-29 555,-29 492,-29 428,-23 362,-11 295,2 227,20 156,45 L 156,240 C 212,207 273,183 340,166 407,149 476,141 549,141 676,141 772,166 839,216 905,266 938,339 938,434 938,522 907,591 846,641 784,690 698,715 588,715 L 414,715 414,881 596,881 C 695,881 771,901 824,941 877,980 903,1037 903,1112 903,1189 876,1248 822,1289 767,1330 689,1350 588,1350 533,1350 473,1344 410,1332 347,1320 277,1301 201,1276 L 201,1456 C 278,1477 350,1493 417,1504 484,1515 547,1520 606,1520 759,1520 881,1485 970,1416 1059,1346 1104,1252 1104,1133 1104,1050 1080,981 1033,924 986,867 918,827 831,805 Z"/>
- <glyph unicode="2" horiz-adv-x="953" d="M 393,170 L 1098,170 1098,0 150,0 150,170 C 227,249 331,356 464,490 596,623 679,709 713,748 778,821 823,882 849,933 874,983 887,1032 887,1081 887,1160 859,1225 804,1275 748,1325 675,1350 586,1350 523,1350 456,1339 386,1317 315,1295 240,1262 160,1217 L 160,1421 C 241,1454 317,1478 388,1495 459,1512 523,1520 582,1520 737,1520 860,1481 952,1404 1044,1327 1090,1223 1090,1094 1090,1033 1079,975 1056,920 1033,865 991,800 930,725 913,706 860,650 771,558 682,465 556,336 393,170 Z"/>
- <glyph unicode="1" horiz-adv-x="900" d="M 254,170 L 584,170 584,1309 225,1237 225,1421 582,1493 784,1493 784,170 1114,170 1114,0 254,0 254,170 Z"/>
- <glyph unicode="0" horiz-adv-x="1033" d="M 651,1360 C 547,1360 469,1309 417,1207 364,1104 338,950 338,745 338,540 364,387 417,285 469,182 547,131 651,131 756,131 834,182 887,285 939,387 965,540 965,745 965,950 939,1104 887,1207 834,1309 756,1360 651,1360 Z M 651,1520 C 818,1520 946,1454 1035,1322 1123,1189 1167,997 1167,745 1167,494 1123,302 1035,170 946,37 818,-29 651,-29 484,-29 356,37 268,170 179,302 135,494 135,745 135,997 179,1189 268,1322 356,1454 484,1520 651,1520 Z"/>
- <glyph unicode="." horiz-adv-x="213" d="M 219,254 L 430,254 430,0 219,0 219,254 Z"/>
- <glyph unicode="-" horiz-adv-x="530" d="M 100,643 L 639,643 639,479 100,479 100,643 Z"/>
- <glyph unicode=" " horiz-adv-x="635"/>
- </font>
- </defs>
- <defs>
- <font id="EmbeddedFont_3" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="bold" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="u" horiz-adv-x="1112" d="M 160,436 L 160,1120 520,1120 520,1008 C 520,947 520,871 519,780 518,688 518,627 518,596 518,506 520,441 525,402 530,362 538,333 549,315 564,292 583,274 607,261 630,248 657,242 688,242 763,242 821,271 864,328 907,385 928,465 928,567 L 928,1120 1286,1120 1286,0 928,0 928,162 C 874,97 817,49 757,18 696,-13 630,-29 557,-29 428,-29 329,11 262,90 194,169 160,285 160,436 Z"/>
- <glyph unicode="t" horiz-adv-x="901" d="M 563,1438 L 563,1120 932,1120 932,864 563,864 563,389 C 563,337 573,302 594,284 615,265 656,256 717,256 L 901,256 901,0 594,0 C 453,0 353,30 294,89 235,148 205,248 205,389 L 205,864 27,864 27,1120 205,1120 205,1438 563,1438 Z"/>
- <glyph unicode="r" horiz-adv-x="821" d="M 1004,815 C 973,830 942,841 911,848 880,855 848,858 817,858 725,858 654,829 605,770 555,711 530,626 530,516 L 530,0 172,0 172,1120 530,1120 530,936 C 576,1009 629,1062 689,1095 748,1128 820,1145 903,1145 915,1145 928,1145 942,1145 956,1145 976,1143 1003,1139 L 1004,815 Z"/>
- <glyph unicode="p" horiz-adv-x="1191" d="M 530,162 L 530,-426 172,-426 172,1120 530,1120 530,956 C 579,1021 634,1070 694,1101 754,1132 823,1147 901,1147 1039,1147 1152,1092 1241,983 1330,873 1374,732 1374,559 1374,386 1330,245 1241,136 1152,26 1039,-29 901,-29 823,-29 754,-13 694,18 634,49 579,97 530,162 Z M 768,887 C 691,887 633,859 592,803 551,746 530,665 530,559 530,453 551,372 592,316 633,259 691,231 768,231 845,231 903,259 944,315 984,371 1004,452 1004,559 1004,666 984,747 944,803 903,859 845,887 768,887 Z"/>
- <glyph unicode="o" horiz-adv-x="1218" d="M 705,891 C 626,891 565,863 524,806 482,749 461,666 461,559 461,452 482,370 524,313 565,256 626,227 705,227 783,227 843,256 884,313 925,370 946,452 946,559 946,666 925,749 884,806 843,863 783,891 705,891 Z M 705,1147 C 898,1147 1048,1095 1157,991 1265,887 1319,743 1319,559 1319,375 1265,231 1157,127 1048,23 898,-29 705,-29 512,-29 361,23 252,127 143,231 88,375 88,559 88,743 143,887 252,991 361,1095 512,1147 705,1147 Z"/>
- <glyph unicode="l" horiz-adv-x="345" d="M 172,1556 L 530,1556 530,0 172,0 172,1556 Z"/>
- <glyph unicode="i" horiz-adv-x="345" d="M 172,1120 L 530,1120 530,0 172,0 172,1120 Z M 172,1556 L 530,1556 530,1264 172,1264 172,1556 Z"/>
- <glyph unicode="e" horiz-adv-x="1192" d="M 1290,563 L 1290,461 453,461 C 462,377 492,314 544,272 596,230 669,209 762,209 837,209 915,220 994,243 1073,265 1154,299 1237,344 L 1237,68 C 1152,36 1068,12 983,-5 898,-21 814,-29 729,-29 526,-29 369,23 257,126 144,229 88,373 88,559 88,742 143,885 254,990 364,1095 516,1147 709,1147 885,1147 1026,1094 1132,988 1237,882 1290,740 1290,563 Z M 922,682 C 922,750 902,805 863,847 823,888 771,909 707,909 638,909 581,890 538,851 495,812 468,755 457,682 L 922,682 Z"/>
- <glyph unicode="d" horiz-adv-x="1192" d="M 934,956 L 934,1556 1294,1556 1294,0 934,0 934,162 C 885,96 830,48 771,17 712,-14 643,-29 565,-29 427,-29 314,26 225,136 136,245 92,386 92,559 92,732 136,873 225,983 314,1092 427,1147 565,1147 642,1147 711,1132 771,1101 830,1070 885,1021 934,956 Z M 698,231 C 775,231 833,259 874,315 914,371 934,452 934,559 934,666 914,747 874,803 833,859 775,887 698,887 622,887 564,859 524,803 483,747 463,666 463,559 463,452 483,371 524,315 564,259 622,231 698,231 Z"/>
- <glyph unicode="c" horiz-adv-x="980" d="M 1077,1085 L 1077,793 C 1028,826 980,851 931,867 882,883 831,891 778,891 678,891 600,862 545,804 489,745 461,664 461,559 461,454 489,373 545,315 600,256 678,227 778,227 834,227 887,235 938,252 988,269 1034,293 1077,326 L 1077,33 C 1021,12 964,-3 907,-14 849,-24 791,-29 733,-29 531,-29 373,23 259,127 145,230 88,374 88,559 88,744 145,888 259,992 373,1095 531,1147 733,1147 792,1147 850,1142 907,1132 964,1121 1020,1106 1077,1085 Z"/>
- <glyph unicode="S" horiz-adv-x="1165" d="M 1227,1446 L 1227,1130 C 1145,1167 1065,1194 987,1213 909,1232 835,1241 766,1241 674,1241 606,1228 562,1203 518,1178 496,1138 496,1085 496,1045 511,1014 541,992 570,969 624,950 702,934 L 866,901 C 1032,868 1150,817 1220,749 1290,681 1325,584 1325,459 1325,294 1276,172 1179,92 1081,11 932,-29 731,-29 636,-29 541,-20 446,-2 351,16 255,43 160,78 L 160,403 C 255,352 348,314 437,289 526,263 611,250 694,250 778,250 842,264 887,292 932,320 954,360 954,412 954,459 939,495 909,520 878,545 818,568 727,588 L 578,621 C 429,653 320,704 251,774 182,844 147,938 147,1057 147,1206 195,1320 291,1400 387,1480 525,1520 705,1520 787,1520 871,1514 958,1502 1045,1489 1134,1471 1227,1446 Z"/>
- <glyph unicode="M" horiz-adv-x="1642" d="M 188,1493 L 678,1493 1018,694 1360,1493 1849,1493 1849,0 1485,0 1485,1092 1141,287 897,287 553,1092 553,0 188,0 188,1493 Z"/>
- <glyph unicode=":" horiz-adv-x="345" d="M 229,1120 L 590,1120 590,733 229,733 229,1120 Z M 229,387 L 590,387 590,0 229,0 229,387 Z"/>
- <glyph unicode="-" horiz-adv-x="636" d="M 111,735 L 739,735 739,444 111,444 111,735 Z"/>
- <glyph unicode=" " horiz-adv-x="714"/>
- </font>
- </defs>
- <defs class="TextShapeIndex">
- <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49 id50 id51 id52 id53 id54 id55 id56 id57 id58 id59 id60 id61 id62 id63 id64 id65 id66 id67 id68 id69 id70 id71 id72 id73 id74 id75 id76 id77 id78 id79 id80 id81 id82 id83 id84 id85 id86 id87 id88 id89 id90 id91 id92 id93 id94 id95 id96 id97 id98 id99 id100 id101 id102 id103 id104 id105 id106 id107 id108 id109 id110 id111 id112 id113 id114 id115 id116 id117 id118 id119 id120 id121 id122 id123 id124 id125 id126 id127 id128 id129 id130 id131 id132 id133 id134 id135 id136 id137 id138 id139 id140 id141 id142 id143 id144 id145 id146 id147 id148 id149 id150 id151 id152 id153 id154 id155 id156 id157 id158 id159 id160 id161 id162 id163 id164 id165 id166"/>
- </defs>
- <defs class="EmbeddedBulletChars">
- <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
- </g>
- <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
- </g>
- <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
- </g>
- <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
- </g>
- <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
- </g>
- <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
- </g>
- <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
- </g>
- <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
- </g>
- <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
- </g>
- <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
- </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
- <g id="id2" class="Master_Slide">
- <g id="bg-id2" class="Background"/>
- <g id="bo-id2" class="BackgroundObjects"/>
- </g>
- </g>
- <g class="SlideGroup">
- <g>
- <g id="container-id1">
- <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
- <g class="Page">
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id3">
- <rect class="BoundingBox" stroke="none" fill="none" x="2244" y="12978" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id4">
- <rect class="BoundingBox" stroke="none" fill="none" x="7291" y="12978" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id5">
- <rect class="BoundingBox" stroke="none" fill="none" x="2244" y="13462" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id6">
- <rect class="BoundingBox" stroke="none" fill="none" x="7291" y="13462" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id7">
- <rect class="BoundingBox" stroke="none" fill="none" x="2244" y="13946" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id8">
- <rect class="BoundingBox" stroke="none" fill="none" x="7291" y="13946" width="30294" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id9">
- <rect class="BoundingBox" stroke="none" fill="none" x="316" y="316" width="14233" height="14233"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 316,316 L 14548,316 14548,14548 316,14548 316,316 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id10">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="1332" width="12301" height="9456"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 2044,1332 L 14344,1332 14344,10787 2044,10787 2044,1332 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id11">
- <rect class="BoundingBox" stroke="none" fill="none" x="2786" y="1332" width="1" height="9455"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id12">
- <rect class="BoundingBox" stroke="none" fill="none" x="2776" y="1332" width="21" height="9455"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2786,1332 L 2786,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id13">
- <rect class="BoundingBox" stroke="none" fill="none" x="6391" y="1332" width="1" height="9455"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id14">
- <rect class="BoundingBox" stroke="none" fill="none" x="6381" y="1332" width="21" height="9455"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 6391,1332 L 6391,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id15">
- <rect class="BoundingBox" stroke="none" fill="none" x="9996" y="1332" width="1" height="9455"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id16">
- <rect class="BoundingBox" stroke="none" fill="none" x="9986" y="1332" width="21" height="9455"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 9996,1332 L 9996,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id17">
- <rect class="BoundingBox" stroke="none" fill="none" x="13601" y="1332" width="1" height="9455"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id18">
- <rect class="BoundingBox" stroke="none" fill="none" x="13591" y="1332" width="21" height="9455"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 13601,1332 L 13601,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id19">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="9735" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id20">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="9725" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,9735 L 14343,9735"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id21">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="8685" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id22">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="8675" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,8685 L 14343,8685"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id23">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="7634" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id24">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="7624" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,7634 L 14343,7634"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id25">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="6584" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id26">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="6574" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,6584 L 14343,6584"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id27">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="5534" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id28">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="5524" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,5534 L 14343,5534"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id29">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="4483" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id30">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="4473" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,4483 L 14343,4483"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id31">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="3433" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id32">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="3423" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,3433 L 14343,3433"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id33">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="2383" width="12300" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id34">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="2373" width="12300" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2044,2383 L 14343,2383"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id35">
- <rect class="BoundingBox" stroke="none" fill="none" x="2786" y="7015" width="10816" height="21"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 2786,7025 L 2846,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 2906,7025 L 2966,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3026,7025 L 3086,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3146,7025 L 3206,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3266,7025 L 3326,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3386,7025 L 3446,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3506,7025 L 3566,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3626,7025 L 3686,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3746,7025 L 3806,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3866,7025 L 3926,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 3986,7025 L 4046,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4106,7025 L 4166,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4226,7025 L 4286,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4346,7025 L 4406,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4466,7025 L 4526,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4586,7025 L 4646,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4706,7025 L 4766,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4826,7025 L 4886,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 4946,7025 L 5006,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5066,7025 L 5126,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5186,7025 L 5246,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5306,7025 L 5366,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5426,7025 L 5486,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5546,7025 L 5606,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5666,7025 L 5726,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5786,7025 L 5846,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 5906,7025 L 5966,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6026,7025 L 6086,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6146,7025 L 6206,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6266,7025 L 6326,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6386,7025 L 6446,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6506,7025 L 6566,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6626,7025 L 6686,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6746,7025 L 6806,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6866,7025 L 6926,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 6986,7025 L 7046,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7106,7025 L 7166,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7226,7025 L 7286,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7346,7025 L 7406,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7466,7025 L 7526,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7586,7025 L 7646,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7706,7025 L 7766,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7826,7025 L 7886,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 7946,7025 L 8006,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8066,7025 L 8126,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8186,7025 L 8246,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8306,7025 L 8366,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8426,7025 L 8486,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8546,7025 L 8606,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8666,7025 L 8726,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8786,7025 L 8846,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 8906,7025 L 8966,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9026,7025 L 9086,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9146,7025 L 9206,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9266,7025 L 9326,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9386,7025 L 9446,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9506,7025 L 9566,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9626,7025 L 9686,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9746,7025 L 9806,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9866,7025 L 9926,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 9986,7025 L 10046,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10106,7025 L 10166,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10226,7025 L 10286,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10346,7025 L 10406,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10466,7025 L 10526,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10586,7025 L 10646,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10706,7025 L 10766,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10826,7025 L 10886,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 10946,7025 L 11006,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11066,7025 L 11126,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11186,7025 L 11246,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11306,7025 L 11366,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11426,7025 L 11486,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11546,7025 L 11606,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11666,7025 L 11726,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11786,7025 L 11846,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 11906,7025 L 11966,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12026,7025 L 12086,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12146,7025 L 12206,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12266,7025 L 12326,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12386,7025 L 12446,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12506,7025 L 12566,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12626,7025 L 12686,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12746,7025 L 12806,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12866,7025 L 12926,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 12986,7025 L 13046,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 13106,7025 L 13166,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 13226,7025 L 13286,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 13346,7025 L 13406,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 13466,7025 L 13526,7025"/>
- <path fill="none" stroke="rgb(119,136,153)" stroke-width="20" stroke-linejoin="miter" d="M 13586,7025 L 13601,7025"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id36">
- <rect class="BoundingBox" stroke="none" fill="none" x="2786" y="7649" width="10816" height="21"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 2786,7659 L 2846,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 2906,7659 L 2966,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3026,7659 L 3086,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3146,7659 L 3206,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3266,7659 L 3326,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3386,7659 L 3446,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3506,7659 L 3566,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3626,7659 L 3686,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3746,7659 L 3806,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3866,7659 L 3926,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 3986,7659 L 4046,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4106,7659 L 4166,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4226,7659 L 4286,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4346,7659 L 4406,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4466,7659 L 4526,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4586,7659 L 4646,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4706,7659 L 4766,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4826,7659 L 4886,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 4946,7659 L 5006,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5066,7659 L 5126,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5186,7659 L 5246,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5306,7659 L 5366,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5426,7659 L 5486,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5546,7659 L 5606,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5666,7659 L 5726,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5786,7659 L 5846,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 5906,7659 L 5966,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6026,7659 L 6086,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6146,7659 L 6206,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6266,7659 L 6326,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6386,7659 L 6446,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6506,7659 L 6566,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6626,7659 L 6686,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6746,7659 L 6806,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6866,7659 L 6926,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 6986,7659 L 7046,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7106,7659 L 7166,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7226,7659 L 7286,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7346,7659 L 7406,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7466,7659 L 7526,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7586,7659 L 7646,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7706,7659 L 7766,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7826,7659 L 7886,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 7946,7659 L 8006,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8066,7659 L 8126,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8186,7659 L 8246,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8306,7659 L 8366,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8426,7659 L 8486,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8546,7659 L 8606,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8666,7659 L 8726,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8786,7659 L 8846,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 8906,7659 L 8966,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9026,7659 L 9086,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9146,7659 L 9206,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9266,7659 L 9326,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9386,7659 L 9446,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9506,7659 L 9566,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9626,7659 L 9686,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9746,7659 L 9806,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9866,7659 L 9926,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 9986,7659 L 10046,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10106,7659 L 10166,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10226,7659 L 10286,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10346,7659 L 10406,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10466,7659 L 10526,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10586,7659 L 10646,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10706,7659 L 10766,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10826,7659 L 10886,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 10946,7659 L 11006,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11066,7659 L 11126,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11186,7659 L 11246,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11306,7659 L 11366,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11426,7659 L 11486,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11546,7659 L 11606,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11666,7659 L 11726,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11786,7659 L 11846,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 11906,7659 L 11966,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12026,7659 L 12086,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12146,7659 L 12206,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12266,7659 L 12326,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12386,7659 L 12446,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12506,7659 L 12566,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12626,7659 L 12686,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12746,7659 L 12806,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12866,7659 L 12926,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 12986,7659 L 13046,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 13106,7659 L 13166,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 13226,7659 L 13286,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 13346,7659 L 13406,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 13466,7659 L 13526,7659"/>
- <path fill="none" stroke="rgb(46,139,87)" stroke-width="20" stroke-linejoin="miter" d="M 13586,7659 L 13601,7659"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id37">
- <rect class="BoundingBox" stroke="none" fill="none" x="2786" y="2960" width="10816" height="21"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 2786,2970 L 2846,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 2906,2970 L 2966,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3026,2970 L 3086,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3146,2970 L 3206,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3266,2970 L 3326,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3386,2970 L 3446,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3506,2970 L 3566,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3626,2970 L 3686,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3746,2970 L 3806,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3866,2970 L 3926,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 3986,2970 L 4046,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4106,2970 L 4166,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4226,2970 L 4286,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4346,2970 L 4406,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4466,2970 L 4526,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4586,2970 L 4646,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4706,2970 L 4766,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4826,2970 L 4886,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 4946,2970 L 5006,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5066,2970 L 5126,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5186,2970 L 5246,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5306,2970 L 5366,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5426,2970 L 5486,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5546,2970 L 5606,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5666,2970 L 5726,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5786,2970 L 5846,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 5906,2970 L 5966,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6026,2970 L 6086,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6146,2970 L 6206,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6266,2970 L 6326,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6386,2970 L 6446,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6506,2970 L 6566,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6626,2970 L 6686,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6746,2970 L 6806,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6866,2970 L 6926,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 6986,2970 L 7046,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7106,2970 L 7166,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7226,2970 L 7286,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7346,2970 L 7406,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7466,2970 L 7526,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7586,2970 L 7646,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7706,2970 L 7766,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7826,2970 L 7886,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 7946,2970 L 8006,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8066,2970 L 8126,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8186,2970 L 8246,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8306,2970 L 8366,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8426,2970 L 8486,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8546,2970 L 8606,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8666,2970 L 8726,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8786,2970 L 8846,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 8906,2970 L 8966,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9026,2970 L 9086,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9146,2970 L 9206,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9266,2970 L 9326,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9386,2970 L 9446,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9506,2970 L 9566,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9626,2970 L 9686,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9746,2970 L 9806,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9866,2970 L 9926,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 9986,2970 L 10046,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10106,2970 L 10166,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10226,2970 L 10286,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10346,2970 L 10406,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10466,2970 L 10526,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10586,2970 L 10646,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10706,2970 L 10766,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10826,2970 L 10886,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 10946,2970 L 11006,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11066,2970 L 11126,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11186,2970 L 11246,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11306,2970 L 11366,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11426,2970 L 11486,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11546,2970 L 11606,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11666,2970 L 11726,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11786,2970 L 11846,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 11906,2970 L 11966,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12026,2970 L 12086,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12146,2970 L 12206,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12266,2970 L 12326,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12386,2970 L 12446,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12506,2970 L 12566,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12626,2970 L 12686,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12746,2970 L 12806,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12866,2970 L 12926,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 12986,2970 L 13046,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 13106,2970 L 13166,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 13226,2970 L 13286,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 13346,2970 L 13406,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 13466,2970 L 13526,2970"/>
- <path fill="none" stroke="rgb(60,179,113)" stroke-width="20" stroke-linejoin="miter" d="M 13586,2970 L 13601,2970"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id38">
- <rect class="BoundingBox" stroke="none" fill="none" x="2782" y="7983" width="10822" height="715"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2786,8677 L 6392,8004 13602,8120"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id39">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="8575" width="205" height="205"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 2888,8677 C 2888,8733 2843,8779 2787,8779 2730,8779 2684,8733 2684,8677 2684,8620 2730,8575 2787,8575 2843,8575 2888,8620 2888,8677 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id40">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="7902" width="207" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 6494,8004 C 6494,8061 6448,8107 6391,8107 6335,8107 6289,8061 6289,8004 6289,7948 6335,7902 6391,7902 6448,7902 6494,7948 6494,8004 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id41">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="8018" width="205" height="205"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 13704,8121 C 13704,8177 13659,8222 13602,8222 13546,8222 13500,8177 13500,8121 13500,8065 13546,8018 13602,8018 13659,8018 13704,8065 13704,8121 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id42">
- <rect class="BoundingBox" stroke="none" fill="none" x="2775" y="2298" width="10839" height="6390"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2786,8669 L 2943,8577"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3100,8485 L 3257,8392"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3414,8300 L 3571,8208"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 3728,8116 L 3885,8024"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 4041,7932 L 4198,7839"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 4355,7747 L 4512,7655"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 4669,7563 L 4826,7471"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 4983,7379 L 5140,7286"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 5297,7194 L 5454,7102"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 5611,7010 L 5768,6918"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 5925,6825 L 6082,6733"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 6238,6641 L 6395,6549"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 6552,6457 L 6709,6365"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 6866,6272 L 7023,6180"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 7180,6088 L 7337,5996"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 7494,5904 L 7651,5812"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 7808,5719 L 7965,5627"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 8122,5535 L 8279,5443"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 8436,5351 L 8592,5258"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 8749,5166 L 8906,5074"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 9063,4982 L 9220,4890"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 9377,4798 L 9534,4705"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 9691,4613 L 9848,4521"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 10005,4429 L 10162,4337"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 10319,4245 L 10476,4152"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 10633,4060 L 10789,3968"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 10946,3876 L 11103,3784"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 11260,3691 L 11417,3599"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 11574,3507 L 11731,3415"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 11888,3323 L 12045,3231"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 12202,3138 L 12359,3046"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 12516,2954 L 12673,2862"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 12830,2770 L 12987,2678"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 13143,2585 L 13300,2493"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 13457,2401 L 13602,2316"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id43">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="8567" width="205" height="205"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 2888,8669 C 2888,8725 2843,8771 2787,8771 2730,8771 2684,8725 2684,8669 2684,8612 2730,8567 2787,8567 2843,8567 2888,8612 2888,8669 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id44">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="6449" width="207" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 6494,6551 C 6494,6608 6448,6654 6391,6654 6335,6654 6289,6608 6289,6551 6289,6495 6335,6449 6391,6449 6448,6449 6494,6495 6494,6551 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id45">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="2214" width="205" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 13704,2316 C 13704,2373 13659,2419 13602,2419 13546,2419 13500,2373 13500,2316 13500,2260 13546,2214 13602,2214 13659,2214 13704,2260 13704,2316 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id46">
- <rect class="BoundingBox" stroke="none" fill="none" x="2778" y="8008" width="10826" height="1468"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9456 L 6392,8029 13602,8254"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id47">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9354" width="205" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 2888,9456 C 2888,9513 2843,9558 2787,9558 2730,9558 2684,9513 2684,9456 2684,9399 2730,9354 2787,9354 2843,9354 2888,9399 2888,9456 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id48">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="7928" width="207" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 6494,8030 C 6494,8086 6448,8132 6391,8132 6335,8132 6289,8086 6289,8030 6289,7973 6335,7928 6391,7928 6448,7928 6494,7973 6494,8030 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id49">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="8153" width="205" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 13704,8255 C 13704,8312 13659,8357 13602,8357 13546,8357 13500,8312 13500,8255 13500,8198 13546,8153 13602,8153 13659,8153 13704,8198 13704,8255 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id50">
- <rect class="BoundingBox" stroke="none" fill="none" x="2777" y="4240" width="10835" height="4935"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9155 L 2952,9080"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 3118,9005 L 3283,8930"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 3449,8855 L 3615,8780"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 3781,8705 L 3947,8630"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4112,8555 L 4278,8480"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4444,8404 L 4610,8329"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 4776,8254 L 4941,8179"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5107,8104 L 5273,8029"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5439,7954 L 5605,7879"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 5770,7804 L 5936,7729"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 6102,7654 L 6268,7579"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 6434,7504 L 6599,7429"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 6765,7354 L 6931,7279"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 7097,7204 L 7263,7129"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 7429,7054 L 7594,6978"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 7760,6903 L 7926,6828"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 8092,6753 L 8258,6678"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 8423,6603 L 8589,6528"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 8755,6453 L 8921,6378"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 9087,6303 L 9252,6228"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 9418,6153 L 9584,6078"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 9750,6003 L 9916,5928"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 10081,5853 L 10247,5778"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 10413,5703 L 10579,5627"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 10745,5552 L 10910,5477"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 11076,5402 L 11242,5327"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 11408,5252 L 11574,5177"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 11739,5102 L 11905,5027"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 12071,4952 L 12237,4877"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 12403,4802 L 12568,4727"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 12734,4652 L 12900,4577"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 13066,4502 L 13232,4427"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 13397,4352 L 13563,4277"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id51">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9052" width="205" height="206"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 2888,9154 C 2888,9210 2843,9257 2787,9257 2730,9257 2684,9210 2684,9154 2684,9098 2730,9052 2787,9052 2843,9052 2888,9098 2888,9154 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id52">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="7421" width="207" height="205"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 6494,7522 C 6494,7578 6448,7625 6391,7625 6335,7625 6289,7578 6289,7522 6289,7466 6335,7421 6391,7421 6448,7421 6494,7466 6494,7522 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id53">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="4157" width="205" height="206"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 13704,4260 C 13704,4316 13659,4362 13602,4362 13546,4362 13500,4316 13500,4260 13500,4204 13546,4157 13602,4157 13659,4157 13704,4204 13704,4260 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id54">
- <rect class="BoundingBox" stroke="none" fill="none" x="2779" y="7971" width="10826" height="1811"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9762 L 6392,8515 13602,7991"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id55">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9660" width="205" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 2888,9761 C 2888,9818 2843,9864 2787,9864 2730,9864 2684,9818 2684,9761 2684,9705 2730,9660 2787,9660 2843,9660 2888,9705 2888,9761 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id56">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="8413" width="207" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 6494,8516 C 6494,8572 6448,8617 6391,8617 6335,8617 6289,8572 6289,8516 6289,8459 6335,8413 6391,8413 6448,8413 6494,8459 6494,8516 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id57">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="7889" width="205" height="206"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 13704,7991 C 13704,8048 13659,8094 13602,8094 13546,8094 13500,8048 13500,7991 13500,7935 13546,7889 13602,7889 13659,7889 13704,7935 13704,7991 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id58">
- <rect class="BoundingBox" stroke="none" fill="none" x="2779" y="5801" width="10831" height="3764"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9545 L 2958,9486"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 3130,9426 L 3302,9367"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 3474,9308 L 3646,9249"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 3818,9189 L 3991,9130"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 4163,9071 L 4335,9012"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 4507,8952 L 4679,8893"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 4851,8834 L 5023,8775"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 5195,8715 L 5367,8656"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 5539,8597 L 5711,8538"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 5883,8478 L 6056,8419"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6228,8360 L 6400,8300"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6572,8241 L 6744,8182"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 6916,8123 L 7088,8063"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7260,8004 L 7432,7945"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7604,7886 L 7776,7826"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 7948,7767 L 8121,7708"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 8293,7649 L 8465,7589"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 8637,7530 L 8809,7471"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 8981,7411 L 9153,7352"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 9325,7293 L 9497,7234"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 9669,7174 L 9841,7115"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 10013,7056 L 10185,6997"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 10358,6937 L 10530,6878"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 10702,6819 L 10874,6760"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 11046,6700 L 11218,6641"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 11390,6582 L 11562,6523"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 11734,6463 L 11906,6404"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 12078,6345 L 12250,6285"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 12423,6226 L 12595,6167"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 12767,6108 L 12939,6048"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 13111,5989 L 13283,5930"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 13455,5871 L 13602,5820"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id59">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9442" width="205" height="206"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 2888,9544 C 2888,9600 2843,9647 2787,9647 2730,9647 2684,9600 2684,9544 2684,9488 2730,9443 2787,9443 2843,9443 2888,9488 2888,9544 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id60">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="8201" width="207" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 6494,8304 C 6494,8360 6448,8405 6391,8405 6335,8405 6289,8360 6289,8304 6289,8248 6335,8201 6391,8201 6448,8201 6494,8248 6494,8304 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id61">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="5717" width="205" height="206"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 13704,5821 C 13704,5877 13659,5922 13602,5922 13546,5922 13500,5877 13500,5821 13500,5764 13546,5718 13602,5718 13659,5718 13704,5764 13704,5821 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id62">
- <rect class="BoundingBox" stroke="none" fill="none" x="2782" y="8320" width="10824" height="1619"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9918 L 6392,9280 13602,8340"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id63">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9815" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 2888,9918 C 2888,9974 2843,10019 2787,10019 2730,10019 2684,9974 2684,9918 2684,9862 2730,9815 2787,9815 2843,9815 2888,9862 2888,9918 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id64">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="9178" width="207" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 6494,9280 C 6494,9337 6448,9382 6391,9382 6335,9382 6289,9337 6289,9280 6289,9223 6335,9178 6391,9178 6448,9178 6494,9223 6494,9280 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id65">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="8238" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 13704,8340 C 13704,8396 13659,8442 13602,8442 13546,8442 13500,8396 13500,8340 13500,8284 13546,8238 13602,8238 13659,8238 13704,8284 13704,8340 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id66">
- <rect class="BoundingBox" stroke="none" fill="none" x="2780" y="6922" width="10829" height="2925"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9826 L 2962,9779"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 3138,9732 L 3314,9685"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 3489,9638 L 3665,9592"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 3841,9545 L 4017,9498"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 4193,9451 L 4369,9404"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 4545,9357 L 4720,9310"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 4896,9263 L 5072,9216"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 5248,9170 L 5424,9123"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 5600,9076 L 5776,9029"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 5951,8982 L 6127,8935"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 6303,8888 L 6479,8841"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 6655,8794 L 6831,8748"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 7007,8701 L 7182,8654"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 7358,8607 L 7534,8560"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 7710,8513 L 7886,8466"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8062,8419 L 8238,8372"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8413,8326 L 8589,8279"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 8765,8232 L 8941,8185"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9117,8138 L 9293,8091"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9469,8044 L 9644,7997"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 9820,7950 L 9996,7903"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 10172,7857 L 10348,7810"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 10524,7763 L 10700,7716"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 10875,7669 L 11051,7622"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 11227,7575 L 11403,7528"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 11579,7481 L 11755,7435"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 11931,7388 L 12106,7341"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 12282,7294 L 12458,7247"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 12634,7200 L 12810,7153"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 12986,7106 L 13161,7059"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 13337,7013 L 13513,6966"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id67">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9723" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 2888,9825 C 2888,9882 2843,9927 2787,9927 2730,9927 2684,9882 2684,9825 2684,9769 2730,9723 2787,9723 2843,9723 2888,9769 2888,9825 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id68">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="8762" width="207" height="206"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 6494,8865 C 6494,8921 6448,8967 6391,8967 6335,8967 6289,8921 6289,8865 6289,8808 6335,8762 6391,8762 6448,8762 6494,8808 6494,8865 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id69">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="6840" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 13704,6942 C 13704,6998 13659,7044 13602,7044 13546,7044 13500,6998 13500,6942 13500,6886 13546,6840 13602,6840 13659,6840 13704,6886 13704,6942 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyLineShape">
- <g id="id70">
- <rect class="BoundingBox" stroke="none" fill="none" x="2782" y="8264" width="10825" height="1887"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 2786,10130 L 6392,9472 13602,8284"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id71">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="10027" width="205" height="206"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 2888,10130 C 2888,10186 2843,10232 2787,10232 2730,10232 2684,10186 2684,10130 2684,10074 2730,10027 2787,10027 2843,10027 2888,10074 2888,10130 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id72">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="9370" width="207" height="205"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 6494,9473 C 6494,9529 6448,9574 6391,9574 6335,9574 6289,9529 6289,9473 6289,9416 6335,9370 6391,9370 6448,9370 6494,9416 6494,9473 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id73">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="8182" width="205" height="205"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 13704,8285 C 13704,8341 13659,8386 13602,8386 13546,8386 13500,8341 13500,8285 13500,8228 13546,8182 13602,8182 13659,8182 13704,8228 13704,8285 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id74">
- <rect class="BoundingBox" stroke="none" fill="none" x="2781" y="7467" width="10827" height="2516"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9962 L 2963,9921"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 3141,9881 L 3318,9840"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 3496,9800 L 3673,9759"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 3850,9718 L 4028,9678"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 4205,9637 L 4383,9597"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 4560,9556 L 4738,9515"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 4915,9475 L 5092,9434"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 5270,9394 L 5447,9353"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 5625,9312 L 5802,9272"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 5979,9231 L 6157,9191"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 6334,9150 L 6512,9109"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 6689,9069 L 6867,9028"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 7044,8988 L 7221,8947"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 7399,8906 L 7576,8866"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 7754,8825 L 7931,8785"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 8108,8744 L 8286,8703"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 8463,8663 L 8641,8622"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 8818,8582 L 8996,8541"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 9173,8500 L 9350,8460"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 9528,8419 L 9705,8379"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 9883,8338 L 10060,8298"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10237,8257 L 10415,8216"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10592,8176 L 10770,8135"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 10947,8095 L 11124,8054"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 11302,8013 L 11479,7973"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 11657,7932 L 11834,7892"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 12012,7851 L 12189,7810"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 12366,7770 L 12544,7729"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 12721,7689 L 12899,7648"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 13076,7607 L 13253,7567"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 13431,7526 L 13602,7487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id75">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9859" width="205" height="206"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 2888,9961 C 2888,10017 2843,10064 2787,10064 2730,10064 2684,10017 2684,9961 2684,9905 2730,9859 2787,9859 2843,9859 2888,9905 2888,9961 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id76">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="9034" width="207" height="206"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 6494,9137 C 6494,9193 6448,9239 6391,9239 6335,9239 6289,9193 6289,9137 6289,9081 6335,9035 6391,9035 6448,9035 6494,9081 6494,9137 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id77">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="7385" width="205" height="206"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 13704,7488 C 13704,7544 13659,7590 13602,7590 13546,7590 13500,7544 13500,7488 13500,7432 13546,7385 13602,7385 13659,7385 13704,7432 13704,7488 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id78">
- <rect class="BoundingBox" stroke="none" fill="none" x="2782" y="8380" width="10825" height="1718"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 2786,10077 L 13602,8400"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id79">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9974" width="205" height="205"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 2888,10077 C 2888,10133 2843,10178 2787,10178 2730,10178 2684,10133 2684,10077 2684,10020 2730,9974 2787,9974 2843,9974 2888,10020 2888,10077 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id80">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="9414" width="207" height="206"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 6494,9517 C 6494,9573 6448,9619 6391,9619 6335,9619 6289,9573 6289,9517 6289,9461 6335,9414 6391,9414 6448,9414 6494,9461 6494,9517 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id81">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="8298" width="205" height="205"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 13704,8400 C 13704,8457 13659,8502 13602,8502 13546,8502 13500,8457 13500,8400 13500,8344 13546,8298 13602,8298 13659,8298 13704,8344 13704,8400 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id82">
- <rect class="BoundingBox" stroke="none" fill="none" x="2781" y="7603" width="10827" height="2414"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 2786,9996 L 2964,9957"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 3142,9918 L 3319,9879"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 3497,9840 L 3675,9801"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 3853,9762 L 4030,9723"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 4208,9684 L 4386,9645"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 4564,9606 L 4741,9567"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 4919,9528 L 5097,9489"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 5275,9450 L 5453,9411"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 5630,9372 L 5808,9333"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 5986,9294 L 6164,9255"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 6341,9216 L 6519,9177"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 6697,9138 L 6875,9099"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 7053,9060 L 7230,9021"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 7408,8982 L 7586,8943"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 7764,8904 L 7941,8865"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 8119,8826 L 8297,8787"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 8475,8748 L 8652,8709"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 8830,8670 L 9008,8631"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 9186,8592 L 9364,8553"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 9541,8514 L 9719,8475"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 9897,8436 L 10075,8397"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 10252,8358 L 10430,8319"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 10608,8280 L 10786,8241"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 10964,8202 L 11141,8163"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 11319,8124 L 11497,8085"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 11675,8046 L 11852,8007"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12030,7968 L 12208,7929"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12386,7890 L 12563,7851"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 12741,7812 L 12919,7773"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 13097,7734 L 13275,7695"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 13452,7656 L 13602,7623"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id83">
- <rect class="BoundingBox" stroke="none" fill="none" x="2684" y="9893" width="205" height="206"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 2888,9995 C 2888,10051 2843,10098 2787,10098 2730,10098 2684,10051 2684,9995 2684,9939 2730,9893 2787,9893 2843,9893 2888,9939 2888,9995 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id84">
- <rect class="BoundingBox" stroke="none" fill="none" x="6289" y="9103" width="207" height="205"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 6494,9204 C 6494,9262 6448,9307 6391,9307 6335,9307 6289,9262 6289,9204 6289,9148 6335,9103 6391,9103 6448,9103 6494,9148 6494,9204 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id85">
- <rect class="BoundingBox" stroke="none" fill="none" x="13500" y="7521" width="205" height="206"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 13704,7624 C 13704,7680 13659,7726 13602,7726 13546,7726 13500,7680 13500,7624 13500,7567 13546,7521 13602,7521 13659,7521 13704,7567 13704,7624 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id86">
- <rect class="BoundingBox" stroke="none" fill="none" x="2023" y="10786" width="12321" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,10796 L 14343,10796"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id87">
- <rect class="BoundingBox" stroke="none" fill="none" x="2024" y="1332" width="21" height="9455"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2034,1332 L 2034,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id88">
- <rect class="BoundingBox" stroke="none" fill="none" x="2786" y="10806" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id89">
- <rect class="BoundingBox" stroke="none" fill="none" x="2776" y="10806" width="21" height="103"/>
- <path fill="none" stroke="rgb(238,238,238)" stroke-width="20" stroke-linejoin="miter" d="M 2786,10806 L 2786,10908"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id90">
- <rect class="BoundingBox" stroke="none" fill="none" x="6391" y="10806" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id91">
- <rect class="BoundingBox" stroke="none" fill="none" x="6381" y="10806" width="21" height="103"/>
- <path fill="none" stroke="rgb(238,238,238)" stroke-width="20" stroke-linejoin="miter" d="M 6391,10806 L 6391,10908"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id92">
- <rect class="BoundingBox" stroke="none" fill="none" x="9996" y="10806" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id93">
- <rect class="BoundingBox" stroke="none" fill="none" x="9986" y="10806" width="21" height="103"/>
- <path fill="none" stroke="rgb(238,238,238)" stroke-width="20" stroke-linejoin="miter" d="M 9996,10806 L 9996,10908"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id94">
- <rect class="BoundingBox" stroke="none" fill="none" x="13601" y="10806" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id95">
- <rect class="BoundingBox" stroke="none" fill="none" x="13591" y="10806" width="21" height="103"/>
- <path fill="none" stroke="rgb(238,238,238)" stroke-width="20" stroke-linejoin="miter" d="M 13601,10806 L 13601,10908"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id96">
- <rect class="BoundingBox" stroke="none" fill="none" x="2683" y="10996" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2683" y="11297"><tspan fill="rgb(68,68,68)" stroke="none">1</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id97">
- <rect class="BoundingBox" stroke="none" fill="none" x="6288" y="10996" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="6288" y="11297"><tspan fill="rgb(68,68,68)" stroke="none">2</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id98">
- <rect class="BoundingBox" stroke="none" fill="none" x="9894" y="10996" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="9894" y="11297"><tspan fill="rgb(68,68,68)" stroke="none">3</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id99">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="10786" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id100">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="10776" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,10786 L 1922,10786"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id101">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="9735" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id102">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="9725" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,9735 L 1922,9735"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id103">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="8685" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id104">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="8675" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,8685 L 1922,8685"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id105">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="7634" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id106">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="7624" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,7634 L 1922,7634"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id107">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="6584" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id108">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="6574" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,6584 L 1922,6584"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id109">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="5534" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id110">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="5524" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,5534 L 1922,5534"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id111">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="4483" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id112">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="4473" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,4483 L 1922,4483"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id113">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="3433" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id114">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="3423" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,3433 L 1922,3433"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id115">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="2383" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id116">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="2373" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,2383 L 1922,2383"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id117">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="1332" width="102" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id118">
- <rect class="BoundingBox" stroke="none" fill="none" x="1922" y="1322" width="102" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2023,1332 L 1922,1332"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id119">
- <rect class="BoundingBox" stroke="none" fill="none" x="13499" y="10996" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="13499" y="11297"><tspan fill="rgb(68,68,68)" stroke="none">4</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id120">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="10598" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="10899"><tspan fill="rgb(68,68,68)" stroke="none">0.000</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id121">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="9548" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="9849"><tspan fill="rgb(68,68,68)" stroke="none">10.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id122">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="8497" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="8798"><tspan fill="rgb(68,68,68)" stroke="none">20.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id123">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="7447" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="7748"><tspan fill="rgb(68,68,68)" stroke="none">30.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id124">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="6396" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="6697"><tspan fill="rgb(68,68,68)" stroke="none">40.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id125">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="5346" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="5647"><tspan fill="rgb(68,68,68)" stroke="none">50.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id126">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="4296" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="4597"><tspan fill="rgb(68,68,68)" stroke="none">60.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id127">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="3245" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="3546"><tspan fill="rgb(68,68,68)" stroke="none">70.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id128">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="2195" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="2496"><tspan fill="rgb(68,68,68)" stroke="none">80.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id129">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="12675" width="12301" height="1670"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id130">
- <rect class="BoundingBox" stroke="none" fill="none" x="2145" y="13000" width="611" height="41"/>
- <path fill="none" stroke="rgb(135,206,235)" stroke-width="40" stroke-linejoin="miter" d="M 2145,13020 L 2755,13020"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id131">
- <rect class="BoundingBox" stroke="none" fill="none" x="2349" y="12918" width="205" height="206"/>
- <path fill="rgb(135,206,235)" stroke="none" d="M 2553,13020 C 2553,13076 2506,13123 2450,13123 2394,13123 2349,13076 2349,13020 2349,12964 2394,12918 2450,12918 2506,12918 2553,12964 2553,13020 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id132">
- <rect class="BoundingBox" stroke="none" fill="none" x="927" y="1144" width="934" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="927" y="1445"><tspan fill="rgb(68,68,68)" stroke="none">90.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id133">
- <rect class="BoundingBox" stroke="none" fill="none" x="7192" y="13000" width="611" height="41"/>
- <path fill="none" stroke="rgb(128,128,0)" stroke-width="40" stroke-linejoin="miter" d="M 7192,13020 L 7802,13020"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id134">
- <rect class="BoundingBox" stroke="none" fill="none" x="7396" y="12918" width="205" height="206"/>
- <path fill="rgb(128,128,0)" stroke="none" d="M 7600,13020 C 7600,13076 7554,13123 7498,13123 7442,13123 7396,13076 7396,13020 7396,12964 7442,12918 7498,12918 7554,12918 7600,12964 7600,13020 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id135">
- <rect class="BoundingBox" stroke="none" fill="none" x="2857" y="12845" width="1870" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2857" y="13146"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2patch</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id136">
- <rect class="BoundingBox" stroke="none" fill="none" x="2145" y="13484" width="611" height="41"/>
- <path fill="none" stroke="rgb(128,0,128)" stroke-width="40" stroke-linejoin="miter" d="M 2145,13504 L 2755,13504"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id137">
- <rect class="BoundingBox" stroke="none" fill="none" x="2349" y="13402" width="205" height="205"/>
- <path fill="rgb(128,0,128)" stroke="none" d="M 2553,13505 C 2553,13561 2506,13606 2450,13606 2394,13606 2349,13561 2349,13505 2349,13448 2394,13402 2450,13402 2506,13402 2553,13448 2553,13505 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id138">
- <rect class="BoundingBox" stroke="none" fill="none" x="7904" y="12845" width="2099" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7904" y="13146"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2xcbase</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id139">
- <rect class="BoundingBox" stroke="none" fill="none" x="7192" y="13484" width="611" height="41"/>
- <path fill="none" stroke="rgb(255,127,80)" stroke-width="40" stroke-linejoin="miter" d="M 7192,13504 L 7802,13504"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id140">
- <rect class="BoundingBox" stroke="none" fill="none" x="7396" y="13402" width="205" height="205"/>
- <path fill="rgb(255,127,80)" stroke="none" d="M 7600,13505 C 7600,13561 7554,13606 7498,13606 7442,13606 7396,13561 7396,13505 7396,13448 7442,13402 7498,13402 7554,13402 7600,13448 7600,13505 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id141">
- <rect class="BoundingBox" stroke="none" fill="none" x="2857" y="13329" width="3267" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2857" y="13630"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdbasemaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id142">
- <rect class="BoundingBox" stroke="none" fill="none" x="2145" y="13968" width="611" height="41"/>
- <path fill="none" stroke="rgb(75,0,130)" stroke-width="40" stroke-linejoin="miter" d="M 2145,13988 L 2755,13988"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id143">
- <rect class="BoundingBox" stroke="none" fill="none" x="2349" y="13886" width="205" height="205"/>
- <path fill="rgb(75,0,130)" stroke="none" d="M 2553,13989 C 2553,14045 2506,14090 2450,14090 2394,14090 2349,14045 2349,13989 2349,13933 2394,13886 2450,13886 2506,13886 2553,13933 2553,13989 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id144">
- <rect class="BoundingBox" stroke="none" fill="none" x="7904" y="13329" width="3932" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7904" y="13630"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale10kmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id145">
- <rect class="BoundingBox" stroke="none" fill="none" x="7192" y="13968" width="611" height="41"/>
- <path fill="none" stroke="rgb(255,192,203)" stroke-width="40" stroke-linejoin="miter" d="M 7192,13988 L 7802,13988"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id146">
- <rect class="BoundingBox" stroke="none" fill="none" x="7396" y="13886" width="205" height="205"/>
- <path fill="rgb(255,192,203)" stroke="none" d="M 7600,13989 C 7600,14045 7554,14090 7498,14090 7442,14090 7396,14045 7396,13989 7396,13933 7442,13886 7498,13886 7554,13886 7600,13933 7600,13989 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id147">
- <rect class="BoundingBox" stroke="none" fill="none" x="2857" y="13813" width="4139" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2857" y="14114"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale100kmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id148">
- <rect class="BoundingBox" stroke="none" fill="none" x="7904" y="13813" width="3851" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="7904" y="14114"><tspan fill="rgb(68,68,68)" stroke="none">eth-l2bdscale1mmaclrn</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id149">
- <rect class="BoundingBox" stroke="none" fill="none" x="1377" y="485" width="12080" height="426"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="365px" font-weight="700"><tspan class="TextPosition" x="1389" y="824"><tspan fill="rgb(68,68,68)" stroke="none">Speedup Multi-core: </tspan><tspan font-weight="400" fill="rgb(68,68,68)" stroke="none">l2sw-3n-hsw-x710-64b-ndr-base-and-scale</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id150">
- <rect class="BoundingBox" stroke="none" fill="none" x="6339" y="11663" width="3710" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="6350" y="11964"><tspan fill="rgb(68,68,68)" stroke="none">Number of Cores [Qty]</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id151">
- <rect class="BoundingBox" stroke="none" fill="none" x="2054" y="11974" width="2807" height="430"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id152">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="11964" width="2828" height="450"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id153">
- <rect class="BoundingBox" stroke="none" fill="none" x="503" y="3898" width="379" height="4328"/>
- <text class="TextShape" transform="translate(804,8214) rotate(-90) translate(-804,-8214)"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="804" y="8214"><tspan fill="rgb(68,68,68)" stroke="none">Packet Throughput [Mpps]</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id154">
- <rect class="BoundingBox" stroke="none" fill="none" x="2054" y="12117" width="4454" height="429"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id155">
- <rect class="BoundingBox" stroke="none" fill="none" x="2044" y="12107" width="4474" height="449"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id156">
- <rect class="BoundingBox" stroke="none" fill="none" x="2084" y="12016" width="2748" height="349"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Courier" font-size="305px" font-weight="400"><tspan class="TextPosition" x="2085" y="12270"><tspan fill="rgb(68,68,68)" stroke="none">_ _ __</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id157">
- <rect class="BoundingBox" stroke="none" fill="none" x="2805" y="6628" width="3114" height="388"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id158">
- <rect class="BoundingBox" stroke="none" fill="none" x="2796" y="6618" width="3133" height="409"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id159">
- <rect class="BoundingBox" stroke="none" fill="none" x="2000" y="12100" width="4380" height="349"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="Courier" font-size="305px" font-weight="400"><tspan class="TextPosition" x="2000" y="12354"><tspan fill="rgb(68,68,68)" stroke="none"> </tspan><tspan fill="rgb(68,68,68)" stroke="none">perfect measured</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id160">
- <rect class="BoundingBox" stroke="none" fill="none" x="2806" y="7258" width="3194" height="389"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id161">
- <rect class="BoundingBox" stroke="none" fill="none" x="2796" y="7248" width="3214" height="409"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id162">
- <rect class="BoundingBox" stroke="none" fill="none" x="2827" y="6659" width="3062" height="332"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="284px" font-weight="400"><tspan class="TextPosition" x="2837" y="6921"><tspan fill="rgb(68,68,68)" stroke="none">NIC Limit: 35.80Mpps</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id163">
- <rect class="BoundingBox" stroke="none" fill="none" x="2806" y="2582" width="3235" height="389"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id164">
- <rect class="BoundingBox" stroke="none" fill="none" x="2795" y="2572" width="3256" height="409"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id165">
- <rect class="BoundingBox" stroke="none" fill="none" x="2827" y="7290" width="3146" height="332"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="284px" font-weight="400"><tspan class="TextPosition" x="2837" y="7552"><tspan fill="rgb(68,68,68)" stroke="none">Link Limit: 29.76Mpps</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id166">
- <rect class="BoundingBox" stroke="none" fill="none" x="2827" y="2614" width="3192" height="332"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="284px" font-weight="400"><tspan class="TextPosition" x="2837" y="2876"><tspan fill="rgb(68,68,68)" stroke="none">PCIe Limit: 74.40Mpps</tspan></tspan></tspan></text>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/resources/tools/presentation/doc/pic/graph-throughput.svg b/resources/tools/presentation/doc/pic/graph-throughput.svg
deleted file mode 100644
index d17c93b1cc..0000000000
--- a/resources/tools/presentation/doc/pic/graph-throughput.svg
+++ /dev/null
@@ -1,645 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.2" width="150mm" height="170mm" viewBox="0 0 15000 17000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
- <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
- <rect x="0" y="0" width="15000" height="17000"/>
- </clipPath>
- <clipPath id="presentation_clip_path_shrink" clipPathUnits="userSpaceOnUse">
- <rect x="15" y="17" width="14970" height="16966"/>
- </clipPath>
- </defs>
- <defs>
- <font id="EmbeddedFont_1" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="x" horiz-adv-x="1086" d="M 1124,1120 L 719,575 1145,0 928,0 602,440 276,0 59,0 494,586 96,1120 313,1120 610,721 907,1120 1124,1120 Z"/>
- <glyph unicode="w" horiz-adv-x="1510" d="M 86,1120 L 270,1120 500,246 729,1120 946,1120 1176,246 1405,1120 1589,1120 1296,0 1079,0 838,918 596,0 379,0 86,1120 Z"/>
- <glyph unicode="u" horiz-adv-x="927" d="M 174,442 L 174,1120 358,1120 358,449 C 358,343 379,264 420,211 461,158 523,131 606,131 705,131 784,163 842,226 899,289 928,376 928,485 L 928,1120 1112,1120 1112,0 928,0 928,172 C 883,104 832,54 773,21 714,-12 645,-29 567,-29 438,-29 341,11 274,91 207,171 174,288 174,442 Z "/>
- <glyph unicode="t" horiz-adv-x="689" d="M 375,1438 L 375,1120 754,1120 754,977 375,977 375,369 C 375,278 388,219 413,193 438,167 488,154 565,154 L 754,154 754,0 565,0 C 423,0 325,27 271,80 217,133 190,229 190,369 L 190,977 55,977 55,1120 190,1120 190,1438 375,1438 Z"/>
- <glyph unicode="s" horiz-adv-x="848" d="M 907,1087 L 907,913 C 855,940 801,960 745,973 689,986 631,993 571,993 480,993 411,979 366,951 320,923 297,881 297,825 297,782 313,749 346,725 379,700 444,677 543,655 L 606,641 C 737,613 830,574 885,523 940,472 967,400 967,309 967,205 926,123 844,62 761,1 648,-29 504,-29 444,-29 382,-23 317,-12 252,0 183,18 111,41 L 111,231 C 179,196 246,169 312,152 378,134 443,125 508,125 595,125 661,140 708,170 755,199 778,241 778,295 778,345 761,383 728,410 694,437 620,462 506,487 L 442,502 C 328,526 246,563 195,613 144,662 119,730 119,817 119,922 156,1004 231,1061 306,1118 412,1147 549,1147 617,1147 681,1142 741,1132 801,1122 856,1107 907,1087 Z"/>
- <glyph unicode="r" horiz-adv-x="663" d="M 842,948 C 821,960 799,969 775,975 750,980 723,983 694,983 590,983 510,949 455,882 399,814 371,717 371,590 L 371,0 186,0 186,1120 371,1120 371,946 C 410,1014 460,1065 522,1098 584,1131 659,1147 748,1147 761,1147 775,1146 790,1145 805,1143 822,1140 841,1137 L 842,948 Z"/>
- <glyph unicode="p" horiz-adv-x="1007" d="M 371,168 L 371,-426 186,-426 186,1120 371,1120 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 Z M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z"/>
- <glyph unicode="o" horiz-adv-x="1033" d="M 627,991 C 528,991 450,953 393,876 336,799 307,693 307,559 307,425 336,320 393,243 450,166 528,127 627,127 725,127 803,166 860,243 917,320 946,426 946,559 946,692 917,797 860,875 803,952 725,991 627,991 Z M 627,1147 C 787,1147 913,1095 1004,991 1095,887 1141,743 1141,559 1141,376 1095,232 1004,128 913,23 787,-29 627,-29 466,-29 341,23 250,128 159,232 113,376 113,559 113,743 159,887 250,991 341,1095 466,1147 627,1147 Z"/>
- <glyph unicode="n" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="m" horiz-adv-x="1615" d="M 1065,905 C 1111,988 1166,1049 1230,1088 1294,1127 1369,1147 1456,1147 1573,1147 1663,1106 1726,1025 1789,943 1821,827 1821,676 L 1821,0 1636,0 1636,670 C 1636,777 1617,857 1579,909 1541,961 1483,987 1405,987 1310,987 1234,955 1179,892 1124,829 1096,742 1096,633 L 1096,0 911,0 911,670 C 911,778 892,858 854,910 816,961 757,987 678,987 584,987 509,955 454,892 399,828 371,742 371,633 L 371,0 186,0 186,1120 371,1120 371,946 C 413,1015 463,1065 522,1098 581,1131 650,1147 731,1147 812,1147 882,1126 939,1085 996,1044 1038,984 1065,905 Z"/>
- <glyph unicode="l" horiz-adv-x="186" d="M 193,1556 L 377,1556 377,0 193,0 193,1556 Z"/>
- <glyph unicode="k" horiz-adv-x="980" d="M 186,1556 L 371,1556 371,637 920,1120 1155,1120 561,596 1180,0 940,0 371,547 371,0 186,0 186,1556 Z"/>
- <glyph unicode="i" horiz-adv-x="186" d="M 193,1120 L 377,1120 377,0 193,0 193,1120 Z M 193,1556 L 377,1556 377,1323 193,1323 193,1556 Z"/>
- <glyph unicode="h" horiz-adv-x="927" d="M 1124,676 L 1124,0 940,0 940,670 C 940,776 919,855 878,908 837,961 775,987 692,987 593,987 514,955 457,892 400,829 371,742 371,633 L 371,0 186,0 186,1556 371,1556 371,946 C 415,1013 467,1064 527,1097 586,1130 655,1147 733,1147 862,1147 959,1107 1025,1028 1091,948 1124,831 1124,676 Z"/>
- <glyph unicode="g" horiz-adv-x="1006" d="M 930,573 C 930,706 903,810 848,883 793,956 715,993 616,993 517,993 441,956 386,883 331,810 303,706 303,573 303,440 331,337 386,264 441,191 517,154 616,154 715,154 793,191 848,264 903,337 930,440 930,573 Z M 1114,139 C 1114,-52 1072,-193 987,-287 902,-379 773,-426 598,-426 533,-426 472,-421 415,-412 358,-402 302,-387 248,-367 L 248,-188 C 302,-217 355,-239 408,-253 461,-267 514,-274 569,-274 690,-274 780,-242 840,-180 900,-116 930,-21 930,106 L 930,197 C 892,131 843,82 784,49 725,16 654,0 571,0 434,0 323,52 239,157 155,262 113,400 113,573 113,746 155,885 239,990 323,1095 434,1147 571,1147 654,1147 725,1131 784,1098 843,1065 892,1016 930,950 L 930,1120 1114,1120 1114,139 Z"/>
- <glyph unicode="f" horiz-adv-x="716" d="M 760,1556 L 760,1403 584,1403 C 518,1403 472,1390 447,1363 421,1336 408,1288 408,1219 L 408,1120 711,1120 711,977 408,977 408,0 223,0 223,977 47,977 47,1120 223,1120 223,1198 C 223,1323 252,1414 310,1471 368,1528 460,1556 586,1556 L 760,1556 Z"/>
- <glyph unicode="e" horiz-adv-x="1033" d="M 1151,606 L 1151,516 305,516 C 313,389 351,293 420,227 488,160 583,127 705,127 776,127 844,136 911,153 977,170 1043,196 1108,231 L 1108,57 C 1042,29 974,8 905,-7 836,-22 765,-29 694,-29 515,-29 374,23 270,127 165,231 113,372 113,549 113,732 163,878 262,986 361,1093 494,1147 662,1147 813,1147 932,1099 1020,1002 1107,905 1151,773 1151,606 Z M 967,659 C 966,760 938,841 883,901 828,961 755,991 664,991 561,991 479,962 418,904 356,846 320,764 311,659 L 967,659 Z"/>
- <glyph unicode="d" horiz-adv-x="1006" d="M 930,950 L 930,1556 1114,1556 1114,0 930,0 930,168 C 891,101 843,52 784,20 725,-13 654,-29 571,-29 436,-29 326,25 241,133 156,241 113,383 113,559 113,735 156,877 241,985 326,1093 436,1147 571,1147 654,1147 725,1131 784,1099 843,1066 891,1017 930,950 Z M 303,559 C 303,424 331,318 387,241 442,164 519,125 616,125 713,125 790,164 846,241 902,318 930,424 930,559 930,694 902,801 846,878 790,955 713,993 616,993 519,993 442,955 387,878 331,801 303,694 303,559 Z"/>
- <glyph unicode="c" horiz-adv-x="874" d="M 999,1077 L 999,905 C 947,934 895,955 843,970 790,984 737,991 684,991 565,991 472,953 406,878 340,802 307,696 307,559 307,422 340,316 406,241 472,165 565,127 684,127 737,127 790,134 843,149 895,163 947,184 999,213 L 999,43 C 948,19 895,1 840,-11 785,-23 726,-29 664,-29 495,-29 361,24 262,130 163,236 113,379 113,559 113,742 163,885 264,990 364,1095 501,1147 676,1147 733,1147 788,1141 842,1130 896,1118 948,1100 999,1077 Z"/>
- <glyph unicode="b" horiz-adv-x="1007" d="M 997,559 C 997,694 969,801 914,878 858,955 781,993 684,993 587,993 510,955 455,878 399,801 371,694 371,559 371,424 399,318 455,241 510,164 587,125 684,125 781,125 858,164 914,241 969,318 997,424 997,559 Z M 371,950 C 410,1017 459,1066 518,1099 577,1131 647,1147 729,1147 865,1147 976,1093 1061,985 1146,877 1188,735 1188,559 1188,383 1146,241 1061,133 976,25 865,-29 729,-29 647,-29 577,-13 518,20 459,52 410,101 371,168 L 371,0 186,0 186,1556 371,1556 371,950 Z"/>
- <glyph unicode="a" horiz-adv-x="953" d="M 702,563 C 553,563 450,546 393,512 336,478 307,420 307,338 307,273 329,221 372,183 415,144 473,125 547,125 649,125 731,161 793,234 854,306 885,402 885,522 L 885,563 702,563 Z M 1069,639 L 1069,0 885,0 885,170 C 843,102 791,52 728,20 665,-13 589,-29 498,-29 383,-29 292,3 225,68 157,132 123,218 123,326 123,452 165,547 250,611 334,675 460,707 627,707 L 885,707 885,725 C 885,810 857,875 802,922 746,968 668,991 567,991 503,991 441,983 380,968 319,953 261,930 205,899 L 205,1069 C 272,1095 338,1115 401,1128 464,1141 526,1147 586,1147 748,1147 869,1105 949,1021 1029,937 1069,810 1069,639 Z"/>
- <glyph unicode="]" horiz-adv-x="425" d="M 623,1556 L 623,-270 199,-270 199,-127 438,-127 438,1413 199,1413 199,1556 623,1556 Z"/>
- <glyph unicode="[" horiz-adv-x="425" d="M 176,1556 L 600,1556 600,1413 360,1413 360,-127 600,-127 600,-270 176,-270 176,1556 Z"/>
- <glyph unicode="T" horiz-adv-x="1271" d="M -6,1493 L 1257,1493 1257,1323 727,1323 727,0 524,0 524,1323 -6,1323 -6,1493 Z"/>
- <glyph unicode="P" horiz-adv-x="954" d="M 403,1327 L 403,766 657,766 C 751,766 824,790 875,839 926,888 952,957 952,1047 952,1136 926,1205 875,1254 824,1303 751,1327 657,1327 L 403,1327 Z M 201,1493 L 657,1493 C 824,1493 951,1455 1037,1380 1122,1304 1165,1193 1165,1047 1165,900 1122,788 1037,713 951,638 824,600 657,600 L 403,600 403,0 201,0 201,1493 Z"/>
- <glyph unicode="M" horiz-adv-x="1351" d="M 201,1493 L 502,1493 883,477 1266,1493 1567,1493 1567,0 1370,0 1370,1311 985,287 782,287 397,1311 397,0 201,0 201,1493 Z"/>
- <glyph unicode="I" horiz-adv-x="213" d="M 201,1493 L 403,1493 403,0 201,0 201,1493 Z"/>
- <glyph unicode="C" horiz-adv-x="1191" d="M 1319,1378 L 1319,1165 C 1251,1228 1179,1276 1102,1307 1025,1338 943,1354 856,1354 685,1354 555,1302 464,1198 373,1093 328,942 328,745 328,548 373,398 464,294 555,189 685,137 856,137 943,137 1025,153 1102,184 1179,215 1251,263 1319,326 L 1319,115 C 1248,67 1174,31 1095,7 1016,-17 932,-29 844,-29 618,-29 440,40 310,179 180,317 115,506 115,745 115,985 180,1174 310,1313 440,1451 618,1520 844,1520 933,1520 1018,1508 1097,1485 1176,1461 1250,1425 1319,1378 Z"/>
- <glyph unicode="8" horiz-adv-x="1033" d="M 651,709 C 555,709 480,683 425,632 370,581 342,510 342,420 342,330 370,259 425,208 480,157 555,131 651,131 747,131 823,157 878,209 933,260 961,331 961,420 961,510 934,581 879,632 824,683 748,709 651,709 Z M 449,795 C 362,816 295,857 247,916 198,975 174,1048 174,1133 174,1252 217,1347 302,1416 387,1485 503,1520 651,1520 800,1520 916,1485 1001,1416 1086,1347 1128,1252 1128,1133 1128,1048 1104,975 1056,916 1007,857 940,816 854,795 951,772 1027,728 1082,662 1136,596 1163,515 1163,420 1163,275 1119,164 1031,87 942,10 816,-29 651,-29 486,-29 360,10 272,87 183,164 139,275 139,420 139,515 166,596 221,662 276,728 352,772 449,795 Z M 375,1114 C 375,1037 399,976 448,933 496,890 564,868 651,868 738,868 806,890 855,933 904,976 928,1037 928,1114 928,1191 904,1252 855,1295 806,1338 738,1360 651,1360 564,1360 496,1338 448,1295 399,1252 375,1191 375,1114 Z"/>
- <glyph unicode="6" horiz-adv-x="1033" d="M 676,827 C 585,827 514,796 461,734 408,672 381,587 381,479 381,372 408,287 461,225 514,162 585,131 676,131 767,131 839,162 892,225 945,287 971,372 971,479 971,587 945,672 892,734 839,796 767,827 676,827 Z M 1077,1460 L 1077,1276 C 1026,1300 975,1318 924,1331 872,1344 821,1350 770,1350 637,1350 535,1305 465,1215 394,1125 354,989 344,807 383,865 433,910 492,941 551,972 617,987 688,987 838,987 957,942 1044,851 1131,760 1174,636 1174,479 1174,326 1129,203 1038,110 947,17 827,-29 676,-29 503,-29 371,37 280,170 189,302 143,494 143,745 143,981 199,1169 311,1310 423,1450 573,1520 762,1520 813,1520 864,1515 916,1505 967,1495 1021,1480 1077,1460 Z"/>
- <glyph unicode="5" horiz-adv-x="953" d="M 221,1493 L 1014,1493 1014,1323 406,1323 406,957 C 435,967 465,975 494,980 523,985 553,987 582,987 749,987 881,941 978,850 1075,759 1124,635 1124,479 1124,318 1074,194 974,105 874,16 733,-29 551,-29 488,-29 425,-24 360,-13 295,-2 227,14 158,35 L 158,238 C 218,205 280,181 344,165 408,149 476,141 547,141 662,141 754,171 821,232 888,293 922,375 922,479 922,583 888,665 821,726 754,787 662,817 547,817 493,817 439,811 386,799 332,787 277,768 221,743 L 221,1493 Z"/>
- <glyph unicode="4" horiz-adv-x="1086" d="M 774,1317 L 264,520 774,520 774,1317 Z M 721,1493 L 975,1493 975,520 1188,520 1188,352 975,352 975,0 774,0 774,352 100,352 100,547 721,1493 Z"/>
- <glyph unicode="3" horiz-adv-x="980" d="M 831,805 C 928,784 1003,741 1058,676 1112,611 1139,530 1139,434 1139,287 1088,173 987,92 886,11 742,-29 555,-29 492,-29 428,-23 362,-11 295,2 227,20 156,45 L 156,240 C 212,207 273,183 340,166 407,149 476,141 549,141 676,141 772,166 839,216 905,266 938,339 938,434 938,522 907,591 846,641 784,690 698,715 588,715 L 414,715 414,881 596,881 C 695,881 771,901 824,941 877,980 903,1037 903,1112 903,1189 876,1248 822,1289 767,1330 689,1350 588,1350 533,1350 473,1344 410,1332 347,1320 277,1301 201,1276 L 201,1456 C 278,1477 350,1493 417,1504 484,1515 547,1520 606,1520 759,1520 881,1485 970,1416 1059,1346 1104,1252 1104,1133 1104,1050 1080,981 1033,924 986,867 918,827 831,805 Z"/>
- <glyph unicode="2" horiz-adv-x="953" d="M 393,170 L 1098,170 1098,0 150,0 150,170 C 227,249 331,356 464,490 596,623 679,709 713,748 778,821 823,882 849,933 874,983 887,1032 887,1081 887,1160 859,1225 804,1275 748,1325 675,1350 586,1350 523,1350 456,1339 386,1317 315,1295 240,1262 160,1217 L 160,1421 C 241,1454 317,1478 388,1495 459,1512 523,1520 582,1520 737,1520 860,1481 952,1404 1044,1327 1090,1223 1090,1094 1090,1033 1079,975 1056,920 1033,865 991,800 930,725 913,706 860,650 771,558 682,465 556,336 393,170 Z"/>
- <glyph unicode="1" horiz-adv-x="900" d="M 254,170 L 584,170 584,1309 225,1237 225,1421 582,1493 784,1493 784,170 1114,170 1114,0 254,0 254,170 Z"/>
- <glyph unicode="0" horiz-adv-x="1033" d="M 651,1360 C 547,1360 469,1309 417,1207 364,1104 338,950 338,745 338,540 364,387 417,285 469,182 547,131 651,131 756,131 834,182 887,285 939,387 965,540 965,745 965,950 939,1104 887,1207 834,1309 756,1360 651,1360 Z M 651,1520 C 818,1520 946,1454 1035,1322 1123,1189 1167,997 1167,745 1167,494 1123,302 1035,170 946,37 818,-29 651,-29 484,-29 356,37 268,170 179,302 135,494 135,745 135,997 179,1189 268,1322 356,1454 484,1520 651,1520 Z"/>
- <glyph unicode="." horiz-adv-x="213" d="M 219,254 L 430,254 430,0 219,0 219,254 Z"/>
- <glyph unicode="-" horiz-adv-x="530" d="M 100,643 L 639,643 639,479 100,479 100,643 Z"/>
- <glyph unicode=" " horiz-adv-x="635"/>
- </font>
- </defs>
- <defs>
- <font id="EmbeddedFont_2" horiz-adv-x="2048">
- <font-face font-family="DejaVuSans embedded" units-per-em="2048" font-weight="bold" font-style="normal" ascent="1879" descent="476"/>
- <missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
- <glyph unicode="u" horiz-adv-x="1112" d="M 160,436 L 160,1120 520,1120 520,1008 C 520,947 520,871 519,780 518,688 518,627 518,596 518,506 520,441 525,402 530,362 538,333 549,315 564,292 583,274 607,261 630,248 657,242 688,242 763,242 821,271 864,328 907,385 928,465 928,567 L 928,1120 1286,1120 1286,0 928,0 928,162 C 874,97 817,49 757,18 696,-13 630,-29 557,-29 428,-29 329,11 262,90 194,169 160,285 160,436 Z"/>
- <glyph unicode="t" horiz-adv-x="901" d="M 563,1438 L 563,1120 932,1120 932,864 563,864 563,389 C 563,337 573,302 594,284 615,265 656,256 717,256 L 901,256 901,0 594,0 C 453,0 353,30 294,89 235,148 205,248 205,389 L 205,864 27,864 27,1120 205,1120 205,1438 563,1438 Z"/>
- <glyph unicode="r" horiz-adv-x="821" d="M 1004,815 C 973,830 942,841 911,848 880,855 848,858 817,858 725,858 654,829 605,770 555,711 530,626 530,516 L 530,0 172,0 172,1120 530,1120 530,936 C 576,1009 629,1062 689,1095 748,1128 820,1145 903,1145 915,1145 928,1145 942,1145 956,1145 976,1143 1003,1139 L 1004,815 Z"/>
- <glyph unicode="p" horiz-adv-x="1191" d="M 530,162 L 530,-426 172,-426 172,1120 530,1120 530,956 C 579,1021 634,1070 694,1101 754,1132 823,1147 901,1147 1039,1147 1152,1092 1241,983 1330,873 1374,732 1374,559 1374,386 1330,245 1241,136 1152,26 1039,-29 901,-29 823,-29 754,-13 694,18 634,49 579,97 530,162 Z M 768,887 C 691,887 633,859 592,803 551,746 530,665 530,559 530,453 551,372 592,316 633,259 691,231 768,231 845,231 903,259 944,315 984,371 1004,452 1004,559 1004,666 984,747 944,803 903,859 845,887 768,887 Z"/>
- <glyph unicode="o" horiz-adv-x="1218" d="M 705,891 C 626,891 565,863 524,806 482,749 461,666 461,559 461,452 482,370 524,313 565,256 626,227 705,227 783,227 843,256 884,313 925,370 946,452 946,559 946,666 925,749 884,806 843,863 783,891 705,891 Z M 705,1147 C 898,1147 1048,1095 1157,991 1265,887 1319,743 1319,559 1319,375 1265,231 1157,127 1048,23 898,-29 705,-29 512,-29 361,23 252,127 143,231 88,375 88,559 88,743 143,887 252,991 361,1095 512,1147 705,1147 Z"/>
- <glyph unicode="k" horiz-adv-x="1218" d="M 172,1556 L 530,1556 530,709 942,1120 1358,1120 811,606 1401,0 967,0 530,467 530,0 172,0 172,1556 Z"/>
- <glyph unicode="h" horiz-adv-x="1112" d="M 1298,682 L 1298,0 938,0 938,111 938,520 C 938,618 936,685 932,722 927,759 920,786 909,803 895,826 876,845 852,858 828,871 801,877 770,877 695,877 637,848 594,791 551,733 530,653 530,551 L 530,0 172,0 172,1556 530,1556 530,956 C 584,1021 641,1070 702,1101 763,1132 830,1147 903,1147 1032,1147 1131,1107 1198,1028 1265,949 1298,833 1298,682 Z"/>
- <glyph unicode="g" horiz-adv-x="1192" d="M 934,190 C 885,125 830,77 771,46 712,15 643,0 565,0 428,0 315,54 226,162 137,269 92,406 92,573 92,740 137,878 226,985 315,1092 428,1145 565,1145 643,1145 712,1130 771,1099 830,1068 885,1020 934,954 L 934,1120 1294,1120 1294,113 C 1294,-67 1237,-204 1124,-300 1010,-394 845,-442 629,-442 559,-442 491,-437 426,-426 361,-415 295,-399 229,-377 L 229,-98 C 292,-134 353,-161 413,-179 473,-196 533,-205 594,-205 711,-205 797,-179 852,-128 907,-77 934,4 934,113 L 934,190 Z M 698,887 C 624,887 566,860 525,805 484,750 463,673 463,573 463,470 483,393 523,340 563,287 621,260 698,260 773,260 831,287 872,342 913,397 934,474 934,573 934,673 913,750 872,805 831,860 773,887 698,887 Z"/>
- <glyph unicode="e" horiz-adv-x="1192" d="M 1290,563 L 1290,461 453,461 C 462,377 492,314 544,272 596,230 669,209 762,209 837,209 915,220 994,243 1073,265 1154,299 1237,344 L 1237,68 C 1152,36 1068,12 983,-5 898,-21 814,-29 729,-29 526,-29 369,23 257,126 144,229 88,373 88,559 88,742 143,885 254,990 364,1095 516,1147 709,1147 885,1147 1026,1094 1132,988 1237,882 1290,740 1290,563 Z M 922,682 C 922,750 902,805 863,847 823,888 771,909 707,909 638,909 581,890 538,851 495,812 468,755 457,682 L 922,682 Z"/>
- <glyph unicode="c" horiz-adv-x="980" d="M 1077,1085 L 1077,793 C 1028,826 980,851 931,867 882,883 831,891 778,891 678,891 600,862 545,804 489,745 461,664 461,559 461,454 489,373 545,315 600,256 678,227 778,227 834,227 887,235 938,252 988,269 1034,293 1077,326 L 1077,33 C 1021,12 964,-3 907,-14 849,-24 791,-29 733,-29 531,-29 373,23 259,127 145,230 88,374 88,559 88,744 145,888 259,992 373,1095 531,1147 733,1147 792,1147 850,1142 907,1132 964,1121 1020,1106 1077,1085 Z"/>
- <glyph unicode="a" horiz-adv-x="1139" d="M 674,504 C 599,504 543,491 506,466 468,441 449,403 449,354 449,309 464,273 495,248 525,222 567,209 621,209 688,209 745,233 791,282 837,330 860,390 860,463 L 860,504 674,504 Z M 1221,639 L 1221,0 860,0 860,166 C 812,98 758,49 698,18 638,-13 565,-29 479,-29 363,-29 269,5 197,73 124,140 88,228 88,336 88,467 133,564 224,625 314,686 456,717 649,717 L 860,717 860,745 C 860,802 838,843 793,870 748,896 679,909 584,909 507,909 436,901 370,886 304,871 243,848 186,817 L 186,1090 C 263,1109 340,1123 417,1133 494,1142 572,1147 649,1147 851,1147 997,1107 1087,1028 1176,948 1221,818 1221,639 Z"/>
- <glyph unicode="T" horiz-adv-x="1377" d="M 10,1493 L 1386,1493 1386,1202 891,1202 891,0 506,0 506,1202 10,1202 10,1493 Z"/>
- <glyph unicode="P" horiz-adv-x="1218" d="M 188,1493 L 827,1493 C 1017,1493 1163,1451 1265,1367 1366,1282 1417,1162 1417,1006 1417,849 1366,729 1265,645 1163,560 1017,518 827,518 L 573,518 573,0 188,0 188,1493 Z M 573,1214 L 573,797 786,797 C 861,797 918,815 959,852 1000,888 1020,939 1020,1006 1020,1073 1000,1124 959,1160 918,1196 861,1214 786,1214 L 573,1214 Z"/>
- <glyph unicode=":" horiz-adv-x="345" d="M 229,1120 L 590,1120 590,733 229,733 229,1120 Z M 229,387 L 590,387 590,0 229,0 229,387 Z"/>
- <glyph unicode=" " horiz-adv-x="714"/>
- </font>
- </defs>
- <defs class="TextShapeIndex">
- <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29 id30 id31 id32 id33 id34 id35 id36 id37 id38 id39 id40 id41 id42 id43 id44 id45 id46 id47 id48 id49 id50 id51 id52 id53 id54 id55 id56 id57 id58 id59 id60 id61 id62 id63 id64 id65 id66 id67 id68 id69 id70 id71 id72 id73 id74 id75 id76 id77 id78 id79 id80 id81 id82 id83 id84 id85 id86 id87 id88 id89 id90 id91 id92"/>
- </defs>
- <defs class="EmbeddedBulletChars">
- <g id="bullet-char-template-57356" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
- </g>
- <g id="bullet-char-template-57354" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
- </g>
- <g id="bullet-char-template-10146" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
- </g>
- <g id="bullet-char-template-10132" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
- </g>
- <g id="bullet-char-template-10007" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
- </g>
- <g id="bullet-char-template-10004" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
- </g>
- <g id="bullet-char-template-9679" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
- </g>
- <g id="bullet-char-template-8226" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
- </g>
- <g id="bullet-char-template-8211" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
- </g>
- <g id="bullet-char-template-61548" transform="scale(0.00048828125,-0.00048828125)">
- <path d="M 173,740 C 173,903 231,1043 346,1159 462,1274 601,1332 765,1332 928,1332 1067,1274 1183,1159 1299,1043 1357,903 1357,740 1357,577 1299,437 1183,322 1067,206 928,148 765,148 601,148 462,206 346,322 231,437 173,577 173,740 Z"/>
- </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
- <g id="id2" class="Master_Slide">
- <g id="bg-id2" class="Background"/>
- <g id="bo-id2" class="BackgroundObjects"/>
- </g>
- </g>
- <g class="SlideGroup">
- <g>
- <g id="container-id1">
- <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
- <g class="Page">
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id3">
- <rect class="BoundingBox" stroke="none" fill="none" x="2142" y="14493" width="28017" height="485"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id4">
- <rect class="BoundingBox" stroke="none" fill="none" x="2142" y="14976" width="28017" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id5">
- <rect class="BoundingBox" stroke="none" fill="none" x="2142" y="15460" width="28017" height="486"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id6">
- <rect class="BoundingBox" stroke="none" fill="none" x="2142" y="15944" width="28017" height="487"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id7">
- <rect class="BoundingBox" stroke="none" fill="none" x="416" y="515" width="14233" height="16267"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 416,516 L 14648,516 14648,16781 416,16781 416,516 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id8">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="1532" width="12201" height="11692"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 2042,1532 L 14241,1532 14241,13223 2042,13223 2042,1532 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id9">
- <rect class="BoundingBox" stroke="none" fill="none" x="3567" y="1532" width="1" height="11691"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id10">
- <rect class="BoundingBox" stroke="none" fill="none" x="3557" y="1532" width="21" height="11691"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 3567,1532 L 3567,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id11">
- <rect class="BoundingBox" stroke="none" fill="none" x="6616" y="1532" width="1" height="11691"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id12">
- <rect class="BoundingBox" stroke="none" fill="none" x="6606" y="1532" width="21" height="11691"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 6616,1532 L 6616,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id13">
- <rect class="BoundingBox" stroke="none" fill="none" x="9666" y="1532" width="1" height="11691"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id14">
- <rect class="BoundingBox" stroke="none" fill="none" x="9656" y="1532" width="21" height="11691"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 9666,1532 L 9666,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id15">
- <rect class="BoundingBox" stroke="none" fill="none" x="12715" y="1532" width="1" height="11691"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id16">
- <rect class="BoundingBox" stroke="none" fill="none" x="12705" y="1532" width="21" height="11691"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 12715,1532 L 12715,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id17">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="11424" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id18">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="11414" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,11424 L 14240,11424"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id19">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="9625" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id20">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="9615" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,9625 L 14240,9625"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id21">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="7827" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id22">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="7817" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,7827 L 14240,7827"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id23">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="6028" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id24">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="6018" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,6028 L 14240,6028"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id25">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="4230" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id26">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="4220" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,4230 L 14240,4230"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id27">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="2431" width="12199" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id28">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="2421" width="12199" height="21"/>
- <path fill="none" stroke="rgb(230,230,230)" stroke-width="20" stroke-linejoin="miter" d="M 2042,2431 L 14240,2431"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id29">
- <rect class="BoundingBox" stroke="none" fill="none" x="3033" y="2308" width="1069" height="51"/>
- <path fill="rgb(31,119,180)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 3033,2334 L 4101,2334 3033,2334 Z M 3033,2340 L 4101,2340 4101,2320 3033,2320 3033,2340 Z M 3567,2340 L 3567,2358 3567,2340 Z M 3567,2320 L 3567,2309 3567,2320 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id30">
- <rect class="BoundingBox" stroke="none" fill="none" x="3013" y="2300" width="1110" height="62"/>
- <path fill="rgb(31,119,180)" stroke="none" d="M 3033,2313 L 4101,2313 4101,2355 3033,2355 3033,2313 Z M 3033,2319 L 4101,2319 4101,2340 4081,2340 4081,2320 4101,2320 4101,2341 3033,2341 3033,2320 3053,2320 3053,2340 3033,2340 3033,2319 Z M 3013,2340 L 3013,2320 3013,2300 3033,2300 4101,2300 4122,2300 4122,2320 4122,2340 4122,2361 4101,2361 3033,2361 3013,2361 3013,2340 Z M 3587,2340 L 3587,2358 3546,2358 3546,2340 3587,2340 Z M 3546,2320 L 3546,2309 3587,2309 3587,2320 3546,2320 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id31">
- <rect class="BoundingBox" stroke="none" fill="none" x="3506" y="6951" width="125" height="124"/>
- <path fill="rgb(31,119,180)" stroke="none" d="M 3629,7013 C 3629,7046 3601,7074 3567,7074 3533,7074 3506,7046 3506,7013 3506,6979 3533,6951 3567,6951 3601,6951 3629,6979 3629,7013 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id32">
- <rect class="BoundingBox" stroke="none" fill="none" x="6083" y="3123" width="1069" height="159"/>
- <path fill="rgb(255,127,14)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 6083,3216 L 7151,3216 6083,3216 Z M 6083,3280 L 7151,3280 7151,3194 6083,3194 6083,3280 Z M 6616,3194 L 6616,3123 6616,3194 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id33">
- <rect class="BoundingBox" stroke="none" fill="none" x="6062" y="3123" width="1110" height="178"/>
- <path fill="rgb(255,127,14)" stroke="none" d="M 6083,3194 L 7151,3194 7151,3235 6083,3235 6083,3194 Z M 6083,3259 L 7151,3259 7151,3280 7131,3280 7131,3194 7151,3194 7151,3215 6083,3215 6083,3194 6103,3194 6103,3280 6083,3280 6083,3259 Z M 6062,3280 L 6062,3194 6062,3174 6083,3174 7151,3174 7171,3174 7171,3194 7171,3280 7171,3300 7151,3300 6083,3300 6062,3300 6062,3280 Z M 6596,3194 L 6596,3123 6637,3123 6637,3194 6596,3194 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id34">
- <rect class="BoundingBox" stroke="none" fill="none" x="6555" y="12844" width="124" height="125"/>
- <path fill="rgb(255,127,14)" stroke="none" d="M 6678,12906 C 6678,12939 6651,12967 6617,12967 6583,12967 6555,12939 6555,12906 6555,12871 6583,12844 6617,12844 6651,12844 6678,12871 6678,12906 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id35">
- <rect class="BoundingBox" stroke="none" fill="none" x="6555" y="6485" width="124" height="124"/>
- <path fill="rgb(255,127,14)" stroke="none" d="M 6678,6546 C 6678,6579 6651,6608 6617,6608 6583,6608 6555,6579 6555,6546 6555,6512 6583,6485 6617,6485 6651,6485 6678,6512 6678,6546 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id36">
- <rect class="BoundingBox" stroke="none" fill="none" x="9132" y="3098" width="1071" height="173"/>
- <path fill="rgb(44,160,44)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 9132,3226 L 10201,3226 9132,3226 Z M 9132,3267 L 10201,3267 10201,3181 9132,3181 9132,3267 Z M 9666,3267 L 9666,3270 9666,3267 Z M 9666,3181 L 9666,3098 9666,3181 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id37">
- <rect class="BoundingBox" stroke="none" fill="none" x="9112" y="3097" width="1110" height="191"/>
- <path fill="rgb(44,160,44)" stroke="none" d="M 9132,3204 L 10201,3204 10201,3245 9132,3245 9132,3204 Z M 9132,3246 L 10201,3246 10201,3266 10180,3266 10180,3180 10201,3180 10201,3201 9132,3201 9132,3180 9153,3180 9153,3266 9132,3266 9132,3246 Z M 9112,3266 L 9112,3180 9112,3160 9132,3160 10201,3160 10221,3160 10221,3180 10221,3266 10221,3287 10201,3287 9132,3287 9112,3287 9112,3266 Z M 9687,3266 L 9687,3269 9647,3269 9647,3266 9687,3266 Z M 9647,3180 L 9647,3098 9687,3098 9687,3180 9647,3180 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id38">
- <rect class="BoundingBox" stroke="none" fill="none" x="9605" y="6611" width="124" height="125"/>
- <path fill="rgb(44,160,44)" stroke="none" d="M 9728,6672 C 9728,6706 9701,6734 9667,6734 9632,6734 9605,6706 9605,6672 9605,6638 9632,6611 9667,6611 9701,6611 9728,6638 9728,6672 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id39">
- <rect class="BoundingBox" stroke="none" fill="none" x="12182" y="4613" width="1069" height="292"/>
- <path fill="rgb(214,39,40)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 12182,4744 L 13250,4744 12182,4744 Z M 12182,4899 L 13250,4899 13250,4682 12182,4682 12182,4899 Z M 12715,4899 L 12715,4904 12715,4899 Z M 12715,4682 L 12715,4613 12715,4682 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id40">
- <rect class="BoundingBox" stroke="none" fill="none" x="12161" y="4613" width="1110" height="308"/>
- <path fill="rgb(214,39,40)" stroke="none" d="M 12182,4724 L 13250,4724 13250,4765 12182,4765 12182,4724 Z M 12182,4878 L 13250,4878 13250,4899 13230,4899 13230,4682 13250,4682 13250,4703 12182,4703 12182,4682 12202,4682 12202,4899 12182,4899 12182,4878 Z M 12161,4899 L 12161,4682 12161,4662 12182,4662 13250,4662 13270,4662 13270,4682 13270,4899 13270,4919 13250,4919 12182,4919 12161,4919 12161,4899 Z M 12737,4899 L 12737,4904 12696,4904 12696,4899 12737,4899 Z M 12696,4682 L 12696,4613 12737,4613 12737,4682 12696,4682 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.ClosedBezierShape">
- <g id="id41">
- <rect class="BoundingBox" stroke="none" fill="none" x="12654" y="6723" width="125" height="125"/>
- <path fill="rgb(214,39,40)" stroke="none" d="M 12777,6784 C 12777,6818 12750,6846 12716,6846 12683,6846 12654,6818 12654,6784 12654,6751 12683,6723 12716,6723 12750,6723 12777,6751 12777,6784 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id42">
- <rect class="BoundingBox" stroke="none" fill="none" x="2022" y="13222" width="12219" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,13232 L 14240,13232"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id43">
- <rect class="BoundingBox" stroke="none" fill="none" x="2022" y="1532" width="21" height="11691"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2032,1532 L 2032,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id44">
- <rect class="BoundingBox" stroke="none" fill="none" x="3567" y="13242" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id45">
- <rect class="BoundingBox" stroke="none" fill="none" x="3557" y="13242" width="21" height="103"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 3567,13242 L 3567,13344"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id46">
- <rect class="BoundingBox" stroke="none" fill="none" x="6616" y="13242" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id47">
- <rect class="BoundingBox" stroke="none" fill="none" x="6606" y="13242" width="21" height="103"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 6616,13242 L 6616,13344"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id48">
- <rect class="BoundingBox" stroke="none" fill="none" x="9666" y="13242" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id49">
- <rect class="BoundingBox" stroke="none" fill="none" x="9656" y="13242" width="21" height="103"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 9666,13242 L 9666,13344"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id50">
- <rect class="BoundingBox" stroke="none" fill="none" x="12715" y="13242" width="1" height="103"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id51">
- <rect class="BoundingBox" stroke="none" fill="none" x="12705" y="13242" width="21" height="103"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 12715,13242 L 12715,13344"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id52">
- <rect class="BoundingBox" stroke="none" fill="none" x="3464" y="13433" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="3464" y="13734"><tspan fill="rgb(68,68,68)" stroke="none">1</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id53">
- <rect class="BoundingBox" stroke="none" fill="none" x="6514" y="13433" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="6514" y="13734"><tspan fill="rgb(68,68,68)" stroke="none">2</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id54">
- <rect class="BoundingBox" stroke="none" fill="none" x="9563" y="13433" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="9563" y="13734"><tspan fill="rgb(68,68,68)" stroke="none">3</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id55">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="13222" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id56">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="13212" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,13222 L 1920,13222"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id57">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="11424" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id58">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="11414" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,11424 L 1920,11424"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id59">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="9625" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id60">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="9615" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,9625 L 1920,9625"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id61">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="7827" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id62">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="7817" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,7827 L 1920,7827"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id63">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="6028" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id64">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="6018" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,6028 L 1920,6028"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id65">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="4230" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id66">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="4220" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,4230 L 1920,4230"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id67">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="2431" width="103" height="1"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.LineShape">
- <g id="id68">
- <rect class="BoundingBox" stroke="none" fill="none" x="1920" y="2421" width="103" height="21"/>
- <path fill="none" stroke="rgb(220,220,220)" stroke-width="20" stroke-linejoin="miter" d="M 2022,2431 L 1920,2431"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id69">
- <rect class="BoundingBox" stroke="none" fill="none" x="12613" y="13433" width="325" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="12613" y="13734"><tspan fill="rgb(68,68,68)" stroke="none">4</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id70">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="13034" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="13335"><tspan fill="rgb(68,68,68)" stroke="none">0.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id71">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="11236" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="11537"><tspan fill="rgb(68,68,68)" stroke="none">2.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id72">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="9438" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="9739"><tspan fill="rgb(68,68,68)" stroke="none">4.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id73">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="7639" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="7940"><tspan fill="rgb(68,68,68)" stroke="none">6.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id74">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="5841" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="6142"><tspan fill="rgb(68,68,68)" stroke="none">8.00</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id75">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="4042" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="4343"><tspan fill="rgb(68,68,68)" stroke="none">10.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id76">
- <rect class="BoundingBox" stroke="none" fill="none" x="2042" y="14391" width="12201" height="2157"/>
- <path fill="rgb(255,255,255)" stroke="none" d="M 2042,14391 L 14241,14391 14241,16547 2042,16547 2042,14391 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id77">
- <rect class="BoundingBox" stroke="none" fill="none" x="2327" y="14613" width="247" height="247"/>
- <path fill="rgb(31,119,180)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 2572,14858 L 2327,14858 2327,14613 2572,14613 2572,14858 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id78">
- <rect class="BoundingBox" stroke="none" fill="none" x="2306" y="14592" width="287" height="287"/>
- <path fill="rgb(31,119,180)" stroke="none" d="M 2572,14878 L 2328,14878 2306,14878 2306,14858 2306,14613 2306,14592 2328,14592 2572,14592 2592,14592 2592,14613 2592,14858 2592,14878 2572,14878 Z M 2551,14858 L 2551,14613 2572,14613 2572,14634 2328,14634 2328,14613 2348,14613 2348,14858 2328,14858 2328,14837 2572,14837 2572,14858 2551,14858 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id79">
- <rect class="BoundingBox" stroke="none" fill="none" x="1132" y="2244" width="727" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1132" y="2545"><tspan fill="rgb(68,68,68)" stroke="none">12.0</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id80">
- <rect class="BoundingBox" stroke="none" fill="none" x="2327" y="15096" width="247" height="246"/>
- <path fill="rgb(255,127,14)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 2572,15341 L 2327,15341 2327,15096 2572,15096 2572,15341 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id81">
- <rect class="BoundingBox" stroke="none" fill="none" x="2306" y="15076" width="287" height="287"/>
- <path fill="rgb(255,127,14)" stroke="none" d="M 2572,15362 L 2328,15362 2306,15362 2306,15341 2306,15096 2306,15076 2328,15076 2572,15076 2592,15076 2592,15096 2592,15341 2592,15362 2572,15362 Z M 2551,15341 L 2551,15096 2572,15096 2572,15117 2328,15117 2328,15096 2348,15096 2348,15341 2328,15341 2328,15321 2572,15321 2572,15341 2551,15341 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id82">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="14560" width="5227" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="14861"><tspan fill="rgb(68,68,68)" stroke="none">1. 10ge2p1x520-ethip4-ip4base</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id83">
- <rect class="BoundingBox" stroke="none" fill="none" x="2327" y="15580" width="247" height="247"/>
- <path fill="rgb(44,160,44)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 2572,15825 L 2327,15825 2327,15580 2572,15580 2572,15825 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id84">
- <rect class="BoundingBox" stroke="none" fill="none" x="2306" y="15560" width="287" height="287"/>
- <path fill="rgb(44,160,44)" stroke="none" d="M 2572,15846 L 2328,15846 2306,15846 2306,15825 2306,15580 2306,15560 2328,15560 2572,15560 2592,15560 2592,15580 2592,15825 2592,15846 2572,15846 Z M 2551,15825 L 2551,15580 2572,15580 2572,15601 2328,15601 2328,15580 2348,15580 2348,15825 2328,15825 2328,15805 2572,15805 2572,15825 2551,15825 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id85">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="15044" width="5892" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="15345"><tspan fill="rgb(68,68,68)" stroke="none">2. 10ge2p1x520-ethip4-ip4scale20k</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id86">
- <rect class="BoundingBox" stroke="none" fill="none" x="2327" y="16064" width="247" height="246"/>
- <path fill="rgb(214,39,40)" fill-opacity="0.502" stroke="rgb(255,255,255)" stroke-opacity="0.502" d="M 2572,16309 L 2327,16309 2327,16064 2572,16064 2572,16309 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.PolyPolygonShape">
- <g id="id87">
- <rect class="BoundingBox" stroke="none" fill="none" x="2306" y="16044" width="287" height="286"/>
- <path fill="rgb(214,39,40)" stroke="none" d="M 2572,16329 L 2328,16329 2306,16329 2306,16309 2306,16065 2306,16044 2328,16044 2572,16044 2592,16044 2592,16065 2592,16309 2592,16329 2572,16329 Z M 2551,16309 L 2551,16065 2572,16065 2572,16085 2328,16085 2328,16065 2348,16065 2348,16309 2328,16309 2328,16289 2572,16289 2572,16309 2551,16309 Z"/>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id88">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="15528" width="6099" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="15829"><tspan fill="rgb(68,68,68)" stroke="none">3. 10ge2p1x520-ethip4-ip4scale200k</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id89">
- <rect class="BoundingBox" stroke="none" fill="none" x="2856" y="16012" width="5811" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="2856" y="16313"><tspan fill="rgb(68,68,68)" stroke="none">4. 10ge2p1x520-ethip4-ip4scale2m</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id90">
- <rect class="BoundingBox" stroke="none" fill="none" x="1177" y="685" width="12682" height="426"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="365px" font-weight="700"><tspan class="TextPosition" x="1189" y="1024"><tspan fill="rgb(68,68,68)" stroke="none">Packet Throughput: </tspan><tspan font-weight="400" fill="rgb(68,68,68)" stroke="none">ip4-3n-hsw-x520-64b-1t1c-ndr-base-and-scale</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id91">
- <rect class="BoundingBox" stroke="none" fill="none" x="5786" y="14100" width="4700" height="379"/>
- <text class="TextShape"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="5797" y="14401"><tspan fill="rgb(68,68,68)" stroke="none">Indices of Test Cases [Index]</tspan></tspan></tspan></text>
- </g>
- </g>
- <g class="com.sun.star.drawing.TextShape">
- <g id="id92">
- <rect class="BoundingBox" stroke="none" fill="none" x="708" y="5216" width="379" height="4328"/>
- <text class="TextShape" transform="translate(1009,9532) rotate(-90) translate(-1009,-9532)"><tspan class="TextParagraph" font-family="DejaVuSans, sans-serif" font-size="325px" font-weight="400"><tspan class="TextPosition" x="1009" y="9532"><tspan fill="rgb(68,68,68)" stroke="none">Packet Throughput [Mpps]</tspan></tspan></tspan></text>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/resources/tools/presentation/doc/report_test_groups.txt b/resources/tools/presentation/doc/report_test_groups.txt
deleted file mode 100644
index c48ec45254..0000000000
--- a/resources/tools/presentation/doc/report_test_groups.txt
+++ /dev/null
@@ -1,467 +0,0 @@
-Groups of tests for graphs:
-- Packet Throughput (1c), NDR, PDR
-- Packet Latency (1c, 2c, 4c), NDR
-- Speedup Multi-Core (1c, 2c, 4c), NDR, PDR
-
-Order of chapters:
-- L2 Ethernet Switching
-- IPv4 Routing
-- IPv6 Routing
-- SRv6 Routing
-- IPv4 Tunnels
-- KVM VMs vhost-user
-- LXC/DRC Container Memif
-- IPsec with IPv4 Routing
-- Virtual Topology System
-
-Order of tests:
-- The same as they are listed below.
-
-Sub-chapters titles:
-- The same as they are listed below.
-
-# L2 Ethernet Switching
-
-## 2n-skx-xxv710
-### 64b-?t?c-l2switching-base-avf
-2n1l-25ge2p1xxv710-avf-eth-l2patch-ndrpdr
-2n1l-25ge2p1xxv710-avf-eth-l2xcbase-ndrpdr
-2n1l-25ge2p1xxv710-avf-dot1q-l2bdbasemaclrn-ndrpdr
-2n1l-25ge2p1xxv710-avf-eth-l2bdbasemaclrn-ndrpdr
-
-### 64b-?t?c-l2switching-base-i40e
-2n1l-25ge2p1xxv710-eth-l2patch-ndrpdr
-2n1l-25ge2p1xxv710-dot1q-l2xcbase-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2xcbase-ndrpdr
-2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-ndrpdr
-
-### 64b-?t?c-l2switching-base-scale-i40e
-2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdscale10kmaclrn-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdscale100kmaclrn-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdscale1mmaclrn-ndrpdr
-
-## 2n-skx-x710
-### 64b-?t?c-l2switching-base-scale-avf-i40e
-2n1l-10ge2p1x710-avf-eth-l2xcbase-ndrpdr
-2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-ndrpdr
-2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr
-2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr
-2n1l-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr
-2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr
-
-## 3n-skx-xxv710
-### 64b-?t?c-l2switching-base-avf
-25ge2p1xxv710-avf-eth-l2patch-ndrpdr
-25ge2p1xxv710-avf-eth-l2xcbase-ndrpdr
-25ge2p1xxv710-avf-eth-l2bdbasemaclrn-ndrpdr
-
-### 64b-?t?c-l2switching-base-i40e
-25ge2p1xxv710-dot1q-l2xcbase-ndrpdr
-25ge2p1xxv710-eth-l2xcbase-ndrpdr
-25ge2p1xxv710-dot1q-l2bdbasemaclrn-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-ndrpdr
-
-### 64b-?t?c-l2switching-base-scale-i40e
-25ge2p1xxv710-eth-l2patch-ndrpdr
-25ge2p1xxv710-eth-l2xcbase-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-ndrpdr
-25ge2p1xxv710-eth-l2bdscale10kmaclrn-ndrpdr
-25ge2p1xxv710-eth-l2bdscale100kmaclrn-ndrpdr
-25ge2p1xxv710-eth-l2bdscale1mmaclrn-ndrpdr
-
-### 64b-?t?c-features-l2switching-base-i40e
-25ge2p1xxv710-eth-l2bdbasemaclrn-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr
-
-## 3n-skx-x710
-### 64b-?t?c-l2switching-base-scale-avf-i40e
-10ge2p1x710-avf-eth-l2patch-ndrpdr
-10ge2p1x710-avf-eth-l2xcbase-ndrpdr
-10ge2p1x710-avf-eth-l2bdbasemaclrn-ndrpdr
-10ge2p1x710-dot1q-l2bdbasemaclrn-ndrpdr
-10ge2p1x710-eth-l2bdbasemaclrn-ndrpdr
-10ge2p1x710-eth-l2bdscale1mmaclrn-ndrpdr
-
-## 3n-hsw-xl710
-### 64b-?t?c-l2switching-base-scale-i40e
-40ge2p1xl710-eth-l2patch-ndrpdr
-40ge2p1xl710-dot1q-l2xcbase-ndrpdr
-40ge2p1xl710-eth-l2xcbase-ndrpdr
-40ge2p1xl710-dot1q-l2bdbasemaclrn-ndrpdr
-40ge2p1xl710-eth-l2bdbasemaclrn-ndrpdr
-40ge2p1xl710-eth-l2bdscale1mmaclrn-ndrpdr
-
-## 3n-tsh-x520
-### 64b-?t?c-l2switching-base-ixgbe
-
-### 64b-?t?c-l2switching-base-scale-ixgbe
-
-### 64b-?t?c-features-l2switching-base-ixgbe
-
-# IPv4 Routing
-
-## 2n-skx-xxv710
-### 64b-?t?c-ip4routing-base-scale-avf
-2n1l-25ge2p1xxv710-avf-dot1q-ip4base-ndrpdr
-2n1l-25ge2p1xxv710-avf-ethip4-ip4base-ndrpdr
-2n1l-25ge2p1xxv710-avf-ethip4-ip4scale20k-ndrpdr
-2n1l-25ge2p1xxv710-avf-ethip4-ip4scale200k-ndrpdr
-2n1l-25ge2p1xxv710-avf-ethip4-ip4scale2m-ndrpdr
-
-### 64b-?t?c-ip4routing-base-scale-i40e
-2n1l-25ge2p1xxv710-dot1q-ip4base-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4base-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4scale20k-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4scale200k-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4scale2m-ndrpdr
-
-### 64b-?t?c-features-ip4routing-base-i40e
-2n1l-25ge2p1xxv710-ethip4-ip4base-ndrpdr
-2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr
-2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr
-2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr
-2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr
-2n1l-25ge2p1xxv710-ethip4udp-ip4base-nat44-ndrpdr
-
-## 2n-skx-x710
-### 64b-?t?c-ip4routing-base-scale-avf-i40e
-2n1l-10ge2p1x710-avf-ethip4-ip4base-ndrpdr
-2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr
-2n1l-10ge2p1x710-dot1q-ip4base-ndrpdr
-2n1l-10ge2p1x710-ethip4-ip4base-ndrpdr
-2n1l-10ge2p1x710-ethip4-ip4scale2m-ndrpdr
-
-## 3n-skx-xxv710
-### 64b-?t?c-ip4routing-base-scale-avf
-25ge2p1xxv710-avf-eth-ip4base-ndrpdr
-25ge2p1xxv710-avf-ethip4-ip4scale20k-ndrpdr
-25ge2p1xxv710-avf-ethip4-ip4scale200k-ndrpdr
-25ge2p1xxv710-avf-ethip4-ip4scale2m-ndrpdr
-
-### 64b-?t?c-ip4routing-base-scale-i40e
-25ge2p1xxv710-dot1q-ip4base-ndrpdr
-25ge2p1xxv710-ethip4-ip4base-ndrpdr
-25ge2p1xxv710-ethip4-ip4scale20k-ndrpdr
-25ge2p1xxv710-ethip4-ip4scale200k-ndrpdr
-25ge2p1xxv710-ethip4-ip4scale2m-ndrpdr
-
-### 64b-?t?c-features-ip4routing-base-i40e
-25ge2p1xxv710-ethip4-ip4base-ndrpdr
-25ge2p1xxv710-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr
-25ge2p1xxv710-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr
-25ge2p1xxv710-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr
-25ge2p1xxv710-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr
-25ge2p1xxv710-ethip4udp-ip4base-nat44-ndrpdr
-
-## 3n-skx-x710
-### 64b-?t?c-ip4routing-base-scale-avf-i40e
-10ge2p1x710-avf-ethip4-ip4base-ndrpdr
-10ge2p1x710-avf-ethip4-ip4scale2m-ndrpdr
-10ge2p1x710-dot1q-ip4base-ndrpdr
-10ge2p1x710-ethip4-ip4base-ndrpdr
-10ge2p1x710-ethip4-ip4scale2m-ndrpdr
-
-## 3n-hsw-xl710
-### 64b-?t?c-ip4routing-base-scale-i40e
-40ge2p1xl710-dot1q-ip4base-ndrpdr
-40ge2p1xl710-ethip4-ip4base-ndrpdr
-40ge2p1xl710-ethip4-ip4scale2m-ndrpdr
-
-## 3n-tsh-x520
-### 64b-1t1c-ip4routing-base-scale-ixgbe
-
-### 64b-1t1c-feature-ip4routing-base-ixgbe
-
-# IPv6 Routing
-
-## 2n-skx-xxv710
-### 78b-?t?c-ip6routing-base-scale-i40e
-2n1l-25ge2p1xxv710-dot1q-ip6base-ndrpdr
-2n1l-25ge2p1xxv710-ethip6-ip6base-ndrpdr
-2n1l-25ge2p1xxv710-ethip6-ip6scale20k-ndrpdr
-2n1l-25ge2p1xxv710-ethip6-ip6scale200k-ndrpdr
-2n1l-25ge2p1xxv710-ethip6-ip6scale2m-ndrpdr
-
-## 2n-skx-x710
-### 78b-?t?c-ip6routing-base-scale-i40e
-2n1l-10ge2p1x710-ethip6-ip6base-ndrpdr
-2n1l-10ge2p1x710-ethip6-ip6scale2m-ndrpdr
-
-## 3n-skx-xxv710
-### 78b-?t?c-ip6routing-base-scale-i40e
-25ge2p1xxv710-dot1q-ip6base-ndrpdr
-25ge2p1xxv710-ethip6-ip6base-ndrpdr
-25ge2p1xxv710-ethip6-ip6scale20k-ndrpdr
-25ge2p1xxv710-ethip6-ip6scale200k-ndrpdr
-25ge2p1xxv710-ethip6-ip6scale2m-ndrpdr
-
-## 3n-skx-x710
-### 78b-?t?c-ip6routing-base-scale-i40e
-10ge2p1x710-ethip6-ip6base-ndrpdr
-10ge2p1x710-ethip6-ip6scale2m-ndrpdr
-
-## 3n-hsw-xl710
-### 78b-?t?c-ip6routing-base-scale-i40e
-40ge2p1xl710-dot1q-ip6base-ndrpdr
-40ge2p1xl710-ethip6-ip6base-ndrpdr
-40ge2p1xl710-ethip6-ip6scale2m-ndrpdr
-
-## 3n-tsh-x520
-### 78b-1t1c-ip6routing-base-scale-ixgbe
-
-# SRv6 Routing
-
-## 3n-skx-xxv710
-### 78b-?t?c-srv6-ip6routing-base-i40e
-25ge2p1xxv710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr
-25ge2p1xxv710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr
-25ge2p1xxv710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr
-25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr
-25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr
-25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr
-
-## 3n-hsw-xl710
-### 78b-?t?c-srv6-ip6routing-base-i40e
-40ge2p1xl710-ethip6ip6-ip6base-srv6enc1sid-ndrpdr
-40ge2p1xl710-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr
-40ge2p1xl710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr
-40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr
-40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr
-40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr
-
-## 3n-tsh-x520
-### 78b-1t1c-srv6-ip6routing-base-ixgbe
-
-# IPv4 Tunnels
-
-## 3n-skx-xxv710
-### 64b-?t?c-ip4tunnel-base-scale-i40e
-25ge2p1xxv710-ethip4vxlan-l2xcbase-ndrpdr
-25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-ndrpdr
-25ge2p1xxv710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-ndrpdr
-25ge2p1xxv710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-ndrpdr
-
-## 3n-hsw-xl710
-### 64b-?t?c-ip4tunnel-base-i40e
-40ge2p1xl710-ethip4vxlan-l2xcbase-ndrpdr
-40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-ndrpdr
-
-## 3n-tsh-x520
-### 64b-1t1c-ip4tunnel-base-scale-ixgbe
-
-# KVM VMs vhost-user
-
-## 2n-skx-xxv710
-### 64b-?t?c-vhost-base-i40e
-2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr
-
-## 3n-skx-xxv710
-### 64b-?t?c-vhost-base-i40e
-25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr
-
-#### 64b-?t?c-link-bonding-vhost-base-i40e
-25ge2p1xxv710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-
-## 3n-skx-x710
-#### 64b-?t?c-link-bonding-vhost-base-i40e
-10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-
-## 3n-hsw-xl710
-### 64b-?t?c-vhost-base-i40e
-40ge2p1xl710-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr
-40ge2p1xl710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-40ge2p1xl710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr
-40ge2p1xl710-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr
-
-## 3n-tsh-x520
-### 64b-1t1c-vhost-base-ixgbe
-
-### 64b-1t1c-link-bonding-vhost-base-ixgbe
-
-
-# LXC/DRC Container Memif
-
-## 2n-skx-xxv710
-### 64b-?t?c-memif-base-i40e
-2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr
-2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr
-2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr
-2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr
-
-## 3n-skx-xxv710
-### 64b-?t?c-memif-base-i40e
-25ge2p1xxv710-eth-l2xcbase-eth-2memif-1lxc-ndrpdr
-25ge2p1xxv710-eth-l2xcbase-eth-2memif-1dcr-ndrpdr
-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr
-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr
-25ge2p1xxv710-ethip4-ip4base-eth-2memif-1dcr-ndrpdr
-
-## 3n-tsh-x520
-### 64b-1t1c-memif-base-ixgbe
-
-# IPsec with IPv4 Routing
-
-## 3n-skx-xxv710
-### imix-?t?c-ipsec-ip4routing-base-scale-i40e
-25ge2p1xxv710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr
-25ge2p1xxv710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-25ge2p1xxv710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr
-25ge2p1xxv710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-25ge2p1xxv710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr
-25ge2p1xxv710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-
-## 3n-hsw-xl710
-### imix-?t?c-ipsec-ip4routing-base-scale-sw-i40e
-40ge2p1xl710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr
-40ge2p1xl710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-40ge2p1xl710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr
-40ge2p1xl710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-40ge2p1xl710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr
-40ge2p1xl710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-
-### imix-?t?c-ipsec-ip4routing-base-scale-hw-i40e
-40ge2p1xl710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-ndrpdr
-40ge2p1xl710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-40ge2p1xl710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-ndrpdr
-40ge2p1xl710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-ndrpdr
-
-## 3n-tsh-x520
-## imix-1t1c-ipsec-ip4routing-base-scale-sw-ixgbe
-
-# Virtual Topology System
-
-## 3n-skx-xxv710
-### 114b-?t?c-vts-l2switching-base-i40e
-25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr
-25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr
-
-## 3n-hsw-xl710
-### 114b-?t?c-vts-l2switching-base-i40e
-40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr
-40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr
-40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr
-
-## 3n-tsh-x520
-### 114b-1t1c-vts-l2switching-base-ixgbe
-
-# 2n-skx nfv density (1c, 2c, 4c)
-
-## nfv_density/vm_vhost/chain
-
-### 2n-skx-xxv710
-#### imix-?t?c-vhost-chains-i40e
-2n-25ge2p1xxv710-eth-l2bd-10ch-20vh-10vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-10ch-40vh-20vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-16vh-8vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-20vh-10vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-16vh-8vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-24vh-12vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-32vh-16vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-40vh-20vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-16vh-8vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-32vh-16vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-48vh-24vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-24vh-12vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-48vh-24vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8ch-16vh-8vm1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8ch-32vh-16vm1t-vppip4-ndrpdr
-
-## nfv_density/vm_vhost/chain_dot1qip4vxlan
-- to be added to the Report
-
-### 2n-skx-xxv710
-#### imix-?t?c-vhost-chains-dot1qip4vxlan-i40e
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-8ch-16vh-8vm1t-testpmd-ndrpdr
-2n-25ge2p1xxv710-dot1qip4vxlan-l2bd-10ch-20vh-10vm1t-testpmd-ndrpdr
-
-## nfv_density/dcr_memif/chain
-
-### 2n-skx-xxv710
-#### imix-?t?c-memif-chains-i40e
-2n-25ge2p1xxv710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-ndrpdr
-
-## nfv_density/dcr_memif/pipeline
-
-### 2n-skx-xxv710
-#### imix-?t?c-memif-pipelines-i40e
-2n-25ge2p1xxv710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-ndrpdr
-2n-25ge2p1xxv710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-ndrpdr
diff --git a/resources/tools/presentation/doc/trending_test_groups.md b/resources/tools/presentation/doc/trending_test_groups.md
deleted file mode 100644
index e272a4c7b1..0000000000
--- a/resources/tools/presentation/doc/trending_test_groups.md
+++ /dev/null
@@ -1,921 +0,0 @@
-# Test Groups for Trending
-
-## Introduction
-
-Specifications of test groups for daily Trending graphs (see
-[Trending web page]) are provided in this note.
-
-### Order of Chapters on Trending Web Page
-1. L2 Ethernet Switching
-2. IPv4 Routing
-3. IPv6 Routing
-4. SRv6 Routing
-5. IPv4 Tunnels
-6. KVM VMs vhost-user
-7. LXC/DRC Container Memif
-8. IPsec with IPv4 Routing
-9. Virtual Topology System
-10. NF Service Density
-11. DPDK
-
-### Presented Test Configurations
-
-Only tests with NICs, processor cores and frame sizes specified below
-will be presented in the Trending.
-
-#### NICs
-- See [Performance Tests Job Specifications, chapter NICs]
-- See item nr 1 in TODO list.
-
-#### Processor Cores in Trending Graphs
-- 1c (1t1c or 2t1c),
-- 2c (2t2c or 4t2c),
-- 4c (4t4c or 8t4c).
-
-See item nr 3 in TODO list.
-
-#### Frame Sizes
-- See [Performance Tests Job Specifications, chapter Frame Sizes]
-- See item nr 2 in TODO list.
-
-### Backward compatibility
-
-The new structure will not be backward compatible with the previous one.
-The old data and graphs will be stored and accessible on the link:
-<https://docs.fd.io/csit/master/trending-archive/>. A link to this page
-will be on the Trending web page.
-
-### Notes
-1. The lists of tests are based on running tests in trending jobs
- - [2n-skx]
- - [3n-skx]
- - [3n-hsw]
- - [3n-tsh]
- - [2n-dnv]
- - [3n-dnv]
- - [2n-clx]
-
- and on the lists of selected tests (test_select_list_*.md) stored in
- the [Jobs specifications] directory.
-2. The order of chapters, sub-chapters and tests in the graphs on the
- [Trending web page] will be the same as specified in this document.
-
-### TODO List
-1. Change the trending jobs to use primary and secondary NICs as they
- are defined in [Performance Tests Job Specifications, chapter NICs].
-2. Change the trending jobs to use frame sizes as they are defined in
- [Performance Tests Job Specifications, chapter Frame Sizes].
-3. Change the trending jobs to use processor cores as they are defined
- in [Performance Tests Job Specifications, chapter Processor Cores].
-
-# Test Groups
-
-## L2 Ethernet Switching
-
-### 2n-skx-xxv710
-
-#### 64b-?t?c-l2switching-base-avf
- 2n1l-25ge2p1xxv710-avf-eth-l2patch-mrr
- 2n1l-25ge2p1xxv710-avf-eth-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-avf-dot1q-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-avf-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-i40e
- 2n1l-25ge2p1xxv710-eth-l2patch-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-eth-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-i40e
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale10kmaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale100kmaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale1mmaclrn-mrr
-
-### 2n-skx-x710
-
-#### 64b-?t?c-l2switching-base-scale-avf-i40e
- 2n1l-10ge2p1x710-avf-eth-l2xcbase-mrr
- 2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-eth-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-mrr
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-l2switching-base-avf
- 25ge2p1xxv710-avf-eth-l2patch-mrr
- 25ge2p1xxv710-avf-eth-l2xcbase-mrr
- 25ge2p1xxv710-avf-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-i40e
- 25ge2p1xxv710-dot1q-l2xcbase-mrr
- 25ge2p1xxv710-eth-l2xcbase-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-i40e
- 25ge2p1xxv710-eth-l2patch-mrr
- 25ge2p1xxv710-eth-l2xcbase-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
- 25ge2p1xxv710-eth-l2bdscale10kmaclrn-mrr
- 25ge2p1xxv710-eth-l2bdscale100kmaclrn-mrr
- 25ge2p1xxv710-eth-l2bdscale1mmaclrn-mrr
-
-#### 64b-?t?c-features-l2switching-base-i40e
- 25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-iacl50sf-10kflows-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-iacl50sl-10kflows-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-oacl50sf-10kflows-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-oacl50sl-10kflows-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-mrr
-
-### 3n-skx-x710
-
-#### 64b-?t?c-l2switching-base-scale-avf-i40e
- 10ge2p1x710-avf-eth-l2patch-mrr
- 10ge2p1x710-avf-eth-l2xcbase-mrr
- 10ge2p1x710-avf-eth-l2bdbasemaclrn-mrr
- 10ge2p1x710-dot1q-l2bdbasemaclrn-mrr
- 10ge2p1x710-eth-l2bdbasemaclrn-mrr
- 10ge2p1x710-eth-l2bdscale1mmaclrn-mrr
-
-### 3n-hsw-xl710
-
-#### 64b-?t?c-l2switching-base-scale-i40e
- 40ge2p1xl710-eth-l2patch-mrr
- 40ge2p1xl710-dot1q-l2xcbase-mrr
- 40ge2p1xl710-eth-l2xcbase-mrr
- 40ge2p1xl710-dot1q-l2bdbasemaclrn-mrr
- 40ge2p1xl710-eth-l2bdbasemaclrn-mrr
- 40ge2p1xl710-eth-l2bdscale1mmaclrn-mrr
-
-### 3n-tsh-x520
-
-#### 64b-?t?c-l2switching-base-ixgbe
- 10ge2p1x520-dot1q-l2xcbase-mrr
- 10ge2p1x520-eth-l2xcbase-mrr
- 10ge2p1x520-dot1q-l2bdbasemaclrn-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-ixgbe
- 10ge2p1x520-eth-l2patch-mrr
- 10ge2p1x520-eth-l2xcbase-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-mrr
- 10ge2p1x520-eth-l2bdscale10kmaclrn-mrr
- 10ge2p1x520-eth-l2bdscale100kmaclrn-mrr
- 10ge2p1x520-eth-l2bdscale1mmaclrn-mrr
-
-#### 64b-?t?c-features-l2switching-base-ixgbe
- 10ge2p1x520-eth-l2bdbasemaclrn-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-iacl50sf-10kflows-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-iacl50sl-10kflows-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-oacl50sf-10kflows-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-oacl50sl-10kflows-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-mrr
-
-### 2n-dnv-x553
-
-#### 64b-?t?c-l2switching-base-ixgbe
- 10ge2p1x553-dot1q-l2xcbase-mrr
- 10ge2p1x553-eth-l2xcbase-mrr
- 10ge2p1x553-dot1q-l2bdbasemaclrn-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-ixgbe
- 10ge2p1x553-eth-l2patch-mrr
- 10ge2p1x553-eth-l2xcbase-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-mrr
- 10ge2p1x553-eth-l2bdscale10kmaclrn-mrr
- 10ge2p1x553-eth-l2bdscale100kmaclrn-mrr
- 10ge2p1x553-eth-l2bdscale1mmaclrn-mrr
-
-### 3n-dnv-x553
-
-#### 64b-?t?c-l2switching-base-ixgbe
- 10ge2p1x553-dot1q-l2xcbase-mrr
- 10ge2p1x553-eth-l2xcbase-mrr
- 10ge2p1x553-dot1q-l2bdbasemaclrn-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-ixgbe
- 10ge2p1x553-eth-l2patch-mrr
- 10ge2p1x553-eth-l2xcbase-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-mrr
- 10ge2p1x553-eth-l2bdscale10kmaclrn-mrr
- 10ge2p1x553-eth-l2bdscale100kmaclrn-mrr
- 10ge2p1x553-eth-l2bdscale1mmaclrn-mrr
-
-#### 64b-?t?c-features-l2switching-base-ixgbe
- 10ge2p1x553-eth-l2bdbasemaclrn-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-iacl50sf-10kflows-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-iacl50sl-10kflows-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-oacl50sf-10kflows-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-oacl50sl-10kflows-mrr
- 10ge2p1x553-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-mrr
-
-### 2n-clx-xxv710
-
-#### 64b-?t?c-l2switching-base-avf
- 2n1l-25ge2p1xxv710-avf-eth-l2patch-mrr
- 2n1l-25ge2p1xxv710-avf-eth-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-avf-dot1q-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-avf-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-i40e
- 2n1l-25ge2p1xxv710-eth-l2patch-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-eth-l2xcbase-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
-
-#### 64b-?t?c-l2switching-base-scale-i40e
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale10kmaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale100kmaclrn-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdscale1mmaclrn-mrr
-
-### 2n-clx-x710
-
-#### 64b-?t?c-l2switching-base-scale-avf-i40e
- 2n1l-10ge2p1x710-avf-eth-l2xcbase-mrr
- 2n1l-10ge2p1x710-avf-dot1q-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-avf-eth-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-dot1q-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-eth-l2bdbasemaclrn-mrr
- 2n1l-10ge2p1x710-eth-l2bdscale1mmaclrn-mrr
-
-## IPv4 Routing
-
-### 2n-skx-xxv710
-
-#### 64b-?t?c-ip4routing-base-scale-avf
- 2n1l-25ge2p1xxv710-avf-dot1q-ip4base-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale20k-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale200k-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-ip4routing-base-scale-i40e
- 2n1l-25ge2p1xxv710-dot1q-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale20k-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale200k-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-i40e
- 2n1l-25ge2p1xxv710-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-nat44-mrr
-
-### 2n-skx-x710
-
-#### 64b-?t?c-ip4routing-base-scale-avf-i40e
- 2n1l-10ge2p1x710-avf-ethip4-ip4base-mrr
- 2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-mrr
- 2n1l-10ge2p1x710-dot1q-ip4base-mrr
- 2n1l-10ge2p1x710-ethip4-ip4base-mrr
- 2n1l-10ge2p1x710-ethip4-ip4scale2m-mrr
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-ip4routing-base-scale-avf
- 25ge2p1xxv710-avf-eth-ip4base-mrr
- 25ge2p1xxv710-avf-ethip4-ip4scale20k-mrr
- 25ge2p1xxv710-avf-ethip4-ip4scale200k-mrr
- 25ge2p1xxv710-avf-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-ip4routing-base-scale-i40e
- 25ge2p1xxv710-dot1q-ip4base-mrr
- 25ge2p1xxv710-ethip4-ip4base-mrr
- 25ge2p1xxv710-ethip4-ip4scale20k-mrr
- 25ge2p1xxv710-ethip4-ip4scale200k-mrr
- 25ge2p1xxv710-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-i40e
- 25ge2p1xxv710-ethip4-ip4base-mrr
- 25ge2p1xxv710-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 25ge2p1xxv710-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 25ge2p1xxv710-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 25ge2p1xxv710-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 25ge2p1xxv710-ethip4udp-ip4base-nat44-mrr
-
-### 3n-skx-x710
-
-#### 64b-?t?c-ip4routing-base-scale-avf-i40e
- 10ge2p1x710-avf-ethip4-ip4base-mrr
- 10ge2p1x710-avf-ethip4-ip4scale2m-mrr
- 10ge2p1x710-dot1q-ip4base-mrr
- 10ge2p1x710-ethip4-ip4base-mrr
- 10ge2p1x710-ethip4-ip4scale2m-mrr
-
-### 3n-hsw-xl710
-
-#### 64b-?t?c-ip4routing-base-scale-i40e
- 40ge2p1xl710-dot1q-ip4base-mrr
- 40ge2p1xl710-ethip4-ip4base-mrr
- 40ge2p1xl710-ethip4-ip4scale2m-mrr
-
-### 3n-tsh-x520
-
-#### 64b-?t?c-ip4routing-base-scale-ixgbe
- 10ge2p1x520-dot1q-ip4base-mrr
- 10ge2p1x520-ethip4-ip4base-mrr
- 10ge2p1x520-ethip4-ip4scale20k-mrr
- 10ge2p1x520-ethip4-ip4scale200k-mrr
- 10ge2p1x520-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-ixgbe
- 10ge2p1x520-ethip4-ip4base-mrr
- 10ge2p1x520-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 10ge2p1x520-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 10ge2p1x520-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 10ge2p1x520-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 10ge2p1x520-ethip4udp-ip4base-nat44-mrr
-
-### 2n-dnv-x553
-
-#### 64b-?t?c-ip4routing-base-scale-ixgbe
- 10ge2p1x553-dot1q-ip4base-mrr
- 10ge2p1x553-ethip4-ip4base-mrr
- 10ge2p1x553-ethip4-ip4scale20k-mrr
- 10ge2p1x553-ethip4-ip4scale200k-mrr
- 10ge2p1x553-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-ixgbe
- 10ge2p1x553-ethip4-ip4base-mrr
- 10ge2p1x553-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-nat44-mrr
-
-### 3n-dnv-x553
-
-#### 64b-?t?c-ip4routing-base-scale-ixgbe
- 10ge2p1x553-dot1q-ip4base-mrr
- 10ge2p1x553-ethip4-ip4base-mrr
- 10ge2p1x553-ethip4-ip4scale20k-mrr
- 10ge2p1x553-ethip4-ip4scale200k-mrr
- 10ge2p1x553-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-ixgbe
- 10ge2p1x553-ethip4-ip4base-mrr
- 10ge2p1x553-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 10ge2p1x553-ethip4udp-ip4base-nat44-mrr
-
-### 2n-clx-xxv710
-
-#### 64b-?t?c-ip4routing-base-scale-avf
- 2n1l-25ge2p1xxv710-avf-dot1q-ip4base-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale20k-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale200k-mrr
- 2n1l-25ge2p1xxv710-avf-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-ip4routing-base-scale-i40e
- 2n1l-25ge2p1xxv710-dot1q-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale20k-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale200k-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4scale2m-mrr
-
-#### 64b-?t?c-features-ip4routing-base-i40e
- 2n1l-25ge2p1xxv710-ethip4-ip4base-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sf-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-iacl50sl-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sf-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-oacl50sl-10kflows-mrr
- 2n1l-25ge2p1xxv710-ethip4udp-ip4base-nat44-mrr
-
-### 2n-clx-x710
-
-#### 64b-?t?c-ip4routing-base-scale-avf-i40e
- 2n1l-10ge2p1x710-avf-ethip4-ip4base-mrr
- 2n1l-10ge2p1x710-avf-ethip4-ip4scale2m-mrr
- 2n1l-10ge2p1x710-dot1q-ip4base-mrr
- 2n1l-10ge2p1x710-ethip4-ip4base-mrr
- 2n1l-10ge2p1x710-ethip4-ip4scale2m-mrr
-
-## IPv6 Routing
-
-### 2n-skx-xxv710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 2n1l-25ge2p1xxv710-dot1q-ip6base-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6base-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale20k-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale200k-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale2m-mrr
-
-### 2n-skx-x710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 2n1l-10ge2p1x710-ethip6-ip6base-mrr
- 2n1l-10ge2p1x710-ethip6-ip6scale2m-mrr
-
-### 3n-skx-xxv710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 25ge2p1xxv710-dot1q-ip6base-mrr
- 25ge2p1xxv710-ethip6-ip6base-mrr
- 25ge2p1xxv710-ethip6-ip6scale20k-mrr
- 25ge2p1xxv710-ethip6-ip6scale200k-mrr
- 25ge2p1xxv710-ethip6-ip6scale2m-mrr
-
-### 3n-skx-x710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 10ge2p1x710-ethip6-ip6base-mrr
- 10ge2p1x710-ethip6-ip6scale2m-mrr
-
-### 3n-hsw-xl710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 40ge2p1xl710-dot1q-ip6base-mrr
- 40ge2p1xl710-ethip6-ip6base-mrr
- 40ge2p1xl710-ethip6-ip6scale2m-mrr
-
-### 3n-tsh-x520
-
-#### 78b-?t?c-ip6routing-base-scale-ixgbe
- 10ge2p1x520-dot1q-ip6base-mrr
- 10ge2p1x520-ethip6-ip6base-mrr
- 10ge2p1x520-ethip6-ip6scale20k-mrr
- 10ge2p1x520-ethip6-ip6scale200k-mrr
- 10ge2p1x520-ethip6-ip6scale2m-mrr
-
-### 2n-dnv-x553
-
-#### 78b-?t?c-ip6routing-base-scale-ixgbe
- 10ge2p1x553-dot1q-ip6base-mrr
- 10ge2p1x553-ethip6-ip6base-mrr
- 10ge2p1x553-ethip6-ip6scale20k-mrr
- 10ge2p1x553-ethip6-ip6scale200k-mrr
- 10ge2p1x553-ethip6-ip6scale2m-mrr
-
-### 3n-dnv-x553
-
-#### 78b-?t?c-ip6routing-base-scale-ixgbe
- 10ge2p1x553-dot1q-ip6base-mrr
- 10ge2p1x553-ethip6-ip6base-mrr
- 10ge2p1x553-ethip6-ip6scale20k-mrr
- 10ge2p1x553-ethip6-ip6scale200k-mrr
- 10ge2p1x553-ethip6-ip6scale2m-mrr
-
-### 2n-clx-xxv710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 2n1l-25ge2p1xxv710-dot1q-ip6base-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6base-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale20k-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale200k-mrr
- 2n1l-25ge2p1xxv710-ethip6-ip6scale2m-mrr
-
-### 2n-clx-x710
-
-#### 78b-?t?c-ip6routing-base-scale-i40e
- 10ge2p1x710-ethip6-ip6base-mrr
- 10ge2p1x710-ethip6-ip6scale2m-mrr
-
-## SRv6 Routing
-
-### 3n-skx-xxv710
-
-#### 78b-?t?c-srv6-ip6routing-base-i40e
- 25ge2p1xxv710-ethip6ip6-ip6base-srv6enc1sid-mrr
- 25ge2p1xxv710-ethip6srhip6-ip6base-srv6enc2sids-mrr
- 25ge2p1xxv710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr
- 25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-dyn-mrr
- 25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-masq-mrr
- 25ge2p1xxv710-ethip6srhip6-ip6base-srv6proxy-stat-mrr
-
-### 3n-hsw-xl710
-
-#### 78b-?t?c-srv6-ip6routing-base-i40e
- 40ge2p1xl710-ethip6ip6-ip6base-srv6enc1sid-mrr
- 40ge2p1xl710-ethip6srhip6-ip6base-srv6enc2sids-mrr
- 40ge2p1xl710-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr
- 40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-dyn-mrr
- 40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-masq-mrr
- 40ge2p1xl710-ethip6srhip6-ip6base-srv6proxy-stat-mrr
-
-### 3n-tsh-x520
-
-#### 78b-?t?c-srv6-ip6routing-base-ixgbe
- 10ge2p1x520-ethip6ip6-ip6base-srv6enc1sid-mrr
- 10ge2p1x520-ethip6srhip6-ip6base-srv6enc2sids-mrr
- 10ge2p1x520-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr
- 10ge2p1x520-ethip6srhip6-ip6base-srv6proxy-dyn-mrr
- 10ge2p1x520-ethip6srhip6-ip6base-srv6proxy-masq-mrr
- 10ge2p1x520-ethip6srhip6-ip6base-srv6proxy-stat-mrr
-
-### 3n-dnv-x553
-
-#### 78b-?t?c-srv6-ip6routing-base-ixgbe
- 10ge2p1x553-ethip6ip6-ip6base-srv6enc1sid-mrr
- 10ge2p1x553-ethip6srhip6-ip6base-srv6enc2sids-mrr
- 10ge2p1x553-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr
- 10ge2p1x553-ethip6srhip6-ip6base-srv6proxy-dyn-mrr
- 10ge2p1x553-ethip6srhip6-ip6base-srv6proxy-masq-mrr
- 10ge2p1x553-ethip6srhip6-ip6base-srv6proxy-stat-mrr
-
-## IPv4 Tunnels
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-ip4tunnel-base-scale-i40e
- 25ge2p1xxv710-ethip4vxlan-l2xcbase-mrr
- 25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-mrr
- 25ge2p1xxv710-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-mrr
- 25ge2p1xxv710-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-mrr
-
-### 3n-hsw-xl710
-
-#### 64b-?t?c-ip4tunnel-base-i40e
- 40ge2p1xl710-ethip4vxlan-l2xcbase-mrrjaja
- 40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-mrr
-
-### 3n-tsh-x520
-
-#### 64b-?t?c-ip4tunnel-base-scale-ixgbe
- 10ge2p1x520-ethip4vxlan-l2xcbase-mrr
- 10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-mrr
- 10ge2p1x520-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-mrr
- 10ge2p1x520-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-mrr
-
-### 3n-dnv-x553
-
-#### 64b-?t?c-ip4tunnel-base-scale-ixgbe
- 10ge2p1x553-ethip4vxlan-l2xcbase-mrr
- 10ge2p1x553-ethip4vxlan-l2bdbasemaclrn-mrr
- 10ge2p1x553-dot1q--ethip4vxlan-l2bdscale1l2bd1vlan1vxlan-mrr
- 10ge2p1x553-dot1q--ethip4vxlan-l2bdscale100l2bd100vlan100vxlan-mrr
-
-## KVM VMs vhost-user
-
-### 2n-skx-xxv710
-
-#### 64b-?t?c-vhost-base-i40e-testpmd
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-vhost-base-i40e-vpp
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-vhost-base-i40e-testpmd
- 25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-vhost-base-i40e-vpp
- 25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-#### 64b-?t?c-link-bonding-vhost-base-i40e-testpmd
- 25ge2p1xxv710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-link-bonding-vhost-base-i40e-vpp
- 25ge2p1xxv710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-### 3n-skx-x710
-
-#### 64b-?t?c-link-bonding-vhost-base-i40e-testpmd
- 10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-link-bonding-vhost-base-i40e-vpp
- 10ge2p1x710-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 10ge2p1x710-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 10ge2p1x710-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 10ge2p1x710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 10ge2p1x710-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 10ge2p1x710-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-### 3n-hsw-xl710
-
-#### 64b-?t?c-vhost-base-i40e-testpmd
- 40ge2p1xl710-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 40ge2p1xl710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 40ge2p1xl710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 40ge2p1xl710-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-vhost-base-i40e-vpp
- 40ge2p1xl710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 40ge2p1xl710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 40ge2p1xl710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 40ge2p1xl710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-### 3n-tsh-x520
-
-#### 64b-?t?c-vhost-base-ixgbe
- 10ge2p1x520-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-link-bonding-vhost-base-ixgbe
- 10ge2p1x520-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
-
-### 2n-clx-xxv710
-
-#### 64b-?t?c-vhost-base-i40e-testpmd
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr
-
-#### 64b-?t?c-vhost-base-i40e-vpp
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr
-
-## LXC/DRC Container Memif
-
-### 2n-skx-xxv710
-
-#### 64b-?t?c-memif-base-i40e
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2memif-1dcr-mrr
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-memif-base-i40e
- 25ge2p1xxv710-eth-l2xcbase-eth-2memif-1lxc-mrr
- 25ge2p1xxv710-eth-l2xcbase-eth-2memif-1dcr-mrr
- 25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2memif-1lxc-mrr
- 25ge2p1xxv710-ethip4-ip4base-eth-2memif-1dcr-mrr
-
-### 3n-tsh-x520
-
-#### 64b-?t?c-memif-base-ixgbe
- 10ge2p1x520-eth-l2xcbase-eth-2memif-1lxc-mrr
- 10ge2p1x520-eth-l2xcbase-eth-2memif-1dcr-mrr
- 10ge2p1x520-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 10ge2p1x520-eth-l2bdbasemaclrn-eth-2memif-1lxc-mrr
- 10ge2p1x520-ethip4-ip4base-eth-2memif-1dcr-mrr
-
-### 2n-clx-xxv710
-
-#### 64b-?t?c-memif-base-i40e
- 2n1l-25ge2p1xxv710-eth-l2xcbase-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-eth-2memif-1dcr-mrr
-
-## IPsec with IPv4 Routing
-
-### 3n-skx-xxv710
-
-#### imix-?t?c-ipsec-ip4routing-base-scale-sw-i40e
- 25ge2p1xxv710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr
- 25ge2p1xxv710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 25ge2p1xxv710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr
- 25ge2p1xxv710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 25ge2p1xxv710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr
- 25ge2p1xxv710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
-
-### 3n-hsw-xl710
-
-#### imix-?t?c-ipsec-ip4routing-base-scale-sw-i40e
- 40ge2p1xl710-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr
- 40ge2p1xl710-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 40ge2p1xl710-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr
- 40ge2p1xl710-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 40ge2p1xl710-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr
- 40ge2p1xl710-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
-
-#### imix-?t?c-ipsec-ip4routing-base-scale-hw-i40e
- 40ge2p1xl710-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-mrr
- 40ge2p1xl710-ethip4ipsec1tnlhw-ip4base-int-aes128cbc-hmac512sha-mrr
- 40ge2p1xl710-ethip4ipsec1000tnlhw-ip4base-int-aes256gcm-mrr
- 40ge2p1xl710-ethip4ipsec1000tnlhw-ip4base-int-aes128cbc-hmac512sha-mrr
-
-### 3n-tsh-x520
-
-#### imix-?t?c-ipsec-ip4routing-base-scale-sw-ixgbe
- 10ge2p1x520-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x520-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 10ge2p1x520-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x520-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 10ge2p1x520-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x520-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
-
-### 3n-dnv-x553
-
-#### imix-?t?c-ipsec-ip4routing-base-scale-sw-ixgbe
- 10ge2p1x553-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x553-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 10ge2p1x553-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x553-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
- 10ge2p1x553-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr
- 10ge2p1x553-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr
-
-## Virtual Topology System
-
-### 3n-skx-xxv710
-
-#### 114b-?t?c-vts-l2switching-base-i40e
- 25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr
- 25ge2p1xxv710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr
-
-### 3n-hsw-xl710
-
-#### 114b-?t?c-vts-l2switching-base-i40e
- 40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr
- 40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr
- 40ge2p1xl710-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr
-
-### 3n-tsh-x520
-
-#### 114b-?t?c-vts-l2switching-base-ixgbe
- 10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr
- 10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr
- 10ge2p1x520-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr
-
-## NF Service Density
-
-### VNF Service Chains
-
-#### 2n-skx-xxv710
-
-##### imix-?t?c-vhost-chains-i40e
- 2n-25ge2p1xxv710-eth-l2bd-10ch-20vh-10vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-10ch-40vh-20vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-12vh-6vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-16vh-8vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-20vh-10vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-2vh-1vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-4vh-2vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-8vh-4vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-16vh-8vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-24vh-12vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-32vh-16vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-40vh-20vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-4vh-2vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-8vh-4vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-16vh-8vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-32vh-16vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-48vh-24vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-8vh-4vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-12vh-6vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-24vh-12vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-48vh-24vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8ch-16vh-8vm1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8ch-32vh-16vm1t-vppip4-mrr
-
-### CNF Service Chains
-
-#### 2n-skx-xxv710
-
-##### imix-?t?c-memif-chains-i40e
- 2n-25ge2p1xxv710-eth-l2bd-10ch-20mif-10dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-10ch-40mif-20dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-12mif-6dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-16mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-20mif-10dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-2mif-1dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-4mif-2dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1ch-8mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-16mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-24mif-12dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-32mif-16dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-40mif-20dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-4mif-2dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2ch-8mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-16mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-32mif-16dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-48mif-24dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4ch-8mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-12mif-6dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-24mif-12dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6ch-48mif-24dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8ch-16mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8ch-32mif-16dcr1t-vppip4-mrr
-
-### CNF Service Pipelines
-
-#### 2n-skx-xxv710
-
-##### imix-?t?c-memif-pipelines-i40e
- 2n-25ge2p1xxv710-eth-l2bd-10pl-20mif-10dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-10pl-20mif-20dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-10dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-1dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-2dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-6dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-1pl-2mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-12dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-16dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-20dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-2dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-4mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-2pl-8mif-4dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-16dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-24dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-4pl-8mif-8dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-12dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-24dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-6pl-12mif-6dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8pl-16mif-16dcr1t-vppip4-mrr
- 2n-25ge2p1xxv710-eth-l2bd-8pl-16mif-8dcr1t-vppip4-mrr
-
-## DPDK
-
-### 2n-skx-xxv710
-
-#### 64b-?t?c-testpmd-l3fwd
- 2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-mrr
- 2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr
-
-### 2n-skx-x710
-
-#### 64b-?t?c-testpmd-l3fwd
- 2n1l-10ge2p1x710-eth-l2xcbase-testpmd-mrr
- 2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-mrr
-
-### 3n-skx-xxv710
-
-#### 64b-?t?c-testpmd-l3fwd
- 25ge2p1xxv710-eth-l2xcbase-testpmd-mrr
- 25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr
-
-### 3n-skx-x710
-
-#### 64b-?t?c-testpmd-l3fwd
- 10ge2p1x710-eth-l2xcbase-testpmd-mrr
- 10ge2p1x710-ethip4-ip4base-l3fwd-mrr
-
-### 3n-hsw-xl710
-
-#### 64b-?t?c-testpmd-l3fwd
- 40ge2p1xl710-eth-l2xcbase-testpmd-mrr
- 40ge2p1xl710-ethip4-ip4base-l3fwd-mrr
-
-### 3n-hsw-x710
-
-#### 64b-?t?c-testpmd-l3fwd
- 10ge2p1x710-eth-l2xcbase-testpmd-mrr
- 10ge2p1x710-ethip4-ip4base-l3fwd-mrr
-
-[Trending web page]: https://docs.fd.io/csit/master/trending/index.html
-[2n-skx]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-skx/
-[3n-skx]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-skx/
-[3n-hsw]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master/
-[3n-tsh]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-tsh/
-[2n-dnv]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-dnv/
-[3n-dnv]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-dnv/
-[2n-clx]: https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-clx/
-[Performance Tests Job Specifications, chapter NICs]: https://github.com/FDio/csit/blob/master/docs/job_specs/perf_tests_job_specs.md#nics
-[Performance Tests Job Specifications, chapter Frame Sizes]: https://github.com/FDio/csit/blob/master/docs/job_specs/perf_tests_job_specs.md#frame-sizes
-[Performance Tests Job Specifications, chapter Processor Cores]: https://github.com/FDio/csit/blob/master/docs/job_specs/perf_tests_job_specs.md#processor-cores
-[Jobs specifications]: https://github.com/FDio/csit/tree/master/docs/job_specs
-
-# END OF DOCUMENT
diff --git a/resources/tools/presentation/environment.py b/resources/tools/presentation/environment.py
deleted file mode 100644
index 9bf9586da8..0000000000
--- a/resources/tools/presentation/environment.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Environment
-
-Setting of the environment according to the specification specified in the
-specification YAML file.
-"""
-
-import os
-import shutil
-import logging
-
-from pal_errors import PresentationError
-
-
-class Environment:
- """Setting of the environment:
- - set environment variables,
- - create directories.
- """
-
- def __init__(self, env, force=False):
- """Initialization.
-
- :param env: Environment specification.
- :param force: If True, remove old build(s) if present.
- :type env: dict
- :type force: bool
- """
-
- self._env = env
- self._force = force
-
- @property
- def environment(self):
- """Getter.
-
- :returns: Environment settings.
- :rtype: dict
- """
- return self._env
-
- def _make_dirs(self):
- """Create the directories specified in the 'make-dirs' part of
- 'environment' section in the specification file.
-
- :raises: PresentationError if it is not possible to remove or create a
- directory.
- """
-
- if self._force:
- logging.info(u"Removing old build(s) ...")
- for directory in self._env[u"build-dirs"]:
- dir_to_remove = self._env[u"paths"][directory]
- if os.path.isdir(dir_to_remove):
- try:
- shutil.rmtree(dir_to_remove)
- logging.info(f" Removed: {dir_to_remove}")
- except OSError:
- raise PresentationError(
- f"Cannot remove the directory {dir_to_remove}"
- )
- logging.info(u"Done.")
-
- logging.info(u"Making directories ...")
-
- for directory in self._env[u"make-dirs"]:
- dir_to_make = self._env[u"paths"][directory]
- try:
- if os.path.isdir(dir_to_make):
- logging.warning(
- f"The directory {dir_to_make} exists, skipping."
- )
- else:
- os.makedirs(dir_to_make)
- logging.info(f" Created: {dir_to_make}")
- except OSError:
- raise PresentationError(
- f"Cannot make the directory {dir_to_make}"
- )
-
- logging.info(u"Done.")
-
- def set_environment(self):
- """Set the environment.
- """
-
- self._make_dirs()
-
-
-def clean_environment(env):
- """Clean the environment.
-
- :param env: Environment specification.
- :type env: dict
- """
-
- logging.info(u"Cleaning the environment ...")
-
- if not env[u"remove-dirs"]: # None or empty
- logging.info(u" No directories to remove.")
- return
-
- for directory in env[u"remove-dirs"]:
- dir_to_remove = env[u"paths"][directory]
- logging.info(f" Removing the working directory {dir_to_remove} ...")
- if os.path.isdir(dir_to_remove):
- try:
- shutil.rmtree(dir_to_remove)
- except OSError as err:
- logging.warning(
- f"Cannot remove the directory {dir_to_remove}"
- )
- logging.debug(str(err))
- else:
- logging.warning(f"The directory {dir_to_remove} does not exist.")
-
- logging.info(u"Done.")
diff --git a/resources/tools/presentation/generator_alerts.py b/resources/tools/presentation/generator_alerts.py
deleted file mode 100644
index 9a0a03a59f..0000000000
--- a/resources/tools/presentation/generator_alerts.py
+++ /dev/null
@@ -1,498 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Generator of alerts:
-- failed tests
-- regressions
-- progressions
-"""
-
-
-import smtplib
-import logging
-import re
-
-from difflib import SequenceMatcher
-from email.mime.text import MIMEText
-from email.mime.multipart import MIMEMultipart
-from os.path import isdir
-from collections import OrderedDict, defaultdict
-
-from pal_errors import PresentationError
-
-
-class AlertingError(PresentationError):
- """Exception(s) raised by the alerting module.
-
- When raising this exception, put this information to the message in this
- order:
- - short description of the encountered problem (parameter msg),
- - relevant messages if there are any collected, e.g., from caught
- exception (optional parameter details),
- - relevant data if there are any collected (optional parameter details).
- """
-
- def __init__(self, msg, details=u'', level=u"CRITICAL"):
- """Sets the exception message and the level.
-
- :param msg: Short description of the encountered problem.
- :param details: Relevant messages if there are any collected, e.g.,
- from caught exception (optional parameter details), or relevant data
- if there are any collected (optional parameter details).
- :param level: Level of the error, possible choices are: "DEBUG", "INFO",
- "WARNING", "ERROR" and "CRITICAL".
- :type msg: str
- :type details: str
- :type level: str
- """
-
- super(AlertingError, self).__init__(f"Alerting: {msg}", details, level)
-
- def __repr__(self):
- return (
- f"AlertingError(msg={self._msg!r},details={self._details!r},"
- f"level={self._level!r})"
- )
-
-
-class Alerting:
- """Class implementing the alerting mechanism.
- """
-
- def __init__(self, spec):
- """Initialization.
-
- :param spec: The CPTA specification.
- :type spec: Specification
- """
-
- # Implemented alerts:
- self._implemented_alerts = (u"failed-tests", )
-
- self._spec = spec
-
- self.error_msgs = list()
-
- try:
- self._spec_alert = spec.alerting
- except KeyError as err:
- raise AlertingError(
- u"Alerting is not configured, skipped.", repr(err), u"WARNING"
- )
-
- self._path_failed_tests = spec.environment[u"paths"][u"DIR[STATIC,VPP]"]
-
- # Verify and validate input specification:
- self.configs = self._spec_alert.get(u"configurations", None)
- if not self.configs:
- raise AlertingError(u"No alert configuration is specified.")
- for config_type, config_data in self.configs.items():
- if config_type == u"email":
- if not config_data.get(u"server", None):
- raise AlertingError(u"Parameter 'server' is missing.")
- if not config_data.get(u"address-to", None):
- raise AlertingError(u"Parameter 'address-to' (recipient) "
- u"is missing.")
- if not config_data.get(u"address-from", None):
- raise AlertingError(u"Parameter 'address-from' (sender) is "
- u"missing.")
- elif config_type == u"jenkins":
- if not isdir(config_data.get(u"output-dir", u"")):
- raise AlertingError(u"Parameter 'output-dir' is "
- u"missing or it is not a directory.")
- if not config_data.get(u"output-file", None):
- raise AlertingError(u"Parameter 'output-file' is missing.")
- else:
- raise AlertingError(
- f"Alert of type {config_type} is not implemented."
- )
-
- self.alerts = self._spec_alert.get(u"alerts", None)
- if not self.alerts:
- raise AlertingError(u"No alert is specified.")
- for alert_data in self.alerts.values():
- if not alert_data.get(u"title", None):
- raise AlertingError(u"Parameter 'title' is missing.")
- if not alert_data.get(u"type", None) in self._implemented_alerts:
- raise AlertingError(u"Parameter 'failed-tests' is missing or "
- u"incorrect.")
- if not alert_data.get(u"way", None) in self.configs.keys():
- raise AlertingError(u"Parameter 'way' is missing or incorrect.")
- if not alert_data.get(u"include", None):
- raise AlertingError(u"Parameter 'include' is missing or the "
- u"list is empty.")
-
- def __str__(self):
- """Return string with human readable description of the alert.
-
- :returns: Readable description.
- :rtype: str
- """
- return f"configs={self.configs}, alerts={self.alerts}"
-
- def __repr__(self):
- """Return string executable as Python constructor call.
-
- :returns: Executable constructor call.
- :rtype: str
- """
- return f"Alerting(spec={self._spec})"
-
- def generate_alerts(self):
- """Generate alert(s) using specified way(s).
- """
-
- for alert_data in self.alerts.values():
- if alert_data[u"way"] == u"jenkins":
- self._generate_email_body(alert_data)
- else:
- raise AlertingError(
- f"Alert with way {alert_data[u'way']} is not implemented."
- )
-
- @staticmethod
- def _send_email(server, addr_from, addr_to, subject, text=None, html=None):
- """Send an email using predefined configuration.
-
- :param server: SMTP server used to send email.
- :param addr_from: Sender address.
- :param addr_to: Recipient address(es).
- :param subject: Subject of the email.
- :param text: Message in the ASCII text format.
- :param html: Message in the HTML format.
- :type server: str
- :type addr_from: str
- :type addr_to: list
- :type subject: str
- :type text: str
- :type html: str
- """
-
- if not text and not html:
- raise AlertingError(u"No text/data to send.")
-
- msg = MIMEMultipart(u'alternative')
- msg[u'Subject'] = subject
- msg[u'From'] = addr_from
- msg[u'To'] = u", ".join(addr_to)
-
- if text:
- msg.attach(MIMEText(text, u'plain'))
- if html:
- msg.attach(MIMEText(html, u'html'))
-
- smtp_server = None
- try:
- logging.info(f"Trying to send alert {subject} ...")
- logging.debug(f"SMTP Server: {server}")
- logging.debug(f"From: {addr_from}")
- logging.debug(f"To: {u', '.join(addr_to)}")
- logging.debug(f"Message: {msg.as_string()}")
- smtp_server = smtplib.SMTP(server)
- smtp_server.sendmail(addr_from, addr_to, msg.as_string())
- except smtplib.SMTPException as err:
- raise AlertingError(u"Not possible to send the alert via email.",
- str(err))
- finally:
- if smtp_server:
- smtp_server.quit()
-
- def _get_compressed_failed_tests(self, alert, test_set, sort=True):
- """Return the dictionary with compressed faild tests. The compression is
- done by grouping the tests from the same area but with different NICs,
- frame sizes and number of processor cores.
-
- For example, the failed tests:
- 10ge2p1x520-64b-1c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
- 10ge2p1x520-64b-2c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
- 10ge2p1x520-64b-4c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
- 10ge2p1x520-imix-1c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
- 10ge2p1x520-imix-2c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
- 10ge2p1x520-imix-4c-ethip4udp-ip4scale4000-udpsrcscale15-nat44-mrr
-
- will be represented as:
- ethip4udp-ip4scale4000-udpsrcscale15-nat44 \
- (10ge2p1x520, 64b, imix, 1c, 2c, 4c)
-
- Structure of returned data:
-
- {
- "trimmed_TC_name_1": {
- "nics": [],
- "framesizes": [],
- "cores": []
- }
- ...
- "trimmed_TC_name_N": {
- "nics": [],
- "framesizes": [],
- "cores": []
- }
- }
-
- :param alert: Files are created for this alert.
- :param test_set: Specifies which set of tests will be included in the
- result. Its name is the same as the name of file with failed tests.
- :param sort: If True, the failed tests are sorted alphabetically.
- :type alert: dict
- :type test_set: str
- :type sort: bool
- :returns: CSIT build number, VPP version, Number of passed tests,
- Number of failed tests, Compressed failed tests.
- :rtype: tuple(str, str, int, int, str, OrderedDict)
- """
-
- directory = self.configs[alert[u"way"]][u"output-dir"]
- failed_tests = defaultdict(dict)
- file_path = f"{directory}/{test_set}.txt"
- version = u""
- try:
- with open(file_path, u'r') as f_txt:
- for idx, line in enumerate(f_txt):
- if idx == 0:
- build = line[:-1]
- continue
- if idx == 1:
- version = line[:-1]
- continue
- if idx == 2:
- passed = line[:-1]
- continue
- if idx == 3:
- failed = line[:-1]
- continue
- if idx == 4:
- minutes = int(line[:-1]) // 60000
- duration = f"{(minutes // 60):02d}:{(minutes % 60):02d}"
- continue
- try:
- line, error_msg = line[:-1].split(u'###', maxsplit=1)
- test = line.split(u'-')
- name = u'-'.join(test[3:-1])
- except ValueError:
- continue
-
- for e_msg in self.error_msgs:
- if SequenceMatcher(None, e_msg,
- error_msg).ratio() > 0.5:
- error_msg = e_msg
- break
- if error_msg not in self.error_msgs:
- self.error_msgs.append(error_msg)
-
- error_msg_index = self.error_msgs.index(error_msg)
-
- if failed_tests.get(name, {}).get(error_msg_index) is None:
- failed_tests[name][error_msg_index] = \
- dict(nics=list(),
- framesizes=list(),
- cores=list())
-
- if test[0] not in \
- failed_tests[name][error_msg_index][u"nics"]:
- failed_tests[name][error_msg_index][u"nics"].\
- append(test[0])
- if test[1] not in \
- failed_tests[name][error_msg_index][u"framesizes"]:
- failed_tests[name][error_msg_index][u"framesizes"].\
- append(test[1])
- check_core = test[2] + f"[{str(error_msg_index)}]"
- if check_core not in \
- failed_tests[name][error_msg_index][u"cores"]:
- failed_tests[name][error_msg_index][u"cores"].\
- append(test[2] + "[" + str(error_msg_index) + "]")
-
- except IOError:
- logging.error(f"No such file or directory: {file_path}")
- return None, None, None, None, None, None
- if sort:
- sorted_failed_tests = OrderedDict()
- for key in sorted(failed_tests.keys()):
- sorted_failed_tests[key] = failed_tests[key]
- return build, version, passed, failed, duration, sorted_failed_tests
-
- return build, version, passed, failed, duration, failed_tests
-
- def _list_gressions(self, alert, idx, header, re_pro):
- """Create a file with regressions or progressions for the test set
- specified by idx.
-
- :param alert: Files are created for this alert.
- :param idx: Index of the test set as it is specified in the
- specification file.
- :param header: The header of the list of [re|pro]gressions.
- :param re_pro: 'regression' or 'progression'.
- :type alert: dict
- :type idx: int
- :type header: str
- :type re_pro: str
- """
-
- if re_pro not in (u"regressions", u"progressions"):
- return
-
- in_file = (
- f"{self.configs[alert[u'way']][u'output-dir']}/"
- f"{re_pro}-{alert[u'urls'][idx].split(u'/')[-1]}.txt"
- )
- out_file = (
- f"{self.configs[alert[u'way']][u'output-dir']}/"
- f"trending-{re_pro}.txt"
- )
-
- try:
- with open(in_file, u'r') as txt_file:
- file_content = txt_file.read()
- with open(out_file, u'a+') as reg_file:
- reg_file.write(header)
- if file_content:
- reg_file.write(file_content)
- else:
- reg_file.write(f"No {re_pro}")
- except IOError as err:
- logging.warning(repr(err))
-
- def _generate_email_body(self, alert):
- """Create the file which is used in the generated alert.
-
- :param alert: Files are created for this alert.
- :type alert: dict
- """
-
- if alert[u"type"] != u"failed-tests":
- raise AlertingError(
- f"Alert of type {alert[u'type']} is not implemented."
- )
-
- text = u""
- for idx, test_set in enumerate(alert.get(u"include", list())):
- test_set_short = u""
- device = u""
- try:
- groups = re.search(
- re.compile(
- r'((vpp|dpdk)-\dn-(skx|clx|tsh|dnv|zn2|tx2)-.*)'
- ),
- test_set
- )
- test_set_short = groups.group(1)
- device = groups.group(2)
- except (AttributeError, IndexError):
- logging.error(
- f"The test set {test_set} does not include information "
- f"about test bed. Using empty string instead."
- )
- build, version, passed, failed, duration, failed_tests = \
- self._get_compressed_failed_tests(alert, test_set)
- if build is None:
- text += (
- f"\n\nNo input data available for {test_set_short}. "
- f"See CSIT job {alert[u'urls'][idx]} for more "
- f"information.\n"
- )
- continue
- text += (
- f"\n\n{test_set_short}, "
- f"{failed} tests failed, "
- f"{passed} tests passed, "
- f"duration: {duration}, "
- f"CSIT build: {alert[u'urls'][idx]}/{build}, "
- f"{device} version: {version}\n\n"
- )
-
- class MaxLens():
- """Class to store the max lengths of strings displayed in
- failed tests list.
- """
- def __init__(self, tst_name, nics, framesizes, cores):
- """Initialisation.
-
- :param tst_name: Name of the test.
- :param nics: NICs used in the test.
- :param framesizes: Frame sizes used in the tests
- :param cores: Cores used in th test.
- """
- self.name = tst_name
- self.nics = nics
- self.frmsizes = framesizes
- self.cores = cores
-
- max_len = MaxLens(0, 0, 0, 0)
-
- for test, message in failed_tests.items():
- for e_message, params in message.items():
- failed_tests[test][e_message][u"nics"] = \
- u" ".join(sorted(params[u"nics"]))
- failed_tests[test][e_message][u"framesizes"] = \
- u" ".join(sorted(params[u"framesizes"]))
- failed_tests[test][e_message][u"cores"] = \
- u" ".join(sorted(params[u"cores"]))
- if len(test) > max_len.name:
- max_len.name = len(test)
- if len(failed_tests[test][e_message][u"nics"]) > \
- max_len.nics:
- max_len.nics = \
- len(failed_tests[test][e_message][u"nics"])
- if len(failed_tests[test][e_message][u"framesizes"]) > \
- max_len.frmsizes:
- max_len.frmsizes = \
- len(failed_tests[test][e_message][u"framesizes"])
- if len(failed_tests[test][e_message][u"cores"]) > \
- max_len.cores:
- max_len.cores = \
- len(failed_tests[test][e_message][u"cores"])
-
- for test, message in failed_tests.items():
- test_added = False
- for e_message, params in message.items():
- if not test_added:
- test_added = True
- else:
- test = ""
- text += (
- f"{test + u' ' * (max_len.name - len(test))} "
- f"{params[u'nics']}"
- f"{u' ' * (max_len.nics - len(params[u'nics']))} "
- f"{params[u'framesizes']}"
- f"""{u' ' * (max_len.frmsizes
- - len(params[u'framesizes']))} """
- f"{params[u'cores']}"
- f"{u' ' * (max_len.cores - len(params[u'cores']))}\n"
- )
-
- gression_hdr = (
- f"\n\n{test_set_short}, "
- f"CSIT build: {alert[u'urls'][idx]}/{build}, "
- f"{device} version: {version}\n\n"
- )
- # Add list of regressions:
- self._list_gressions(alert, idx, gression_hdr, u"regressions")
-
- # Add list of progressions:
- self._list_gressions(alert, idx, gression_hdr, u"progressions")
-
- text += f"\nFor detailed information visit: {alert[u'url-details']}\n"
- file_name = f"{self.configs[alert[u'way']][u'output-dir']}/" \
- f"{self.configs[alert[u'way']][u'output-file']}"
- logging.info(f"Writing the file {file_name}.txt ...")
-
- text += f"\n\nLegend:\n\n"
-
- for e_msg in self.error_msgs:
- text += f"[{self.error_msgs.index(e_msg)}] - {e_msg}\n"
-
- try:
- with open(f"{file_name}.txt", u'w') as txt_file:
- txt_file.write(text)
- except IOError:
- logging.error(f"Not possible to write the file {file_name}.txt.")
diff --git a/resources/tools/presentation/generator_cpta.py b/resources/tools/presentation/generator_cpta.py
deleted file mode 100644
index 0320b9eec1..0000000000
--- a/resources/tools/presentation/generator_cpta.py
+++ /dev/null
@@ -1,863 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Generation of Continuous Performance Trending and Analysis.
-"""
-
-import re
-import logging
-import csv
-
-from collections import OrderedDict
-from datetime import datetime
-from copy import deepcopy
-
-import prettytable
-import plotly.offline as ploff
-import plotly.graph_objs as plgo
-import plotly.exceptions as plerr
-
-from pal_utils import archive_input_data, execute_command, classify_anomalies
-
-
-# Command to build the html format of the report
-HTML_BUILDER = u'sphinx-build -v -c sphinx_conf/trending -a ' \
- u'-b html -E ' \
- u'-t html ' \
- u'-D version="{date}" ' \
- u'{working_dir} ' \
- u'{build_dir}/'
-
-# .css file for the html format of the report
-THEME_OVERRIDES = u"""/* override table width restrictions */
-.wy-nav-content {
- max-width: 1200px !important;
-}
-.rst-content blockquote {
- margin-left: 0px;
- line-height: 18px;
- margin-bottom: 0px;
-}
-.wy-menu-vertical a {
- display: inline-block;
- line-height: 18px;
- padding: 0 2em;
- display: block;
- position: relative;
- font-size: 90%;
- color: #d9d9d9
-}
-.wy-menu-vertical li.current a {
- color: gray;
- border-right: solid 1px #c9c9c9;
- padding: 0 3em;
-}
-.wy-menu-vertical li.toctree-l2.current > a {
- background: #c9c9c9;
- padding: 0 3em;
-}
-.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
- display: block;
- background: #c9c9c9;
- padding: 0 4em;
-}
-.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
- display: block;
- background: #bdbdbd;
- padding: 0 5em;
-}
-.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a {
- color: #404040;
- padding: 0 2em;
- font-weight: bold;
- position: relative;
- background: #fcfcfc;
- border: none;
- border-top-width: medium;
- border-bottom-width: medium;
- border-top-style: none;
- border-bottom-style: none;
- border-top-color: currentcolor;
- border-bottom-color: currentcolor;
- padding-left: 2em -4px;
-}
-"""
-
-COLORS = (
- u"#1A1110",
- u"#DA2647",
- u"#214FC6",
- u"#01786F",
- u"#BD8260",
- u"#FFD12A",
- u"#A6E7FF",
- u"#738276",
- u"#C95A49",
- u"#FC5A8D",
- u"#CEC8EF",
- u"#391285",
- u"#6F2DA8",
- u"#FF878D",
- u"#45A27D",
- u"#FFD0B9",
- u"#FD5240",
- u"#DB91EF",
- u"#44D7A8",
- u"#4F86F7",
- u"#84DE02",
- u"#FFCFF1",
- u"#614051"
-)
-
-
-def generate_cpta(spec, data):
- """Generate all formats and versions of the Continuous Performance Trending
- and Analysis.
-
- :param spec: Specification read from the specification file.
- :param data: Full data set.
- :type spec: Specification
- :type data: InputData
- """
-
- logging.info(u"Generating the Continuous Performance Trending and Analysis "
- u"...")
-
- ret_code = _generate_all_charts(spec, data)
-
- cmd = HTML_BUILDER.format(
- date=datetime.utcnow().strftime(u'%Y-%m-%d %H:%M UTC'),
- working_dir=spec.environment[u'paths'][u'DIR[WORKING,SRC]'],
- build_dir=spec.environment[u'paths'][u'DIR[BUILD,HTML]'])
- execute_command(cmd)
-
- with open(spec.environment[u'paths'][u'DIR[CSS_PATCH_FILE]'], u'w') as \
- css_file:
- css_file.write(THEME_OVERRIDES)
-
- with open(spec.environment[u'paths'][u'DIR[CSS_PATCH_FILE2]'], u'w') as \
- css_file:
- css_file.write(THEME_OVERRIDES)
-
- if spec.environment.get(u"archive-inputs", False):
- archive_input_data(spec)
-
- logging.info(u"Done.")
-
- return ret_code
-
-
-def _generate_trending_traces(in_data, job_name, build_info,
- name=u"", color=u"", incl_tests=u"mrr"):
- """Generate the trending traces:
- - samples,
- - outliers, regress, progress
- - average of normal samples (trending line)
-
- :param in_data: Full data set.
- :param job_name: The name of job which generated the data.
- :param build_info: Information about the builds.
- :param name: Name of the plot
- :param color: Name of the color for the plot.
- :param incl_tests: Included tests, accepted values: mrr, ndr, pdr
- :type in_data: OrderedDict
- :type job_name: str
- :type build_info: dict
- :type name: str
- :type color: str
- :type incl_tests: str
- :returns: Generated traces (list) and the evaluated result.
- :rtype: tuple(traces, result)
- """
-
- if incl_tests not in (u"mrr", u"ndr", u"pdr", u"pdr-lat"):
- return list(), None
-
- data_x = list(in_data.keys())
- data_y_pps = list()
- data_y_mpps = list()
- data_y_stdev = list()
- if incl_tests == u"pdr-lat":
- for item in in_data.values():
- data_y_pps.append(float(item.get(u"lat_1", u"nan")) / 1e6)
- data_y_stdev.append(float(u"nan"))
- data_y_mpps.append(float(item.get(u"lat_1", u"nan")) / 1e6)
- multi = 1.0
- else:
- for item in in_data.values():
- data_y_pps.append(float(item[u"receive-rate"]))
- data_y_stdev.append(float(item[u"receive-stdev"]) / 1e6)
- data_y_mpps.append(float(item[u"receive-rate"]) / 1e6)
- multi = 1e6
- hover_text = list()
- xaxis = list()
- for index, key in enumerate(data_x):
- str_key = str(key)
- date = build_info[job_name][str_key][0]
- hover_str = (u"date: {date}<br>"
- u"{property} [Mpps]: <val><br>"
- u"<stdev>"
- u"{sut}-ref: {build}<br>"
- u"csit-ref: {test}-{period}-build-{build_nr}<br>"
- u"testbed: {testbed}")
- if incl_tests == u"mrr":
- hover_str = hover_str.replace(
- u"<stdev>", f"stdev [Mpps]: {data_y_stdev[index]:.3f}<br>"
- )
- else:
- hover_str = hover_str.replace(u"<stdev>", u"")
- if incl_tests == u"pdr-lat":
- hover_str = hover_str.replace(u"<val>", u"{value:.1e}")
- else:
- hover_str = hover_str.replace(u"<val>", u"{value:.3f}")
- if u"-cps" in name:
- hover_str = hover_str.replace(u"[Mpps]", u"[Mcps]").\
- replace(u"throughput", u"connection rate")
- if u"vpp" in job_name:
- hover_str = hover_str.format(
- date=date,
- property=u"average" if incl_tests == u"mrr" else u"throughput",
- value=data_y_mpps[index],
- sut=u"vpp",
- build=build_info[job_name][str_key][1].rsplit(u'~', 1)[0],
- test=incl_tests,
- period=u"daily" if incl_tests == u"mrr" else u"weekly",
- build_nr=str_key,
- testbed=build_info[job_name][str_key][2])
- elif u"dpdk" in job_name:
- hover_str = hover_str.format(
- date=date,
- property=u"average" if incl_tests == u"mrr" else u"throughput",
- value=data_y_mpps[index],
- sut=u"dpdk",
- build=build_info[job_name][str_key][1].rsplit(u'~', 1)[0],
- test=incl_tests,
- period=u"weekly",
- build_nr=str_key,
- testbed=build_info[job_name][str_key][2])
- elif u"trex" in job_name:
- hover_str = hover_str.format(
- date=date,
- property=u"average" if incl_tests == u"mrr" else u"throughput",
- value=data_y_mpps[index],
- sut=u"trex",
- build=u"",
- test=incl_tests,
- period=u"daily" if incl_tests == u"mrr" else u"weekly",
- build_nr=str_key,
- testbed=build_info[job_name][str_key][2])
- if incl_tests == u"pdr-lat":
- hover_str = hover_str.replace(
- u"throughput [Mpps]", u"latency [s]"
- )
- hover_text.append(hover_str)
- xaxis.append(datetime(int(date[0:4]), int(date[4:6]), int(date[6:8]),
- int(date[9:11]), int(date[12:])))
-
- data_pd = OrderedDict()
- for key, value in zip(xaxis, data_y_pps):
- data_pd[key] = value
-
- try:
- anomaly_classification, avgs_pps, stdevs_pps = \
- classify_anomalies(data_pd)
- except ValueError as err:
- logging.info(f"{err} Skipping")
- return list(), None
- avgs_mpps = [avg_pps / multi for avg_pps in avgs_pps]
- stdevs_mpps = [stdev_pps / multi for stdev_pps in stdevs_pps]
-
- anomalies = OrderedDict()
- anomalies_colors = list()
- anomalies_avgs = list()
- anomaly_color = {
- u"regression": 0.0,
- u"normal": 0.5,
- u"progression": 1.0
- }
- if anomaly_classification:
- for index, (key, value) in enumerate(data_pd.items()):
- if anomaly_classification[index] in (u"regression", u"progression"):
- anomalies[key] = value / multi
- anomalies_colors.append(
- anomaly_color[anomaly_classification[index]])
- anomalies_avgs.append(avgs_mpps[index])
- anomalies_colors.extend([0.0, 0.5, 1.0])
-
- # Create traces
-
- trace_samples = plgo.Scatter(
- x=xaxis,
- y=data_y_mpps,
- mode=u"markers",
- line={
- u"width": 1
- },
- showlegend=True,
- legendgroup=name,
- name=f"{name}",
- marker={
- u"size": 5,
- u"color": color,
- u"symbol": u"circle",
- },
- text=hover_text,
- hoverinfo=u"text+name"
- )
- traces = [trace_samples, ]
-
- trend_hover_text = list()
- for idx in range(len(data_x)):
- if incl_tests == u"pdr-lat":
- trend_hover_str = (
- f"trend [s]: {avgs_mpps[idx]:.1e}<br>"
- )
- else:
- trend_hover_str = (
- f"trend [Mpps]: {avgs_mpps[idx]:.3f}<br>"
- f"stdev [Mpps]: {stdevs_mpps[idx]:.3f}"
- )
- trend_hover_text.append(trend_hover_str)
-
- trace_trend = plgo.Scatter(
- x=xaxis,
- y=avgs_mpps,
- mode=u"lines",
- line={
- u"shape": u"linear",
- u"width": 1,
- u"color": color,
- },
- showlegend=False,
- legendgroup=name,
- name=f"{name}",
- text=trend_hover_text,
- hoverinfo=u"text+name"
- )
- traces.append(trace_trend)
-
- if incl_tests == u"pdr-lat":
- colorscale = [
- [0.00, u"green"],
- [0.33, u"green"],
- [0.33, u"white"],
- [0.66, u"white"],
- [0.66, u"red"],
- [1.00, u"red"]
- ]
- ticktext = [u"Progression", u"Normal", u"Regression"]
- else:
- colorscale = [
- [0.00, u"red"],
- [0.33, u"red"],
- [0.33, u"white"],
- [0.66, u"white"],
- [0.66, u"green"],
- [1.00, u"green"]
- ]
- ticktext = [u"Regression", u"Normal", u"Progression"]
- trace_anomalies = plgo.Scatter(
- x=list(anomalies.keys()),
- y=anomalies_avgs,
- mode=u"markers",
- hoverinfo=u"none",
- showlegend=False,
- legendgroup=name,
- name=f"{name}-anomalies",
- marker={
- u"size": 15,
- u"symbol": u"circle-open",
- u"color": anomalies_colors,
- u"colorscale": colorscale,
- u"showscale": True,
- u"line": {
- u"width": 2
- },
- u"colorbar": {
- u"y": 0.5,
- u"len": 0.8,
- u"title": u"Circles Marking Data Classification",
- u"titleside": u"right",
- u"titlefont": {
- u"size": 14
- },
- u"tickmode": u"array",
- u"tickvals": [0.167, 0.500, 0.833],
- u"ticktext": ticktext,
- u"ticks": u"",
- u"ticklen": 0,
- u"tickangle": -90,
- u"thickness": 10
- }
- }
- )
- traces.append(trace_anomalies)
-
- if anomaly_classification:
- return traces, anomaly_classification[-1]
-
- return traces, None
-
-
-def _generate_all_charts(spec, input_data):
- """Generate all charts specified in the specification file.
-
- :param spec: Specification.
- :param input_data: Full data set.
- :type spec: Specification
- :type input_data: InputData
- """
-
- def _generate_chart(graph):
- """Generates the chart.
-
- :param graph: The graph to be generated
- :type graph: dict
- :returns: Dictionary with the job name, csv table with results and
- list of tests classification results.
- :rtype: dict
- """
-
- logging.info(f" Generating the chart {graph.get(u'title', u'')} ...")
-
- job_name = list(graph[u"data"].keys())[0]
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {graph.get(u'type', u'')} "
- f"{graph.get(u'title', u'')}."
- )
-
- data = input_data.filter_tests_by_name(
- graph,
- params=[u"type", u"result", u"throughput", u"latency", u"tags"],
- continue_on_error=True
- )
-
- if data is None or data.empty:
- logging.error(u"No data.")
- return dict()
-
- return_lst = list()
-
- for ttype in graph.get(u"test-type", (u"mrr", )):
- for core in graph.get(u"core", tuple()):
- csv_tbl = list()
- csv_tbl_lat_1 = list()
- csv_tbl_lat_2 = list()
- res = dict()
- chart_data = dict()
- chart_tags = dict()
- for item in graph.get(u"include", tuple()):
- reg_ex = re.compile(str(item.format(core=core)).lower())
- for job, job_data in data.items():
- if job != job_name:
- continue
- for index, bld in job_data.items():
- for test_id, test in bld.items():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- if chart_data.get(test_id, None) is None:
- chart_data[test_id] = OrderedDict()
- try:
- lat_1 = u""
- lat_2 = u""
- if ttype == u"mrr":
- rate = test[u"result"][u"receive-rate"]
- stdev = \
- test[u"result"][u"receive-stdev"]
- elif ttype == u"ndr":
- rate = \
- test["throughput"][u"NDR"][u"LOWER"]
- stdev = float(u"nan")
- elif ttype == u"pdr":
- rate = \
- test["throughput"][u"PDR"][u"LOWER"]
- stdev = float(u"nan")
- lat_1 = test[u"latency"][u"PDR50"]\
- [u"direction1"][u"avg"]
- lat_2 = test[u"latency"][u"PDR50"]\
- [u"direction2"][u"avg"]
- else:
- continue
- chart_data[test_id][int(index)] = {
- u"receive-rate": rate,
- u"receive-stdev": stdev
- }
- if ttype == u"pdr":
- chart_data[test_id][int(index)].update(
- {
- u"lat_1": lat_1,
- u"lat_2": lat_2
- }
- )
- chart_tags[test_id] = \
- test.get(u"tags", None)
- except (KeyError, TypeError):
- pass
-
- # Add items to the csv table:
- for tst_name, tst_data in chart_data.items():
- tst_lst = list()
- tst_lst_lat_1 = list()
- tst_lst_lat_2 = list()
- for bld in builds_dict[job_name]:
- itm = tst_data.get(int(bld), dict())
- # CSIT-1180: Itm will be list, compute stats.
- try:
- tst_lst.append(str(itm.get(u"receive-rate", u"")))
- if ttype == u"pdr":
- tst_lst_lat_1.append(
- str(itm.get(u"lat_1", u""))
- )
- tst_lst_lat_2.append(
- str(itm.get(u"lat_2", u""))
- )
- except AttributeError:
- tst_lst.append(u"")
- if ttype == u"pdr":
- tst_lst_lat_1.append(u"")
- tst_lst_lat_2.append(u"")
- csv_tbl.append(f"{tst_name}," + u",".join(tst_lst) + u'\n')
- csv_tbl_lat_1.append(
- f"{tst_name}," + u",".join(tst_lst_lat_1) + u"\n"
- )
- csv_tbl_lat_2.append(
- f"{tst_name}," + u",".join(tst_lst_lat_2) + u"\n"
- )
-
- # Generate traces:
- traces = list()
- traces_lat = list()
- index = 0
- groups = graph.get(u"groups", None)
- visibility = list()
-
- if groups:
- for group in groups:
- visible = list()
- for tag in group:
- for tst_name, test_data in chart_data.items():
- if not test_data:
- logging.warning(
- f"No data for the test {tst_name}"
- )
- continue
- if tag not in chart_tags[tst_name]:
- continue
- try:
- trace, rslt = _generate_trending_traces(
- test_data,
- job_name=job_name,
- build_info=build_info,
- name=u'-'.join(tst_name.split(u'.')[-1].
- split(u'-')[2:-1]),
- color=COLORS[index],
- incl_tests=ttype
- )
- except IndexError:
- logging.error(f"Out of colors: index: "
- f"{index}, test: {tst_name}")
- index += 1
- continue
- traces.extend(trace)
- visible.extend(
- [True for _ in range(len(trace))]
- )
- res[tst_name] = rslt
- index += 1
- break
- visibility.append(visible)
- else:
- for tst_name, test_data in chart_data.items():
- if not test_data:
- logging.warning(f"No data for the test {tst_name}")
- continue
- try:
- trace, rslt = _generate_trending_traces(
- test_data,
- job_name=job_name,
- build_info=build_info,
- name=u'-'.join(
- tst_name.split(u'.')[-1].split(u'-')[2:-1]),
- color=COLORS[index],
- incl_tests=ttype
- )
- if ttype == u"pdr":
- trace_lat, _ = _generate_trending_traces(
- test_data,
- job_name=job_name,
- build_info=build_info,
- name=u'-'.join(
- tst_name.split(u'.')[-1].split(
- u'-')[2:-1]),
- color=COLORS[index],
- incl_tests=u"pdr-lat"
- )
- traces_lat.extend(trace_lat)
- except IndexError:
- logging.error(
- f"Out of colors: index: "
- f"{index}, test: {tst_name}"
- )
- index += 1
- continue
- traces.extend(trace)
- res[tst_name] = rslt
- index += 1
-
- if traces:
- # Generate the chart:
- try:
- layout = deepcopy(graph[u"layout"])
- except KeyError as err:
- logging.error(u"Finished with error: No layout defined")
- logging.error(repr(err))
- return dict()
- if groups:
- show = list()
- for i in range(len(visibility)):
- visible = list()
- for vis_idx, _ in enumerate(visibility):
- for _ in range(len(visibility[vis_idx])):
- visible.append(i == vis_idx)
- show.append(visible)
-
- buttons = list()
- buttons.append(dict(
- label=u"All",
- method=u"update",
- args=[{u"visible":
- [True for _ in range(len(show[0]))]}, ]
- ))
- for i in range(len(groups)):
- try:
- label = graph[u"group-names"][i]
- except (IndexError, KeyError):
- label = f"Group {i + 1}"
- buttons.append(dict(
- label=label,
- method=u"update",
- args=[{u"visible": show[i]}, ]
- ))
-
- layout[u"updatemenus"] = list([
- dict(
- active=0,
- type=u"dropdown",
- direction=u"down",
- xanchor=u"left",
- yanchor=u"bottom",
- x=-0.12,
- y=1.0,
- buttons=buttons
- )
- ])
-
- name_file = (
- f"{spec.cpta[u'output-file']}/"
- f"{graph[u'output-file-name']}.html"
- )
- name_file = name_file.format(core=core, test_type=ttype)
-
- logging.info(f" Writing the file {name_file}")
- plpl = plgo.Figure(data=traces, layout=layout)
- try:
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=name_file
- )
- except plerr.PlotlyEmptyDataError:
- logging.warning(u"No data for the plot. Skipped.")
-
- if traces_lat:
- try:
- layout = deepcopy(graph[u"layout"])
- layout[u"yaxis"][u"title"] = u"Latency [s]"
- layout[u"yaxis"][u"tickformat"] = u".3s"
- except KeyError as err:
- logging.error(u"Finished with error: No layout defined")
- logging.error(repr(err))
- return dict()
- name_file = (
- f"{spec.cpta[u'output-file']}/"
- f"{graph[u'output-file-name']}-lat.html"
- )
- name_file = name_file.format(core=core, test_type=ttype)
-
- logging.info(f" Writing the file {name_file}")
- plpl = plgo.Figure(data=traces_lat, layout=layout)
- try:
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=name_file
- )
- except plerr.PlotlyEmptyDataError:
- logging.warning(u"No data for the plot. Skipped.")
-
- return_lst.append(
- {
- u"job_name": job_name,
- u"csv_table": csv_tbl,
- u"csv_lat_1": csv_tbl_lat_1,
- u"csv_lat_2": csv_tbl_lat_2,
- u"results": res
- }
- )
-
- return return_lst
-
- builds_dict = dict()
- for job, builds in spec.input.items():
- if builds_dict.get(job, None) is None:
- builds_dict[job] = list()
- for build in builds:
- if build[u"status"] not in (u"failed", u"not found", u"removed",
- None):
- builds_dict[job].append(str(build[u"build"]))
-
- # Create "build ID": "date" dict:
- build_info = dict()
- tb_tbl = spec.environment.get(u"testbeds", None)
- for job_name, job_data in builds_dict.items():
- if build_info.get(job_name, None) is None:
- build_info[job_name] = OrderedDict()
- for build in job_data:
- testbed = u""
- tb_ip = input_data.metadata(job_name, build).get(u"testbed", u"")
- if tb_ip and tb_tbl:
- testbed = tb_tbl.get(tb_ip, u"")
- build_info[job_name][build] = (
- input_data.metadata(job_name, build).get(u"generated", u""),
- input_data.metadata(job_name, build).get(u"version", u""),
- testbed
- )
-
- anomaly_classifications = dict()
-
- # Create the table header:
- csv_tables = dict()
- csv_tables_l1 = dict()
- csv_tables_l2 = dict()
- for job_name in builds_dict:
- if csv_tables.get(job_name, None) is None:
- csv_tables[job_name] = list()
- if csv_tables_l1.get(job_name, None) is None:
- csv_tables_l1[job_name] = list()
- if csv_tables_l2.get(job_name, None) is None:
- csv_tables_l2[job_name] = list()
- header = f"Build Number:,{u','.join(builds_dict[job_name])}\n"
- csv_tables[job_name].append(header)
- csv_tables_l1[job_name].append(header)
- csv_tables_l2[job_name].append(header)
- build_dates = [x[0] for x in build_info[job_name].values()]
- header = f"Build Date:,{u','.join(build_dates)}\n"
- csv_tables[job_name].append(header)
- csv_tables_l1[job_name].append(header)
- csv_tables_l2[job_name].append(header)
- versions = [x[1] for x in build_info[job_name].values()]
- header = f"Version:,{u','.join(versions)}\n"
- csv_tables[job_name].append(header)
- csv_tables_l1[job_name].append(header)
- csv_tables_l2[job_name].append(header)
- testbed = [x[2] for x in build_info[job_name].values()]
- header = f"Test bed:,{u','.join(testbed)}\n"
- csv_tables[job_name].append(header)
- csv_tables_l1[job_name].append(header)
- csv_tables_l2[job_name].append(header)
-
- for chart in spec.cpta[u"plots"]:
- results = _generate_chart(chart)
- if not results:
- continue
-
- for result in results:
- csv_tables[result[u"job_name"]].extend(result[u"csv_table"])
- csv_tables_l1[result[u"job_name"]].extend(result[u"csv_lat_1"])
- csv_tables_l2[result[u"job_name"]].extend(result[u"csv_lat_2"])
-
- if anomaly_classifications.get(result[u"job_name"], None) is None:
- anomaly_classifications[result[u"job_name"]] = dict()
- anomaly_classifications[result[u"job_name"]].\
- update(result[u"results"])
-
- # Write the tables:
- for job_name, csv_table in csv_tables.items():
- file_name = f"{spec.cpta[u'output-file']}/{job_name}-trending"
- with open(f"{file_name}.csv", u"wt") as file_handler:
- file_handler.writelines(csv_table)
-
- txt_table = None
- with open(f"{file_name}.csv", u"rt") as csv_file:
- csv_content = csv.reader(csv_file, delimiter=u',', quotechar=u'"')
- line_nr = 0
- for row in csv_content:
- if txt_table is None:
- txt_table = prettytable.PrettyTable(row)
- else:
- if line_nr > 1:
- for idx, item in enumerate(row):
- try:
- row[idx] = str(round(float(item) / 1000000, 2))
- except ValueError:
- pass
- try:
- txt_table.add_row(row)
- # PrettyTable raises Exception
- except Exception as err:
- logging.warning(
- f"Error occurred while generating TXT table:\n{err}"
- )
- line_nr += 1
- txt_table.align[u"Build Number:"] = u"l"
- with open(f"{file_name}.txt", u"wt") as txt_file:
- txt_file.write(str(txt_table))
-
- for job_name, csv_table in csv_tables_l1.items():
- file_name = f"{spec.cpta[u'output-file']}/{job_name}-lat-P50-50-d1"
- with open(f"{file_name}.csv", u"wt") as file_handler:
- file_handler.writelines(csv_table)
- for job_name, csv_table in csv_tables_l2.items():
- file_name = f"{spec.cpta[u'output-file']}/{job_name}-lat-P50-50-d2"
- with open(f"{file_name}.csv", u"wt") as file_handler:
- file_handler.writelines(csv_table)
-
- # Evaluate result:
- if anomaly_classifications:
- result = u"PASS"
- for job_name, job_data in anomaly_classifications.items():
- file_name = \
- f"{spec.cpta[u'output-file']}/regressions-{job_name}.txt"
- with open(file_name, u'w') as txt_file:
- for test_name, classification in job_data.items():
- if classification == u"regression":
- txt_file.write(test_name + u'\n')
- if classification in (u"regression", u"outlier"):
- result = u"FAIL"
- file_name = \
- f"{spec.cpta[u'output-file']}/progressions-{job_name}.txt"
- with open(file_name, u'w') as txt_file:
- for test_name, classification in job_data.items():
- if classification == u"progression":
- txt_file.write(test_name + u'\n')
- else:
- result = u"FAIL"
-
- logging.info(f"Partial results: {anomaly_classifications}")
- logging.info(f"Result: {result}")
-
- return result
diff --git a/resources/tools/presentation/generator_files.py b/resources/tools/presentation/generator_files.py
deleted file mode 100644
index 02288581d0..0000000000
--- a/resources/tools/presentation/generator_files.py
+++ /dev/null
@@ -1,444 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Algorithms to generate files.
-"""
-
-import re
-
-from os.path import join
-from collections import OrderedDict
-
-import logging
-
-from pal_utils import get_files, get_rst_title_char
-
-
-RST_INCLUDE_TABLE = (u"\n.. only:: html\n\n"
- u" .. csv-table::\n"
- u" :header-rows: 1\n"
- u" :widths: auto\n"
- u" :align: center\n"
- u" :file: {file_html}\n"
- u"\n.. only:: latex\n\n"
- u"\n .. raw:: latex\n\n"
- u" \\csvautolongtable{{{file_latex}}}\n\n")
-
-REGEX_NIC_SHORT = re.compile(r'(\d*ge\dp\d)([a-z]*\d*[a-z]*)-')
-
-
-def generate_files(spec, data):
- """Generate all files specified in the specification file.
-
- :param spec: Specification read from the specification file.
- :param data: Data to process.
- :type spec: Specification
- :type data: InputData
- """
-
- generator = {
- u"file_details_split": file_details_split,
- u"file_details_split_html": file_details_split_html,
- u"file_test_results": file_test_results,
- u"file_test_results_html": file_test_results_html
- }
-
- logging.info(u"Generating the files ...")
- for file_spec in spec.files:
- try:
- generator[file_spec[u"algorithm"]](file_spec, data)
- except (NameError, KeyError) as err:
- logging.error(
- f"Probably algorithm {file_spec[u'algorithm']} is not defined: "
- f"{repr(err)}"
- )
- logging.info(u"Done.")
-
-
-def _tests_in_suite(suite_name, tests):
- """Check if the suite includes tests.
-
- :param suite_name: Name of the suite to be checked.
- :param tests: Set of tests
- :type suite_name: str
- :type tests: pandas.Series
- :returns: True if the suite includes tests.
- :rtype: bool
- """
-
- for key in tests.keys():
- if suite_name == tests[key][u"parent"]:
- return True
- return False
-
-
-def file_details_split(file_spec, input_data, frmt=u"rst"):
- """Generate the file(s) with algorithms
- - file_details_split
- specified in the specification file.
-
- :param file_spec: File to generate.
- :param input_data: Data to process.
- :param frmt: Format can be: rst or html
- :type file_spec: pandas.Series
- :type input_data: InputData
- :type frmt: str
- """
-
- fileset_file_name = f"{file_spec[u'output-file']}"
- rst_header = (
- u"\n"
- u".. |br| raw:: html\n\n <br />\n\n\n"
- u".. |prein| raw:: html\n\n <pre>\n\n\n"
- u".. |preout| raw:: html\n\n </pre>\n\n"
- )
- start_lvl = file_spec.get(u"data-start-level", 4)
-
- logging.info(f" Generating the file set {fileset_file_name} ...")
-
- data_sets = file_spec.get(u"data", None)
- if not data_sets:
- logging.error(
- f" No data sets specified for {file_spec[u'output-file']}, exit."
- )
- return
-
- table_sets = file_spec.get(u"dir-tables", None)
- if not table_sets:
- logging.error(
- f" No table sets specified for {file_spec[u'output-file']}, exit."
- )
- return
-
- if len(data_sets) != len(table_sets):
- logging.error(
- f" The number of data sets and the number of table sets for "
- f"{file_spec[u'output-file']} are not equal, exit."
- )
- return
-
- chapters = OrderedDict()
- for data_set, table_set in zip(data_sets, table_sets):
-
- logging.info(f" Processing the table set {table_set}...")
-
- table_lst = None
- if frmt == u"html":
- table_lst = get_files(table_set, u".rst", full_path=True)
- elif frmt == u"rst":
- table_lst = get_files(table_set, u".csv", full_path=True)
-
- if not table_lst:
- logging.error(
- f" No tables to include in {table_set}. Skipping."
- )
- continue
-
- logging.info(u" Creating the test data set...")
- tests = input_data.filter_data(
- element=file_spec,
- params=[u"name", u"parent", u"doc", u"type", u"level"],
- data=data_set,
- data_set=u"tests",
- continue_on_error=True
- )
- if tests.empty:
- continue
- tests = input_data.merge_data(tests)
- tests.sort_index(inplace=True)
-
- logging.info(u" Creating the suite data set...")
- suites = input_data.filter_data(
- element=file_spec,
- data=data_set,
- continue_on_error=True,
- data_set=u"suites"
- )
- if suites.empty:
- continue
- suites = input_data.merge_data(suites)
- suites.sort_index(inplace=True)
-
- logging.info(u" Generating files...")
-
- chapter_l1 = u""
- chapter_l2 = u"-".join(table_set.split(u"_")[-2:])
- for suite_longname, suite in suites.items():
-
- suite_lvl = len(suite_longname.split(u"."))
- if suite_lvl < start_lvl:
- # Not interested in this suite
- continue
-
- if suite_lvl == start_lvl:
- # Our top-level suite
- chapter_l1 = suite_longname.split(u'.')[-1]
- if chapters.get(chapter_l1, None) is None:
- chapters[chapter_l1] = OrderedDict()
- if chapters[chapter_l1].get(chapter_l2, None) is None:
- chapters[chapter_l1][chapter_l2] = OrderedDict()
- continue
-
- if _tests_in_suite(suite[u"name"], tests):
- groups = re.search(REGEX_NIC_SHORT, suite[u"name"])
- nic = groups.group(2) if groups else None
- if nic is None:
- continue
- if chapters[chapter_l1][chapter_l2].get(nic, None) is None:
- chapters[chapter_l1][chapter_l2][nic] = dict(
- rst_file=f"{join(table_set, chapter_l1)}_{nic}.rst".
- replace(u"2n1l-", u"").replace(u"1n1l-", u""),
- tables=list()
- )
- for idx, tbl_file in enumerate(table_lst):
- if suite[u"name"] in tbl_file:
- chapters[chapter_l1][chapter_l2][nic][u"tables"].append(
- (
- table_lst.pop(idx),
- suite[u"doc"].replace(u'"', u"'").
- replace(u'\n', u' ').
- replace(u'\r', u'').
- replace(u'*[', u'\n\n - *[').
- replace(u"*", u"**").
- replace(u'\n\n - *[', u' - *[', 1)
- )
- )
- break
- titles = {
- # VPP Perf, MRR
- u"container_memif": u"LXC/DRC Container Memif",
- u"crypto": u"IPsec IPv4 Routing",
- u"hoststack": u"Hoststack Testing",
- u"ip4": u"IPv4 Routing",
- u"ip4_tunnels": u"IPv4 Tunnels",
- u"ip6": u"IPv6 Routing",
- u"ip6_tunnels": u"IPv6 Tunnels",
- u"l2": u"L2 Ethernet Switching",
- u"lb": u"LoadBalancer",
- u"nfv_density": u"NFV Service Density",
- u"srv6": u"SRv6 Routing",
- u"vm_vhost": u"KVM VMs vhost-user",
- u"vts": u"Virtual Topology System",
- # VPP Device
- u"interfaces": u"Interfaces",
- u"l2bd": u"L2 Bridge-domain",
- u"l2patch": u"L2 Patch",
- u"l2xc": u"L2 Cross-connect",
- }
-
- order_chapters = file_spec.get(u"order-chapters", None)
-
- if order_chapters:
- order_1 = order_chapters.get(u"level-1", None)
- order_2 = order_chapters.get(u"level-2", None)
- order_3 = order_chapters.get(u"level-3", None)
- if not order_1:
- order_1 = chapters.keys()
- else:
- order_1 = None
- order_2 = None
- order_3 = None
-
- for chapter_l1 in order_1:
- content_l1 = chapters.get(chapter_l1, None)
- if not content_l1:
- continue
- with open(f"{fileset_file_name}/index.rst", u"a") as file_handler:
- file_handler.write(f" {chapter_l1}\n")
- l1_file_name = f"{join(fileset_file_name, chapter_l1)}.rst"
- title = titles.get(chapter_l1, chapter_l1)
- logging.info(f" Generating {title} ...")
- with open(l1_file_name, u"w") as file_handler:
- file_handler.write(
- f"{title}\n"
- f"{get_rst_title_char(1) * len(title)}\n\n"
- f".. toctree::\n\n"
- )
-
- if not order_2:
- order_2 = chapters[chapter_l1].keys()
- for chapter_l2 in order_2:
- content_l2 = content_l1.get(chapter_l2, None)
- if not content_l2:
- continue
- if not order_3:
- order_3 = chapters[chapter_l1][chapter_l2].keys()
- for chapter_l3 in order_3:
- content_l3 = content_l2.get(chapter_l3, None)
- if not content_l3:
- continue
- with open(l1_file_name, u"a") as file_handler:
- item = u"/".join(content_l3[u'rst_file'].split(u'/')[-2:])
- file_handler.write(f" ../{item}\n")
- logging.info(f" Writing the file {content_l3[u'rst_file']}")
- with open(content_l3[u'rst_file'], u"w+") as file_handler:
- title = f"{chapter_l2}-{chapter_l3}"
- file_handler.write(
- f"{rst_header}\n"
- f"{title}\n"
- f"{get_rst_title_char(2) * len(title)}\n"
- )
- for table in content_l3[u'tables']:
- title = table[0].split(u"/")[-1].split(u".")[0]
- file_handler.write(
- f"\n{title}\n"
- f"{get_rst_title_char(3) * len(title)}\n"
- )
- file_handler.write(f"\n{table[1]}\n")
- if frmt == u"html":
- file_handler.write(
- f"\n.. include:: {table[0].split(u'/')[-1]}"
- f"\n"
- )
- elif frmt == u"rst":
- file_handler.write(
- RST_INCLUDE_TABLE.format(
- file_latex=table[0],
- file_html=table[0].split(u"/")[-1])
- )
-
-
-def file_details_split_html(file_spec, input_data):
- """Generate the file(s) with algorithms
- - file_details_split_html
- specified in the specification file.
-
- :param file_spec: File to generate.
- :param input_data: Data to process.
- :type file_spec: pandas.Series
- :type input_data: InputData
- """
- file_details_split(file_spec, input_data, frmt=u"html")
-
-
-def file_test_results(file_spec, input_data, frmt=u"rst"):
- """Generate the file(s) with algorithms
- - file_test_results
- specified in the specification file.
-
- :param file_spec: File to generate.
- :param input_data: Data to process.
- :param frmt: Format can be: rst or html
- :type file_spec: pandas.Series
- :type input_data: InputData
- :type frmt: str
- """
-
- base_file_name = f"{file_spec[u'output-file']}"
- rst_header = (
- u"\n"
- u".. |br| raw:: html\n\n <br />\n\n\n"
- u".. |prein| raw:: html\n\n <pre>\n\n\n"
- u".. |preout| raw:: html\n\n </pre>\n\n"
- )
- start_lvl = file_spec.get(u"data-start-level", 4)
-
- logging.info(f" Generating the file {base_file_name} ...")
-
- if frmt == u"html":
- table_lst = get_files(file_spec[u"dir-tables"], u".rst", full_path=True)
- elif frmt == u"rst":
- table_lst = get_files(file_spec[u"dir-tables"], u".csv", full_path=True)
- else:
- return
- if not table_lst:
- logging.error(
- f" No tables to include in {file_spec[u'dir-tables']}. Skipping."
- )
- return
-
- logging.info(
- f" Creating the tests data set for the "
- f"{file_spec.get(u'type', u'')} {file_spec.get(u'title', u'')}."
- )
-
- tests = input_data.filter_data(
- file_spec,
- params=[u"name", u"parent", u"doc", u"type", u"level"],
- continue_on_error=True
- )
- if tests.empty:
- return
- tests = input_data.merge_data(tests)
-
- suites = input_data.filter_data(
- file_spec,
- continue_on_error=True,
- data_set=u"suites"
- )
- if suites.empty:
- return
- suites = input_data.merge_data(suites)
- suites.sort_index(inplace=True)
-
- file_name = u""
- for suite_longname, suite in suites.items():
-
- suite_lvl = len(suite_longname.split(u"."))
- if suite_lvl < start_lvl:
- # Not interested in this suite
- continue
-
- if suite_lvl == start_lvl:
- # Our top-level suite
- chapter = suite_longname.split(u'.')[-1]
- file_name = f"{base_file_name}/{chapter}.rst"
- logging.info(f" Writing file {file_name}")
- with open(f"{base_file_name}/index.rst", u"a") as file_handler:
- file_handler.write(f" {chapter}\n")
- with open(file_name, u"a") as file_handler:
- file_handler.write(rst_header)
-
- title_line = get_rst_title_char(suite[u"level"] - start_lvl + 2) * \
- len(suite[u"name"])
- with open(file_name, u"a") as file_handler:
- if not (u"-ndrpdr" in suite[u"name"] or
- u"-mrr" in suite[u"name"] or
- u"-dev" in suite[u"name"]):
- file_handler.write(f"\n{suite[u'name']}\n{title_line}\n")
-
- if _tests_in_suite(suite[u"name"], tests):
- for tbl_file in table_lst:
- if suite[u"name"] in tbl_file:
- file_handler.write(
- f"\n{suite[u'name']}\n{title_line}\n"
- )
- file_handler.write(
- f"\n{suite[u'doc']}\n".replace(u'|br|', u'\n\n -')
- )
- if frmt == u"html":
- file_handler.write(
- f"\n.. include:: {tbl_file.split(u'/')[-1]}\n"
- )
- elif frmt == u"rst":
- file_handler.write(
- RST_INCLUDE_TABLE.format(
- file_latex=tbl_file,
- file_html=tbl_file.split(u"/")[-1])
- )
- break
-
- logging.info(u" Done.")
-
-
-def file_test_results_html(file_spec, input_data):
- """Generate the file(s) with algorithms
- - file_test_results_html
- specified in the specification file.
-
- :param file_spec: File to generate.
- :param input_data: Data to process.
- :type file_spec: pandas.Series
- :type input_data: InputData
- """
- file_test_results(file_spec, input_data, frmt=u"html")
diff --git a/resources/tools/presentation/generator_plots.py b/resources/tools/presentation/generator_plots.py
deleted file mode 100644
index da30cafe67..0000000000
--- a/resources/tools/presentation/generator_plots.py
+++ /dev/null
@@ -1,1849 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Algorithms to generate plots.
-"""
-
-
-import re
-import logging
-
-from collections import OrderedDict
-from datetime import datetime
-from copy import deepcopy
-from math import log
-
-import hdrh.histogram
-import hdrh.codec
-import pandas as pd
-import plotly.offline as ploff
-import plotly.graph_objs as plgo
-import plotly.exceptions as plerr
-
-from plotly.exceptions import PlotlyError
-
-from pal_utils import mean, stdev
-
-
-COLORS = (
- u"#1A1110",
- u"#DA2647",
- u"#214FC6",
- u"#01786F",
- u"#BD8260",
- u"#FFD12A",
- u"#A6E7FF",
- u"#738276",
- u"#C95A49",
- u"#FC5A8D",
- u"#CEC8EF",
- u"#391285",
- u"#6F2DA8",
- u"#FF878D",
- u"#45A27D",
- u"#FFD0B9",
- u"#FD5240",
- u"#DB91EF",
- u"#44D7A8",
- u"#4F86F7",
- u"#84DE02",
- u"#FFCFF1",
- u"#614051"
-)
-
-REGEX_NIC = re.compile(r'(\d*ge\dp\d\D*\d*[a-z]*)-')
-
-# This value depends on latency stream rate (9001 pps) and duration (5s).
-# Keep it slightly higher to ensure rounding errors to not remove tick mark.
-PERCENTILE_MAX = 99.999501
-
-
-def generate_plots(spec, data):
- """Generate all plots specified in the specification file.
-
- :param spec: Specification read from the specification file.
- :param data: Data to process.
- :type spec: Specification
- :type data: InputData
- """
-
- generator = {
- u"plot_nf_reconf_box_name": plot_nf_reconf_box_name,
- u"plot_perf_box_name": plot_perf_box_name,
- u"plot_tsa_name": plot_tsa_name,
- u"plot_http_server_perf_box": plot_http_server_perf_box,
- u"plot_nf_heatmap": plot_nf_heatmap,
- u"plot_hdrh_lat_by_percentile": plot_hdrh_lat_by_percentile,
- u"plot_hdrh_lat_by_percentile_x_log": plot_hdrh_lat_by_percentile_x_log,
- u"plot_mrr_box_name": plot_mrr_box_name,
- u"plot_ndrpdr_box_name": plot_ndrpdr_box_name,
- u"plot_statistics": plot_statistics
- }
-
- logging.info(u"Generating the plots ...")
- for index, plot in enumerate(spec.plots):
- try:
- logging.info(f" Plot nr {index + 1}: {plot.get(u'title', u'')}")
- plot[u"limits"] = spec.environment[u"limits"]
- generator[plot[u"algorithm"]](plot, data)
- logging.info(u" Done.")
- except NameError as err:
- logging.error(
- f"Probably algorithm {plot[u'algorithm']} is not defined: "
- f"{repr(err)}"
- )
- logging.info(u"Done.")
-
-
-def plot_statistics(plot, input_data):
- """Generate the plot(s) with algorithm: plot_statistics
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- data_x = list()
- data_y_pass = list()
- data_y_fail = list()
- data_y_duration = list()
- hover_text = list()
- hover_str = (
- u"date: {date}<br>"
- u"passed: {passed}<br>"
- u"failed: {failed}<br>"
- u"duration: {duration}<br>"
- u"{sut}-ref: {build}<br>"
- u"csit-ref: {test}-{period}-build-{build_nr}<br>"
- u"testbed: {testbed}"
- )
- for job, builds in plot[u"data"].items():
- for build_nr in builds:
- try:
- meta = input_data.metadata(job, str(build_nr))
- generated = meta[u"generated"]
- date = datetime(
- int(generated[0:4]),
- int(generated[4:6]),
- int(generated[6:8]),
- int(generated[9:11]),
- int(generated[12:])
- )
- d_y_pass = meta[u"tests_passed"]
- d_y_fail = meta[u"tests_failed"]
- minutes = meta[u"elapsedtime"] // 60000
- duration = f"{(minutes // 60):02d}:{(minutes % 60):02d}"
- version = meta.get(u"version", u"")
- except (KeyError, IndexError, ValueError, AttributeError):
- continue
- data_x.append(date)
- data_y_pass.append(d_y_pass)
- data_y_fail.append(d_y_fail)
- data_y_duration.append(minutes)
- if u"vpp" in job:
- sut = u"vpp"
- elif u"dpdk" in job:
- sut = u"dpdk"
- elif u"trex" in job:
- sut = u"trex"
- else:
- sut = u""
- hover_text.append(hover_str.format(
- date=date,
- passed=d_y_pass,
- failed=d_y_fail,
- duration=duration,
- sut=sut,
- build=version,
- test=u"mrr" if u"mrr" in job else u"ndrpdr",
- period=u"daily" if u"daily" in job else u"weekly",
- build_nr=build_nr,
- testbed=meta.get(u"testbed", u"")
- ))
-
- traces = [
- plgo.Bar(
- x=data_x,
- y=data_y_pass,
- name=u"Passed",
- text=hover_text,
- hoverinfo=u"text"
- ),
- plgo.Bar(
- x=data_x,
- y=data_y_fail,
- name=u"Failed",
- text=hover_text,
- hoverinfo=u"text"),
- plgo.Scatter(
- x=data_x,
- y=data_y_duration,
- name=u"Duration",
- yaxis=u"y2",
- text=hover_text,
- hoverinfo=u"text"
- )
- ]
-
- name_file = f"{plot[u'output-file']}.html"
-
- logging.info(f" Writing the file {name_file}")
- plpl = plgo.Figure(data=traces, layout=plot[u"layout"])
- tickvals = [0, (max(data_y_duration) // 60) * 60]
- step = tickvals[1] / 5
- for i in range(5):
- tickvals.append(int(tickvals[0] + step * (i + 1)))
- plpl.update_layout(
- yaxis2=dict(
- title=u"Duration [hh:mm]",
- anchor=u"x",
- overlaying=u"y",
- side=u"right",
- rangemode="tozero",
- tickmode=u"array",
- tickvals=tickvals,
- ticktext=[f"{(val // 60):02d}:{(val % 60):02d}" for val in tickvals]
- )
- )
- plpl.update_layout(barmode=u"stack")
- try:
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=name_file
- )
- except plerr.PlotlyEmptyDataError:
- logging.warning(u"No data for the plot. Skipped.")
-
-
-def plot_hdrh_lat_by_percentile(plot, input_data):
- """Generate the plot(s) with algorithm: plot_hdrh_lat_by_percentile
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- if plot.get(u"include", None):
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"name", u"latency", u"parent", u"tags", u"type"]
- )[0][0]
- elif plot.get(u"filter", None):
- data = input_data.filter_data(
- plot,
- params=[u"name", u"latency", u"parent", u"tags", u"type"],
- continue_on_error=True
- )[0][0]
- else:
- job = list(plot[u"data"].keys())[0]
- build = str(plot[u"data"][job][0])
- data = input_data.tests(job, build)
-
- if data is None or len(data) == 0:
- logging.error(u"No data.")
- return
-
- desc = {
- u"LAT0": u"No-load.",
- u"PDR10": u"Low-load, 10% PDR.",
- u"PDR50": u"Mid-load, 50% PDR.",
- u"PDR90": u"High-load, 90% PDR.",
- u"PDR": u"Full-load, 100% PDR.",
- u"NDR10": u"Low-load, 10% NDR.",
- u"NDR50": u"Mid-load, 50% NDR.",
- u"NDR90": u"High-load, 90% NDR.",
- u"NDR": u"Full-load, 100% NDR."
- }
-
- graphs = [
- u"LAT0",
- u"PDR10",
- u"PDR50",
- u"PDR90"
- ]
-
- file_links = plot.get(u"output-file-links", None)
- target_links = plot.get(u"target-links", None)
-
- for test in data:
- try:
- if test[u"type"] not in (u"NDRPDR",):
- logging.warning(f"Invalid test type: {test[u'type']}")
- continue
- name = re.sub(REGEX_NIC, u"", test[u"parent"].
- replace(u'-ndrpdr', u'').replace(u'2n1l-', u''))
- try:
- nic = re.search(REGEX_NIC, test[u"parent"]).group(1)
- except (IndexError, AttributeError, KeyError, ValueError):
- nic = u""
- name_link = f"{nic}-{test[u'name']}".replace(u'-ndrpdr', u'')
-
- logging.info(f" Generating the graph: {name_link}")
-
- fig = plgo.Figure()
- layout = deepcopy(plot[u"layout"])
-
- for color, graph in enumerate(graphs):
- for idx, direction in enumerate((u"direction1", u"direction2")):
- previous_x = 0.0
- xaxis = list()
- yaxis = list()
- hovertext = list()
- try:
- decoded = hdrh.histogram.HdrHistogram.decode(
- test[u"latency"][graph][direction][u"hdrh"]
- )
- except hdrh.codec.HdrLengthException:
- logging.warning(
- f"No data for direction {(u'W-E', u'E-W')[idx % 2]}"
- )
- continue
-
- for item in decoded.get_recorded_iterator():
- percentile = item.percentile_level_iterated_to
- xaxis.append(previous_x)
- yaxis.append(item.value_iterated_to)
- hovertext.append(
- f"<b>{desc[graph]}</b><br>"
- f"Direction: {(u'W-E', u'E-W')[idx % 2]}<br>"
- f"Percentile: "
- f"{previous_x:.5f}-{percentile:.5f}%<br>"
- f"Latency: {item.value_iterated_to}uSec"
- )
- xaxis.append(percentile)
- yaxis.append(item.value_iterated_to)
- hovertext.append(
- f"<b>{desc[graph]}</b><br>"
- f"Direction: {(u'W-E', u'E-W')[idx % 2]}<br>"
- f"Percentile: "
- f"{previous_x:.5f}-{percentile:.5f}%<br>"
- f"Latency: {item.value_iterated_to}uSec"
- )
- previous_x = percentile
- fig.add_trace(
- plgo.Scatter(
- x=xaxis,
- y=yaxis,
- name=desc[graph],
- mode=u"lines",
- legendgroup=desc[graph],
- showlegend=bool(idx),
- line=dict(
- color=COLORS[color],
- dash=u"solid",
- width=1 if idx % 2 else 2
- ),
- hovertext=hovertext,
- hoverinfo=u"text"
- )
- )
-
- layout[u"title"][u"text"] = f"<b>Latency:</b> {name}"
- fig.update_layout(layout)
-
- # Create plot
- file_name = f"{plot[u'output-file']}-{name_link}.html"
- logging.info(f" Writing file {file_name}")
-
- try:
- # Export Plot
- ploff.plot(fig, show_link=False, auto_open=False,
- filename=file_name)
- # Add link to the file:
- if file_links and target_links:
- with open(file_links, u"a") as file_handler:
- file_handler.write(
- f"- `{name_link} "
- f"<{target_links}/{file_name.split(u'/')[-1]}>`_\n"
- )
- except FileNotFoundError as err:
- logging.error(
- f"Not possible to write the link to the file "
- f"{file_links}\n{err}"
- )
- except PlotlyError as err:
- logging.error(f" Finished with error: {repr(err)}")
-
- except hdrh.codec.HdrLengthException as err:
- logging.warning(repr(err))
- continue
-
- except (ValueError, KeyError) as err:
- logging.warning(repr(err))
- continue
-
-
-def plot_hdrh_lat_by_percentile_x_log(plot, input_data):
- """Generate the plot(s) with algorithm: plot_hdrh_lat_by_percentile_x_log
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- if plot.get(u"include", None):
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"name", u"latency", u"parent", u"tags", u"type"]
- )[0][0]
- elif plot.get(u"filter", None):
- data = input_data.filter_data(
- plot,
- params=[u"name", u"latency", u"parent", u"tags", u"type"],
- continue_on_error=True
- )[0][0]
- else:
- job = list(plot[u"data"].keys())[0]
- build = str(plot[u"data"][job][0])
- data = input_data.tests(job, build)
-
- if data is None or len(data) == 0:
- logging.error(u"No data.")
- return
-
- desc = {
- u"LAT0": u"No-load.",
- u"PDR10": u"Low-load, 10% PDR.",
- u"PDR50": u"Mid-load, 50% PDR.",
- u"PDR90": u"High-load, 90% PDR.",
- u"PDR": u"Full-load, 100% PDR.",
- u"NDR10": u"Low-load, 10% NDR.",
- u"NDR50": u"Mid-load, 50% NDR.",
- u"NDR90": u"High-load, 90% NDR.",
- u"NDR": u"Full-load, 100% NDR."
- }
-
- graphs = [
- u"LAT0",
- u"PDR10",
- u"PDR50",
- u"PDR90"
- ]
-
- file_links = plot.get(u"output-file-links", None)
- target_links = plot.get(u"target-links", None)
-
- for test in data:
- try:
- if test[u"type"] not in (u"NDRPDR",):
- logging.warning(f"Invalid test type: {test[u'type']}")
- continue
- name = re.sub(REGEX_NIC, u"", test[u"parent"].
- replace(u'-ndrpdr', u'').replace(u'2n1l-', u''))
- try:
- nic = re.search(REGEX_NIC, test[u"parent"]).group(1)
- except (IndexError, AttributeError, KeyError, ValueError):
- nic = u""
- name_link = f"{nic}-{test[u'name']}".replace(u'-ndrpdr', u'')
-
- logging.info(f" Generating the graph: {name_link}")
-
- fig = plgo.Figure()
- layout = deepcopy(plot[u"layout"])
-
- for color, graph in enumerate(graphs):
- for idx, direction in enumerate((u"direction1", u"direction2")):
- previous_x = 0.0
- prev_perc = 0.0
- xaxis = list()
- yaxis = list()
- hovertext = list()
- try:
- decoded = hdrh.histogram.HdrHistogram.decode(
- test[u"latency"][graph][direction][u"hdrh"]
- )
- except (hdrh.codec.HdrLengthException, TypeError):
- logging.warning(
- f"No data for direction {(u'W-E', u'E-W')[idx % 2]}"
- )
- continue
-
- for item in decoded.get_recorded_iterator():
- # The real value is "percentile".
- # For 100%, we cut that down to "x_perc" to avoid
- # infinity.
- percentile = item.percentile_level_iterated_to
- x_perc = min(percentile, PERCENTILE_MAX)
- xaxis.append(previous_x)
- yaxis.append(item.value_iterated_to)
- hovertext.append(
- f"<b>{desc[graph]}</b><br>"
- f"Direction: {(u'W-E', u'E-W')[idx % 2]}<br>"
- f"Percentile: {prev_perc:.5f}-{percentile:.5f}%<br>"
- f"Latency: {item.value_iterated_to}uSec"
- )
- next_x = 100.0 / (100.0 - x_perc)
- xaxis.append(next_x)
- yaxis.append(item.value_iterated_to)
- hovertext.append(
- f"<b>{desc[graph]}</b><br>"
- f"Direction: {(u'W-E', u'E-W')[idx % 2]}<br>"
- f"Percentile: {prev_perc:.5f}-{percentile:.5f}%<br>"
- f"Latency: {item.value_iterated_to}uSec"
- )
- previous_x = next_x
- prev_perc = percentile
- fig.add_trace(
- plgo.Scatter(
- x=xaxis,
- y=yaxis,
- name=desc[graph],
- mode=u"lines",
- legendgroup=desc[graph],
- showlegend=not(bool(idx)),
- line=dict(
- color=COLORS[color],
- dash=u"solid",
- width=1 if idx % 2 else 2
- ),
- hovertext=hovertext,
- hoverinfo=u"text"
- )
- )
-
- layout[u"title"][u"text"] = f"<b>Latency:</b> {name}"
- x_max = log(100.0 / (100.0 - PERCENTILE_MAX), 10)
- layout[u"xaxis"][u"range"] = [0, x_max]
- fig.update_layout(layout)
-
- # Create plot
- file_name = f"{plot[u'output-file']}-{name_link}.html"
- logging.info(f" Writing file {file_name}")
-
- try:
- # Export Plot
- ploff.plot(fig, show_link=False, auto_open=False,
- filename=file_name)
- # Add link to the file:
- if file_links and target_links:
- with open(file_links, u"a") as file_handler:
- file_handler.write(
- f"- `{name_link} "
- f"<{target_links}/{file_name.split(u'/')[-1]}>`_\n"
- )
- except FileNotFoundError as err:
- logging.error(
- f"Not possible to write the link to the file "
- f"{file_links}\n{err}"
- )
- except PlotlyError as err:
- logging.error(f" Finished with error: {repr(err)}")
-
- except hdrh.codec.HdrLengthException as err:
- logging.warning(repr(err))
- continue
-
- except (ValueError, KeyError) as err:
- logging.warning(repr(err))
- continue
-
-
-def plot_nf_reconf_box_name(plot, input_data):
- """Generate the plot(s) with algorithm: plot_nf_reconf_box_name
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- data = input_data.filter_tests_by_name(
- plot, params=[u"result", u"parent", u"tags", u"type"]
- )
- if data is None:
- logging.error(u"No data.")
- return
-
- for core in plot.get(u"core", tuple()):
- # Prepare the data for the plot
- y_vals = OrderedDict()
- loss = dict()
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item.format(core=core)).lower())
- for job in data:
- for build in job:
- for test_id, test in build.iteritems():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- if y_vals.get(test[u"parent"], None) is None:
- y_vals[test[u"parent"]] = list()
- loss[test[u"parent"]] = list()
- try:
- y_vals[test[u"parent"]].append(
- test[u"result"][u"time"]
- )
- loss[test[u"parent"]].append(
- test[u"result"][u"loss"]
- )
- except (KeyError, TypeError):
- y_vals[test[u"parent"]].append(None)
-
- # Add None to the lists with missing data
- max_len = 0
- nr_of_samples = list()
- for val in y_vals.values():
- if len(val) > max_len:
- max_len = len(val)
- nr_of_samples.append(len(val))
- for val in y_vals.values():
- if len(val) < max_len:
- val.extend([None for _ in range(max_len - len(val))])
-
- # Add plot traces
- traces = list()
- df_y = pd.DataFrame(y_vals)
- df_y.head()
- for i, col in enumerate(df_y.columns):
- tst_name = re.sub(
- REGEX_NIC, u"",
- col.lower().replace(u'-reconf', u'').replace(u'2n1l-', u'').
- replace(u'2n-', u'').replace(u'-testpmd', u'')
- )
- traces.append(plgo.Box(
- x=[str(i + 1) + u'.'] * len(df_y[col]),
- y=df_y[col],
- name=(
- f"{i + 1}. "
- f"({nr_of_samples[i]:02d} "
- f"run{u's' if nr_of_samples[i] > 1 else u''}, "
- f"packets lost average: {mean(loss[col]):.1f}) "
- f"{u'-'.join(tst_name.split(u'-')[2:])}"
- ),
- hoverinfo=u"y+name"
- ))
- try:
- # Create plot
- layout = deepcopy(plot[u"layout"])
- layout[u"title"] = f"<b>Time Lost:</b> {layout[u'title']}"
- layout[u"yaxis"][u"title"] = u"<b>Effective Blocked Time [s]</b>"
- layout[u"legend"][u"font"][u"size"] = 14
- layout[u"yaxis"].pop(u"range")
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- file_name = f"{plot[u'output-file'].format(core=core)}.html"
- logging.info(f" Writing file {file_name}")
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=file_name
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
-
-
-def plot_perf_box_name(plot, input_data):
- """Generate the plot(s) with algorithm: plot_perf_box_name
- specified in the specification file.
-
- Use only for soak and hoststack tests.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"throughput", u"gbps", u"result", u"parent", u"tags", u"type"])
- if data is None:
- logging.error(u"No data.")
- return
-
- # Prepare the data for the plot
- y_vals = OrderedDict()
- test_type = u""
-
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item).lower())
- for job in data:
- for build in job:
- for test_id, test in build.iteritems():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- if y_vals.get(test[u"parent"], None) is None:
- y_vals[test[u"parent"]] = list()
- try:
- if test[u"type"] in (u"SOAK",):
- y_vals[test[u"parent"]]. \
- append(test[u"throughput"][u"LOWER"])
- test_type = u"SOAK"
-
- elif test[u"type"] in (u"HOSTSTACK",):
- if u"LDPRELOAD" in test[u"tags"]:
- y_vals[test[u"parent"]].append(
- float(
- test[u"result"][u"bits_per_second"]
- ) / 1e3
- )
- elif u"VPPECHO" in test[u"tags"]:
- y_vals[test[u"parent"]].append(
- (float(
- test[u"result"][u"client"][u"tx_data"]
- ) * 8 / 1e3) /
- ((float(
- test[u"result"][u"client"][u"time"]
- ) +
- float(
- test[u"result"][u"server"][u"time"])
- ) / 2)
- )
- test_type = u"HOSTSTACK"
-
- elif test[u"type"] in (u"LDP_NGINX",):
- if u"TCP_CPS" in test[u"tags"]:
- test_type = u"VSAP_CPS"
- y_vals[test[u"parent"]].append(
- test[u"result"][u"cps"]
- )
- elif u"TCP_RPS" in test[u"tags"]:
- test_type = u"VSAP_RPS"
- y_vals[test[u"parent"]].append(
- test[u"result"][u"rps"]
- )
- else:
- continue
- else:
- continue
-
- except (KeyError, TypeError):
- y_vals[test[u"parent"]].append(None)
-
- # Add None to the lists with missing data
- max_len = 0
- nr_of_samples = list()
- for val in y_vals.values():
- if len(val) > max_len:
- max_len = len(val)
- nr_of_samples.append(len(val))
- for val in y_vals.values():
- if len(val) < max_len:
- val.extend([None for _ in range(max_len - len(val))])
-
- # Add plot traces
- traces = list()
- df_y = pd.DataFrame(y_vals)
- df_y.head()
- y_max = list()
- for i, col in enumerate(df_y.columns):
- tst_name = re.sub(REGEX_NIC, u"",
- col.lower().replace(u'-ndrpdr', u'').
- replace(u'2n1l-', u''))
- if test_type in (u"VSAP_CPS", u"VSAP_RPS"):
- data_y = [y if y else None for y in df_y[col]]
- else:
- data_y = [y / 1e6 if y else None for y in df_y[col]]
- kwargs = dict(
- x=[str(i + 1) + u'.'] * len(df_y[col]),
- y=data_y,
- name=(
- f"{i + 1}. "
- f"({nr_of_samples[i]:02d} "
- f"run{u's' if nr_of_samples[i] > 1 else u''}) "
- f"{tst_name}"
- ),
- hoverinfo=u"y+name"
- )
- if test_type in (u"SOAK", ):
- kwargs[u"boxpoints"] = u"all"
-
- traces.append(plgo.Box(**kwargs))
-
- try:
- val_max = max(df_y[col])
- if val_max:
- y_max.append(int(val_max / 1e6))
- except (ValueError, TypeError) as err:
- logging.error(repr(err))
- continue
-
- try:
- # Create plot
- layout = deepcopy(plot[u"layout"])
- if layout.get(u"title", None):
- if test_type in (u"HOSTSTACK", ):
- layout[u"title"] = f"<b>Bandwidth:</b> {layout[u'title']}"
- elif test_type == u"VSAP_CPS":
- layout[u"title"] = f"<b>CPS:</b> {layout[u'title']}"
- layout[u"yaxis"][u"title"] = u"<b>Connection Rate [cps]</b>"
- elif test_type == u"VSAP_RPS":
- layout[u"title"] = f"<b>RPS:</b> {layout[u'title']}"
- layout[u"yaxis"][u"title"] = u"<b>Connection Rate [rps]</b>"
- else:
- layout[u"title"] = f"<b>Tput:</b> {layout[u'title']}"
- if y_max and max(y_max) > 1:
- layout[u"yaxis"][u"range"] = [0, max(y_max) + 2]
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- logging.info(f" Writing file {plot[u'output-file']}.html.")
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=f"{plot[u'output-file']}.html"
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
- return
-
-
-def plot_ndrpdr_box_name(plot, input_data):
- """Generate the plot(s) with algorithm: plot_ndrpdr_box_name
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"throughput", u"gbps", u"parent", u"tags", u"type"]
- )
- if data is None:
- logging.error(u"No data.")
- return
-
- if u"-gbps" in plot.get(u"title", u"").lower():
- value = u"gbps"
- multiplier = 1e6
- else:
- value = u"throughput"
- multiplier = 1.0
-
- test_type = u""
-
- for ttype in plot.get(u"test-type", (u"ndr", u"pdr")):
- for core in plot.get(u"core", tuple()):
- # Prepare the data for the plot
- data_x = list()
- data_y = OrderedDict()
- data_y_max = list()
- idx = 1
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item.format(core=core)).lower())
- for job in data:
- for build in job:
- for test_id, test in build.iteritems():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- if data_y.get(test[u"parent"], None) is None:
- data_y[test[u"parent"]] = list()
- test_type = test[u"type"]
- data_x.append(idx)
- idx += 1
- try:
- data_y[test[u"parent"]].append(
- test[value][ttype.upper()][u"LOWER"] *
- multiplier
- )
- except (KeyError, TypeError):
- pass
-
- # Add plot traces
- traces = list()
- for idx, (key, vals) in enumerate(data_y.items()):
- name = re.sub(
- REGEX_NIC, u'', key.lower().replace(u'-ndrpdr', u'').
- replace(u'2n1l-', u'')
- )
- traces.append(
- plgo.Box(
- x=[data_x[idx], ] * len(data_x),
- y=[y / 1e6 if y else None for y in vals],
- name=(
- f"{idx+1}."
- f"({len(vals):02d} "
- f"run"
- f"{u's' if len(vals) > 1 else u''}) "
- f"{name}"
- ),
- hoverinfo=u"y+name"
- )
- )
- try:
- data_y_max.append(max(vals))
- except ValueError as err:
- logging.warning(f"No values to use.\n{err!r}")
- try:
- # Create plot
- layout = deepcopy(plot[u"layout"])
- if layout.get(u"title", None):
- layout[u"title"] = \
- layout[u'title'].format(core=core, test_type=ttype)
- if test_type in (u"CPS", ):
- layout[u"title"] = f"<b>CPS:</b> {layout[u'title']}"
- else:
- layout[u"title"] = \
- f"<b>Tput:</b> {layout[u'title']}"
- if data_y_max:
- layout[u"yaxis"][u"range"] = [0, max(data_y_max) / 1e6 + 1]
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- file_name = (
- f"{plot[u'output-file'].format(core=core, test_type=ttype)}"
- f".html"
- )
- logging.info(f" Writing file {file_name}")
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=file_name
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
-
-
-def plot_mrr_box_name(plot, input_data):
- """Generate the plot(s) with algorithm: plot_mrr_box_name
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"result", u"parent", u"tags", u"type"]
- )
- if data is None:
- logging.error(u"No data.")
- return
-
- for core in plot.get(u"core", tuple()):
- # Prepare the data for the plot
- data_x = list()
- data_names = list()
- data_y = list()
- data_y_max = list()
- idx = 1
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item.format(core=core)).lower())
- for job in data:
- for build in job:
- for test_id, test in build.iteritems():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- try:
- data_x.append(idx)
- name = re.sub(
- REGEX_NIC, u'', test[u'parent'].lower().
- replace(u'-mrr', u'').replace(u'2n1l-', u'')
- )
- data_y.append(test[u"result"][u"samples"])
- data_names.append(
- f"{idx}."
- f"({len(data_y[-1]):02d} "
- f"run{u's' if len(data_y[-1]) > 1 else u''}) "
- f"{name}"
- )
- data_y_max.append(max(data_y[-1]))
- idx += 1
- except (KeyError, TypeError):
- pass
-
- # Add plot traces
- traces = list()
- for idx, x_item in enumerate(data_x):
- traces.append(
- plgo.Box(
- x=[x_item, ] * len(data_y[idx]),
- y=data_y[idx],
- name=data_names[idx],
- hoverinfo=u"y+name"
- )
- )
-
- try:
- # Create plot
- layout = deepcopy(plot[u"layout"])
- if layout.get(u"title", None):
- layout[u"title"] = (
- f"<b>Tput:</b> {layout[u'title'].format(core=core)}"
- )
- if data_y_max:
- layout[u"yaxis"][u"range"] = [0, max(data_y_max) + 1]
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- file_name = f"{plot[u'output-file'].format(core=core)}.html"
- logging.info(f" Writing file {file_name}")
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=file_name
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
-
-
-def plot_tsa_name(plot, input_data):
- """Generate the plot(s) with algorithm:
- plot_tsa_name
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- plot_title = plot.get(u"title", u"")
- logging.info(
- f" Creating data set for the {plot.get(u'type', u'')} {plot_title}."
- )
- data = input_data.filter_tests_by_name(
- plot,
- params=[u"throughput", u"gbps", u"parent", u"tags", u"type"]
- )
- if data is None:
- logging.error(u"No data.")
- return
-
- plot_title = plot_title.lower()
-
- if u"-gbps" in plot_title:
- value = u"gbps"
- h_unit = u"Gbps"
- multiplier = 1e6
- else:
- value = u"throughput"
- h_unit = u"Mpps"
- multiplier = 1.0
-
- for ttype in plot.get(u"test-type", (u"ndr", u"pdr")):
- y_vals = OrderedDict()
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item).lower())
- for job in data:
- for build in job:
- for test_id, test in build.iteritems():
- if re.match(reg_ex, str(test_id).lower()):
- if y_vals.get(test[u"parent"], None) is None:
- y_vals[test[u"parent"]] = {
- u"1": list(),
- u"2": list(),
- u"4": list()
- }
- try:
- if test[u"type"] not in (u"NDRPDR", u"CPS"):
- continue
-
- if u"1C" in test[u"tags"]:
- y_vals[test[u"parent"]][u"1"].append(
- test[value][ttype.upper()][u"LOWER"] *
- multiplier
- )
- elif u"2C" in test[u"tags"]:
- y_vals[test[u"parent"]][u"2"].append(
- test[value][ttype.upper()][u"LOWER"] *
- multiplier
- )
- elif u"4C" in test[u"tags"]:
- y_vals[test[u"parent"]][u"4"].append(
- test[value][ttype.upper()][u"LOWER"] *
- multiplier
- )
- except (KeyError, TypeError):
- pass
-
- if not y_vals:
- logging.warning(f"No data for the plot {plot.get(u'title', u'')}")
- return
-
- y_1c_max = dict()
- for test_name, test_vals in y_vals.items():
- for key, test_val in test_vals.items():
- if test_val:
- avg_val = sum(test_val) / len(test_val)
- y_vals[test_name][key] = [avg_val, len(test_val)]
- ideal = avg_val / (int(key) * 1e6)
- if test_name not in y_1c_max or ideal > y_1c_max[test_name]:
- y_1c_max[test_name] = ideal
-
- vals = OrderedDict()
- y_max = list()
- nic_limit = 0
- lnk_limit = 0
- pci_limit = 0
- for test_name, test_vals in y_vals.items():
- try:
- if test_vals[u"1"][1]:
- name = re.sub(
- REGEX_NIC,
- u"",
- test_name.replace(u'-ndrpdr', u'').
- replace(u'2n1l-', u'')
- )
- vals[name] = OrderedDict()
- y_val_1 = test_vals[u"1"][0] / 1e6
- y_val_2 = test_vals[u"2"][0] / 1e6 if test_vals[u"2"][0] \
- else None
- y_val_4 = test_vals[u"4"][0] / 1e6 if test_vals[u"4"][0] \
- else None
-
- vals[name][u"val"] = [y_val_1, y_val_2, y_val_4]
- vals[name][u"rel"] = [1.0, None, None]
- vals[name][u"ideal"] = [
- y_1c_max[test_name],
- y_1c_max[test_name] * 2,
- y_1c_max[test_name] * 4
- ]
- vals[name][u"diff"] = [
- (y_val_1 - y_1c_max[test_name]) * 100 / y_val_1,
- None,
- None
- ]
- vals[name][u"count"] = [
- test_vals[u"1"][1],
- test_vals[u"2"][1],
- test_vals[u"4"][1]
- ]
-
- try:
- val_max = max(vals[name][u"val"])
- except ValueError as err:
- logging.error(repr(err))
- continue
- if val_max:
- y_max.append(val_max)
-
- if y_val_2:
- vals[name][u"rel"][1] = round(y_val_2 / y_val_1, 2)
- vals[name][u"diff"][1] = \
- (y_val_2 - vals[name][u"ideal"][1]) * 100 / y_val_2
- if y_val_4:
- vals[name][u"rel"][2] = round(y_val_4 / y_val_1, 2)
- vals[name][u"diff"][2] = \
- (y_val_4 - vals[name][u"ideal"][2]) * 100 / y_val_4
- except IndexError as err:
- logging.warning(f"No data for {test_name}")
- logging.warning(repr(err))
-
- # Limits:
- if u"x520" in test_name:
- limit = plot[u"limits"][u"nic"][u"x520"]
- elif u"x710" in test_name:
- limit = plot[u"limits"][u"nic"][u"x710"]
- elif u"xxv710" in test_name:
- limit = plot[u"limits"][u"nic"][u"xxv710"]
- elif u"xl710" in test_name:
- limit = plot[u"limits"][u"nic"][u"xl710"]
- elif u"x553" in test_name:
- limit = plot[u"limits"][u"nic"][u"x553"]
- elif u"cx556a" in test_name:
- limit = plot[u"limits"][u"nic"][u"cx556a"]
- elif u"e810cq" in test_name:
- limit = plot[u"limits"][u"nic"][u"e810cq"]
- else:
- limit = 0
- if limit > nic_limit:
- nic_limit = limit
-
- mul = 2 if u"ge2p" in test_name else 1
- if u"10ge" in test_name:
- limit = plot[u"limits"][u"link"][u"10ge"] * mul
- elif u"25ge" in test_name:
- limit = plot[u"limits"][u"link"][u"25ge"] * mul
- elif u"40ge" in test_name:
- limit = plot[u"limits"][u"link"][u"40ge"] * mul
- elif u"100ge" in test_name:
- limit = plot[u"limits"][u"link"][u"100ge"] * mul
- else:
- limit = 0
- if limit > lnk_limit:
- lnk_limit = limit
-
- if u"cx556a" in test_name:
- limit = plot[u"limits"][u"pci"][u"pci-g3-x8"]
- else:
- limit = plot[u"limits"][u"pci"][u"pci-g3-x16"]
- if limit > pci_limit:
- pci_limit = limit
-
- traces = list()
- annotations = list()
- x_vals = [1, 2, 4]
-
- # Limits:
- if u"-gbps" not in plot_title and u"-cps-" not in plot_title:
- nic_limit /= 1e6
- lnk_limit /= 1e6
- pci_limit /= 1e6
- min_limit = min((nic_limit, lnk_limit, pci_limit))
- if nic_limit == min_limit:
- traces.append(plgo.Scatter(
- x=x_vals,
- y=[nic_limit, ] * len(x_vals),
- name=f"NIC: {nic_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-1],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=nic_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"NIC: {nic_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-1],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(nic_limit)
- elif lnk_limit == min_limit:
- traces.append(plgo.Scatter(
- x=x_vals,
- y=[lnk_limit, ] * len(x_vals),
- name=f"Link: {lnk_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-1],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=lnk_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"Link: {lnk_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-1],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(lnk_limit)
- elif pci_limit == min_limit:
- traces.append(plgo.Scatter(
- x=x_vals,
- y=[pci_limit, ] * len(x_vals),
- name=f"PCIe: {pci_limit:.2f}Mpps",
- showlegend=False,
- mode=u"lines",
- line=dict(
- dash=u"dot",
- color=COLORS[-1],
- width=1),
- hoverinfo=u"none"
- ))
- annotations.append(dict(
- x=1,
- y=pci_limit,
- xref=u"x",
- yref=u"y",
- xanchor=u"left",
- yanchor=u"bottom",
- text=f"PCIe: {pci_limit:.2f}Mpps",
- font=dict(
- size=14,
- color=COLORS[-1],
- ),
- align=u"left",
- showarrow=False
- ))
- y_max.append(pci_limit)
-
- # Perfect and measured:
- cidx = 0
- for name, val in vals.items():
- hovertext = list()
- try:
- for idx in range(len(val[u"val"])):
- htext = ""
- if isinstance(val[u"val"][idx], float):
- htext += (
- f"No. of Runs: {val[u'count'][idx]}<br>"
- f"Mean: {val[u'val'][idx]:.2f}{h_unit}<br>"
- )
- if isinstance(val[u"diff"][idx], float):
- htext += f"Diff: {round(val[u'diff'][idx]):.0f}%<br>"
- if isinstance(val[u"rel"][idx], float):
- htext += f"Speedup: {val[u'rel'][idx]:.2f}"
- hovertext.append(htext)
- traces.append(
- plgo.Scatter(
- x=x_vals,
- y=val[u"val"],
- name=name,
- legendgroup=name,
- mode=u"lines+markers",
- line=dict(
- color=COLORS[cidx],
- width=2),
- marker=dict(
- symbol=u"circle",
- size=10
- ),
- text=hovertext,
- hoverinfo=u"text+name"
- )
- )
- traces.append(
- plgo.Scatter(
- x=x_vals,
- y=val[u"ideal"],
- name=f"{name} perfect",
- legendgroup=name,
- showlegend=False,
- mode=u"lines",
- line=dict(
- color=COLORS[cidx],
- width=2,
- dash=u"dash"),
- text=[f"Perfect: {y:.2f}Mpps" for y in val[u"ideal"]],
- hoverinfo=u"text"
- )
- )
- cidx += 1
- except (IndexError, ValueError, KeyError) as err:
- logging.warning(f"No data for {name}\n{repr(err)}")
-
- try:
- # Create plot
- file_name = f"{plot[u'output-file'].format(test_type=ttype)}.html"
- logging.info(f" Writing file {file_name}")
- layout = deepcopy(plot[u"layout"])
- if layout.get(u"title", None):
- layout[u"title"] = (
- f"<b>Speedup Multi-core:</b> "
- f"{layout[u'title'].format(test_type=ttype)}"
- )
- layout[u"yaxis"][u"range"] = [0, int(max(y_max) * 1.1)]
- layout[u"annotations"].extend(annotations)
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=file_name
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
-
-
-def plot_http_server_perf_box(plot, input_data):
- """Generate the plot(s) with algorithm: plot_http_server_perf_box
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- data = input_data.filter_data(plot)
- if data is None:
- logging.error(u"No data.")
- return
-
- # Prepare the data for the plot
- y_vals = dict()
- for job in data:
- for build in job:
- for test in build:
- if y_vals.get(test[u"name"], None) is None:
- y_vals[test[u"name"]] = list()
- try:
- y_vals[test[u"name"]].append(test[u"result"])
- except (KeyError, TypeError):
- y_vals[test[u"name"]].append(None)
-
- # Add None to the lists with missing data
- max_len = 0
- nr_of_samples = list()
- for val in y_vals.values():
- if len(val) > max_len:
- max_len = len(val)
- nr_of_samples.append(len(val))
- for val in y_vals.values():
- if len(val) < max_len:
- val.extend([None for _ in range(max_len - len(val))])
-
- # Add plot traces
- traces = list()
- df_y = pd.DataFrame(y_vals)
- df_y.head()
- for i, col in enumerate(df_y.columns):
- name = \
- f"{i + 1}. " \
- f"({nr_of_samples[i]:02d} " \
- f"run{u's' if nr_of_samples[i] > 1 else u''}) " \
- f"{col.lower().replace(u'-ndrpdr', u'')}"
- if len(name) > 50:
- name_lst = name.split(u'-')
- name = u""
- split_name = True
- for segment in name_lst:
- if (len(name) + len(segment) + 1) > 50 and split_name:
- name += u"<br> "
- split_name = False
- name += segment + u'-'
- name = name[:-1]
-
- traces.append(plgo.Box(x=[str(i + 1) + u'.'] * len(df_y[col]),
- y=df_y[col],
- name=name,
- **plot[u"traces"]))
- try:
- # Create plot
- plpl = plgo.Figure(data=traces, layout=plot[u"layout"])
-
- # Export Plot
- logging.info(
- f" Writing file {plot[u'output-file']}"
- f"{plot[u'output-file-type']}."
- )
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=f"{plot[u'output-file']}{plot[u'output-file-type']}"
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
- return
-
-
-def plot_nf_heatmap(plot, input_data):
- """Generate the plot(s) with algorithm: plot_nf_heatmap
- specified in the specification file.
-
- :param plot: Plot to generate.
- :param input_data: Data to process.
- :type plot: pandas.Series
- :type input_data: InputData
- """
-
- def sort_by_int(value):
- """Makes possible to sort a list of strings which represent integers.
-
- :param value: Integer as a string.
- :type value: str
- :returns: Integer representation of input parameter 'value'.
- :rtype: int
- """
- return int(value)
-
- regex_cn = re.compile(r'^(\d*)R(\d*)C$')
- regex_test_name = re.compile(r'^.*-(\d+ch|\d+pl)-'
- r'(\d+mif|\d+vh)-'
- r'(\d+vm\d+t|\d+dcr\d+t|\d+dcr\d+c).*$')
- vals = dict()
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {plot.get(u'type', u'')} "
- f"{plot.get(u'title', u'')}."
- )
- in_data = input_data.filter_tests_by_name(
- plot,
- continue_on_error=True,
- params=[u"throughput", u"result", u"name", u"tags", u"type"]
- )
- if in_data is None or in_data.empty:
- logging.error(u"No data.")
- return
-
- for ttype in plot.get(u"test-type", (u"ndr", u"pdr")):
- for core in plot.get(u"core", tuple()):
- for item in plot.get(u"include", tuple()):
- reg_ex = re.compile(str(item.format(core=core)).lower())
- for job in in_data:
- for build in job:
- for test_id, test in build.iteritems():
- if not re.match(reg_ex, str(test_id).lower()):
- continue
- for tag in test[u"tags"]:
- groups = re.search(regex_cn, tag)
- if groups:
- chain = str(groups.group(1))
- node = str(groups.group(2))
- break
- else:
- continue
- groups = re.search(regex_test_name, test[u"name"])
- if groups and len(groups.groups()) == 3:
- hover_name = (
- f"{str(groups.group(1))}-"
- f"{str(groups.group(2))}-"
- f"{str(groups.group(3))}"
- )
- else:
- hover_name = u""
- if vals.get(chain, None) is None:
- vals[chain] = dict()
- if vals[chain].get(node, None) is None:
- vals[chain][node] = dict(
- name=hover_name,
- vals=list(),
- nr=None,
- mean=None,
- stdev=None
- )
- try:
- if ttype == u"mrr":
- result = test[u"result"][u"receive-rate"]
- elif ttype == u"pdr":
- result = \
- test[u"throughput"][u"PDR"][u"LOWER"]
- elif ttype == u"ndr":
- result = \
- test[u"throughput"][u"NDR"][u"LOWER"]
- else:
- result = None
- except TypeError:
- result = None
-
- if result:
- vals[chain][node][u"vals"].append(result)
-
- if not vals:
- logging.error(u"No data.")
- return
-
- txt_chains = list()
- txt_nodes = list()
- for key_c in vals:
- txt_chains.append(key_c)
- for key_n in vals[key_c].keys():
- txt_nodes.append(key_n)
- if vals[key_c][key_n][u"vals"]:
- vals[key_c][key_n][u"nr"] = \
- len(vals[key_c][key_n][u"vals"])
- vals[key_c][key_n][u"mean"] = \
- round(mean(vals[key_c][key_n][u"vals"]) / 1e6, 1)
- vals[key_c][key_n][u"stdev"] = \
- round(stdev(vals[key_c][key_n][u"vals"]) / 1e6, 1)
- txt_nodes = list(set(txt_nodes))
-
- txt_chains = sorted(txt_chains, key=sort_by_int)
- txt_nodes = sorted(txt_nodes, key=sort_by_int)
-
- chains = [i + 1 for i in range(len(txt_chains))]
- nodes = [i + 1 for i in range(len(txt_nodes))]
-
- data = [list() for _ in range(len(chains))]
- for chain in chains:
- for node in nodes:
- try:
- val = vals[txt_chains[chain - 1]] \
- [txt_nodes[node - 1]][u"mean"]
- except (KeyError, IndexError):
- val = None
- data[chain - 1].append(val)
-
- # Color scales:
- my_green = [[0.0, u"rgb(235, 249, 242)"],
- [1.0, u"rgb(45, 134, 89)"]]
-
- my_blue = [[0.0, u"rgb(236, 242, 248)"],
- [1.0, u"rgb(57, 115, 172)"]]
-
- my_grey = [[0.0, u"rgb(230, 230, 230)"],
- [1.0, u"rgb(102, 102, 102)"]]
-
- hovertext = list()
- annotations = list()
-
- text = (u"Test: {name}<br>"
- u"Runs: {nr}<br>"
- u"Thput: {val}<br>"
- u"StDev: {stdev}")
-
- for chain, _ in enumerate(txt_chains):
- hover_line = list()
- for node, _ in enumerate(txt_nodes):
- if data[chain][node] is not None:
- annotations.append(
- dict(
- x=node+1,
- y=chain+1,
- xref=u"x",
- yref=u"y",
- xanchor=u"center",
- yanchor=u"middle",
- text=str(data[chain][node]),
- font=dict(
- size=14,
- ),
- align=u"center",
- showarrow=False
- )
- )
- hover_line.append(text.format(
- name=vals[txt_chains[chain]][txt_nodes[node]]
- [u"name"],
- nr=vals[txt_chains[chain]][txt_nodes[node]][u"nr"],
- val=data[chain][node],
- stdev=vals[txt_chains[chain]][txt_nodes[node]]
- [u"stdev"]
- ))
- hovertext.append(hover_line)
-
- traces = [
- plgo.Heatmap(
- x=nodes,
- y=chains,
- z=data,
- colorbar=dict(
- title=plot.get(u"z-axis", u"{test_type}").
- format(test_type=ttype.upper()),
- titleside=u"right",
- titlefont=dict(
- size=16
- ),
- tickfont=dict(
- size=16,
- ),
- tickformat=u".1f",
- yanchor=u"bottom",
- y=-0.02,
- len=0.925,
- ),
- showscale=True,
- colorscale=my_green,
- text=hovertext,
- hoverinfo=u"text"
- )
- ]
-
- for idx, item in enumerate(txt_nodes):
- # X-axis, numbers:
- annotations.append(
- dict(
- x=idx+1,
- y=0.05,
- xref=u"x",
- yref=u"y",
- xanchor=u"center",
- yanchor=u"top",
- text=item,
- font=dict(
- size=16,
- ),
- align=u"center",
- showarrow=False
- )
- )
- for idx, item in enumerate(txt_chains):
- # Y-axis, numbers:
- annotations.append(
- dict(
- x=0.35,
- y=idx+1,
- xref=u"x",
- yref=u"y",
- xanchor=u"right",
- yanchor=u"middle",
- text=item,
- font=dict(
- size=16,
- ),
- align=u"center",
- showarrow=False
- )
- )
- # X-axis, title:
- annotations.append(
- dict(
- x=0.55,
- y=-0.15,
- xref=u"paper",
- yref=u"y",
- xanchor=u"center",
- yanchor=u"bottom",
- text=plot.get(u"x-axis", u""),
- font=dict(
- size=16,
- ),
- align=u"center",
- showarrow=False
- )
- )
- # Y-axis, title:
- annotations.append(
- dict(
- x=-0.1,
- y=0.5,
- xref=u"x",
- yref=u"paper",
- xanchor=u"center",
- yanchor=u"middle",
- text=plot.get(u"y-axis", u""),
- font=dict(
- size=16,
- ),
- align=u"center",
- textangle=270,
- showarrow=False
- )
- )
- updatemenus = list([
- dict(
- x=1.0,
- y=0.0,
- xanchor=u"right",
- yanchor=u"bottom",
- direction=u"up",
- buttons=list([
- dict(
- args=[
- {
- u"colorscale": [my_green, ],
- u"reversescale": False
- }
- ],
- label=u"Green",
- method=u"update"
- ),
- dict(
- args=[
- {
- u"colorscale": [my_blue, ],
- u"reversescale": False
- }
- ],
- label=u"Blue",
- method=u"update"
- ),
- dict(
- args=[
- {
- u"colorscale": [my_grey, ],
- u"reversescale": False
- }
- ],
- label=u"Grey",
- method=u"update"
- )
- ])
- )
- ])
-
- try:
- layout = deepcopy(plot[u"layout"])
- except KeyError as err:
- logging.error(
- f"Finished with error: No layout defined\n{repr(err)}"
- )
- return
-
- layout[u"annotations"] = annotations
- layout[u'updatemenus'] = updatemenus
- if layout.get(u"title", None):
- layout[u"title"] = layout[u'title'].replace(u"test_type", ttype)
-
- try:
- # Create plot
- plpl = plgo.Figure(data=traces, layout=layout)
-
- # Export Plot
- file_name = (
- f"{plot[u'output-file'].format(core=core, test_type=ttype)}"
- f".html"
- )
- logging.info(f" Writing file {file_name}")
- ploff.plot(
- plpl,
- show_link=False,
- auto_open=False,
- filename=file_name
- )
- except PlotlyError as err:
- logging.error(
- f" Finished with error: {repr(err)}".replace(u"\n", u" ")
- )
diff --git a/resources/tools/presentation/generator_report.py b/resources/tools/presentation/generator_report.py
deleted file mode 100644
index cd6f506d33..0000000000
--- a/resources/tools/presentation/generator_report.py
+++ /dev/null
@@ -1,267 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Report generation.
-"""
-
-import logging
-import datetime
-
-from shutil import make_archive
-
-from pal_utils import get_files, execute_command, archive_input_data
-
-
-# .css file for the html format of the report
-THEME_OVERRIDES = u"""/* override table width restrictions */
-@media screen and (min-width: 767px) {
- .wy-table-responsive table td, .wy-table-responsive table th {
- white-space: normal !important;
- }
-
- .wy-table-responsive {
- font-size: small;
- margin-bottom: 24px;
- max-width: 100%;
- overflow: visible !important;
- }
-}
-.rst-content blockquote {
- margin-left: 0px;
- line-height: 18px;
- margin-bottom: 0px;
-}
-.wy-menu-vertical a {
- display: inline-block;
- line-height: 18px;
- padding: 0 2em;
- display: block;
- position: relative;
- font-size: 90%;
- color: #d9d9d9
-}
-.wy-menu-vertical li.current a {
- color: gray;
- border-right: solid 1px #c9c9c9;
- padding: 0 3em;
-}
-.wy-menu-vertical li.toctree-l2.current > a {
- background: #c9c9c9;
- padding: 0 3em;
-}
-.wy-menu-vertical li.toctree-l2.current li.toctree-l3 > a {
- display: block;
- background: #c9c9c9;
- padding: 0 4em;
-}
-.wy-menu-vertical li.toctree-l3.current li.toctree-l4 > a {
- display: block;
- background: #bdbdbd;
- padding: 0 5em;
-}
-.wy-menu-vertical li.on a, .wy-menu-vertical li.current > a {
- color: #404040;
- padding: 0 2em;
- font-weight: bold;
- position: relative;
- background: #fcfcfc;
- border: none;
- border-top-width: medium;
- border-bottom-width: medium;
- border-top-style: none;
- border-bottom-style: none;
- border-top-color: currentcolor;
- border-bottom-color: currentcolor;
- padding-left: 2em -4px;
-}
-"""
-
-# Command to build the html format of the report
-HTML_BUILDER = u'sphinx-build -v -c sphinx_conf/report -a ' \
- u'-b html -E ' \
- u'-t html ' \
- u'-D release={release} ' \
- u'-D version="Test Report {date}" ' \
- u'{working_dir} ' \
- u'{build_dir}/'
-
-# Command to build the pdf format of the report
-PDF_BUILDER = u'sphinx-build -v -c sphinx_conf/report -a ' \
- u'-b latex -E ' \
- u'-t latex ' \
- u'-D release={release} ' \
- u'-D version="Test Report {date}" ' \
- u'{working_dir} ' \
- u'{build_dir}'
-
-
-def generate_report(release, spec, report_week):
- """Generate all formats and versions of the report.
-
- :param release: Release string of the product.
- :param spec: Specification read from the specification file.
- :param report_week: Calendar week when the report is published.
- :type release: str
- :type spec: Specification
- :type report_week: str
- """
-
- logging.info(u"Generating the report ...")
-
- report = {
- u"html": generate_html_report,
- u"pdf": generate_pdf_report
- }
-
- for report_format in spec.output[u"format"]:
- report[report_format](release, spec, report_week)
-
- archive_input_data(spec)
-
- logging.info(u"Done.")
-
-
-def generate_html_report(release, spec, report_version):
- """Generate html format of the report.
-
- :param release: Release string of the product.
- :param spec: Specification read from the specification file.
- :param report_version: Version of the report.
- :type release: str
- :type spec: Specification
- :type report_version: str
- """
-
- _ = report_version
-
- logging.info(u" Generating the html report, give me a few minutes, please "
- u"...")
-
- working_dir = spec.environment[u"paths"][u"DIR[WORKING,SRC]"]
-
- execute_command(f"cd {working_dir} && mv -f index.html.template index.rst")
-
- cmd = HTML_BUILDER.format(
- release=release,
- date=datetime.datetime.utcnow().strftime(u'%Y-%m-%d %H:%M UTC'),
- working_dir=working_dir,
- build_dir=spec.environment[u"paths"][u"DIR[BUILD,HTML]"])
- execute_command(cmd)
-
- with open(spec.environment[u"paths"][u"DIR[CSS_PATCH_FILE]"], u"wt") as \
- css_file:
- css_file.write(THEME_OVERRIDES)
-
- with open(spec.environment[u"paths"][u"DIR[CSS_PATCH_FILE2]"], u"wt") as \
- css_file:
- css_file.write(THEME_OVERRIDES)
-
- logging.info(u" Done.")
-
-
-def generate_pdf_report(release, spec, report_week):
- """Generate html format of the report.
-
- :param release: Release string of the product.
- :param spec: Specification read from the specification file.
- :param report_week: Calendar week when the report is published.
- :type release: str
- :type spec: Specification
- :type report_week: str
- """
-
- logging.info(u" Generating the pdf report, give me a few minutes, please "
- u"...")
-
- working_dir = spec.environment[u"paths"][u"DIR[WORKING,SRC]"]
-
- execute_command(f"cd {working_dir} && mv -f index.pdf.template index.rst")
-
- _convert_all_svg_to_pdf(spec.environment[u"paths"][u"DIR[WORKING,SRC]"])
-
- # Convert PyPLOT graphs in HTML format to PDF.
- convert_plots = u"xvfb-run -a wkhtmltopdf {html} {pdf}"
- plots = get_files(spec.environment[u"paths"][u"DIR[STATIC,VPP]"], u"html")
- plots.extend(
- get_files(spec.environment[u"paths"][u"DIR[STATIC,DPDK]"], u"html")
- )
- pdf_plots = list()
- for plot in plots:
- file_name = f"{plot.rsplit(u'.', 1)[0]}.pdf"
- pdf_plots.append(file_name)
- logging.info(f"Converting {plot} to {file_name}")
- execute_command(convert_plots.format(html=plot, pdf=file_name))
-
- # Generate the LaTeX documentation
- build_dir = spec.environment[u"paths"][u"DIR[BUILD,LATEX]"]
- cmd = PDF_BUILDER.format(
- release=release,
- date=datetime.datetime.utcnow().strftime(u'%Y-%m-%d %H:%M UTC'),
- working_dir=working_dir,
- build_dir=build_dir)
- execute_command(cmd)
-
- # Build pdf documentation
- archive_dir = spec.environment[u"paths"][u"DIR[STATIC,ARCH]"]
- cmds = [
- f'cd {build_dir} && '
- f'pdflatex -shell-escape -interaction nonstopmode csit.tex || true',
- f'cd {build_dir} && '
- f'pdflatex -interaction nonstopmode csit.tex || true',
- f'cd {build_dir} && '
- f'cp csit.pdf ../{archive_dir}/csit_{release}.{report_week}.pdf &&'
- f'cp csit.pdf ../{archive_dir}/csit_{release}.pdf'
- ]
-
- for cmd in cmds:
- execute_command(cmd)
-
- # Delete temporary pdf files:
- for plot in pdf_plots:
- execute_command(f"rm {plot}")
-
- logging.info(u" Done.")
-
-
-def archive_report(spec):
- """Archive the report.
-
- :param spec: Specification read from the specification file.
- :type spec: Specification
- """
-
- logging.info(u" Archiving the report ...")
-
- make_archive(
- u"csit.report",
- u"gztar",
- base_dir=spec.environment[u"paths"][u"DIR[BUILD,HTML]"]
- )
-
- logging.info(u" Done.")
-
-
-def _convert_all_svg_to_pdf(path):
- """Convert all svg files on path "path" to pdf.
-
- :param path: Path to the root directory with svg files to convert.
- :type path: str
- """
-
- svg_files = get_files(path, u"svg", full_path=True)
- for svg_file in svg_files:
- pdf_file = f"{svg_file.rsplit(u'.', 1)[0]}.pdf"
- logging.info(f"Converting {svg_file} to {pdf_file}")
- execute_command(
- f"inkscape -D -z --file={svg_file} --export-pdf={pdf_file}"
- )
diff --git a/resources/tools/presentation/generator_tables.py b/resources/tools/presentation/generator_tables.py
deleted file mode 100644
index 81bfa783e1..0000000000
--- a/resources/tools/presentation/generator_tables.py
+++ /dev/null
@@ -1,2264 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Algorithms to generate tables.
-"""
-
-
-import logging
-import csv
-import math
-import re
-
-from collections import OrderedDict
-from xml.etree import ElementTree as ET
-from datetime import datetime as dt
-from datetime import timedelta
-from copy import deepcopy
-
-import plotly.graph_objects as go
-import plotly.offline as ploff
-import pandas as pd
-import prettytable
-
-from numpy import nan, isnan
-from yaml import load, FullLoader, YAMLError
-
-from pal_utils import mean, stdev, classify_anomalies, \
- convert_csv_to_pretty_txt, relative_change_stdev, relative_change
-
-
-REGEX_NIC = re.compile(r'(\d*ge\dp\d\D*\d*[a-z]*)')
-
-
-def generate_tables(spec, data):
- """Generate all tables specified in the specification file.
-
- :param spec: Specification read from the specification file.
- :param data: Data to process.
- :type spec: Specification
- :type data: InputData
- """
-
- generator = {
- u"table_merged_details": table_merged_details,
- u"table_soak_vs_ndr": table_soak_vs_ndr,
- u"table_perf_trending_dash": table_perf_trending_dash,
- u"table_perf_trending_dash_html": table_perf_trending_dash_html,
- u"table_last_failed_tests": table_last_failed_tests,
- u"table_failed_tests": table_failed_tests,
- u"table_failed_tests_html": table_failed_tests_html,
- u"table_oper_data_html": table_oper_data_html,
- u"table_comparison": table_comparison,
- u"table_weekly_comparison": table_weekly_comparison,
- u"table_job_spec_duration": table_job_spec_duration
- }
-
- logging.info(u"Generating the tables ...")
- for table in spec.tables:
- try:
- if table[u"algorithm"] == u"table_weekly_comparison":
- table[u"testbeds"] = spec.environment.get(u"testbeds", None)
- generator[table[u"algorithm"]](table, data)
- except NameError as err:
- logging.error(
- f"Probably algorithm {table[u'algorithm']} is not defined: "
- f"{repr(err)}"
- )
- logging.info(u"Done.")
-
-
-def table_job_spec_duration(table, input_data):
- """Generate the table(s) with algorithm: table_job_spec_duration
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- _ = input_data
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- jb_type = table.get(u"jb-type", None)
-
- tbl_lst = list()
- if jb_type == u"iterative":
- for line in table.get(u"lines", tuple()):
- tbl_itm = {
- u"name": line.get(u"job-spec", u""),
- u"data": list()
- }
- for job, builds in line.get(u"data-set", dict()).items():
- for build_nr in builds:
- try:
- minutes = input_data.metadata(
- job, str(build_nr)
- )[u"elapsedtime"] // 60000
- except (KeyError, IndexError, ValueError, AttributeError):
- continue
- tbl_itm[u"data"].append(minutes)
- tbl_itm[u"mean"] = mean(tbl_itm[u"data"])
- tbl_itm[u"stdev"] = stdev(tbl_itm[u"data"])
- tbl_lst.append(tbl_itm)
- elif jb_type == u"coverage":
- job = table.get(u"data", None)
- if not job:
- return
- for line in table.get(u"lines", tuple()):
- try:
- tbl_itm = {
- u"name": line.get(u"job-spec", u""),
- u"mean": input_data.metadata(
- list(job.keys())[0], str(line[u"build"])
- )[u"elapsedtime"] // 60000,
- u"stdev": float(u"nan")
- }
- tbl_itm[u"data"] = [tbl_itm[u"mean"], ]
- except (KeyError, IndexError, ValueError, AttributeError):
- continue
- tbl_lst.append(tbl_itm)
- else:
- logging.warning(f"Wrong type of job-spec: {jb_type}. Skipping.")
- return
-
- for line in tbl_lst:
- line[u"mean"] = \
- f"{int(line[u'mean'] // 60):02d}:{int(line[u'mean'] % 60):02d}"
- if math.isnan(line[u"stdev"]):
- line[u"stdev"] = u""
- else:
- line[u"stdev"] = \
- f"{int(line[u'stdev'] //60):02d}:{int(line[u'stdev'] % 60):02d}"
-
- if not tbl_lst:
- return
-
- rows = list()
- for itm in tbl_lst:
- rows.append([
- itm[u"name"],
- f"{len(itm[u'data'])}",
- f"{itm[u'mean']} +- {itm[u'stdev']}"
- if itm[u"stdev"] != u"" else f"{itm[u'mean']}"
- ])
-
- txt_table = prettytable.PrettyTable(
- [u"Job Specification", u"Nr of Runs", u"Duration [HH:MM]"]
- )
- for row in rows:
- txt_table.add_row(row)
- txt_table.align = u"r"
- txt_table.align[u"Job Specification"] = u"l"
-
- file_name = f"{table.get(u'output-file', u'')}.txt"
- with open(file_name, u"wt", encoding='utf-8') as txt_file:
- txt_file.write(str(txt_table))
-
-
-def table_oper_data_html(table, input_data):
- """Generate the table(s) with algorithm: html_table_oper_data
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- data = input_data.filter_data(
- table,
- params=[u"name", u"parent", u"telemetry-show-run", u"type"],
- continue_on_error=True
- )
- if data.empty:
- return
- data = input_data.merge_data(data)
-
- sort_tests = table.get(u"sort", None)
- if sort_tests:
- args = dict(
- inplace=True,
- ascending=(sort_tests == u"ascending")
- )
- data.sort_index(**args)
-
- suites = input_data.filter_data(
- table,
- continue_on_error=True,
- data_set=u"suites"
- )
- if suites.empty:
- return
- suites = input_data.merge_data(suites)
-
- def _generate_html_table(tst_data):
- """Generate an HTML table with operational data for the given test.
-
- :param tst_data: Test data to be used to generate the table.
- :type tst_data: pandas.Series
- :returns: HTML table with operational data.
- :rtype: str
- """
-
- colors = {
- u"header": u"#7eade7",
- u"empty": u"#ffffff",
- u"body": (u"#e9f1fb", u"#d4e4f7")
- }
-
- tbl = ET.Element(u"table", attrib=dict(width=u"100%", border=u"0"))
-
- trow = ET.SubElement(tbl, u"tr", attrib=dict(bgcolor=colors[u"header"]))
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- thead.text = tst_data[u"name"]
-
- trow = ET.SubElement(tbl, u"tr", attrib=dict(bgcolor=colors[u"empty"]))
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- thead.text = u"\t"
-
- if tst_data.get(u"telemetry-show-run", None) is None or \
- isinstance(tst_data[u"telemetry-show-run"], str):
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
- )
- tcol = ET.SubElement(
- trow, u"td", attrib=dict(align=u"left", colspan=u"6")
- )
- tcol.text = u"No Data"
-
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"empty"])
- )
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- font = ET.SubElement(
- thead, u"font", attrib=dict(size=u"12px", color=u"#ffffff")
- )
- font.text = u"."
- return str(ET.tostring(tbl, encoding=u"unicode"))
-
- tbl_hdr = (
- u"Name",
- u"Nr of Vectors",
- u"Nr of Packets",
- u"Suspends",
- u"Cycles per Packet",
- u"Average Vector Size"
- )
-
- for dut_data in tst_data[u"telemetry-show-run"].values():
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
- )
- tcol = ET.SubElement(
- trow, u"td", attrib=dict(align=u"left", colspan=u"6")
- )
- if dut_data.get(u"runtime", None) is None:
- tcol.text = u"No Data"
- continue
-
- runtime = dict()
- for item in dut_data[u"runtime"].get(u"data", tuple()):
- tid = int(item[u"labels"][u"thread_id"])
- if runtime.get(tid, None) is None:
- runtime[tid] = dict()
- gnode = item[u"labels"][u"graph_node"]
- if runtime[tid].get(gnode, None) is None:
- runtime[tid][gnode] = dict()
- try:
- runtime[tid][gnode][item[u"name"]] = float(item[u"value"])
- except ValueError:
- runtime[tid][gnode][item[u"name"]] = item[u"value"]
-
- threads = dict({idx: list() for idx in range(len(runtime))})
- for idx, run_data in runtime.items():
- for gnode, gdata in run_data.items():
- if gdata[u"vectors"] > 0:
- clocks = gdata[u"clocks"] / gdata[u"vectors"]
- elif gdata[u"calls"] > 0:
- clocks = gdata[u"clocks"] / gdata[u"calls"]
- elif gdata[u"suspends"] > 0:
- clocks = gdata[u"clocks"] / gdata[u"suspends"]
- else:
- clocks = 0.0
- if gdata[u"calls"] > 0:
- vectors_call = gdata[u"vectors"] / gdata[u"calls"]
- else:
- vectors_call = 0.0
- if int(gdata[u"calls"]) + int(gdata[u"vectors"]) + \
- int(gdata[u"suspends"]):
- threads[idx].append([
- gnode,
- int(gdata[u"calls"]),
- int(gdata[u"vectors"]),
- int(gdata[u"suspends"]),
- clocks,
- vectors_call
- ])
-
- bold = ET.SubElement(tcol, u"b")
- bold.text = (
- f"Host IP: {dut_data.get(u'host', '')}, "
- f"Socket: {dut_data.get(u'socket', '')}"
- )
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"empty"])
- )
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- thead.text = u"\t"
-
- for thread_nr, thread in threads.items():
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
- )
- tcol = ET.SubElement(
- trow, u"td", attrib=dict(align=u"left", colspan=u"6")
- )
- bold = ET.SubElement(tcol, u"b")
- bold.text = u"main" if thread_nr == 0 else f"worker_{thread_nr}"
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"header"])
- )
- for idx, col in enumerate(tbl_hdr):
- tcol = ET.SubElement(
- trow, u"td",
- attrib=dict(align=u"right" if idx else u"left")
- )
- font = ET.SubElement(
- tcol, u"font", attrib=dict(size=u"2")
- )
- bold = ET.SubElement(font, u"b")
- bold.text = col
- for row_nr, row in enumerate(thread):
- trow = ET.SubElement(
- tbl, u"tr",
- attrib=dict(bgcolor=colors[u"body"][row_nr % 2])
- )
- for idx, col in enumerate(row):
- tcol = ET.SubElement(
- trow, u"td",
- attrib=dict(align=u"right" if idx else u"left")
- )
- font = ET.SubElement(
- tcol, u"font", attrib=dict(size=u"2")
- )
- if isinstance(col, float):
- font.text = f"{col:.2f}"
- else:
- font.text = str(col)
- trow = ET.SubElement(
- tbl, u"tr", attrib=dict(bgcolor=colors[u"empty"])
- )
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- thead.text = u"\t"
-
- trow = ET.SubElement(tbl, u"tr", attrib=dict(bgcolor=colors[u"empty"]))
- thead = ET.SubElement(
- trow, u"th", attrib=dict(align=u"left", colspan=u"6")
- )
- font = ET.SubElement(
- thead, u"font", attrib=dict(size=u"12px", color=u"#ffffff")
- )
- font.text = u"."
-
- return str(ET.tostring(tbl, encoding=u"unicode"))
-
- for suite in suites.values:
- html_table = str()
- for test_data in data.values:
- if test_data[u"parent"] not in suite[u"name"]:
- continue
- html_table += _generate_html_table(test_data)
- if not html_table:
- continue
- try:
- file_name = f"{table[u'output-file']}{suite[u'name']}.rst"
- with open(f"{file_name}", u'w') as html_file:
- logging.info(f" Writing file: {file_name}")
- html_file.write(u".. raw:: html\n\n\t")
- html_file.write(html_table)
- html_file.write(u"\n\t<p><br><br></p>\n")
- except KeyError:
- logging.warning(u"The output file is not defined.")
- return
- logging.info(u" Done.")
-
-
-def table_merged_details(table, input_data):
- """Generate the table(s) with algorithm: table_merged_details
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- data = input_data.filter_data(table, continue_on_error=True)
- data = input_data.merge_data(data)
-
- sort_tests = table.get(u"sort", None)
- if sort_tests:
- args = dict(
- inplace=True,
- ascending=(sort_tests == u"ascending")
- )
- data.sort_index(**args)
-
- suites = input_data.filter_data(
- table, continue_on_error=True, data_set=u"suites")
- suites = input_data.merge_data(suites)
-
- # Prepare the header of the tables
- header = list()
- for column in table[u"columns"]:
- header.append(
- u'"{0}"'.format(str(column[u"title"]).replace(u'"', u'""'))
- )
-
- for suite in suites.values:
- # Generate data
- suite_name = suite[u"name"]
- table_lst = list()
- for test in data.keys():
- if data[test][u"status"] != u"PASS" or \
- data[test][u"parent"] not in suite_name:
- continue
- row_lst = list()
- for column in table[u"columns"]:
- try:
- col_data = str(data[test][column[
- u"data"].split(u" ")[1]]).replace(u'"', u'""')
- # Do not include tests with "Test Failed" in test message
- if u"Test Failed" in col_data:
- continue
- col_data = col_data.replace(
- u"No Data", u"Not Captured "
- )
- if column[u"data"].split(u" ")[1] in (u"name", ):
- if len(col_data) > 30:
- col_data_lst = col_data.split(u"-")
- half = int(len(col_data_lst) / 2)
- col_data = f"{u'-'.join(col_data_lst[:half])}" \
- f"- |br| " \
- f"{u'-'.join(col_data_lst[half:])}"
- col_data = f" |prein| {col_data} |preout| "
- elif column[u"data"].split(u" ")[1] in (u"msg", ):
- # Temporary solution: remove NDR results from message:
- if bool(table.get(u'remove-ndr', False)):
- try:
- col_data = col_data.split(u"\n", 1)[1]
- except IndexError:
- pass
- col_data = col_data.replace(u'\n', u' |br| ').\
- replace(u'\r', u'').replace(u'"', u"'")
- col_data = f" |prein| {col_data} |preout| "
- elif column[u"data"].split(u" ")[1] in (u"conf-history", ):
- col_data = col_data.replace(u'\n', u' |br| ')
- col_data = f" |prein| {col_data[:-5]} |preout| "
- row_lst.append(f'"{col_data}"')
- except KeyError:
- row_lst.append(u'"Not captured"')
- if len(row_lst) == len(table[u"columns"]):
- table_lst.append(row_lst)
-
- # Write the data to file
- if table_lst:
- separator = u"" if table[u'output-file'].endswith(u"/") else u"_"
- file_name = f"{table[u'output-file']}{separator}{suite_name}.csv"
- logging.info(f" Writing file: {file_name}")
- with open(file_name, u"wt") as file_handler:
- file_handler.write(u",".join(header) + u"\n")
- for item in table_lst:
- file_handler.write(u",".join(item) + u"\n")
-
- logging.info(u" Done.")
-
-
-def _tpc_modify_test_name(test_name, ignore_nic=False):
- """Modify a test name by replacing its parts.
-
- :param test_name: Test name to be modified.
- :param ignore_nic: If True, NIC is removed from TC name.
- :type test_name: str
- :type ignore_nic: bool
- :returns: Modified test name.
- :rtype: str
- """
- test_name_mod = test_name.\
- replace(u"-ndrpdr", u"").\
- replace(u"1t1c", u"1c").\
- replace(u"2t1c", u"1c"). \
- replace(u"2t2c", u"2c").\
- replace(u"4t2c", u"2c"). \
- replace(u"4t4c", u"4c").\
- replace(u"8t4c", u"4c")
-
- if ignore_nic:
- return re.sub(REGEX_NIC, u"", test_name_mod)
- return test_name_mod
-
-
-def _tpc_modify_displayed_test_name(test_name):
- """Modify a test name which is displayed in a table by replacing its parts.
-
- :param test_name: Test name to be modified.
- :type test_name: str
- :returns: Modified test name.
- :rtype: str
- """
- return test_name.\
- replace(u"1t1c", u"1c").\
- replace(u"2t1c", u"1c"). \
- replace(u"2t2c", u"2c").\
- replace(u"4t2c", u"2c"). \
- replace(u"4t4c", u"4c").\
- replace(u"8t4c", u"4c")
-
-
-def _tpc_insert_data(target, src, include_tests):
- """Insert src data to the target structure.
-
- :param target: Target structure where the data is placed.
- :param src: Source data to be placed into the target structure.
- :param include_tests: Which results will be included (MRR, NDR, PDR).
- :type target: list
- :type src: dict
- :type include_tests: str
- """
- try:
- if include_tests == u"MRR":
- target[u"mean"] = src[u"result"][u"receive-rate"]
- target[u"stdev"] = src[u"result"][u"receive-stdev"]
- elif include_tests == u"PDR":
- target[u"data"].append(src[u"throughput"][u"PDR"][u"LOWER"])
- elif include_tests == u"NDR":
- target[u"data"].append(src[u"throughput"][u"NDR"][u"LOWER"])
- elif u"latency" in include_tests:
- keys = include_tests.split(u"-")
- if len(keys) == 4:
- lat = src[keys[0]][keys[1]][keys[2]][keys[3]]
- target[u"data"].append(
- float(u"nan") if lat == -1 else lat * 1e6
- )
- except (KeyError, TypeError):
- pass
-
-
-def _tpc_generate_html_table(header, data, out_file_name, legend=u"",
- footnote=u"", sort_data=True, title=u"",
- generate_rst=True):
- """Generate html table from input data with simple sorting possibility.
-
- :param header: Table header.
- :param data: Input data to be included in the table. It is a list of lists.
- Inner lists are rows in the table. All inner lists must be of the same
- length. The length of these lists must be the same as the length of the
- header.
- :param out_file_name: The name (relative or full path) where the
- generated html table is written.
- :param legend: The legend to display below the table.
- :param footnote: The footnote to display below the table (and legend).
- :param sort_data: If True the data sorting is enabled.
- :param title: The table (and file) title.
- :param generate_rst: If True, wrapping rst file is generated.
- :type header: list
- :type data: list of lists
- :type out_file_name: str
- :type legend: str
- :type footnote: str
- :type sort_data: bool
- :type title: str
- :type generate_rst: bool
- """
-
- try:
- idx = header.index(u"Test Case")
- except ValueError:
- idx = 0
- params = {
- u"align-hdr": (
- [u"left", u"right"],
- [u"left", u"left", u"right"],
- [u"left", u"left", u"left", u"right"]
- ),
- u"align-itm": (
- [u"left", u"right"],
- [u"left", u"left", u"right"],
- [u"left", u"left", u"left", u"right"]
- ),
- u"width": ([15, 9], [4, 24, 10], [4, 4, 32, 10])
- }
-
- df_data = pd.DataFrame(data, columns=header)
-
- if sort_data:
- df_sorted = [df_data.sort_values(
- by=[key, header[idx]], ascending=[True, True]
- if key != header[idx] else [False, True]) for key in header]
- df_sorted_rev = [df_data.sort_values(
- by=[key, header[idx]], ascending=[False, True]
- if key != header[idx] else [True, True]) for key in header]
- df_sorted.extend(df_sorted_rev)
- else:
- df_sorted = df_data
-
- fill_color = [[u"#d4e4f7" if idx % 2 else u"#e9f1fb"
- for idx in range(len(df_data))]]
- table_header = dict(
- values=[f"<b>{item.replace(u',', u',<br>')}</b>" for item in header],
- fill_color=u"#7eade7",
- align=params[u"align-hdr"][idx],
- font=dict(
- family=u"Courier New",
- size=12
- )
- )
-
- fig = go.Figure()
-
- if sort_data:
- for table in df_sorted:
- columns = [table.get(col) for col in header]
- fig.add_trace(
- go.Table(
- columnwidth=params[u"width"][idx],
- header=table_header,
- cells=dict(
- values=columns,
- fill_color=fill_color,
- align=params[u"align-itm"][idx],
- font=dict(
- family=u"Courier New",
- size=12
- )
- )
- )
- )
-
- buttons = list()
- menu_items = [f"<b>{itm}</b> (ascending)" for itm in header]
- menu_items.extend([f"<b>{itm}</b> (descending)" for itm in header])
- for idx, hdr in enumerate(menu_items):
- visible = [False, ] * len(menu_items)
- visible[idx] = True
- buttons.append(
- dict(
- label=hdr.replace(u" [Mpps]", u""),
- method=u"update",
- args=[{u"visible": visible}],
- )
- )
-
- fig.update_layout(
- updatemenus=[
- go.layout.Updatemenu(
- type=u"dropdown",
- direction=u"down",
- x=0.0,
- xanchor=u"left",
- y=1.002,
- yanchor=u"bottom",
- active=len(menu_items) - 1,
- buttons=list(buttons)
- )
- ],
- )
- else:
- fig.add_trace(
- go.Table(
- columnwidth=params[u"width"][idx],
- header=table_header,
- cells=dict(
- values=[df_sorted.get(col) for col in header],
- fill_color=fill_color,
- align=params[u"align-itm"][idx],
- font=dict(
- family=u"Courier New",
- size=12
- )
- )
- )
- )
-
- ploff.plot(
- fig,
- show_link=False,
- auto_open=False,
- filename=f"{out_file_name}_in.html"
- )
-
- if not generate_rst:
- return
-
- file_name = out_file_name.split(u"/")[-1]
- if u"vpp" in out_file_name:
- path = u"_tmp/src/vpp_performance_tests/comparisons/"
- else:
- path = u"_tmp/src/dpdk_performance_tests/comparisons/"
- logging.info(f" Writing the HTML file to {path}{file_name}.rst")
- with open(f"{path}{file_name}.rst", u"wt") as rst_file:
- rst_file.write(
- u"\n"
- u".. |br| raw:: html\n\n <br />\n\n\n"
- u".. |prein| raw:: html\n\n <pre>\n\n\n"
- u".. |preout| raw:: html\n\n </pre>\n\n"
- )
- if title:
- rst_file.write(f"{title}\n")
- rst_file.write(f"{u'`' * len(title)}\n\n")
- rst_file.write(
- u".. raw:: html\n\n"
- f' <iframe frameborder="0" scrolling="no" '
- f'width="1600" height="1200" '
- f'src="../..{out_file_name.replace(u"_build", u"")}_in.html">'
- f'</iframe>\n\n'
- )
-
- if legend:
- try:
- itm_lst = legend[1:-2].split(u"\n")
- rst_file.write(
- f"{itm_lst[0]}\n\n- " + u'\n- '.join(itm_lst[1:]) + u"\n\n"
- )
- except IndexError as err:
- logging.error(f"Legend cannot be written to html file\n{err}")
- if footnote:
- try:
- itm_lst = footnote[1:].split(u"\n")
- rst_file.write(
- f"{itm_lst[0]}\n\n- " + u'\n- '.join(itm_lst[1:]) + u"\n\n"
- )
- except IndexError as err:
- logging.error(f"Footnote cannot be written to html file\n{err}")
-
-
-def table_soak_vs_ndr(table, input_data):
- """Generate the table(s) with algorithm: table_soak_vs_ndr
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- data = input_data.filter_data(table, continue_on_error=True)
-
- # Prepare the header of the table
- try:
- header = [
- u"Test Case",
- f"Avg({table[u'reference'][u'title']})",
- f"Stdev({table[u'reference'][u'title']})",
- f"Avg({table[u'compare'][u'title']})",
- f"Stdev{table[u'compare'][u'title']})",
- u"Diff",
- u"Stdev(Diff)"
- ]
- header_str = u";".join(header) + u"\n"
- legend = (
- u"\nLegend:\n"
- f"Avg({table[u'reference'][u'title']}): "
- f"Mean value of {table[u'reference'][u'title']} [Mpps] computed "
- f"from a series of runs of the listed tests.\n"
- f"Stdev({table[u'reference'][u'title']}): "
- f"Standard deviation value of {table[u'reference'][u'title']} "
- f"[Mpps] computed from a series of runs of the listed tests.\n"
- f"Avg({table[u'compare'][u'title']}): "
- f"Mean value of {table[u'compare'][u'title']} [Mpps] computed from "
- f"a series of runs of the listed tests.\n"
- f"Stdev({table[u'compare'][u'title']}): "
- f"Standard deviation value of {table[u'compare'][u'title']} [Mpps] "
- f"computed from a series of runs of the listed tests.\n"
- f"Diff({table[u'reference'][u'title']},"
- f"{table[u'compare'][u'title']}): "
- f"Percentage change calculated for mean values.\n"
- u"Stdev(Diff): "
- u"Standard deviation of percentage change calculated for mean "
- u"values."
- )
- except (AttributeError, KeyError) as err:
- logging.error(f"The model is invalid, missing parameter: {repr(err)}")
- return
-
- # Create a list of available SOAK test results:
- tbl_dict = dict()
- for job, builds in table[u"compare"][u"data"].items():
- for build in builds:
- for tst_name, tst_data in data[job][str(build)].items():
- if tst_data[u"type"] == u"SOAK":
- tst_name_mod = tst_name.replace(u"-soak", u"")
- if tbl_dict.get(tst_name_mod, None) is None:
- groups = re.search(REGEX_NIC, tst_data[u"parent"])
- nic = groups.group(0) if groups else u""
- name = (
- f"{nic}-"
- f"{u'-'.join(tst_data[u'name'].split(u'-')[:-1])}"
- )
- tbl_dict[tst_name_mod] = {
- u"name": name,
- u"ref-data": list(),
- u"cmp-data": list()
- }
- try:
- tbl_dict[tst_name_mod][u"cmp-data"].append(
- tst_data[u"throughput"][u"LOWER"])
- except (KeyError, TypeError):
- pass
- tests_lst = tbl_dict.keys()
-
- # Add corresponding NDR test results:
- for job, builds in table[u"reference"][u"data"].items():
- for build in builds:
- for tst_name, tst_data in data[job][str(build)].items():
- tst_name_mod = tst_name.replace(u"-ndrpdr", u"").\
- replace(u"-mrr", u"")
- if tst_name_mod not in tests_lst:
- continue
- try:
- if tst_data[u"type"] not in (u"NDRPDR", u"MRR", u"BMRR"):
- continue
- if table[u"include-tests"] == u"MRR":
- result = (tst_data[u"result"][u"receive-rate"],
- tst_data[u"result"][u"receive-stdev"])
- elif table[u"include-tests"] == u"PDR":
- result = \
- tst_data[u"throughput"][u"PDR"][u"LOWER"]
- elif table[u"include-tests"] == u"NDR":
- result = \
- tst_data[u"throughput"][u"NDR"][u"LOWER"]
- else:
- result = None
- if result is not None:
- tbl_dict[tst_name_mod][u"ref-data"].append(
- result)
- except (KeyError, TypeError):
- continue
-
- tbl_lst = list()
- for tst_name in tbl_dict:
- item = [tbl_dict[tst_name][u"name"], ]
- data_r = tbl_dict[tst_name][u"ref-data"]
- if data_r:
- if table[u"include-tests"] == u"MRR":
- data_r_mean = data_r[0][0]
- data_r_stdev = data_r[0][1]
- else:
- data_r_mean = mean(data_r)
- data_r_stdev = stdev(data_r)
- item.append(round(data_r_mean / 1e6, 1))
- item.append(round(data_r_stdev / 1e6, 1))
- else:
- data_r_mean = None
- data_r_stdev = None
- item.extend([None, None])
- data_c = tbl_dict[tst_name][u"cmp-data"]
- if data_c:
- if table[u"include-tests"] == u"MRR":
- data_c_mean = data_c[0][0]
- data_c_stdev = data_c[0][1]
- else:
- data_c_mean = mean(data_c)
- data_c_stdev = stdev(data_c)
- item.append(round(data_c_mean / 1e6, 1))
- item.append(round(data_c_stdev / 1e6, 1))
- else:
- data_c_mean = None
- data_c_stdev = None
- item.extend([None, None])
- if data_r_mean is not None and data_c_mean is not None:
- delta, d_stdev = relative_change_stdev(
- data_r_mean, data_c_mean, data_r_stdev, data_c_stdev)
- try:
- item.append(round(delta))
- except ValueError:
- item.append(delta)
- try:
- item.append(round(d_stdev))
- except ValueError:
- item.append(d_stdev)
- tbl_lst.append(item)
-
- # Sort the table according to the relative change
- tbl_lst.sort(key=lambda rel: rel[-1], reverse=True)
-
- # Generate csv tables:
- csv_file_name = f"{table[u'output-file']}.csv"
- with open(csv_file_name, u"wt") as file_handler:
- file_handler.write(header_str)
- for test in tbl_lst:
- file_handler.write(u";".join([str(item) for item in test]) + u"\n")
-
- convert_csv_to_pretty_txt(
- csv_file_name, f"{table[u'output-file']}.txt", delimiter=u";"
- )
- with open(f"{table[u'output-file']}.txt", u'a') as file_handler:
- file_handler.write(legend)
-
- # Generate html table:
- _tpc_generate_html_table(
- header,
- tbl_lst,
- table[u'output-file'],
- legend=legend,
- title=table.get(u"title", u"")
- )
-
-
-def table_perf_trending_dash(table, input_data):
- """Generate the table(s) with algorithm:
- table_perf_trending_dash
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- data = input_data.filter_data(table, continue_on_error=True)
-
- # Prepare the header of the tables
- header = [
- u"Test Case",
- u"Trend [Mpps]",
- u"Short-Term Change [%]",
- u"Long-Term Change [%]",
- u"Regressions [#]",
- u"Progressions [#]"
- ]
- header_str = u",".join(header) + u"\n"
-
- incl_tests = table.get(u"include-tests", u"MRR")
-
- # Prepare data to the table:
- tbl_dict = dict()
- for job, builds in table[u"data"].items():
- for build in builds:
- for tst_name, tst_data in data[job][str(build)].items():
- if tst_name.lower() in table.get(u"ignore-list", list()):
- continue
- if tbl_dict.get(tst_name, None) is None:
- groups = re.search(REGEX_NIC, tst_data[u"parent"])
- if not groups:
- continue
- nic = groups.group(0)
- tbl_dict[tst_name] = {
- u"name": f"{nic}-{tst_data[u'name']}",
- u"data": OrderedDict()
- }
- try:
- if incl_tests == u"MRR":
- tbl_dict[tst_name][u"data"][str(build)] = \
- tst_data[u"result"][u"receive-rate"]
- elif incl_tests == u"NDR":
- tbl_dict[tst_name][u"data"][str(build)] = \
- tst_data[u"throughput"][u"NDR"][u"LOWER"]
- elif incl_tests == u"PDR":
- tbl_dict[tst_name][u"data"][str(build)] = \
- tst_data[u"throughput"][u"PDR"][u"LOWER"]
- except (TypeError, KeyError):
- pass # No data in output.xml for this test
-
- tbl_lst = list()
- for tst_name in tbl_dict:
- data_t = tbl_dict[tst_name][u"data"]
- if len(data_t) < 2:
- continue
-
- try:
- classification_lst, avgs, _ = classify_anomalies(data_t)
- except ValueError as err:
- logging.info(f"{err} Skipping")
- return
-
- win_size = min(len(data_t), table[u"window"])
- long_win_size = min(len(data_t), table[u"long-trend-window"])
-
- try:
- max_long_avg = max(
- [x for x in avgs[-long_win_size:-win_size]
- if not isnan(x)])
- except ValueError:
- max_long_avg = nan
- last_avg = avgs[-1]
- avg_week_ago = avgs[max(-win_size, -len(avgs))]
-
- if isnan(last_avg) or isnan(avg_week_ago) or avg_week_ago == 0.0:
- rel_change_last = nan
- else:
- rel_change_last = round(
- ((last_avg - avg_week_ago) / avg_week_ago) * 1e2, 2)
-
- if isnan(max_long_avg) or isnan(last_avg) or max_long_avg == 0.0:
- rel_change_long = nan
- else:
- rel_change_long = round(
- ((last_avg - max_long_avg) / max_long_avg) * 1e2, 2)
-
- if classification_lst:
- if isnan(rel_change_last) and isnan(rel_change_long):
- continue
- if isnan(last_avg) or isnan(rel_change_last) or \
- isnan(rel_change_long):
- continue
- tbl_lst.append(
- [tbl_dict[tst_name][u"name"],
- round(last_avg / 1e6, 2),
- rel_change_last,
- rel_change_long,
- classification_lst[-win_size+1:].count(u"regression"),
- classification_lst[-win_size+1:].count(u"progression")])
-
- tbl_lst.sort(key=lambda rel: rel[0])
- tbl_lst.sort(key=lambda rel: rel[3])
- tbl_lst.sort(key=lambda rel: rel[2])
-
- tbl_sorted = list()
- for nrr in range(table[u"window"], -1, -1):
- tbl_reg = [item for item in tbl_lst if item[4] == nrr]
- for nrp in range(table[u"window"], -1, -1):
- tbl_out = [item for item in tbl_reg if item[5] == nrp]
- tbl_sorted.extend(tbl_out)
-
- file_name = f"{table[u'output-file']}{table[u'output-file-ext']}"
-
- logging.info(f" Writing file: {file_name}")
- with open(file_name, u"wt") as file_handler:
- file_handler.write(header_str)
- for test in tbl_sorted:
- file_handler.write(u",".join([str(item) for item in test]) + u'\n')
-
- logging.info(f" Writing file: {table[u'output-file']}.txt")
- convert_csv_to_pretty_txt(file_name, f"{table[u'output-file']}.txt")
-
-
-def _generate_url(testbed, test_name):
- """Generate URL to a trending plot from the name of the test case.
-
- :param testbed: The testbed used for testing.
- :param test_name: The name of the test case.
- :type testbed: str
- :type test_name: str
- :returns: The URL to the plot with the trending data for the given test
- case.
- :rtype str
- """
-
- if u"x520" in test_name:
- nic = u"x520"
- elif u"x710" in test_name:
- nic = u"x710"
- elif u"xl710" in test_name:
- nic = u"xl710"
- elif u"xxv710" in test_name:
- nic = u"xxv710"
- elif u"vic1227" in test_name:
- nic = u"vic1227"
- elif u"vic1385" in test_name:
- nic = u"vic1385"
- elif u"x553" in test_name:
- nic = u"x553"
- elif u"cx556" in test_name or u"cx556a" in test_name:
- nic = u"cx556a"
- elif u"ena" in test_name:
- nic = u"nitro50g"
- else:
- nic = u""
-
- if u"64b" in test_name:
- frame_size = u"64b"
- elif u"78b" in test_name:
- frame_size = u"78b"
- elif u"imix" in test_name:
- frame_size = u"imix"
- elif u"9000b" in test_name:
- frame_size = u"9000b"
- elif u"1518b" in test_name:
- frame_size = u"1518b"
- elif u"114b" in test_name:
- frame_size = u"114b"
- else:
- frame_size = u""
-
- if u"1t1c" in test_name or \
- (u"-1c-" in test_name and
- testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
- cores = u"1t1c"
- elif u"2t2c" in test_name or \
- (u"-2c-" in test_name and
- testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
- cores = u"2t2c"
- elif u"4t4c" in test_name or \
- (u"-4c-" in test_name and
- testbed in (u"3n-hsw", u"3n-tsh", u"2n-dnv", u"3n-dnv", u"2n-tx2")):
- cores = u"4t4c"
- elif u"2t1c" in test_name or \
- (u"-1c-" in test_name and
- testbed in
- (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2", u"2n-aws", u"3n-aws")):
- cores = u"2t1c"
- elif u"4t2c" in test_name or \
- (u"-2c-" in test_name and
- testbed in
- (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2", u"2n-aws", u"3n-aws")):
- cores = u"4t2c"
- elif u"8t4c" in test_name or \
- (u"-4c-" in test_name and
- testbed in
- (u"2n-skx", u"3n-skx", u"2n-clx", u"2n-zn2", u"2n-aws", u"3n-aws")):
- cores = u"8t4c"
- else:
- cores = u""
-
- if u"testpmd" in test_name:
- driver = u"testpmd"
- elif u"l3fwd" in test_name:
- driver = u"l3fwd"
- elif u"avf" in test_name:
- driver = u"avf"
- elif u"af-xdp" in test_name or u"af_xdp" in test_name:
- driver = u"af_xdp"
- elif u"rdma" in test_name:
- driver = u"rdma"
- elif u"dnv" in testbed or u"tsh" in testbed:
- driver = u"ixgbe"
- elif u"ena" in test_name:
- driver = u"ena"
- else:
- driver = u"dpdk"
-
- if u"macip-iacl1s" in test_name:
- bsf = u"features-macip-iacl1"
- elif u"macip-iacl10s" in test_name:
- bsf = u"features-macip-iacl10"
- elif u"macip-iacl50s" in test_name:
- bsf = u"features-macip-iacl50"
- elif u"iacl1s" in test_name:
- bsf = u"features-iacl1"
- elif u"iacl10s" in test_name:
- bsf = u"features-iacl10"
- elif u"iacl50s" in test_name:
- bsf = u"features-iacl50"
- elif u"oacl1s" in test_name:
- bsf = u"features-oacl1"
- elif u"oacl10s" in test_name:
- bsf = u"features-oacl10"
- elif u"oacl50s" in test_name:
- bsf = u"features-oacl50"
- elif u"nat44det" in test_name:
- bsf = u"nat44det-bidir"
- elif u"nat44ed" in test_name and u"udir" in test_name:
- bsf = u"nat44ed-udir"
- elif u"-cps" in test_name and u"ethip4udp" in test_name:
- bsf = u"udp-cps"
- elif u"-cps" in test_name and u"ethip4tcp" in test_name:
- bsf = u"tcp-cps"
- elif u"-pps" in test_name and u"ethip4udp" in test_name:
- bsf = u"udp-pps"
- elif u"-pps" in test_name and u"ethip4tcp" in test_name:
- bsf = u"tcp-pps"
- elif u"-tput" in test_name and u"ethip4udp" in test_name:
- bsf = u"udp-tput"
- elif u"-tput" in test_name and u"ethip4tcp" in test_name:
- bsf = u"tcp-tput"
- elif u"udpsrcscale" in test_name:
- bsf = u"features-udp"
- elif u"iacl" in test_name:
- bsf = u"features"
- elif u"policer" in test_name:
- bsf = u"features"
- elif u"adl" in test_name:
- bsf = u"features"
- elif u"cop" in test_name:
- bsf = u"features"
- elif u"nat" in test_name:
- bsf = u"features"
- elif u"macip" in test_name:
- bsf = u"features"
- elif u"scale" in test_name:
- bsf = u"scale"
- elif u"base" in test_name:
- bsf = u"base"
- else:
- bsf = u"base"
-
- if u"114b" in test_name and u"vhost" in test_name:
- domain = u"vts"
- elif u"nat44" in test_name or u"-pps" in test_name or u"-cps" in test_name:
- domain = u"nat44"
- if u"nat44det" in test_name:
- domain += u"-det-bidir"
- else:
- domain += u"-ed"
- if u"udir" in test_name:
- domain += u"-unidir"
- elif u"-ethip4udp-" in test_name:
- domain += u"-udp"
- elif u"-ethip4tcp-" in test_name:
- domain += u"-tcp"
- if u"-cps" in test_name:
- domain += u"-cps"
- elif u"-pps" in test_name:
- domain += u"-pps"
- elif u"-tput" in test_name:
- domain += u"-tput"
- elif u"testpmd" in test_name or u"l3fwd" in test_name:
- domain = u"dpdk"
- elif u"memif" in test_name:
- domain = u"container_memif"
- elif u"srv6" in test_name:
- domain = u"srv6"
- elif u"vhost" in test_name:
- domain = u"vhost"
- if u"vppl2xc" in test_name:
- driver += u"-vpp"
- else:
- driver += u"-testpmd"
- if u"lbvpplacp" in test_name:
- bsf += u"-link-bonding"
- elif u"ch" in test_name and u"vh" in test_name and u"vm" in test_name:
- domain = u"nf_service_density_vnfc"
- elif u"ch" in test_name and u"mif" in test_name and u"dcr" in test_name:
- domain = u"nf_service_density_cnfc"
- elif u"pl" in test_name and u"mif" in test_name and u"dcr" in test_name:
- domain = u"nf_service_density_cnfp"
- elif u"ipsec" in test_name:
- domain = u"ipsec"
- if u"sw" in test_name:
- bsf += u"-sw"
- elif u"hw" in test_name:
- bsf += u"-hw"
- elif u"ethip4vxlan" in test_name:
- domain = u"ip4_tunnels"
- elif u"ethip4udpgeneve" in test_name:
- domain = u"ip4_tunnels"
- elif u"ip4base" in test_name or u"ip4scale" in test_name:
- domain = u"ip4"
- elif u"ip6base" in test_name or u"ip6scale" in test_name:
- domain = u"ip6"
- elif u"l2xcbase" in test_name or \
- u"l2xcscale" in test_name or \
- u"l2bdbasemaclrn" in test_name or \
- u"l2bdscale" in test_name or \
- u"l2patch" in test_name:
- domain = u"l2"
- else:
- domain = u""
-
- file_name = u"-".join((domain, testbed, nic)) + u".html#"
- anchor_name = u"-".join((frame_size, cores, bsf, driver))
-
- return file_name + anchor_name
-
-
-def table_perf_trending_dash_html(table, input_data):
- """Generate the table(s) with algorithm:
- table_perf_trending_dash_html specified in the specification
- file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: dict
- :type input_data: InputData
- """
-
- _ = input_data
-
- if not table.get(u"testbed", None):
- logging.error(
- f"The testbed is not defined for the table "
- f"{table.get(u'title', u'')}. Skipping."
- )
- return
-
- test_type = table.get(u"test-type", u"MRR")
- if test_type not in (u"MRR", u"NDR", u"PDR"):
- logging.error(
- f"Test type {table.get(u'test-type', u'MRR')} is not defined. "
- f"Skipping."
- )
- return
-
- if test_type in (u"NDR", u"PDR"):
- lnk_dir = u"../ndrpdr_trending/"
- lnk_sufix = f"-{test_type.lower()}"
- else:
- lnk_dir = u"../trending/"
- lnk_sufix = u""
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- try:
- with open(table[u"input-file"], u'rt') as csv_file:
- csv_lst = list(csv.reader(csv_file, delimiter=u',', quotechar=u'"'))
- except FileNotFoundError as err:
- logging.warning(f"{err}")
- return
- except KeyError:
- logging.warning(u"The input file is not defined.")
- return
- except csv.Error as err:
- logging.warning(
- f"Not possible to process the file {table[u'input-file']}.\n"
- f"{repr(err)}"
- )
- return
-
- # Table:
- dashboard = ET.Element(u"table", attrib=dict(width=u"100%", border=u'0'))
-
- # Table header:
- trow = ET.SubElement(dashboard, u"tr", attrib=dict(bgcolor=u"#7eade7"))
- for idx, item in enumerate(csv_lst[0]):
- alignment = u"left" if idx == 0 else u"center"
- thead = ET.SubElement(trow, u"th", attrib=dict(align=alignment))
- thead.text = item
-
- # Rows:
- colors = {
- u"regression": (
- u"#ffcccc",
- u"#ff9999"
- ),
- u"progression": (
- u"#c6ecc6",
- u"#9fdf9f"
- ),
- u"normal": (
- u"#e9f1fb",
- u"#d4e4f7"
- )
- }
- for r_idx, row in enumerate(csv_lst[1:]):
- if int(row[4]):
- color = u"regression"
- elif int(row[5]):
- color = u"progression"
- else:
- color = u"normal"
- trow = ET.SubElement(
- dashboard, u"tr", attrib=dict(bgcolor=colors[color][r_idx % 2])
- )
-
- # Columns:
- for c_idx, item in enumerate(row):
- tdata = ET.SubElement(
- trow,
- u"td",
- attrib=dict(align=u"left" if c_idx == 0 else u"center")
- )
- # Name:
- if c_idx == 0 and table.get(u"add-links", True):
- ref = ET.SubElement(
- tdata,
- u"a",
- attrib=dict(
- href=f"{lnk_dir}"
- f"{_generate_url(table.get(u'testbed', ''), item)}"
- f"{lnk_sufix}"
- )
- )
- ref.text = item
- else:
- tdata.text = item
- try:
- with open(table[u"output-file"], u'w') as html_file:
- logging.info(f" Writing file: {table[u'output-file']}")
- html_file.write(u".. raw:: html\n\n\t")
- html_file.write(str(ET.tostring(dashboard, encoding=u"unicode")))
- html_file.write(u"\n\t<p><br><br></p>\n")
- except KeyError:
- logging.warning(u"The output file is not defined.")
- return
-
-
-def table_last_failed_tests(table, input_data):
- """Generate the table(s) with algorithm: table_last_failed_tests
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
-
- data = input_data.filter_data(table, continue_on_error=True)
-
- if data is None or data.empty:
- logging.warning(
- f" No data for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- return
-
- tbl_list = list()
- for job, builds in table[u"data"].items():
- for build in builds:
- build = str(build)
- try:
- version = input_data.metadata(job, build).get(u"version", u"")
- duration = \
- input_data.metadata(job, build).get(u"elapsedtime", u"")
- except KeyError:
- logging.error(f"Data for {job}: {build} is not present.")
- return
- tbl_list.append(build)
- tbl_list.append(version)
- failed_tests = list()
- passed = 0
- failed = 0
- for tst_data in data[job][build].values:
- if tst_data[u"status"] != u"FAIL":
- passed += 1
- continue
- failed += 1
- groups = re.search(REGEX_NIC, tst_data[u"parent"])
- if not groups:
- continue
- nic = groups.group(0)
- msg = tst_data[u'msg'].replace(u"\n", u"")
- msg = re.sub(r'(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})',
- 'xxx.xxx.xxx.xxx', msg)
- msg = msg.split(u'Also teardown failed')[0]
- failed_tests.append(f"{nic}-{tst_data[u'name']}###{msg}")
- tbl_list.append(passed)
- tbl_list.append(failed)
- tbl_list.append(duration)
- tbl_list.extend(failed_tests)
-
- file_name = f"{table[u'output-file']}{table[u'output-file-ext']}"
- logging.info(f" Writing file: {file_name}")
- with open(file_name, u"wt") as file_handler:
- for test in tbl_list:
- file_handler.write(f"{test}\n")
-
-
-def table_failed_tests(table, input_data):
- """Generate the table(s) with algorithm: table_failed_tests
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
- data = input_data.filter_data(table, continue_on_error=True)
-
- test_type = u"MRR"
- if u"NDRPDR" in table.get(u"filter", list()):
- test_type = u"NDRPDR"
-
- # Prepare the header of the tables
- header = [
- u"Test Case",
- u"Failures [#]",
- u"Last Failure [Time]",
- u"Last Failure [VPP-Build-Id]",
- u"Last Failure [CSIT-Job-Build-Id]"
- ]
-
- # Generate the data for the table according to the model in the table
- # specification
-
- now = dt.utcnow()
- timeperiod = timedelta(int(table.get(u"window", 7)))
-
- tbl_dict = dict()
- for job, builds in table[u"data"].items():
- for build in builds:
- build = str(build)
- for tst_name, tst_data in data[job][build].items():
- if tst_name.lower() in table.get(u"ignore-list", list()):
- continue
- if tbl_dict.get(tst_name, None) is None:
- groups = re.search(REGEX_NIC, tst_data[u"parent"])
- if not groups:
- continue
- nic = groups.group(0)
- tbl_dict[tst_name] = {
- u"name": f"{nic}-{tst_data[u'name']}",
- u"data": OrderedDict()
- }
- try:
- generated = input_data.metadata(job, build).\
- get(u"generated", u"")
- if not generated:
- continue
- then = dt.strptime(generated, u"%Y%m%d %H:%M")
- if (now - then) <= timeperiod:
- tbl_dict[tst_name][u"data"][build] = (
- tst_data[u"status"],
- generated,
- input_data.metadata(job, build).get(u"version",
- u""),
- build
- )
- except (TypeError, KeyError) as err:
- logging.warning(f"tst_name: {tst_name} - err: {repr(err)}")
-
- max_fails = 0
- tbl_lst = list()
- for tst_data in tbl_dict.values():
- fails_nr = 0
- fails_last_date = u""
- fails_last_vpp = u""
- fails_last_csit = u""
- for val in tst_data[u"data"].values():
- if val[0] == u"FAIL":
- fails_nr += 1
- fails_last_date = val[1]
- fails_last_vpp = val[2]
- fails_last_csit = val[3]
- if fails_nr:
- max_fails = fails_nr if fails_nr > max_fails else max_fails
- tbl_lst.append([
- tst_data[u"name"],
- fails_nr,
- fails_last_date,
- fails_last_vpp,
- f"{u'mrr-daily' if test_type == u'MRR' else u'ndrpdr-weekly'}"
- f"-build-{fails_last_csit}"
- ])
-
- tbl_lst.sort(key=lambda rel: rel[2], reverse=True)
- tbl_sorted = list()
- for nrf in range(max_fails, -1, -1):
- tbl_fails = [item for item in tbl_lst if item[1] == nrf]
- tbl_sorted.extend(tbl_fails)
-
- file_name = f"{table[u'output-file']}{table[u'output-file-ext']}"
- logging.info(f" Writing file: {file_name}")
- with open(file_name, u"wt") as file_handler:
- file_handler.write(u",".join(header) + u"\n")
- for test in tbl_sorted:
- file_handler.write(u",".join([str(item) for item in test]) + u'\n')
-
- logging.info(f" Writing file: {table[u'output-file']}.txt")
- convert_csv_to_pretty_txt(file_name, f"{table[u'output-file']}.txt")
-
-
-def table_failed_tests_html(table, input_data):
- """Generate the table(s) with algorithm: table_failed_tests_html
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
-
- _ = input_data
-
- if not table.get(u"testbed", None):
- logging.error(
- f"The testbed is not defined for the table "
- f"{table.get(u'title', u'')}. Skipping."
- )
- return
-
- test_type = table.get(u"test-type", u"MRR")
- if test_type not in (u"MRR", u"NDR", u"PDR", u"NDRPDR"):
- logging.error(
- f"Test type {table.get(u'test-type', u'MRR')} is not defined. "
- f"Skipping."
- )
- return
-
- if test_type in (u"NDRPDR", u"NDR", u"PDR"):
- lnk_dir = u"../ndrpdr_trending/"
- lnk_sufix = u"-pdr"
- else:
- lnk_dir = u"../trending/"
- lnk_sufix = u""
-
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- try:
- with open(table[u"input-file"], u'rt') as csv_file:
- csv_lst = list(csv.reader(csv_file, delimiter=u',', quotechar=u'"'))
- except KeyError:
- logging.warning(u"The input file is not defined.")
- return
- except csv.Error as err:
- logging.warning(
- f"Not possible to process the file {table[u'input-file']}.\n"
- f"{repr(err)}"
- )
- return
-
- # Table:
- failed_tests = ET.Element(u"table", attrib=dict(width=u"100%", border=u'0'))
-
- # Table header:
- trow = ET.SubElement(failed_tests, u"tr", attrib=dict(bgcolor=u"#7eade7"))
- for idx, item in enumerate(csv_lst[0]):
- alignment = u"left" if idx == 0 else u"center"
- thead = ET.SubElement(trow, u"th", attrib=dict(align=alignment))
- thead.text = item
-
- # Rows:
- colors = (u"#e9f1fb", u"#d4e4f7")
- for r_idx, row in enumerate(csv_lst[1:]):
- background = colors[r_idx % 2]
- trow = ET.SubElement(
- failed_tests, u"tr", attrib=dict(bgcolor=background)
- )
-
- # Columns:
- for c_idx, item in enumerate(row):
- tdata = ET.SubElement(
- trow,
- u"td",
- attrib=dict(align=u"left" if c_idx == 0 else u"center")
- )
- # Name:
- if c_idx == 0 and table.get(u"add-links", True):
- ref = ET.SubElement(
- tdata,
- u"a",
- attrib=dict(
- href=f"{lnk_dir}"
- f"{_generate_url(table.get(u'testbed', ''), item)}"
- f"{lnk_sufix}"
- )
- )
- ref.text = item
- else:
- tdata.text = item
- try:
- with open(table[u"output-file"], u'w') as html_file:
- logging.info(f" Writing file: {table[u'output-file']}")
- html_file.write(u".. raw:: html\n\n\t")
- html_file.write(str(ET.tostring(failed_tests, encoding=u"unicode")))
- html_file.write(u"\n\t<p><br><br></p>\n")
- except KeyError:
- logging.warning(u"The output file is not defined.")
- return
-
-
-def table_comparison(table, input_data):
- """Generate the table(s) with algorithm: table_comparison
- specified in the specification file.
-
- :param table: Table to generate.
- :param input_data: Data to process.
- :type table: pandas.Series
- :type input_data: InputData
- """
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
-
- columns = table.get(u"columns", None)
- if not columns:
- logging.error(
- f"No columns specified for {table.get(u'title', u'')}. Skipping."
- )
- return
-
- cols = list()
- for idx, col in enumerate(columns):
- if col.get(u"data-set", None) is None:
- logging.warning(f"No data for column {col.get(u'title', u'')}")
- continue
- tag = col.get(u"tag", None)
- data = input_data.filter_data(
- table,
- params=[
- u"throughput",
- u"result",
- u"latency",
- u"name",
- u"parent",
- u"tags"
- ],
- data=col[u"data-set"],
- continue_on_error=True
- )
- col_data = {
- u"title": col.get(u"title", f"Column{idx}"),
- u"data": dict()
- }
- for builds in data.values:
- for build in builds:
- for tst_name, tst_data in build.items():
- if tag and tag not in tst_data[u"tags"]:
- continue
- tst_name_mod = \
- _tpc_modify_test_name(tst_name, ignore_nic=True).\
- replace(u"2n1l-", u"")
- if col_data[u"data"].get(tst_name_mod, None) is None:
- name = tst_data[u'name'].rsplit(u'-', 1)[0]
- if u"across testbeds" in table[u"title"].lower() or \
- u"across topologies" in table[u"title"].lower():
- name = _tpc_modify_displayed_test_name(name)
- col_data[u"data"][tst_name_mod] = {
- u"name": name,
- u"replace": True,
- u"data": list(),
- u"mean": None,
- u"stdev": None
- }
- _tpc_insert_data(
- target=col_data[u"data"][tst_name_mod],
- src=tst_data,
- include_tests=table[u"include-tests"]
- )
-
- replacement = col.get(u"data-replacement", None)
- if replacement:
- rpl_data = input_data.filter_data(
- table,
- params=[
- u"throughput",
- u"result",
- u"latency",
- u"name",
- u"parent",
- u"tags"
- ],
- data=replacement,
- continue_on_error=True
- )
- for builds in rpl_data.values:
- for build in builds:
- for tst_name, tst_data in build.items():
- if tag and tag not in tst_data[u"tags"]:
- continue
- tst_name_mod = \
- _tpc_modify_test_name(tst_name, ignore_nic=True).\
- replace(u"2n1l-", u"")
- if col_data[u"data"].get(tst_name_mod, None) is None:
- name = tst_data[u'name'].rsplit(u'-', 1)[0]
- if u"across testbeds" in table[u"title"].lower() \
- or u"across topologies" in \
- table[u"title"].lower():
- name = _tpc_modify_displayed_test_name(name)
- col_data[u"data"][tst_name_mod] = {
- u"name": name,
- u"replace": False,
- u"data": list(),
- u"mean": None,
- u"stdev": None
- }
- if col_data[u"data"][tst_name_mod][u"replace"]:
- col_data[u"data"][tst_name_mod][u"replace"] = False
- col_data[u"data"][tst_name_mod][u"data"] = list()
- _tpc_insert_data(
- target=col_data[u"data"][tst_name_mod],
- src=tst_data,
- include_tests=table[u"include-tests"]
- )
-
- if table[u"include-tests"] in (u"NDR", u"PDR") or \
- u"latency" in table[u"include-tests"]:
- for tst_name, tst_data in col_data[u"data"].items():
- if tst_data[u"data"]:
- tst_data[u"mean"] = mean(tst_data[u"data"])
- tst_data[u"stdev"] = stdev(tst_data[u"data"])
-
- cols.append(col_data)
-
- tbl_dict = dict()
- for col in cols:
- for tst_name, tst_data in col[u"data"].items():
- if tbl_dict.get(tst_name, None) is None:
- tbl_dict[tst_name] = {
- "name": tst_data[u"name"]
- }
- tbl_dict[tst_name][col[u"title"]] = {
- u"mean": tst_data[u"mean"],
- u"stdev": tst_data[u"stdev"]
- }
-
- if not tbl_dict:
- logging.warning(f"No data for table {table.get(u'title', u'')}!")
- return
-
- tbl_lst = list()
- for tst_data in tbl_dict.values():
- row = [tst_data[u"name"], ]
- for col in cols:
- row.append(tst_data.get(col[u"title"], None))
- tbl_lst.append(row)
-
- comparisons = table.get(u"comparisons", None)
- rcas = list()
- if comparisons and isinstance(comparisons, list):
- for idx, comp in enumerate(comparisons):
- try:
- col_ref = int(comp[u"reference"])
- col_cmp = int(comp[u"compare"])
- except KeyError:
- logging.warning(u"Comparison: No references defined! Skipping.")
- comparisons.pop(idx)
- continue
- if not (0 < col_ref <= len(cols) and 0 < col_cmp <= len(cols) or
- col_ref == col_cmp):
- logging.warning(f"Wrong values of reference={col_ref} "
- f"and/or compare={col_cmp}. Skipping.")
- comparisons.pop(idx)
- continue
- rca_file_name = comp.get(u"rca-file", None)
- if rca_file_name:
- try:
- with open(rca_file_name, u"r") as file_handler:
- rcas.append(
- {
- u"title": f"RCA{idx + 1}",
- u"data": load(file_handler, Loader=FullLoader)
- }
- )
- except (YAMLError, IOError) as err:
- logging.warning(
- f"The RCA file {rca_file_name} does not exist or "
- f"it is corrupted!"
- )
- logging.debug(repr(err))
- rcas.append(None)
- else:
- rcas.append(None)
- else:
- comparisons = None
-
- tbl_cmp_lst = list()
- if comparisons:
- for row in tbl_lst:
- new_row = deepcopy(row)
- for comp in comparisons:
- ref_itm = row[int(comp[u"reference"])]
- if ref_itm is None and \
- comp.get(u"reference-alt", None) is not None:
- ref_itm = row[int(comp[u"reference-alt"])]
- cmp_itm = row[int(comp[u"compare"])]
- if ref_itm is not None and cmp_itm is not None and \
- ref_itm[u"mean"] is not None and \
- cmp_itm[u"mean"] is not None and \
- ref_itm[u"stdev"] is not None and \
- cmp_itm[u"stdev"] is not None:
- try:
- delta, d_stdev = relative_change_stdev(
- ref_itm[u"mean"], cmp_itm[u"mean"],
- ref_itm[u"stdev"], cmp_itm[u"stdev"]
- )
- except ZeroDivisionError:
- break
- if delta is None or math.isnan(delta):
- break
- new_row.append({
- u"mean": delta * 1e6,
- u"stdev": d_stdev * 1e6
- })
- else:
- break
- else:
- tbl_cmp_lst.append(new_row)
-
- try:
- tbl_cmp_lst.sort(key=lambda rel: rel[0], reverse=False)
- tbl_cmp_lst.sort(key=lambda rel: rel[-1][u'mean'], reverse=True)
- except TypeError as err:
- logging.warning(f"Empty data element in table\n{tbl_cmp_lst}\n{err}")
-
- tbl_for_csv = list()
- for line in tbl_cmp_lst:
- row = [line[0], ]
- for idx, itm in enumerate(line[1:]):
- if itm is None or not isinstance(itm, dict) or\
- itm.get(u'mean', None) is None or \
- itm.get(u'stdev', None) is None:
- row.append(u"NT")
- row.append(u"NT")
- else:
- row.append(round(float(itm[u'mean']) / 1e6, 3))
- row.append(round(float(itm[u'stdev']) / 1e6, 3))
- for rca in rcas:
- if rca is None:
- continue
- rca_nr = rca[u"data"].get(row[0], u"-")
- row.append(f"[{rca_nr}]" if rca_nr != u"-" else u"-")
- tbl_for_csv.append(row)
-
- header_csv = [u"Test Case", ]
- for col in cols:
- header_csv.append(f"Avg({col[u'title']})")
- header_csv.append(f"Stdev({col[u'title']})")
- for comp in comparisons:
- header_csv.append(
- f"Avg({comp.get(u'title', u'')})"
- )
- header_csv.append(
- f"Stdev({comp.get(u'title', u'')})"
- )
- for rca in rcas:
- if rca:
- header_csv.append(rca[u"title"])
-
- legend_lst = table.get(u"legend", None)
- if legend_lst is None:
- legend = u""
- else:
- legend = u"\n" + u"\n".join(legend_lst) + u"\n"
-
- footnote = u""
- if rcas and any(rcas):
- footnote += u"\nRoot Cause Analysis:\n"
- for rca in rcas:
- if rca:
- footnote += f"{rca[u'data'].get(u'footnote', u'')}\n"
-
- csv_file_name = f"{table[u'output-file']}-csv.csv"
- with open(csv_file_name, u"wt", encoding='utf-8') as file_handler:
- file_handler.write(
- u",".join([f'"{itm}"' for itm in header_csv]) + u"\n"
- )
- for test in tbl_for_csv:
- file_handler.write(
- u",".join([f'"{item}"' for item in test]) + u"\n"
- )
- if legend_lst:
- for item in legend_lst:
- file_handler.write(f'"{item}"\n')
- if footnote:
- for itm in footnote.split(u"\n"):
- file_handler.write(f'"{itm}"\n')
-
- tbl_tmp = list()
- max_lens = [0, ] * len(tbl_cmp_lst[0])
- for line in tbl_cmp_lst:
- row = [line[0], ]
- for idx, itm in enumerate(line[1:]):
- if itm is None or not isinstance(itm, dict) or \
- itm.get(u'mean', None) is None or \
- itm.get(u'stdev', None) is None:
- new_itm = u"NT"
- else:
- if idx < len(cols):
- new_itm = (
- f"{round(float(itm[u'mean']) / 1e6, 1)} "
- f"\u00B1{round(float(itm[u'stdev']) / 1e6, 1)}".
- replace(u"nan", u"NaN")
- )
- else:
- new_itm = (
- f"{round(float(itm[u'mean']) / 1e6, 1):+} "
- f"\u00B1{round(float(itm[u'stdev']) / 1e6, 1)}".
- replace(u"nan", u"NaN")
- )
- if len(new_itm.rsplit(u" ", 1)[-1]) > max_lens[idx]:
- max_lens[idx] = len(new_itm.rsplit(u" ", 1)[-1])
- row.append(new_itm)
-
- tbl_tmp.append(row)
-
- header = [u"Test Case", ]
- header.extend([col[u"title"] for col in cols])
- header.extend([comp.get(u"title", u"") for comp in comparisons])
-
- tbl_final = list()
- for line in tbl_tmp:
- row = [line[0], ]
- for idx, itm in enumerate(line[1:]):
- if itm in (u"NT", u"NaN"):
- row.append(itm)
- continue
- itm_lst = itm.rsplit(u"\u00B1", 1)
- itm_lst[-1] = \
- f"{u' ' * (max_lens[idx] - len(itm_lst[-1]))}{itm_lst[-1]}"
- itm_str = u"\u00B1".join(itm_lst)
-
- if idx >= len(cols):
- # Diffs
- rca = rcas[idx - len(cols)]
- if rca:
- # Add rcas to diffs
- rca_nr = rca[u"data"].get(row[0], None)
- if rca_nr:
- hdr_len = len(header[idx + 1]) - 1
- if hdr_len < 19:
- hdr_len = 19
- rca_nr = f"[{rca_nr}]"
- itm_str = (
- f"{u' ' * (4 - len(rca_nr))}{rca_nr}"
- f"{u' ' * (hdr_len - 4 - len(itm_str))}"
- f"{itm_str}"
- )
- row.append(itm_str)
- tbl_final.append(row)
-
- # Generate csv tables:
- csv_file_name = f"{table[u'output-file']}.csv"
- logging.info(f" Writing the file {csv_file_name}")
- with open(csv_file_name, u"wt", encoding='utf-8') as file_handler:
- file_handler.write(u";".join(header) + u"\n")
- for test in tbl_final:
- file_handler.write(u";".join([str(item) for item in test]) + u"\n")
-
- # Generate txt table:
- txt_file_name = f"{table[u'output-file']}.txt"
- logging.info(f" Writing the file {txt_file_name}")
- convert_csv_to_pretty_txt(csv_file_name, txt_file_name, delimiter=u";")
-
- with open(txt_file_name, u'a', encoding='utf-8') as file_handler:
- file_handler.write(legend)
- file_handler.write(footnote)
-
- # Generate html table:
- _tpc_generate_html_table(
- header,
- tbl_final,
- table[u'output-file'],
- legend=legend,
- footnote=footnote,
- sort_data=False,
- title=table.get(u"title", u"")
- )
-
-
-def table_weekly_comparison(table, in_data):
- """Generate the table(s) with algorithm: table_weekly_comparison
- specified in the specification file.
-
- :param table: Table to generate.
- :param in_data: Data to process.
- :type table: pandas.Series
- :type in_data: InputData
- """
- logging.info(f" Generating the table {table.get(u'title', u'')} ...")
-
- # Transform the data
- logging.info(
- f" Creating the data set for the {table.get(u'type', u'')} "
- f"{table.get(u'title', u'')}."
- )
-
- incl_tests = table.get(u"include-tests", None)
- if incl_tests not in (u"NDR", u"PDR"):
- logging.error(f"Wrong tests to include specified ({incl_tests}).")
- return
-
- nr_cols = table.get(u"nr-of-data-columns", None)
- if not nr_cols or nr_cols < 2:
- logging.error(
- f"No columns specified for {table.get(u'title', u'')}. Skipping."
- )
- return
-
- data = in_data.filter_data(
- table,
- params=[u"throughput", u"result", u"name", u"parent", u"tags"],
- continue_on_error=True
- )
-
- header = [
- [u"VPP Version", ],
- [u"Start Timestamp", ],
- [u"CSIT Build", ],
- [u"CSIT Testbed", ]
- ]
- tbl_dict = dict()
- idx = 0
- tb_tbl = table.get(u"testbeds", None)
- for job_name, job_data in data.items():
- for build_nr, build in job_data.items():
- if idx >= nr_cols:
- break
- if build.empty:
- continue
-
- tb_ip = in_data.metadata(job_name, build_nr).get(u"testbed", u"")
- if tb_ip and tb_tbl:
- testbed = tb_tbl.get(tb_ip, u"")
- else:
- testbed = u""
- header[2].insert(1, build_nr)
- header[3].insert(1, testbed)
- header[1].insert(
- 1, in_data.metadata(job_name, build_nr).get(u"generated", u"")
- )
- header[0].insert(
- 1, in_data.metadata(job_name, build_nr).get(u"version", u"")
- )
-
- for tst_name, tst_data in build.items():
- tst_name_mod = \
- _tpc_modify_test_name(tst_name).replace(u"2n1l-", u"")
- if not tbl_dict.get(tst_name_mod, None):
- tbl_dict[tst_name_mod] = dict(
- name=tst_data[u'name'].rsplit(u'-', 1)[0],
- )
- try:
- tbl_dict[tst_name_mod][-idx - 1] = \
- tst_data[u"throughput"][incl_tests][u"LOWER"]
- except (TypeError, IndexError, KeyError, ValueError):
- pass
- idx += 1
-
- if idx < nr_cols:
- logging.error(u"Not enough data to build the table! Skipping")
- return
-
- cmp_dict = dict()
- for idx, cmp in enumerate(table.get(u"comparisons", list())):
- idx_ref = cmp.get(u"reference", None)
- idx_cmp = cmp.get(u"compare", None)
- if idx_ref is None or idx_cmp is None:
- continue
- header[0].append(
- f"Diff({header[0][idx_ref - idx].split(u'~')[-1]} vs "
- f"{header[0][idx_cmp - idx].split(u'~')[-1]})"
- )
- header[1].append(u"")
- header[2].append(u"")
- header[3].append(u"")
- for tst_name, tst_data in tbl_dict.items():
- if not cmp_dict.get(tst_name, None):
- cmp_dict[tst_name] = list()
- ref_data = tst_data.get(idx_ref, None)
- cmp_data = tst_data.get(idx_cmp, None)
- if ref_data is None or cmp_data is None:
- cmp_dict[tst_name].append(float(u'nan'))
- else:
- cmp_dict[tst_name].append(
- relative_change(ref_data, cmp_data)
- )
-
- tbl_lst_none = list()
- tbl_lst = list()
- for tst_name, tst_data in tbl_dict.items():
- itm_lst = [tst_data[u"name"], ]
- for idx in range(nr_cols):
- item = tst_data.get(-idx - 1, None)
- if item is None:
- itm_lst.insert(1, None)
- else:
- itm_lst.insert(1, round(item / 1e6, 1))
- itm_lst.extend(
- [
- None if itm is None else round(itm, 1)
- for itm in cmp_dict[tst_name]
- ]
- )
- if str(itm_lst[-1]) == u"nan" or itm_lst[-1] is None:
- tbl_lst_none.append(itm_lst)
- else:
- tbl_lst.append(itm_lst)
-
- tbl_lst_none.sort(key=lambda rel: rel[0], reverse=False)
- tbl_lst.sort(key=lambda rel: rel[0], reverse=False)
- tbl_lst.sort(key=lambda rel: rel[-1], reverse=False)
- tbl_lst.extend(tbl_lst_none)
-
- # Generate csv table:
- csv_file_name = f"{table[u'output-file']}.csv"
- logging.info(f" Writing the file {csv_file_name}")
- with open(csv_file_name, u"wt", encoding='utf-8') as file_handler:
- for hdr in header:
- file_handler.write(u",".join(hdr) + u"\n")
- for test in tbl_lst:
- file_handler.write(u",".join(
- [
- str(item).replace(u"None", u"-").replace(u"nan", u"-").
- replace(u"null", u"-") for item in test
- ]
- ) + u"\n")
-
- txt_file_name = f"{table[u'output-file']}.txt"
- logging.info(f" Writing the file {txt_file_name}")
- convert_csv_to_pretty_txt(csv_file_name, txt_file_name, delimiter=u",")
-
- # Reorganize header in txt table
- txt_table = list()
- with open(txt_file_name, u"rt", encoding='utf-8') as file_handler:
- for line in list(file_handler):
- txt_table.append(line)
- try:
- txt_table.insert(5, txt_table.pop(2))
- with open(txt_file_name, u"wt", encoding='utf-8') as file_handler:
- file_handler.writelines(txt_table)
- except IndexError:
- pass
-
- # Generate html table:
- hdr_html = [
- u"<br>".join(row) for row in zip(*header)
- ]
- _tpc_generate_html_table(
- hdr_html,
- tbl_lst,
- table[u'output-file'],
- sort_data=True,
- title=table.get(u"title", u""),
- generate_rst=False
- )
diff --git a/resources/tools/presentation/input_data_files.py b/resources/tools/presentation/input_data_files.py
deleted file mode 100644
index 5bd6af42d6..0000000000
--- a/resources/tools/presentation/input_data_files.py
+++ /dev/null
@@ -1,312 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Inputs
-Download all data.
-"""
-
-import re
-import logging
-import gzip
-
-from os import rename, mkdir
-from os.path import join
-from http.client import responses, HTTPException
-from zipfile import ZipFile, is_zipfile, BadZipfile
-
-import requests
-
-from requests.adapters import HTTPAdapter, Retry
-from requests.exceptions import RequestException
-from requests import codes
-
-from urllib3.exceptions import HTTPError
-
-
-# Chunk size used for file download
-CHUNK_SIZE = 512
-
-# Separator used in file names
-SEPARATOR = u"__"
-
-REGEX_RELEASE = re.compile(r'(\D*)(\d{4}|master)(\D*)')
-
-
-def _download_file(url, file_name, arch=False, verify=True, repeat=1):
- """Download a file with input data.
-
- :param url: URL to the file to download.
- :param file_name: Name of file to download.
- :param arch: If True, also .gz file is downloaded.
- :param verify: If true, verify the certificate.
- :param repeat: The number of attempts to download the file.
- :type url: str
- :type file_name: str
- :type arch: bool
- :type verify: bool
- :type repeat: int
- :returns: True if the download was successful, otherwise False.
- :rtype: bool
- """
-
- def requests_retry_session(retries=3,
- backoff_factor=0.3,
- status_forcelist=(500, 502, 504)):
- """
-
- :param retries: Total number of retries to allow.
- :param backoff_factor: A backoff factor to apply between attempts after
- the second try.
- :param status_forcelist: A set of integer HTTP status codes that are
- forced to retry.
- :type retries: int
- :type backoff_factor: float
- :type status_forcelist: iterable
- :returns: Session object.
- :rtype: requests.Session
- """
-
- retry = Retry(
- total=retries,
- read=retries,
- connect=retries,
- backoff_factor=backoff_factor,
- status_forcelist=status_forcelist,
- )
- adapter = HTTPAdapter(max_retries=retry)
- session = requests.Session()
- session.mount(u"http://", adapter)
- session.mount(u"https://", adapter)
- return session
-
- success = False
- while repeat:
- repeat -= 1
- session = None
- try:
- logging.info(f" Connecting to {url} ...")
- session = requests_retry_session()
- response = session.get(url, stream=True, verify=verify)
- code = response.status_code
- logging.info(f" {code}: {responses[code]}")
-
- if code != codes[u"OK"]:
- if session:
- session.close()
- return False, file_name
-
- dst_file_name = file_name.replace(u".gz", u"")
- logging.info(f" Downloading the file {url} to {dst_file_name}")
- with open(dst_file_name, u"wb") as file_handle:
- for chunk in response.iter_content(chunk_size=CHUNK_SIZE):
- if chunk:
- file_handle.write(chunk)
-
- if arch and u".gz" in file_name:
- if session:
- session.close()
- logging.info(f" Downloading the file {url} to {file_name}")
- session = requests_retry_session()
- response = session.get(url, stream=True, verify=verify)
- if response.status_code == codes[u"OK"]:
- with open(file_name, u"wb") as file_handle:
- file_handle.write(response.raw.read())
- else:
- logging.error(
- f"Not possible to download the file "
- f"{url} to {file_name}"
- )
-
- success = True
- repeat = 0
- except (HTTPException, HTTPError) as err:
- logging.error(f"Connection broken:\n{repr(err)}")
- except RequestException as err:
- logging.error(f"HTTP Request exception:\n{repr(err)}")
- except (IOError, ValueError, KeyError) as err:
- logging.error(f"Download failed.\n{repr(err)}")
- finally:
- if session:
- session.close()
- return success, file_name
-
-
-def _unzip_file(spec, build, pid):
- """Unzip downloaded source file.
-
- :param spec: Specification read form the specification file.
- :param build: Information about the build.
- :type spec: Specification
- :type build: dict
- :returns: True if the download was successful, otherwise False.
- :rtype: bool
- """
-
- file_name = build[u"file-name"]
- data_file = "robot-plugin/output.xml"
- directory = spec.environment[u"paths"][u"DIR[WORKING,DATA]"]
- tmp_dir = join(directory, str(pid))
- try:
- mkdir(tmp_dir)
- except OSError:
- pass
- new_name = \
- f"{file_name.rsplit(u'.')[-2]}{SEPARATOR}{data_file.split(u'/')[-1]}"
-
- logging.info(f" Unzipping: {data_file} from {file_name}.")
- try:
- with ZipFile(file_name, u'r') as zip_file:
- zip_file.extract(data_file, tmp_dir)
- logging.info(
- f" Renaming the file {join(tmp_dir, data_file)} to {new_name}"
- )
- rename(join(tmp_dir, data_file), new_name)
- build[u"file-name"] = new_name
- return True
- except (BadZipfile, RuntimeError) as err:
- logging.error(f"Failed to unzip the file {file_name}: {repr(err)}.")
- return False
- except OSError as err:
- logging.error(f"Failed to rename the file {data_file}: {repr(err)}.")
- return False
-
-
-def _download_xml(source, job, build, w_dir, arch):
- """
-
- :param source:
- :param job:
- :param build:
- :param w_dir: Path to working directory
- :param arch:
- :return:
- """
-
- file_name = source.get(u"file-name", u"")
- new_name = join(
- w_dir,
- f"{job}{SEPARATOR}{build[u'build']}{SEPARATOR}{file_name}"
- )
- url = u"{0}/{1}".format(
- source.get(u"url", u""),
- source.get(u"path", u"").format(
- job=job, build=build[u'build'], filename=file_name
- )
- )
- logging.info(f" Trying to download {url}")
- success, downloaded_name = _download_file(
- url, new_name, arch=arch, verify=(u"nginx" not in url), repeat=3
- )
- return success, downloaded_name
-
-
-def _download_xml_docs(source, job, build, w_dir, arch):
- """
-
- :param source:
- :param job:
- :param build:
- :param w_dir: Path to working directory
- :param arch:
- :return:
- """
-
- file_name = source.get(u"file-name", u"")
- release = re.search(REGEX_RELEASE, job).group(2)
- for rls in (release, u"master"):
- try:
- rls = f"rls{int(rls)}"
- except ValueError:
- pass # It is master
- url = (
- f"{source.get(u'url', u'')}/"
- f"{rls}/"
- f"{source.get(u'path', u'')}/"
- f"{job}{SEPARATOR}{build[u'build']}{SEPARATOR}{file_name}"
- )
- new_name = join(
- w_dir,
- f"{job}{SEPARATOR}{build[u'build']}{SEPARATOR}{file_name}"
- )
-
- logging.info(f" Trying to download {url}")
-
- success, downloaded_name = _download_file(url, new_name, arch=arch)
- if success:
- if file_name.endswith(u".gz"):
- with gzip.open(downloaded_name[:-3], u"rb") as gzip_file:
- file_content = gzip_file.read()
- with open(downloaded_name[:-3], u"wb") as xml_file:
- xml_file.write(file_content)
- break
-
- return success, downloaded_name
-
-
-def download_and_unzip_data_file(spec, job, build, pid):
- """Download and unzip a source file.
-
- :param spec: Specification read form the specification file.
- :param job: Name of the Jenkins job.
- :param build: Information about the build.
- :param pid: PID of the process executing this method.
- :type spec: Specification
- :type job: str
- :type build: dict
- :type pid: int
- :returns: True if the download was successful, otherwise False.
- :rtype: bool
- """
-
- download = {
- "xml": _download_xml,
- "xml-docs": _download_xml_docs
- }
-
- success = False
- downloaded_name = u""
- arch = bool(spec.environment.get(u"archive-inputs", True))
-
- for source in spec.environment.get(u"data-sources", tuple()):
- if not source.get(u"enabled", False):
- continue
- download_type = source.get(u"type", None)
- if not download_type:
- continue
- success, downloaded_name = download[download_type](
- source,
- job,
- build,
- spec.environment[u"paths"][u"DIR[WORKING,DATA]"],
- arch
- )
- if success:
- source[u"successful-downloads"] += 1
- build[u"source"] = source[u"type"]
- break
-
- # TODO: Remove when only .gz is used.
- if success and downloaded_name.endswith(u".zip"):
- if not is_zipfile(downloaded_name):
- logging.error(f"Zip file {downloaded_name} is corrupted.")
- success = False
-
- if success:
- if downloaded_name.endswith(u".gz"):
- build[u"file-name"] = downloaded_name[:-3]
- # TODO: Remove when only .gz is used.
- elif downloaded_name.endswith(u".zip"):
- build[u"file-name"] = downloaded_name
- success = _unzip_file(spec, build, pid)
-
- return success
diff --git a/resources/tools/presentation/input_data_parser.py b/resources/tools/presentation/input_data_parser.py
deleted file mode 100644
index 8747f938a9..0000000000
--- a/resources/tools/presentation/input_data_parser.py
+++ /dev/null
@@ -1,2147 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Data pre-processing
-
-- extract data from output.xml files generated by Jenkins jobs and store in
- pandas' Series,
-- provide access to the data.
-- filter the data using tags,
-"""
-
-import re
-import copy
-import resource
-import logging
-
-from collections import OrderedDict
-from os import remove, walk, listdir
-from os.path import isfile, isdir, join
-from datetime import datetime as dt
-from datetime import timedelta
-from json import loads
-from json.decoder import JSONDecodeError
-
-import hdrh.histogram
-import hdrh.codec
-import prettytable
-import pandas as pd
-
-from robot.api import ExecutionResult, ResultVisitor
-from robot import errors
-
-from resources.libraries.python import jumpavg
-from input_data_files import download_and_unzip_data_file
-from pal_errors import PresentationError
-
-
-# Separator used in file names
-SEPARATOR = u"__"
-
-
-class ExecutionChecker(ResultVisitor):
- """Class to traverse through the test suite structure.
-
- The functionality implemented in this class generates a json structure:
-
- Performance tests:
-
- {
- "metadata": {
- "generated": "Timestamp",
- "version": "SUT version",
- "job": "Jenkins job name",
- "build": "Information about the build"
- },
- "suites": {
- "Suite long name 1": {
- "name": Suite name,
- "doc": "Suite 1 documentation",
- "parent": "Suite 1 parent",
- "level": "Level of the suite in the suite hierarchy"
- }
- "Suite long name N": {
- "name": Suite name,
- "doc": "Suite N documentation",
- "parent": "Suite 2 parent",
- "level": "Level of the suite in the suite hierarchy"
- }
- }
- "tests": {
- # NDRPDR tests:
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation",
- "msg": "Test message",
- "conf-history": "DUT1 and DUT2 VAT History",
- "show-run": "Show Run",
- "tags": ["tag 1", "tag 2", "tag n"],
- "type": "NDRPDR",
- "status": "PASS" | "FAIL",
- "throughput": {
- "NDR": {
- "LOWER": float,
- "UPPER": float
- },
- "PDR": {
- "LOWER": float,
- "UPPER": float
- }
- },
- "latency": {
- "NDR": {
- "direction1": {
- "min": float,
- "avg": float,
- "max": float,
- "hdrh": str
- },
- "direction2": {
- "min": float,
- "avg": float,
- "max": float,
- "hdrh": str
- }
- },
- "PDR": {
- "direction1": {
- "min": float,
- "avg": float,
- "max": float,
- "hdrh": str
- },
- "direction2": {
- "min": float,
- "avg": float,
- "max": float,
- "hdrh": str
- }
- }
- }
- }
-
- # TCP tests:
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation",
- "msg": "Test message",
- "tags": ["tag 1", "tag 2", "tag n"],
- "type": "TCP",
- "status": "PASS" | "FAIL",
- "result": int
- }
-
- # MRR, BMRR tests:
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation",
- "msg": "Test message",
- "tags": ["tag 1", "tag 2", "tag n"],
- "type": "MRR" | "BMRR",
- "status": "PASS" | "FAIL",
- "result": {
- "receive-rate": float,
- # Average of a list, computed using AvgStdevStats.
- # In CSIT-1180, replace with List[float].
- }
- }
-
- "ID" {
- # next test
- }
- }
- }
-
-
- Functional tests:
-
- {
- "metadata": { # Optional
- "version": "VPP version",
- "job": "Jenkins job name",
- "build": "Information about the build"
- },
- "suites": {
- "Suite name 1": {
- "doc": "Suite 1 documentation",
- "parent": "Suite 1 parent",
- "level": "Level of the suite in the suite hierarchy"
- }
- "Suite name N": {
- "doc": "Suite N documentation",
- "parent": "Suite 2 parent",
- "level": "Level of the suite in the suite hierarchy"
- }
- }
- "tests": {
- "ID": {
- "name": "Test name",
- "parent": "Name of the parent of the test",
- "doc": "Test documentation"
- "msg": "Test message"
- "tags": ["tag 1", "tag 2", "tag n"],
- "conf-history": "DUT1 and DUT2 VAT History"
- "show-run": "Show Run"
- "status": "PASS" | "FAIL"
- },
- "ID" {
- # next test
- }
- }
- }
-
- .. note:: ID is the lowercase full path to the test.
- """
-
- REGEX_PLR_RATE = re.compile(
- r'PLRsearch lower bound::?\s(\d+.\d+).*\n'
- r'PLRsearch upper bound::?\s(\d+.\d+)'
- )
- REGEX_NDRPDR_RATE = re.compile(
- r'NDR_LOWER:\s(\d+.\d+).*\n.*\n'
- r'NDR_UPPER:\s(\d+.\d+).*\n'
- r'PDR_LOWER:\s(\d+.\d+).*\n.*\n'
- r'PDR_UPPER:\s(\d+.\d+)'
- )
- REGEX_NDRPDR_GBPS = re.compile(
- r'NDR_LOWER:.*,\s(\d+.\d+).*\n.*\n'
- r'NDR_UPPER:.*,\s(\d+.\d+).*\n'
- r'PDR_LOWER:.*,\s(\d+.\d+).*\n.*\n'
- r'PDR_UPPER:.*,\s(\d+.\d+)'
- )
- REGEX_PERF_MSG_INFO = re.compile(
- r'NDR_LOWER:\s(\d+.\d+)\s.*\s(\d+.\d+)\s.*\n.*\n.*\n'
- r'PDR_LOWER:\s(\d+.\d+)\s.*\s(\d+.\d+)\s.*\n.*\n.*\n'
- r'Latency at 90% PDR:.*\[\'(.*)\', \'(.*)\'\].*\n'
- r'Latency at 50% PDR:.*\[\'(.*)\', \'(.*)\'\].*\n'
- r'Latency at 10% PDR:.*\[\'(.*)\', \'(.*)\'\].*\n'
- )
- REGEX_CPS_MSG_INFO = re.compile(
- r'NDR_LOWER:\s(\d+.\d+)\s.*\s.*\n.*\n.*\n'
- r'PDR_LOWER:\s(\d+.\d+)\s.*\s.*\n.*\n.*'
- )
- REGEX_PPS_MSG_INFO = re.compile(
- r'NDR_LOWER:\s(\d+.\d+)\s.*\s(\d+.\d+)\s.*\n.*\n.*\n'
- r'PDR_LOWER:\s(\d+.\d+)\s.*\s(\d+.\d+)\s.*\n.*\n.*'
- )
- REGEX_MRR_MSG_INFO = re.compile(r'.*\[(.*)\]')
-
- REGEX_VSAP_MSG_INFO = re.compile(
- r'Transfer Rate: (\d*.\d*).*\n'
- r'Latency: (\d*.\d*).*\n'
- r'Completed requests: (\d*).*\n'
- r'Failed requests: (\d*).*\n'
- r'Total data transferred: (\d*).*\n'
- r'Connection [cr]ps rate:\s*(\d*.\d*)'
- )
-
- # Needed for CPS and PPS tests
- REGEX_NDRPDR_LAT_BASE = re.compile(
- r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
- r'LATENCY.*\[\'(.*)\', \'(.*)\'\]'
- )
- REGEX_NDRPDR_LAT = re.compile(
- r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n.*\n'
- r'LATENCY.*\[\'(.*)\', \'(.*)\'\]\s\n.*\n'
- r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
- r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
- r'Latency.*\[\'(.*)\', \'(.*)\'\]\s\n'
- r'Latency.*\[\'(.*)\', \'(.*)\'\]'
- )
-
- REGEX_VERSION_VPP = re.compile(
- r"(return STDOUT Version:\s*|"
- r"VPP Version:\s*|VPP version:\s*)(.*)"
- )
- REGEX_VERSION_DPDK = re.compile(
- r"(DPDK version:\s*|DPDK Version:\s*)(.*)"
- )
- REGEX_TCP = re.compile(
- r'Total\s(rps|cps|throughput):\s(\d*).*$'
- )
- REGEX_MRR = re.compile(
- r'MaxReceivedRate_Results\s\[pkts/(\d*)sec\]:\s'
- r'tx\s(\d*),\srx\s(\d*)'
- )
- REGEX_BMRR = re.compile(
- r'.*trial results.*: \[(.*)\]'
- )
- REGEX_RECONF_LOSS = re.compile(
- r'Packets lost due to reconfig: (\d*)'
- )
- REGEX_RECONF_TIME = re.compile(
- r'Implied time lost: (\d*.[\de-]*)'
- )
- REGEX_TC_TAG = re.compile(r'\d+[tT]\d+[cC]')
-
- REGEX_TC_NAME_NEW = re.compile(r'-\d+[cC]-')
-
- REGEX_TC_NUMBER = re.compile(r'tc\d{2}-')
-
- REGEX_TC_PAPI_CLI = re.compile(r'.*\((\d+.\d+.\d+.\d+.) - (.*)\)')
-
- REGEX_SH_RUN_HOST = re.compile(
- r'hostname=\"(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\",hook=\"(.*)\"'
- )
-
- def __init__(self, metadata, mapping, ignore, for_output):
- """Initialisation.
-
- :param metadata: Key-value pairs to be included in "metadata" part of
- JSON structure.
- :param mapping: Mapping of the old names of test cases to the new
- (actual) one.
- :param ignore: List of TCs to be ignored.
- :param for_output: Output to be generated from downloaded data.
- :type metadata: dict
- :type mapping: dict
- :type ignore: list
- :type for_output: str
- """
-
- # Type of message to parse out from the test messages
- self._msg_type = None
-
- # VPP version
- self._version = None
-
- # Timestamp
- self._timestamp = None
-
- # Testbed. The testbed is identified by TG node IP address.
- self._testbed = None
-
- # Mapping of TCs long names
- self._mapping = mapping
-
- # Ignore list
- self._ignore = ignore
-
- self._for_output = for_output
-
- # Number of PAPI History messages found:
- # 0 - no message
- # 1 - PAPI History of DUT1
- # 2 - PAPI History of DUT2
- self._conf_history_lookup_nr = 0
-
- self._sh_run_counter = 0
- self._telemetry_kw_counter = 0
- self._telemetry_msg_counter = 0
-
- # Test ID of currently processed test- the lowercase full path to the
- # test
- self._test_id = None
-
- # The main data structure
- self._data = {
- u"metadata": OrderedDict(),
- u"suites": OrderedDict(),
- u"tests": OrderedDict()
- }
-
- # Save the provided metadata
- for key, val in metadata.items():
- self._data[u"metadata"][key] = val
-
- # Dictionary defining the methods used to parse different types of
- # messages
- self.parse_msg = {
- u"vpp-version": self._get_vpp_version,
- u"dpdk-version": self._get_dpdk_version,
- u"teardown-papi-history": self._get_papi_history,
- u"test-show-runtime": self._get_show_run,
- u"testbed": self._get_testbed,
- u"test-telemetry": self._get_telemetry
- }
-
- @property
- def data(self):
- """Getter - Data parsed from the XML file.
-
- :returns: Data parsed from the XML file.
- :rtype: dict
- """
- return self._data
-
- def _get_data_from_mrr_test_msg(self, msg):
- """Get info from message of MRR performance tests.
-
- :param msg: Message to be processed.
- :type msg: str
- :returns: Processed message or original message if a problem occurs.
- :rtype: str
- """
-
- groups = re.search(self.REGEX_MRR_MSG_INFO, msg)
- if not groups or groups.lastindex != 1:
- return u"Test Failed."
-
- try:
- data = groups.group(1).split(u", ")
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- out_str = u"["
- try:
- for item in data:
- out_str += f"{(float(item) / 1e6):.2f}, "
- return out_str[:-2] + u"]"
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- def _get_data_from_cps_test_msg(self, msg):
- """Get info from message of NDRPDR CPS tests.
-
- :param msg: Message to be processed.
- :type msg: str
- :returns: Processed message or "Test Failed." if a problem occurs.
- :rtype: str
- """
-
- groups = re.search(self.REGEX_CPS_MSG_INFO, msg)
- if not groups or groups.lastindex != 2:
- return u"Test Failed."
-
- try:
- return (
- f"1. {(float(groups.group(1)) / 1e6):5.2f}\n"
- f"2. {(float(groups.group(2)) / 1e6):5.2f}"
- )
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- def _get_data_from_pps_test_msg(self, msg):
- """Get info from message of NDRPDR PPS tests.
-
- :param msg: Message to be processed.
- :type msg: str
- :returns: Processed message or "Test Failed." if a problem occurs.
- :rtype: str
- """
-
- groups = re.search(self.REGEX_PPS_MSG_INFO, msg)
- if not groups or groups.lastindex != 4:
- return u"Test Failed."
-
- try:
- return (
- f"1. {(float(groups.group(1)) / 1e6):5.2f} "
- f"{float(groups.group(2)):5.2f}\n"
- f"2. {(float(groups.group(3)) / 1e6):5.2f} "
- f"{float(groups.group(4)):5.2f}"
- )
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- def _get_data_from_perf_test_msg(self, msg):
- """Get info from message of NDRPDR performance tests.
-
- :param msg: Message to be processed.
- :type msg: str
- :returns: Processed message or "Test Failed." if a problem occurs.
- :rtype: str
- """
-
- groups = re.search(self.REGEX_PERF_MSG_INFO, msg)
- if not groups or groups.lastindex != 10:
- return u"Test Failed."
-
- try:
- data = {
- u"ndr_low": float(groups.group(1)),
- u"ndr_low_b": float(groups.group(2)),
- u"pdr_low": float(groups.group(3)),
- u"pdr_low_b": float(groups.group(4)),
- u"pdr_lat_90_1": groups.group(5),
- u"pdr_lat_90_2": groups.group(6),
- u"pdr_lat_50_1": groups.group(7),
- u"pdr_lat_50_2": groups.group(8),
- u"pdr_lat_10_1": groups.group(9),
- u"pdr_lat_10_2": groups.group(10),
- }
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- def _process_lat(in_str_1, in_str_2):
- """Extract min, avg, max values from latency string.
-
- :param in_str_1: Latency string for one direction produced by robot
- framework.
- :param in_str_2: Latency string for second direction produced by
- robot framework.
- :type in_str_1: str
- :type in_str_2: str
- :returns: Processed latency string or None if a problem occurs.
- :rtype: tuple
- """
- in_list_1 = in_str_1.split('/', 3)
- in_list_2 = in_str_2.split('/', 3)
-
- if len(in_list_1) != 4 and len(in_list_2) != 4:
- return None
-
- in_list_1[3] += u"=" * (len(in_list_1[3]) % 4)
- try:
- hdr_lat_1 = hdrh.histogram.HdrHistogram.decode(in_list_1[3])
- except hdrh.codec.HdrLengthException:
- return None
-
- in_list_2[3] += u"=" * (len(in_list_2[3]) % 4)
- try:
- hdr_lat_2 = hdrh.histogram.HdrHistogram.decode(in_list_2[3])
- except hdrh.codec.HdrLengthException:
- return None
-
- if hdr_lat_1 and hdr_lat_2:
- hdr_lat = (
- hdr_lat_1.get_value_at_percentile(50.0),
- hdr_lat_1.get_value_at_percentile(90.0),
- hdr_lat_1.get_value_at_percentile(99.0),
- hdr_lat_2.get_value_at_percentile(50.0),
- hdr_lat_2.get_value_at_percentile(90.0),
- hdr_lat_2.get_value_at_percentile(99.0)
- )
-
- if all(hdr_lat):
- return hdr_lat
-
- return None
-
- try:
- out_msg = (
- f"1. {(data[u'ndr_low'] / 1e6):5.2f} "
- f"{data[u'ndr_low_b']:5.2f}"
- f"\n2. {(data[u'pdr_low'] / 1e6):5.2f} "
- f"{data[u'pdr_low_b']:5.2f}"
- )
- latency = (
- _process_lat(data[u'pdr_lat_10_1'], data[u'pdr_lat_10_2']),
- _process_lat(data[u'pdr_lat_50_1'], data[u'pdr_lat_50_2']),
- _process_lat(data[u'pdr_lat_90_1'], data[u'pdr_lat_90_2'])
- )
- if all(latency):
- max_len = len(str(max((max(item) for item in latency))))
- max_len = 4 if max_len < 4 else max_len
-
- for idx, lat in enumerate(latency):
- if not idx:
- out_msg += u"\n"
- out_msg += (
- f"\n{idx + 3}. "
- f"{lat[0]:{max_len}d} "
- f"{lat[1]:{max_len}d} "
- f"{lat[2]:{max_len}d} "
- f"{lat[3]:{max_len}d} "
- f"{lat[4]:{max_len}d} "
- f"{lat[5]:{max_len}d} "
- )
-
- return out_msg
-
- except (AttributeError, IndexError, ValueError, KeyError):
- return u"Test Failed."
-
- def _get_testbed(self, msg):
- """Called when extraction of testbed IP is required.
- The testbed is identified by TG node IP address.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
- if msg.message.count(u"Setup of TG node") or \
- msg.message.count(u"Setup of node TG host"):
- reg_tg_ip = re.compile(
- r'.*TG .* (\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}).*')
- try:
- self._testbed = str(re.search(reg_tg_ip, msg.message).group(1))
- except (KeyError, ValueError, IndexError, AttributeError):
- pass
- finally:
- self._data[u"metadata"][u"testbed"] = self._testbed
- self._msg_type = None
-
- def _get_vpp_version(self, msg):
- """Called when extraction of VPP version is required.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
- if msg.message.count(u"return STDOUT Version:") or \
- msg.message.count(u"VPP Version:") or \
- msg.message.count(u"VPP version:"):
- self._version = str(
- re.search(self.REGEX_VERSION_VPP, msg.message).group(2)
- )
- self._data[u"metadata"][u"version"] = self._version
- self._msg_type = None
-
- def _get_dpdk_version(self, msg):
- """Called when extraction of DPDK version is required.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
- if msg.message.count(u"DPDK Version:"):
- try:
- self._version = str(re.search(
- self.REGEX_VERSION_DPDK, msg.message).group(2))
- self._data[u"metadata"][u"version"] = self._version
- except IndexError:
- pass
- finally:
- self._msg_type = None
-
- def _get_papi_history(self, msg):
- """Called when extraction of PAPI command history is required.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
- if msg.message.count(u"PAPI command history:"):
- self._conf_history_lookup_nr += 1
- if self._conf_history_lookup_nr == 1:
- self._data[u"tests"][self._test_id][u"conf-history"] = str()
- else:
- self._msg_type = None
- text = re.sub(
- r"\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3} PAPI command history:",
- u"",
- msg.message,
- count=1
- ).replace(u'"', u"'")
- self._data[u"tests"][self._test_id][u"conf-history"] += (
- f"**DUT{str(self._conf_history_lookup_nr)}:** {text}"
- )
-
- def _get_show_run(self, msg):
- """Called when extraction of VPP operational data (output of CLI command
- Show Runtime) is required.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
- if not msg.message.count(u"stats runtime"):
- return
-
- # Temporary solution
- if self._sh_run_counter > 1:
- return
-
- if u"show-run" not in self._data[u"tests"][self._test_id].keys():
- self._data[u"tests"][self._test_id][u"show-run"] = dict()
-
- groups = re.search(self.REGEX_TC_PAPI_CLI, msg.message)
- if not groups:
- return
- try:
- host = groups.group(1)
- except (AttributeError, IndexError):
- host = u""
- try:
- sock = groups.group(2)
- except (AttributeError, IndexError):
- sock = u""
-
- dut = u"dut{nr}".format(
- nr=len(self._data[u'tests'][self._test_id][u'show-run'].keys()) + 1)
-
- self._data[u'tests'][self._test_id][u'show-run'][dut] = \
- copy.copy(
- {
- u"host": host,
- u"socket": sock,
- u"runtime": str(msg.message).replace(u' ', u'').
- replace(u'\n', u'').replace(u"'", u'"').
- replace(u'b"', u'"').replace(u'u"', u'"').
- split(u":", 1)[1]
- }
- )
-
- def _get_telemetry(self, msg):
- """Called when extraction of VPP telemetry data is required.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
- if self._telemetry_kw_counter > 1:
- return
- if not msg.message.count(u"# TYPE vpp_runtime_calls"):
- return
-
- if u"telemetry-show-run" not in \
- self._data[u"tests"][self._test_id].keys():
- self._data[u"tests"][self._test_id][u"telemetry-show-run"] = dict()
-
- self._telemetry_msg_counter += 1
- groups = re.search(self.REGEX_SH_RUN_HOST, msg.message)
- if not groups:
- return
- try:
- host = groups.group(1)
- except (AttributeError, IndexError):
- host = u""
- try:
- sock = groups.group(2)
- except (AttributeError, IndexError):
- sock = u""
- runtime = {
- u"source_type": u"node",
- u"source_id": host,
- u"msg_type": u"metric",
- u"log_level": u"INFO",
- u"timestamp": msg.timestamp,
- u"msg": u"show_runtime",
- u"host": host,
- u"socket": sock,
- u"data": list()
- }
- for line in msg.message.splitlines():
- if not line.startswith(u"vpp_runtime_"):
- continue
- try:
- params, value, timestamp = line.rsplit(u" ", maxsplit=2)
- cut = params.index(u"{")
- name = params[:cut].split(u"_", maxsplit=2)[-1]
- labels = eval(
- u"dict" + params[cut:].replace('{', '(').replace('}', ')')
- )
- labels[u"graph_node"] = labels.pop(u"name")
- runtime[u"data"].append(
- {
- u"name": name,
- u"value": value,
- u"timestamp": timestamp,
- u"labels": labels
- }
- )
- except (TypeError, ValueError, IndexError):
- continue
- self._data[u'tests'][self._test_id][u'telemetry-show-run']\
- [f"dut{self._telemetry_msg_counter}"] = copy.copy(
- {
- u"host": host,
- u"socket": sock,
- u"runtime": runtime
- }
- )
-
- def _get_ndrpdr_throughput(self, msg):
- """Get NDR_LOWER, NDR_UPPER, PDR_LOWER and PDR_UPPER from the test
- message.
-
- :param msg: The test message to be parsed.
- :type msg: str
- :returns: Parsed data as a dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
-
- throughput = {
- u"NDR": {u"LOWER": -1.0, u"UPPER": -1.0},
- u"PDR": {u"LOWER": -1.0, u"UPPER": -1.0}
- }
- status = u"FAIL"
- groups = re.search(self.REGEX_NDRPDR_RATE, msg)
-
- if groups is not None:
- try:
- throughput[u"NDR"][u"LOWER"] = float(groups.group(1))
- throughput[u"NDR"][u"UPPER"] = float(groups.group(2))
- throughput[u"PDR"][u"LOWER"] = float(groups.group(3))
- throughput[u"PDR"][u"UPPER"] = float(groups.group(4))
- status = u"PASS"
- except (IndexError, ValueError):
- pass
-
- return throughput, status
-
- def _get_ndrpdr_throughput_gbps(self, msg):
- """Get NDR_LOWER, NDR_UPPER, PDR_LOWER and PDR_UPPER in Gbps from the
- test message.
-
- :param msg: The test message to be parsed.
- :type msg: str
- :returns: Parsed data as a dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
-
- gbps = {
- u"NDR": {u"LOWER": -1.0, u"UPPER": -1.0},
- u"PDR": {u"LOWER": -1.0, u"UPPER": -1.0}
- }
- status = u"FAIL"
- groups = re.search(self.REGEX_NDRPDR_GBPS, msg)
-
- if groups is not None:
- try:
- gbps[u"NDR"][u"LOWER"] = float(groups.group(1))
- gbps[u"NDR"][u"UPPER"] = float(groups.group(2))
- gbps[u"PDR"][u"LOWER"] = float(groups.group(3))
- gbps[u"PDR"][u"UPPER"] = float(groups.group(4))
- status = u"PASS"
- except (IndexError, ValueError):
- pass
-
- return gbps, status
-
- def _get_plr_throughput(self, msg):
- """Get PLRsearch lower bound and PLRsearch upper bound from the test
- message.
-
- :param msg: The test message to be parsed.
- :type msg: str
- :returns: Parsed data as a dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
-
- throughput = {
- u"LOWER": -1.0,
- u"UPPER": -1.0
- }
- status = u"FAIL"
- groups = re.search(self.REGEX_PLR_RATE, msg)
-
- if groups is not None:
- try:
- throughput[u"LOWER"] = float(groups.group(1))
- throughput[u"UPPER"] = float(groups.group(2))
- status = u"PASS"
- except (IndexError, ValueError):
- pass
-
- return throughput, status
-
- def _get_ndrpdr_latency(self, msg):
- """Get LATENCY from the test message.
-
- :param msg: The test message to be parsed.
- :type msg: str
- :returns: Parsed data as a dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
- latency_default = {
- u"min": -1.0,
- u"avg": -1.0,
- u"max": -1.0,
- u"hdrh": u""
- }
- latency = {
- u"NDR": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- u"PDR": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- u"LAT0": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- u"PDR10": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- u"PDR50": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- u"PDR90": {
- u"direction1": copy.copy(latency_default),
- u"direction2": copy.copy(latency_default)
- },
- }
-
- groups = re.search(self.REGEX_NDRPDR_LAT, msg)
- if groups is None:
- groups = re.search(self.REGEX_NDRPDR_LAT_BASE, msg)
- if groups is None:
- return latency, u"FAIL"
-
- def process_latency(in_str):
- """Return object with parsed latency values.
-
- TODO: Define class for the return type.
-
- :param in_str: Input string, min/avg/max/hdrh format.
- :type in_str: str
- :returns: Dict with corresponding keys, except hdrh float values.
- :rtype dict:
- :throws IndexError: If in_str does not have enough substrings.
- :throws ValueError: If a substring does not convert to float.
- """
- in_list = in_str.split('/', 3)
-
- rval = {
- u"min": float(in_list[0]),
- u"avg": float(in_list[1]),
- u"max": float(in_list[2]),
- u"hdrh": u""
- }
-
- if len(in_list) == 4:
- rval[u"hdrh"] = str(in_list[3])
-
- return rval
-
- try:
- latency[u"NDR"][u"direction1"] = process_latency(groups.group(1))
- latency[u"NDR"][u"direction2"] = process_latency(groups.group(2))
- latency[u"PDR"][u"direction1"] = process_latency(groups.group(3))
- latency[u"PDR"][u"direction2"] = process_latency(groups.group(4))
- if groups.lastindex == 4:
- return latency, u"PASS"
- except (IndexError, ValueError):
- pass
-
- try:
- latency[u"PDR90"][u"direction1"] = process_latency(groups.group(5))
- latency[u"PDR90"][u"direction2"] = process_latency(groups.group(6))
- latency[u"PDR50"][u"direction1"] = process_latency(groups.group(7))
- latency[u"PDR50"][u"direction2"] = process_latency(groups.group(8))
- latency[u"PDR10"][u"direction1"] = process_latency(groups.group(9))
- latency[u"PDR10"][u"direction2"] = process_latency(groups.group(10))
- latency[u"LAT0"][u"direction1"] = process_latency(groups.group(11))
- latency[u"LAT0"][u"direction2"] = process_latency(groups.group(12))
- if groups.lastindex == 12:
- return latency, u"PASS"
- except (IndexError, ValueError):
- pass
-
- return latency, u"FAIL"
-
- @staticmethod
- def _get_hoststack_data(msg, tags):
- """Get data from the hoststack test message.
-
- :param msg: The test message to be parsed.
- :param tags: Test tags.
- :type msg: str
- :type tags: list
- :returns: Parsed data as a JSON dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
- result = dict()
- status = u"FAIL"
-
- msg = msg.replace(u"'", u'"').replace(u" ", u"")
- if u"LDPRELOAD" in tags:
- try:
- result = loads(msg)
- status = u"PASS"
- except JSONDecodeError:
- pass
- elif u"VPPECHO" in tags:
- try:
- msg_lst = msg.replace(u"}{", u"} {").split(u" ")
- result = dict(
- client=loads(msg_lst[0]),
- server=loads(msg_lst[1])
- )
- status = u"PASS"
- except (JSONDecodeError, IndexError):
- pass
-
- return result, status
-
- def _get_vsap_data(self, msg, tags):
- """Get data from the vsap test message.
-
- :param msg: The test message to be parsed.
- :param tags: Test tags.
- :type msg: str
- :type tags: list
- :returns: Parsed data as a JSON dict and the status (PASS/FAIL).
- :rtype: tuple(dict, str)
- """
- result = dict()
- status = u"FAIL"
-
- groups = re.search(self.REGEX_VSAP_MSG_INFO, msg)
- if groups is not None:
- try:
- result[u"transfer-rate"] = float(groups.group(1)) * 1e3
- result[u"latency"] = float(groups.group(2))
- result[u"completed-requests"] = int(groups.group(3))
- result[u"failed-requests"] = int(groups.group(4))
- result[u"bytes-transferred"] = int(groups.group(5))
- if u"TCP_CPS"in tags:
- result[u"cps"] = float(groups.group(6))
- elif u"TCP_RPS" in tags:
- result[u"rps"] = float(groups.group(6))
- else:
- return result, status
- status = u"PASS"
- except (IndexError, ValueError):
- pass
-
- return result, status
-
- def visit_suite(self, suite):
- """Implements traversing through the suite and its direct children.
-
- :param suite: Suite to process.
- :type suite: Suite
- :returns: Nothing.
- """
- if self.start_suite(suite) is not False:
- suite.suites.visit(self)
- suite.tests.visit(self)
- self.end_suite(suite)
-
- def start_suite(self, suite):
- """Called when suite starts.
-
- :param suite: Suite to process.
- :type suite: Suite
- :returns: Nothing.
- """
-
- try:
- parent_name = suite.parent.name
- except AttributeError:
- return
-
- self._data[u"suites"][suite.longname.lower().
- replace(u'"', u"'").
- replace(u" ", u"_")] = {
- u"name": suite.name.lower(),
- u"doc": suite.doc,
- u"parent": parent_name,
- u"level": len(suite.longname.split(u"."))
- }
-
- suite.keywords.visit(self)
-
- def end_suite(self, suite):
- """Called when suite ends.
-
- :param suite: Suite to process.
- :type suite: Suite
- :returns: Nothing.
- """
-
- def visit_test(self, test):
- """Implements traversing through the test.
-
- :param test: Test to process.
- :type test: Test
- :returns: Nothing.
- """
- if self.start_test(test) is not False:
- test.keywords.visit(self)
- self.end_test(test)
-
- def start_test(self, test):
- """Called when test starts.
-
- :param test: Test to process.
- :type test: Test
- :returns: Nothing.
- """
-
- self._sh_run_counter = 0
- self._telemetry_kw_counter = 0
- self._telemetry_msg_counter = 0
-
- longname_orig = test.longname.lower()
-
- # Check the ignore list
- if longname_orig in self._ignore:
- return
-
- tags = [str(tag) for tag in test.tags]
- test_result = dict()
-
- # Change the TC long name and name if defined in the mapping table
- longname = self._mapping.get(longname_orig, None)
- if longname is not None:
- name = longname.split(u'.')[-1]
- logging.debug(
- f"{self._data[u'metadata']}\n{longname_orig}\n{longname}\n"
- f"{name}"
- )
- else:
- longname = longname_orig
- name = test.name.lower()
-
- # Remove TC number from the TC long name (backward compatibility):
- self._test_id = re.sub(self.REGEX_TC_NUMBER, u"", longname)
- # Remove TC number from the TC name (not needed):
- test_result[u"name"] = re.sub(self.REGEX_TC_NUMBER, "", name)
-
- test_result[u"parent"] = test.parent.name.lower()
- test_result[u"tags"] = tags
- test_result["doc"] = test.doc
- test_result[u"type"] = u""
- test_result[u"status"] = test.status
- test_result[u"starttime"] = test.starttime
- test_result[u"endtime"] = test.endtime
-
- if test.status == u"PASS":
- if u"NDRPDR" in tags:
- if u"TCP_PPS" in tags or u"UDP_PPS" in tags:
- test_result[u"msg"] = self._get_data_from_pps_test_msg(
- test.message)
- elif u"TCP_CPS" in tags or u"UDP_CPS" in tags:
- test_result[u"msg"] = self._get_data_from_cps_test_msg(
- test.message)
- else:
- test_result[u"msg"] = self._get_data_from_perf_test_msg(
- test.message)
- elif u"MRR" in tags or u"FRMOBL" in tags or u"BMRR" in tags:
- test_result[u"msg"] = self._get_data_from_mrr_test_msg(
- test.message)
- else:
- test_result[u"msg"] = test.message
- else:
- test_result[u"msg"] = test.message
-
- if u"PERFTEST" in tags and u"TREX" not in tags:
- # Replace info about cores (e.g. -1c-) with the info about threads
- # and cores (e.g. -1t1c-) in the long test case names and in the
- # test case names if necessary.
- tag_count = 0
- tag_tc = str()
- for tag in test_result[u"tags"]:
- groups = re.search(self.REGEX_TC_TAG, tag)
- if groups:
- tag_count += 1
- tag_tc = tag
-
- if tag_count == 1:
- self._test_id = re.sub(
- self.REGEX_TC_NAME_NEW, f"-{tag_tc.lower()}-",
- self._test_id, count=1
- )
- test_result[u"name"] = re.sub(
- self.REGEX_TC_NAME_NEW, f"-{tag_tc.lower()}-",
- test_result["name"], count=1
- )
- else:
- test_result[u"status"] = u"FAIL"
- self._data[u"tests"][self._test_id] = test_result
- logging.debug(
- f"The test {self._test_id} has no or more than one "
- f"multi-threading tags.\n"
- f"Tags: {test_result[u'tags']}"
- )
- return
-
- if u"DEVICETEST" in tags:
- test_result[u"type"] = u"DEVICETEST"
- elif u"NDRPDR" in tags:
- if u"TCP_CPS" in tags or u"UDP_CPS" in tags:
- test_result[u"type"] = u"CPS"
- else:
- test_result[u"type"] = u"NDRPDR"
- if test.status == u"PASS":
- test_result[u"throughput"], test_result[u"status"] = \
- self._get_ndrpdr_throughput(test.message)
- test_result[u"gbps"], test_result[u"status"] = \
- self._get_ndrpdr_throughput_gbps(test.message)
- test_result[u"latency"], test_result[u"status"] = \
- self._get_ndrpdr_latency(test.message)
- elif u"MRR" in tags or u"FRMOBL" in tags or u"BMRR" in tags:
- if u"MRR" in tags:
- test_result[u"type"] = u"MRR"
- else:
- test_result[u"type"] = u"BMRR"
- if test.status == u"PASS":
- test_result[u"result"] = dict()
- groups = re.search(self.REGEX_BMRR, test.message)
- if groups is not None:
- items_str = groups.group(1)
- items_float = [
- float(item.strip().replace(u"'", u""))
- for item in items_str.split(",")
- ]
- # Use whole list in CSIT-1180.
- stats = jumpavg.AvgStdevStats.for_runs(items_float)
- test_result[u"result"][u"samples"] = items_float
- test_result[u"result"][u"receive-rate"] = stats.avg
- test_result[u"result"][u"receive-stdev"] = stats.stdev
- else:
- groups = re.search(self.REGEX_MRR, test.message)
- test_result[u"result"][u"receive-rate"] = \
- float(groups.group(3)) / float(groups.group(1))
- elif u"SOAK" in tags:
- test_result[u"type"] = u"SOAK"
- if test.status == u"PASS":
- test_result[u"throughput"], test_result[u"status"] = \
- self._get_plr_throughput(test.message)
- elif u"HOSTSTACK" in tags:
- test_result[u"type"] = u"HOSTSTACK"
- if test.status == u"PASS":
- test_result[u"result"], test_result[u"status"] = \
- self._get_hoststack_data(test.message, tags)
- elif u"LDP_NGINX" in tags:
- test_result[u"type"] = u"LDP_NGINX"
- test_result[u"result"], test_result[u"status"] = \
- self._get_vsap_data(test.message, tags)
- # elif u"TCP" in tags: # This might be not used
- # test_result[u"type"] = u"TCP"
- # if test.status == u"PASS":
- # groups = re.search(self.REGEX_TCP, test.message)
- # test_result[u"result"] = int(groups.group(2))
- elif u"RECONF" in tags:
- test_result[u"type"] = u"RECONF"
- if test.status == u"PASS":
- test_result[u"result"] = None
- try:
- grps_loss = re.search(self.REGEX_RECONF_LOSS, test.message)
- grps_time = re.search(self.REGEX_RECONF_TIME, test.message)
- test_result[u"result"] = {
- u"loss": int(grps_loss.group(1)),
- u"time": float(grps_time.group(1))
- }
- except (AttributeError, IndexError, ValueError, TypeError):
- test_result[u"status"] = u"FAIL"
- else:
- test_result[u"status"] = u"FAIL"
-
- self._data[u"tests"][self._test_id] = test_result
-
- def end_test(self, test):
- """Called when test ends.
-
- :param test: Test to process.
- :type test: Test
- :returns: Nothing.
- """
-
- def visit_keyword(self, keyword):
- """Implements traversing through the keyword and its child keywords.
-
- :param keyword: Keyword to process.
- :type keyword: Keyword
- :returns: Nothing.
- """
- if self.start_keyword(keyword) is not False:
- self.end_keyword(keyword)
-
- def start_keyword(self, keyword):
- """Called when keyword starts. Default implementation does nothing.
-
- :param keyword: Keyword to process.
- :type keyword: Keyword
- :returns: Nothing.
- """
- try:
- if keyword.type == u"setup":
- self.visit_setup_kw(keyword)
- elif keyword.type == u"teardown":
- self.visit_teardown_kw(keyword)
- else:
- self.visit_test_kw(keyword)
- except AttributeError:
- pass
-
- def end_keyword(self, keyword):
- """Called when keyword ends. Default implementation does nothing.
-
- :param keyword: Keyword to process.
- :type keyword: Keyword
- :returns: Nothing.
- """
-
- def visit_test_kw(self, test_kw):
- """Implements traversing through the test keyword and its child
- keywords.
-
- :param test_kw: Keyword to process.
- :type test_kw: Keyword
- :returns: Nothing.
- """
- for keyword in test_kw.keywords:
- if self.start_test_kw(keyword) is not False:
- self.visit_test_kw(keyword)
- self.end_test_kw(keyword)
-
- def start_test_kw(self, test_kw):
- """Called when test keyword starts. Default implementation does
- nothing.
-
- :param test_kw: Keyword to process.
- :type test_kw: Keyword
- :returns: Nothing.
- """
- if self._for_output == u"trending":
- return
-
- if test_kw.name.count(u"Run Telemetry On All Duts"):
- self._msg_type = u"test-telemetry"
- self._telemetry_kw_counter += 1
- elif test_kw.name.count(u"Show Runtime On All Duts"):
- self._msg_type = u"test-show-runtime"
- self._sh_run_counter += 1
- else:
- return
- test_kw.messages.visit(self)
-
- def end_test_kw(self, test_kw):
- """Called when keyword ends. Default implementation does nothing.
-
- :param test_kw: Keyword to process.
- :type test_kw: Keyword
- :returns: Nothing.
- """
-
- def visit_setup_kw(self, setup_kw):
- """Implements traversing through the teardown keyword and its child
- keywords.
-
- :param setup_kw: Keyword to process.
- :type setup_kw: Keyword
- :returns: Nothing.
- """
- for keyword in setup_kw.keywords:
- if self.start_setup_kw(keyword) is not False:
- self.visit_setup_kw(keyword)
- self.end_setup_kw(keyword)
-
- def start_setup_kw(self, setup_kw):
- """Called when teardown keyword starts. Default implementation does
- nothing.
-
- :param setup_kw: Keyword to process.
- :type setup_kw: Keyword
- :returns: Nothing.
- """
- if setup_kw.name.count(u"Show Vpp Version On All Duts") \
- and not self._version:
- self._msg_type = u"vpp-version"
- elif setup_kw.name.count(u"Install Dpdk Framework On All Duts") and \
- not self._version:
- self._msg_type = u"dpdk-version"
- elif setup_kw.name.count(u"Setup Framework") and not self._testbed:
- self._msg_type = u"testbed"
- else:
- return
- setup_kw.messages.visit(self)
-
- def end_setup_kw(self, setup_kw):
- """Called when keyword ends. Default implementation does nothing.
-
- :param setup_kw: Keyword to process.
- :type setup_kw: Keyword
- :returns: Nothing.
- """
-
- def visit_teardown_kw(self, teardown_kw):
- """Implements traversing through the teardown keyword and its child
- keywords.
-
- :param teardown_kw: Keyword to process.
- :type teardown_kw: Keyword
- :returns: Nothing.
- """
- for keyword in teardown_kw.keywords:
- if self.start_teardown_kw(keyword) is not False:
- self.visit_teardown_kw(keyword)
- self.end_teardown_kw(keyword)
-
- def start_teardown_kw(self, teardown_kw):
- """Called when teardown keyword starts
-
- :param teardown_kw: Keyword to process.
- :type teardown_kw: Keyword
- :returns: Nothing.
- """
- if teardown_kw.name.count(u"Show Papi History On All Duts"):
- self._conf_history_lookup_nr = 0
- self._msg_type = u"teardown-papi-history"
- teardown_kw.messages.visit(self)
-
- def end_teardown_kw(self, teardown_kw):
- """Called when keyword ends. Default implementation does nothing.
-
- :param teardown_kw: Keyword to process.
- :type teardown_kw: Keyword
- :returns: Nothing.
- """
-
- def visit_message(self, msg):
- """Implements visiting the message.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
- if self.start_message(msg) is not False:
- self.end_message(msg)
-
- def start_message(self, msg):
- """Called when message starts. Get required information from messages:
- - VPP version.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
- if self._msg_type:
- self.parse_msg[self._msg_type](msg)
-
- def end_message(self, msg):
- """Called when message ends. Default implementation does nothing.
-
- :param msg: Message to process.
- :type msg: Message
- :returns: Nothing.
- """
-
-
-class InputData:
- """Input data
-
- The data is extracted from output.xml files generated by Jenkins jobs and
- stored in pandas' DataFrames.
-
- The data structure:
- - job name
- - build number
- - metadata
- (as described in ExecutionChecker documentation)
- - suites
- (as described in ExecutionChecker documentation)
- - tests
- (as described in ExecutionChecker documentation)
- """
-
- def __init__(self, spec, for_output):
- """Initialization.
-
- :param spec: Specification.
- :param for_output: Output to be generated from downloaded data.
- :type spec: Specification
- :type for_output: str
- """
-
- # Specification:
- self._cfg = spec
-
- self._for_output = for_output
-
- # Data store:
- self._input_data = pd.Series()
-
- @property
- def data(self):
- """Getter - Input data.
-
- :returns: Input data
- :rtype: pandas.Series
- """
- return self._input_data
-
- def metadata(self, job, build):
- """Getter - metadata
-
- :param job: Job which metadata we want.
- :param build: Build which metadata we want.
- :type job: str
- :type build: str
- :returns: Metadata
- :rtype: pandas.Series
- """
- return self.data[job][build][u"metadata"]
-
- def suites(self, job, build):
- """Getter - suites
-
- :param job: Job which suites we want.
- :param build: Build which suites we want.
- :type job: str
- :type build: str
- :returns: Suites.
- :rtype: pandas.Series
- """
- return self.data[job][str(build)][u"suites"]
-
- def tests(self, job, build):
- """Getter - tests
-
- :param job: Job which tests we want.
- :param build: Build which tests we want.
- :type job: str
- :type build: str
- :returns: Tests.
- :rtype: pandas.Series
- """
- return self.data[job][build][u"tests"]
-
- def _parse_tests(self, job, build):
- """Process data from robot output.xml file and return JSON structured
- data.
-
- :param job: The name of job which build output data will be processed.
- :param build: The build which output data will be processed.
- :type job: str
- :type build: dict
- :returns: JSON data structure.
- :rtype: dict
- """
-
- metadata = {
- u"job": job,
- u"build": build
- }
-
- with open(build[u"file-name"], u'r') as data_file:
- try:
- result = ExecutionResult(data_file)
- except errors.DataError as err:
- logging.error(
- f"Error occurred while parsing output.xml: {repr(err)}"
- )
- return None
- checker = ExecutionChecker(
- metadata, self._cfg.mapping, self._cfg.ignore, self._for_output
- )
- result.visit(checker)
-
- checker.data[u"metadata"][u"tests_total"] = \
- result.statistics.total.all.total
- checker.data[u"metadata"][u"tests_passed"] = \
- result.statistics.total.all.passed
- checker.data[u"metadata"][u"tests_failed"] = \
- result.statistics.total.all.failed
- checker.data[u"metadata"][u"elapsedtime"] = result.suite.elapsedtime
- checker.data[u"metadata"][u"generated"] = result.suite.endtime[:14]
-
- return checker.data
-
- def _download_and_parse_build(self, job, build, repeat, pid=10000):
- """Download and parse the input data file.
-
- :param pid: PID of the process executing this method.
- :param job: Name of the Jenkins job which generated the processed input
- file.
- :param build: Information about the Jenkins build which generated the
- processed input file.
- :param repeat: Repeat the download specified number of times if not
- successful.
- :type pid: int
- :type job: str
- :type build: dict
- :type repeat: int
- """
-
- logging.info(f"Processing the job/build: {job}: {build[u'build']}")
-
- state = u"failed"
- success = False
- data = None
- do_repeat = repeat
- while do_repeat:
- success = download_and_unzip_data_file(self._cfg, job, build, pid)
- if success:
- break
- do_repeat -= 1
- if not success:
- logging.error(
- f"It is not possible to download the input data file from the "
- f"job {job}, build {build[u'build']}, or it is damaged. "
- f"Skipped."
- )
- if success:
- logging.info(f" Processing data from build {build[u'build']}")
- data = self._parse_tests(job, build)
- if data is None:
- logging.error(
- f"Input data file from the job {job}, build "
- f"{build[u'build']} is damaged. Skipped."
- )
- else:
- state = u"processed"
-
- try:
- remove(build[u"file-name"])
- except OSError as err:
- logging.error(
- f"Cannot remove the file {build[u'file-name']}: {repr(err)}"
- )
-
- # If the time-period is defined in the specification file, remove all
- # files which are outside the time period.
- is_last = False
- timeperiod = self._cfg.environment.get(u"time-period", None)
- if timeperiod and data:
- now = dt.utcnow()
- timeperiod = timedelta(int(timeperiod))
- metadata = data.get(u"metadata", None)
- if metadata:
- generated = metadata.get(u"generated", None)
- if generated:
- generated = dt.strptime(generated, u"%Y%m%d %H:%M")
- if (now - generated) > timeperiod:
- # Remove the data and the file:
- state = u"removed"
- data = None
- is_last = True
- logging.info(
- f" The build {job}/{build[u'build']} is "
- f"outdated, will be removed."
- )
- return {
- u"data": data,
- u"state": state,
- u"job": job,
- u"build": build,
- u"last": is_last
- }
-
- def download_and_parse_data(self, repeat=1):
- """Download the input data files, parse input data from input files and
- store in pandas' Series.
-
- :param repeat: Repeat the download specified number of times if not
- successful.
- :type repeat: int
- """
-
- logging.info(u"Downloading and parsing input files ...")
-
- for job, builds in self._cfg.input.items():
- for build in builds:
-
- result = self._download_and_parse_build(job, build, repeat)
- if result[u"last"]:
- break
- build_nr = result[u"build"][u"build"]
-
- if result[u"data"]:
- data = result[u"data"]
- build_data = pd.Series({
- u"metadata": pd.Series(
- list(data[u"metadata"].values()),
- index=list(data[u"metadata"].keys())
- ),
- u"suites": pd.Series(
- list(data[u"suites"].values()),
- index=list(data[u"suites"].keys())
- ),
- u"tests": pd.Series(
- list(data[u"tests"].values()),
- index=list(data[u"tests"].keys())
- )
- })
-
- if self._input_data.get(job, None) is None:
- self._input_data[job] = pd.Series()
- self._input_data[job][str(build_nr)] = build_data
- self._cfg.set_input_file_name(
- job, build_nr, result[u"build"][u"file-name"]
- )
- self._cfg.set_input_state(job, build_nr, result[u"state"])
-
- mem_alloc = \
- resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / 1000
- logging.info(f"Memory allocation: {mem_alloc:.0f}MB")
-
- logging.info(u"Done.")
-
- msg = f"Successful downloads from the sources:\n"
- for source in self._cfg.environment[u"data-sources"]:
- if source[u"successful-downloads"]:
- msg += (
- f"{source[u'url']}/{source[u'path']}/"
- f"{source[u'file-name']}: "
- f"{source[u'successful-downloads']}\n"
- )
- logging.info(msg)
-
- def process_local_file(self, local_file, job=u"local", build_nr=1,
- replace=True):
- """Process local XML file given as a command-line parameter.
-
- :param local_file: The file to process.
- :param job: Job name.
- :param build_nr: Build number.
- :param replace: If True, the information about jobs and builds is
- replaced by the new one, otherwise the new jobs and builds are
- added.
- :type local_file: str
- :type job: str
- :type build_nr: int
- :type replace: bool
- :raises: PresentationError if an error occurs.
- """
- if not isfile(local_file):
- raise PresentationError(f"The file {local_file} does not exist.")
-
- try:
- build_nr = int(local_file.split(u"/")[-1].split(u".")[0])
- except (IndexError, ValueError):
- pass
-
- build = {
- u"build": build_nr,
- u"status": u"failed",
- u"file-name": local_file
- }
- if replace:
- self._cfg.input = dict()
- self._cfg.add_build(job, build)
-
- logging.info(f"Processing {job}: {build_nr:2d}: {local_file}")
- data = self._parse_tests(job, build)
- if data is None:
- raise PresentationError(
- f"Error occurred while parsing the file {local_file}"
- )
-
- build_data = pd.Series({
- u"metadata": pd.Series(
- list(data[u"metadata"].values()),
- index=list(data[u"metadata"].keys())
- ),
- u"suites": pd.Series(
- list(data[u"suites"].values()),
- index=list(data[u"suites"].keys())
- ),
- u"tests": pd.Series(
- list(data[u"tests"].values()),
- index=list(data[u"tests"].keys())
- )
- })
-
- if self._input_data.get(job, None) is None:
- self._input_data[job] = pd.Series()
- self._input_data[job][str(build_nr)] = build_data
-
- self._cfg.set_input_state(job, build_nr, u"processed")
-
- def process_local_directory(self, local_dir, replace=True):
- """Process local directory with XML file(s). The directory is processed
- as a 'job' and the XML files in it as builds.
- If the given directory contains only sub-directories, these
- sub-directories processed as jobs and corresponding XML files as builds
- of their job.
-
- :param local_dir: Local directory to process.
- :param replace: If True, the information about jobs and builds is
- replaced by the new one, otherwise the new jobs and builds are
- added.
- :type local_dir: str
- :type replace: bool
- """
- if not isdir(local_dir):
- raise PresentationError(
- f"The directory {local_dir} does not exist."
- )
-
- # Check if the given directory includes only files, or only directories
- _, dirnames, filenames = next(walk(local_dir))
-
- if filenames and not dirnames:
- filenames.sort()
- # local_builds:
- # key: dir (job) name, value: list of file names (builds)
- local_builds = {
- local_dir: [join(local_dir, name) for name in filenames]
- }
-
- elif dirnames and not filenames:
- dirnames.sort()
- # local_builds:
- # key: dir (job) name, value: list of file names (builds)
- local_builds = dict()
- for dirname in dirnames:
- builds = [
- join(local_dir, dirname, name)
- for name in listdir(join(local_dir, dirname))
- if isfile(join(local_dir, dirname, name))
- ]
- if builds:
- local_builds[dirname] = sorted(builds)
-
- elif not filenames and not dirnames:
- raise PresentationError(f"The directory {local_dir} is empty.")
- else:
- raise PresentationError(
- f"The directory {local_dir} can include only files or only "
- f"directories, not both.\nThe directory {local_dir} includes "
- f"file(s):\n{filenames}\nand directories:\n{dirnames}"
- )
-
- if replace:
- self._cfg.input = dict()
-
- for job, files in local_builds.items():
- for idx, local_file in enumerate(files):
- self.process_local_file(local_file, job, idx + 1, replace=False)
-
- @staticmethod
- def _end_of_tag(tag_filter, start=0, closer=u"'"):
- """Return the index of character in the string which is the end of tag.
-
- :param tag_filter: The string where the end of tag is being searched.
- :param start: The index where the searching is stated.
- :param closer: The character which is the tag closer.
- :type tag_filter: str
- :type start: int
- :type closer: str
- :returns: The index of the tag closer.
- :rtype: int
- """
- try:
- idx_opener = tag_filter.index(closer, start)
- return tag_filter.index(closer, idx_opener + 1)
- except ValueError:
- return None
-
- @staticmethod
- def _condition(tag_filter):
- """Create a conditional statement from the given tag filter.
-
- :param tag_filter: Filter based on tags from the element specification.
- :type tag_filter: str
- :returns: Conditional statement which can be evaluated.
- :rtype: str
- """
- index = 0
- while True:
- index = InputData._end_of_tag(tag_filter, index)
- if index is None:
- return tag_filter
- index += 1
- tag_filter = tag_filter[:index] + u" in tags" + tag_filter[index:]
-
- def filter_data(self, element, params=None, data=None, data_set=u"tests",
- continue_on_error=False):
- """Filter required data from the given jobs and builds.
-
- The output data structure is:
- - job 1
- - build 1
- - test (or suite) 1 ID:
- - param 1
- - param 2
- ...
- - param n
- ...
- - test (or suite) n ID:
- ...
- ...
- - build n
- ...
- - job n
-
- :param element: Element which will use the filtered data.
- :param params: Parameters which will be included in the output. If None,
- all parameters are included.
- :param data: If not None, this data is used instead of data specified
- in the element.
- :param data_set: The set of data to be filtered: tests, suites,
- metadata.
- :param continue_on_error: Continue if there is error while reading the
- data. The Item will be empty then
- :type element: pandas.Series
- :type params: list
- :type data: dict
- :type data_set: str
- :type continue_on_error: bool
- :returns: Filtered data.
- :rtype pandas.Series
- """
-
- try:
- if data_set == "suites":
- cond = u"True"
- elif element[u"filter"] in (u"all", u"template"):
- cond = u"True"
- else:
- cond = InputData._condition(element[u"filter"])
- logging.debug(f" Filter: {cond}")
- except KeyError:
- logging.error(u" No filter defined.")
- return None
-
- if params is None:
- params = element.get(u"parameters", None)
- if params:
- params.extend((u"type", u"status"))
-
- data_to_filter = data if data else element[u"data"]
- data = pd.Series()
- try:
- for job, builds in data_to_filter.items():
- data[job] = pd.Series()
- for build in builds:
- data[job][str(build)] = pd.Series()
- try:
- data_dict = dict(
- self.data[job][str(build)][data_set].items())
- except KeyError:
- if continue_on_error:
- continue
- return None
-
- for test_id, test_data in data_dict.items():
- if eval(cond, {u"tags": test_data.get(u"tags", u"")}):
- data[job][str(build)][test_id] = pd.Series()
- if params is None:
- for param, val in test_data.items():
- data[job][str(build)][test_id][param] = val
- else:
- for param in params:
- try:
- data[job][str(build)][test_id][param] =\
- test_data[param]
- except KeyError:
- data[job][str(build)][test_id][param] =\
- u"No Data"
- return data
-
- except (KeyError, IndexError, ValueError) as err:
- logging.error(
- f"Missing mandatory parameter in the element specification: "
- f"{repr(err)}"
- )
- return None
- except AttributeError as err:
- logging.error(repr(err))
- return None
- except SyntaxError as err:
- logging.error(
- f"The filter {cond} is not correct. Check if all tags are "
- f"enclosed by apostrophes.\n{repr(err)}"
- )
- return None
-
- def filter_tests_by_name(self, element, params=None, data_set=u"tests",
- continue_on_error=False):
- """Filter required data from the given jobs and builds.
-
- The output data structure is:
- - job 1
- - build 1
- - test (or suite) 1 ID:
- - param 1
- - param 2
- ...
- - param n
- ...
- - test (or suite) n ID:
- ...
- ...
- - build n
- ...
- - job n
-
- :param element: Element which will use the filtered data.
- :param params: Parameters which will be included in the output. If None,
- all parameters are included.
- :param data_set: The set of data to be filtered: tests, suites,
- metadata.
- :param continue_on_error: Continue if there is error while reading the
- data. The Item will be empty then
- :type element: pandas.Series
- :type params: list
- :type data_set: str
- :type continue_on_error: bool
- :returns: Filtered data.
- :rtype pandas.Series
- """
-
- include = element.get(u"include", None)
- if not include:
- logging.warning(u"No tests to include, skipping the element.")
- return None
-
- if params is None:
- params = element.get(u"parameters", None)
- if params and u"type" not in params:
- params.append(u"type")
-
- cores = element.get(u"core", None)
- if cores:
- tests = list()
- for core in cores:
- for test in include:
- tests.append(test.format(core=core))
- else:
- tests = include
-
- data = pd.Series()
- try:
- for job, builds in element[u"data"].items():
- data[job] = pd.Series()
- for build in builds:
- data[job][str(build)] = pd.Series()
- for test in tests:
- try:
- reg_ex = re.compile(str(test).lower())
- for test_id in self.data[job][
- str(build)][data_set].keys():
- if re.match(reg_ex, str(test_id).lower()):
- test_data = self.data[job][
- str(build)][data_set][test_id]
- data[job][str(build)][test_id] = pd.Series()
- if params is None:
- for param, val in test_data.items():
- data[job][str(build)][test_id]\
- [param] = val
- else:
- for param in params:
- try:
- data[job][str(build)][
- test_id][param] = \
- test_data[param]
- except KeyError:
- data[job][str(build)][
- test_id][param] = u"No Data"
- except KeyError as err:
- if continue_on_error:
- logging.debug(repr(err))
- continue
- logging.error(repr(err))
- return None
- return data
-
- except (KeyError, IndexError, ValueError) as err:
- logging.error(
- f"Missing mandatory parameter in the element "
- f"specification: {repr(err)}"
- )
- return None
- except AttributeError as err:
- logging.error(repr(err))
- return None
-
- @staticmethod
- def merge_data(data):
- """Merge data from more jobs and builds to a simple data structure.
-
- The output data structure is:
-
- - test (suite) 1 ID:
- - param 1
- - param 2
- ...
- - param n
- ...
- - test (suite) n ID:
- ...
-
- :param data: Data to merge.
- :type data: pandas.Series
- :returns: Merged data.
- :rtype: pandas.Series
- """
-
- logging.info(u" Merging data ...")
-
- merged_data = pd.Series()
- for builds in data.values:
- for item in builds.values:
- for item_id, item_data in item.items():
- merged_data[item_id] = item_data
- return merged_data
-
- def print_all_oper_data(self):
- """Print all operational data to console.
- """
-
- for job in self._input_data.values:
- for build in job.values:
- for test_id, test_data in build[u"tests"].items():
- print(f"{test_id}")
- if test_data.get(u"show-run", None) is None:
- continue
- for dut_name, data in test_data[u"show-run"].items():
- if data.get(u"runtime", None) is None:
- continue
- runtime = loads(data[u"runtime"])
- try:
- threads_nr = len(runtime[0][u"clocks"])
- except (IndexError, KeyError):
- continue
- threads = OrderedDict(
- {idx: list() for idx in range(threads_nr)})
- for item in runtime:
- for idx in range(threads_nr):
- if item[u"vectors"][idx] > 0:
- clocks = item[u"clocks"][idx] / \
- item[u"vectors"][idx]
- elif item[u"calls"][idx] > 0:
- clocks = item[u"clocks"][idx] / \
- item[u"calls"][idx]
- elif item[u"suspends"][idx] > 0:
- clocks = item[u"clocks"][idx] / \
- item[u"suspends"][idx]
- else:
- clocks = 0.0
-
- if item[u"calls"][idx] > 0:
- vectors_call = item[u"vectors"][idx] / \
- item[u"calls"][idx]
- else:
- vectors_call = 0.0
-
- if int(item[u"calls"][idx]) + int(
- item[u"vectors"][idx]) + \
- int(item[u"suspends"][idx]):
- threads[idx].append([
- item[u"name"],
- item[u"calls"][idx],
- item[u"vectors"][idx],
- item[u"suspends"][idx],
- clocks,
- vectors_call
- ])
-
- print(f"Host IP: {data.get(u'host', '')}, "
- f"Socket: {data.get(u'socket', '')}")
- for thread_nr, thread in threads.items():
- txt_table = prettytable.PrettyTable(
- (
- u"Name",
- u"Nr of Vectors",
- u"Nr of Packets",
- u"Suspends",
- u"Cycles per Packet",
- u"Average Vector Size"
- )
- )
- avg = 0.0
- for row in thread:
- txt_table.add_row(row)
- avg += row[-1]
- if len(thread) == 0:
- avg = u""
- else:
- avg = f", Average Vector Size per Node: " \
- f"{(avg / len(thread)):.2f}"
- th_name = u"main" if thread_nr == 0 \
- else f"worker_{thread_nr}"
- print(f"{dut_name}, {th_name}{avg}")
- txt_table.float_format = u".2"
- txt_table.align = u"r"
- txt_table.align[u"Name"] = u"l"
- print(f"{txt_table.get_string()}\n")
diff --git a/resources/tools/presentation/json/template_0.1.0.json b/resources/tools/presentation/json/template_0.1.0.json
deleted file mode 100644
index 7c7c76a5c1..0000000000
--- a/resources/tools/presentation/json/template_0.1.0.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "version": "0.1.0",
- "ci": "",
- "job": "",
- "build_number": "",
- "testbed": "",
- "suite_id": "",
- "suite_doc": "",
- "sut_type": "",
- "sut_version": "",
- "test_id": "",
- "test_type": "",
- "tags": [],
- "documentation": "",
- "message": "",
- "csit_commit": "",
- "csit_gerrit_change": "",
- "start_time": "",
- "end_time": "",
- "status": "",
- "results": {},
- "log": []
-}
diff --git a/resources/tools/presentation/pal.py b/resources/tools/presentation/pal.py
deleted file mode 100644
index 4f9b24fedc..0000000000
--- a/resources/tools/presentation/pal.py
+++ /dev/null
@@ -1,196 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""CSIT Presentation and Analytics Layer.
-"""
-
-import sys
-import argparse
-import logging
-
-from pal_errors import PresentationError
-from specification_parser import Specification
-from environment import Environment, clean_environment
-from static_content import prepare_static_content
-from input_data_parser import InputData
-from generator_tables import generate_tables
-from generator_plots import generate_plots
-from generator_files import generate_files
-from generator_report import generate_report
-from generator_cpta import generate_cpta
-from generator_alerts import Alerting, AlertingError
-from convert_xml_json import convert_xml_to_json
-
-
-OUTPUTS = (u"none", u"report", u"trending", u"convert-xml-to-json")
-
-
-def parse_args():
- """Parse arguments from cmd line.
-
- :returns: Parsed arguments.
- :rtype: ArgumentParser
- """
-
- parser = argparse.ArgumentParser(
- description=__doc__,
- formatter_class=argparse.RawDescriptionHelpFormatter
- )
- parser.add_argument(
- u"-s", u"--specification",
- required=True,
- type=str,
- help=u"Specification YAML file."
- )
- parser.add_argument(
- u"-r", u"--release",
- default=u"master",
- type=str,
- help=u"Release string of the product."
- )
- parser.add_argument(
- u"-w", u"--week",
- default=u"1",
- type=str,
- help=u"Calendar week when the report is published."
- )
- parser.add_argument(
- u"-l", u"--logging",
- choices=[
- u"NOTSET", u"DEBUG", u"INFO", u"WARNING", u"ERROR", u"CRITICAL"
- ],
- default=u"ERROR",
- help=u"Logging level."
- )
- parser.add_argument(
- u"-f", u"--force",
- action=u"store_true",
- help=u"Force removing the old build(s) if present."
- )
- parser.add_argument(
- u"-o", u"--print-all-oper-data",
- action=u"store_true",
- help=u"Print all operational data to console. Be careful, the output "
- u"can be really long."
- )
- parser.add_argument(
- u"-i", u"--input-file",
- type=str,
- default=u"",
- help=u"XML file generated by RobotFramework which will be processed "
- u"instead of downloading the data from Nexus and/or Jenkins. In "
- u"this case, the section 'input' in the specification file is "
- u"ignored."
- )
- parser.add_argument(
- u"-d", u"--input-directory",
- type=str,
- default=u"",
- help=u"Directory with XML file(s) generated by RobotFramework or with "
- u"sub-directories with XML file(s) which will be processed "
- u"instead of downloading the data from Nexus and/or Jenkins. In "
- u"this case, the section 'input' in the specification file is "
- u"ignored."
- )
-
- return parser.parse_args()
-
-
-def main():
- """Main function."""
-
- log_levels = {
- u"NOTSET": logging.NOTSET,
- u"DEBUG": logging.DEBUG,
- u"INFO": logging.INFO,
- u"WARNING": logging.WARNING,
- u"ERROR": logging.ERROR,
- u"CRITICAL": logging.CRITICAL
- }
-
- args = parse_args()
- logging.basicConfig(
- format=u"%(asctime)s: %(levelname)s: %(message)s",
- datefmt=u"%Y/%m/%d %H:%M:%S",
- level=log_levels[args.logging]
- )
-
- logging.info(u"Application started.")
-
- try:
- spec = Specification(args.specification)
- spec.read_specification()
- except PresentationError as err:
- logging.critical(u"Finished with error.")
- logging.critical(repr(err))
- return 1
-
- if spec.output[u"output"] not in OUTPUTS:
- logging.critical(
- f"The output {spec.output[u'output']} is not supported."
- )
- return 1
-
- return_code = 1
- try:
- env = Environment(spec.environment, args.force)
- env.set_environment()
-
- prepare_static_content(spec)
-
- data = InputData(spec, spec.output[u"output"])
- if args.input_file:
- data.process_local_file(args.input_file)
- elif args.input_directory:
- data.process_local_directory(args.input_directory)
- else:
- data.download_and_parse_data(repeat=1)
-
- if args.print_all_oper_data:
- data.print_all_oper_data()
-
- generate_tables(spec, data)
- generate_plots(spec, data)
- generate_files(spec, data)
-
- if spec.output[u"output"] == u"report":
- generate_report(args.release, spec, args.week)
- elif spec.output[u"output"] == u"trending":
- sys.stdout.write(generate_cpta(spec, data))
- try:
- alert = Alerting(spec)
- alert.generate_alerts()
- except AlertingError as err:
- logging.warning(repr(err))
- elif spec.output[u"output"] == u"convert-xml-to-json":
- convert_xml_to_json(spec, data)
- else:
- logging.info("No output will be generated.")
-
- logging.info(u"Successfully finished.")
- return_code = 0
-
- except AlertingError as err:
- logging.critical(f"Finished with an alerting error.\n{repr(err)}")
- except PresentationError as err:
- logging.critical(f"Finished with a PAL error.\n{str(err)}")
- except (KeyError, ValueError) as err:
- logging.critical(f"Finished with an error.\n{repr(err)}")
- finally:
- if spec is not None:
- clean_environment(spec.environment)
- return return_code
-
-
-if __name__ == u"__main__":
- sys.exit(main())
diff --git a/resources/tools/presentation/pal_errors.py b/resources/tools/presentation/pal_errors.py
deleted file mode 100644
index a584088d26..0000000000
--- a/resources/tools/presentation/pal_errors.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Implementation of exceptions used in the Presentation and analytics layer.
-"""
-
-import sys
-import logging
-
-
-class PresentationError(Exception):
- """Exception(s) raised by the presentation module.
-
- When raising this exception, put this information to the message in this
- order:
- - short description of the encountered problem (parameter msg),
- - relevant messages if there are any collected, e.g., from caught
- exception (optional parameter details),
- - relevant data if there are any collected (optional parameter details).
- """
-
- log_level = {
- u"DEBUG": logging.debug,
- u"INFO": logging.info,
- u"WARNING": logging.warning,
- u"ERROR": logging.error,
- u"CRITICAL": logging.critical
- }
-
- def __init__(self, msg, details=u'', level=u"CRITICAL"):
- """Sets the exception message and the level.
-
- :param msg: Short description of the encountered problem.
- :param details: Relevant messages if there are any collected, e.g.,
- from caught exception (optional parameter details), or relevant data
- if there are any collected (optional parameter details).
- :param level: Level of the error, possible choices are: "DEBUG", "INFO",
- "WARNING", "ERROR" and "CRITICAL".
- :type msg: str
- :type details: str
- :type level: str
- """
-
- super(PresentationError, self).__init__()
- self._msg = msg
- self._details = details
- self._level = level
-
- try:
- self.log_level[self._level](self._msg)
- if self._details:
- self.log_level[self._level](self._details)
- except KeyError:
- print(u"Wrong log level.")
- sys.exit(1)
-
- def __repr__(self):
- return (
- f"PresentationError(msg={self._msg!r},details={self._details!r},"
- f"level={self._level!r})"
- )
-
- def __str__(self):
- return str(self._msg)
-
- @property
- def level(self):
- """Getter - logging level.
-
- :returns: Logging level.
- :rtype: str
- """
- return self._level
diff --git a/resources/tools/presentation/pal_utils.py b/resources/tools/presentation/pal_utils.py
deleted file mode 100644
index f546aa4d10..0000000000
--- a/resources/tools/presentation/pal_utils.py
+++ /dev/null
@@ -1,352 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""General purpose utilities.
-"""
-
-import subprocess
-import math
-import logging
-import csv
-
-from os import walk, makedirs, environ
-from os.path import join, isdir
-from shutil import move, Error
-from datetime import datetime
-
-import numpy as np
-import prettytable
-
-from pandas import Series
-
-from resources.libraries.python import jumpavg
-
-from pal_errors import PresentationError
-
-
-def mean(items):
- """Calculate mean value from the items.
-
- :param items: Mean value is calculated from these items.
- :type items: list
- :returns: MEan value.
- :rtype: float
- """
-
- return float(sum(items)) / len(items)
-
-
-def stdev(items):
- """Calculate stdev from the items.
-
- :param items: Stdev is calculated from these items.
- :type items: list
- :returns: Stdev.
- :rtype: float
- """
- return Series.std(Series(items))
-
-
-def relative_change(nr1, nr2):
- """Compute relative change of two values.
-
- :param nr1: The first number.
- :param nr2: The second number.
- :type nr1: float
- :type nr2: float
- :returns: Relative change of nr1.
- :rtype: float
- """
-
- return float(((nr2 - nr1) / nr1) * 100)
-
-
-def relative_change_stdev(mean1, mean2, std1, std2):
- """Compute relative standard deviation of change of two values.
-
- The "1" values are the base for comparison.
- Results are returned as percentage (and percentual points for stdev).
- Linearized theory is used, so results are wrong for relatively large stdev.
-
- :param mean1: Mean of the first number.
- :param mean2: Mean of the second number.
- :param std1: Standard deviation estimate of the first number.
- :param std2: Standard deviation estimate of the second number.
- :type mean1: float
- :type mean2: float
- :type std1: float
- :type std2: float
- :returns: Relative change and its stdev.
- :rtype: float
- """
- mean1, mean2 = float(mean1), float(mean2)
- quotient = mean2 / mean1
- first = std1 / mean1
- second = std2 / mean2
- std = quotient * math.sqrt(first * first + second * second)
- return (quotient - 1) * 100, std * 100
-
-
-def get_files(path, extension=None, full_path=True):
- """Generates the list of files to process.
-
- :param path: Path to files.
- :param extension: Extension of files to process. If it is the empty string,
- all files will be processed.
- :param full_path: If True, the files with full path are generated.
- :type path: str
- :type extension: str
- :type full_path: bool
- :returns: List of files to process.
- :rtype: list
- """
-
- file_list = list()
- for root, _, files in walk(path):
- for filename in files:
- if extension:
- if filename.endswith(extension):
- if full_path:
- file_list.append(join(root, filename))
- else:
- file_list.append(filename)
- else:
- file_list.append(join(root, filename))
-
- return file_list
-
-
-def get_rst_title_char(level):
- """Return character used for the given title level in rst files.
-
- :param level: Level of the title.
- :type: int
- :returns: Character used for the given title level in rst files.
- :rtype: str
- """
- chars = (u'=', u'-', u'`', u"'", u'.', u'~', u'*', u'+', u'^')
- if level < len(chars):
- return chars[level]
- return chars[-1]
-
-
-def execute_command(cmd):
- """Execute the command in a subprocess and log the stdout and stderr.
-
- :param cmd: Command to execute.
- :type cmd: str
- :returns: Return code of the executed command, stdout and stderr.
- :rtype: tuple(int, str, str)
- """
-
- env = environ.copy()
- proc = subprocess.Popen(
- [cmd],
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE,
- shell=True,
- env=env)
-
- stdout, stderr = proc.communicate()
-
- if stdout:
- logging.info(stdout.decode())
- if stderr:
- logging.info(stderr.decode())
-
- if proc.returncode != 0:
- logging.error(u" Command execution failed.")
- return proc.returncode, stdout.decode(), stderr.decode()
-
-
-def get_last_successful_build_nr(jenkins_url, job_name):
- """Get the number of the last successful build of the given job.
-
- :param jenkins_url: Jenkins URL.
- :param job_name: Job name.
- :type jenkins_url: str
- :type job_name: str
- :returns: The build number as a string.
- :rtype: str
- """
- return execute_command(
- f"wget -qO- {jenkins_url}/{job_name}/lastSuccessfulBuild/buildNumber"
- )
-
-
-def get_last_completed_build_number(jenkins_url, job_name):
- """Get the number of the last completed build of the given job.
-
- :param jenkins_url: Jenkins URL.
- :param job_name: Job name.
- :type jenkins_url: str
- :type job_name: str
- :returns: The build number as a string.
- :rtype: str
- """
- return execute_command(
- f"wget -qO- {jenkins_url}/{job_name}/lastCompletedBuild/buildNumber"
- )
-
-
-def get_build_timestamp(jenkins_url, job_name, build_nr):
- """Get the timestamp of the build of the given job.
-
- :param jenkins_url: Jenkins URL.
- :param job_name: Job name.
- :param build_nr: Build number.
- :type jenkins_url: str
- :type job_name: str
- :type build_nr: int
- :returns: The timestamp.
- :rtype: datetime.datetime
- """
- timestamp = execute_command(
- f"wget -qO- {jenkins_url}/{job_name}/{build_nr}"
- )
- return datetime.fromtimestamp(timestamp/1000)
-
-
-def archive_input_data(spec):
- """Archive the report.
-
- :param spec: Specification read from the specification file.
- :type spec: Specification
- :raises PresentationError: If it is not possible to archive the input data.
- """
-
- logging.info(u" Archiving the input data files ...")
-
- extension = spec.output[u"arch-file-format"]
- data_files = list()
- for ext in extension:
- data_files.extend(get_files(
- spec.environment[u"paths"][u"DIR[WORKING,DATA]"], extension=ext))
- dst = spec.environment[u"paths"][u"DIR[STATIC,ARCH]"]
- logging.info(f" Destination: {dst}")
-
- try:
- if not isdir(dst):
- makedirs(dst)
-
- for data_file in data_files:
- logging.info(f" Moving the file: {data_file} ...")
- move(data_file, dst)
-
- except (Error, OSError) as err:
- raise PresentationError(
- u"Not possible to archive the input data.",
- repr(err)
- )
-
- logging.info(u" Done.")
-
-
-def classify_anomalies(data):
- """Process the data and return anomalies and trending values.
-
- Gather data into groups with average as trend value.
- Decorate values within groups to be normal,
- the first value of changed average as a regression, or a progression.
-
- :param data: Full data set with unavailable samples replaced by nan.
- :type data: OrderedDict
- :returns: Classification and trend values
- :rtype: 3-tuple, list of strings, list of floats and list of floats
- """
- # Nan means something went wrong.
- # Use 0.0 to cause that being reported as a severe regression.
- bare_data = [0.0 if np.isnan(sample) else sample
- for sample in data.values()]
- # TODO: Make BitCountingGroupList a subclass of list again?
- group_list = jumpavg.classify(bare_data).group_list
- group_list.reverse() # Just to use .pop() for FIFO.
- classification = []
- avgs = []
- stdevs = []
- active_group = None
- values_left = 0
- avg = 0.0
- stdv = 0.0
- for sample in data.values():
- if np.isnan(sample):
- classification.append(u"outlier")
- avgs.append(sample)
- stdevs.append(sample)
- continue
- if values_left < 1 or active_group is None:
- values_left = 0
- while values_left < 1: # Ignore empty groups (should not happen).
- active_group = group_list.pop()
- values_left = len(active_group.run_list)
- avg = active_group.stats.avg
- stdv = active_group.stats.stdev
- classification.append(active_group.comment)
- avgs.append(avg)
- stdevs.append(stdv)
- values_left -= 1
- continue
- classification.append(u"normal")
- avgs.append(avg)
- stdevs.append(stdv)
- values_left -= 1
- return classification, avgs, stdevs
-
-
-def convert_csv_to_pretty_txt(csv_file_name, txt_file_name, delimiter=u","):
- """Convert the given csv table to pretty text table.
-
- :param csv_file_name: The path to the input csv file.
- :param txt_file_name: The path to the output pretty text file.
- :param delimiter: Delimiter for csv file.
- :type csv_file_name: str
- :type txt_file_name: str
- :type delimiter: str
- """
-
- txt_table = None
- with open(csv_file_name, u"rt", encoding='utf-8') as csv_file:
- csv_content = csv.reader(csv_file, delimiter=delimiter, quotechar=u'"')
- for row in csv_content:
- if txt_table is None:
- txt_table = prettytable.PrettyTable(row)
- else:
- txt_table.add_row(
- [str(itm.replace(u"\u00B1", u"+-")) for itm in row]
- )
- if not txt_table:
- return
-
- txt_table.align = u"r"
- for itm in (u"Test Case", u"Build", u"Version", u"VPP Version"):
- txt_table.align[itm] = u"l"
-
- if txt_file_name.endswith(u".txt"):
- with open(txt_file_name, u"wt", encoding='utf-8') as txt_file:
- txt_file.write(str(txt_table))
- elif txt_file_name.endswith(u".rst"):
- with open(txt_file_name, u"wt") as txt_file:
- txt_file.write(
- u"\n"
- u".. |br| raw:: html\n\n <br />\n\n\n"
- u".. |prein| raw:: html\n\n <pre>\n\n\n"
- u".. |preout| raw:: html\n\n </pre>\n\n"
- )
- txt_file.write(
- u"\n.. only:: html\n\n"
- u" .. csv-table::\n"
- u" :header-rows: 1\n"
- u" :widths: auto\n"
- u" :align: center\n"
- f" :file: {csv_file_name.split(u'/')[-1]}\n"
- )
diff --git a/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca1.yaml b/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca1.yaml
deleted file mode 100644
index 1c52a778df..0000000000
--- a/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca1.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-# CSIT progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-# CSIT regressions.
-64b-2t1c-avf-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-64b-2t1c-avf-ethip4-ip4scale2m-rnd: 2
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 1
-64b-2t1c-avf-dot1q-l2xcbase: 3
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 7
-64b-2t1c-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-ethip4-ip4scale2m: 7
-64b-2t1c-ethip4-ip4scale2m-rnd: 2
-
-# Multiline string, empty lines (or \n) are required,
-# see https://yaml-multiline.info/
-
-footnote: "
- [1] DONE Apparent regression in ACL tests due to Gerrit 26112. With CSIT
- using changed VPP API, instead of failing, misconfigured VPP passes
- the test, albeit with reduced performance. [CSIT-1739]
-
- [2] DONE Regression in tests using random flow sequencing due to
- Gerrit 26456. Unpinned random seed to make TRex workers generate
- different sequences of packets. [CSIT-1731]
-
- [3] DONE Regression in base dot1q-l2xcbase suites due to Gerrit
- 25363. Unified dot1q handling across various tests. Previously,
- this one suite was different, using dot1q on one port only.
-
- [5] DONE Progression in tests with VPP (l2xc) inside a VM due to
- Gerrit 25309. Make VPP in VM worker placement deterministic.
- [CSIT-1738]
-
- [7] POSTPONED Possible anomaly, but stdev of results is high.
- Performance differences considered to probably be just noise.
-
- [9] OPEN Progression in all ip6 scale tests. Changes to vppinfra
- bihash may have improved code efficiency. [CSIT-1735]
-
- [10] OPEN Progression in ip6 base tests with dot1q. [CSIT-1746]
-
- [11] OPEN Progression in memif tests, mainly in
- avf-eth-l2xcbase-eth-2memif-1dcr. Two progression candidates found:
- Gerrit 24053 and Gerrit 26744. Performance results are not consistent enough
- to separate the two from other possible causes. [CSIT-1744]
-
- [12] OPEN Progression in some l2bdscale tests. [CSIT-1745]
-
- [13] DONE Stateless ACL tests have the same performance in 2005.0-4
- as in 2001.0-2. The difference shown here is inflated by an API
- change, see [1]. [CSIT-1739]
-
- [14] DONE Stateful ACL tests have better performance in 2005.0-4 as
- in 2001.0-2. The CSIT part of API change, Gerrit 26112, has fixed
- an earlier CSIT regression in the same tests. The difference shown here
- is further inflated by the API mismatch, see [1]. [CSIT-1739]
-
- [15] OPEN Progression in nat44 test (not scale ones). [CSIT-1747]
-
- [17] OPEN Progression in some vhost tests (dpdk in VM). [CSIT-1749]
-"
diff --git a/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca2.yaml b/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca2.yaml
deleted file mode 100644
index c6054fffd9..0000000000
--- a/resources/tools/presentation/rca/rca-2n-clx-2t1c-pdr-rca2.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-# VPP progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-avf-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-avf-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-avf-eth-l2xcbase-eth-2memif-1dcr: 11
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 13
-64b-2t1c-avf-ethip4udp-ip4base-nat44: 15
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 13
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-eth-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-eth-l2xcbase-eth-2memif-1dcr: 11
-64b-2t1c-ethip4-ip4base-eth-2memif-1dcr: 11
-64b-2t1c-ethip4udp-ip4base-nat44: 15
-78b-2t1c-avf-dot1q-ip6base: 10
-78b-2t1c-avf-ethip6-ip6scale200k: 9
-78b-2t1c-avf-ethip6-ip6scale20k: 9
-78b-2t1c-avf-ethip6-ip6scale2m: 9
-78b-2t1c-ethip6-ip6scale200k: 9
-78b-2t1c-ethip6-ip6scale20k: 9
-78b-2t1c-ethip6-ip6scale2m: 9
-# VPP regressions.
-
-# Footnotes are in RCA1 file.
diff --git a/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca1.yaml b/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca1.yaml
deleted file mode 100644
index b2103da304..0000000000
--- a/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca1.yaml
+++ /dev/null
@@ -1,79 +0,0 @@
-# CSIT progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 7
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm: 7
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2patch: 7
-64b-2t1c-avf-eth-l2xcbase: 7
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-eth-l2xcbase: 7
-64b-2t1c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-# CSIT regressions.
-64b-2t1c-avf-dot1q-ip4base: 7
-64b-2t1c-avf-dot1q-l2xcbase: 7
-64b-2t1c-avf-eth-l2bdscale1mmaclrn: 7
-64b-2t1c-avf-ethip4-ip4scale200k: 7
-64b-2t1c-avf-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-avf-ethip4-ip4scale20k-rnd: 2
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-64b-2t1c-avf-ethip4-ip4scale2m-rnd: 2
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-nat44: 7
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 1
-64b-2t1c-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-ethip4-ip4scale2m: 7
-64b-2t1c-ethip4-ip4scale2m-rnd: 2
-78b-2t1c-avf-ethip6-ip6scale20k: 7
-78b-2t1c-avf-ethip6-ip6base: 7
-
-# Multiline string, empty lines (or \n) are required,
-# see https://yaml-multiline.info/
-
-footnote: "
- [1] DONE Apparent regression in ACL tests due to Gerrit 26112. With CSIT
- using changed VPP API, instead of failing, misconfigured VPP passes
- the test, albeit with reduced performance. [CSIT-1739]
-
- [2] DONE Regression in tests using random flow sequencing due to
- Gerrit 26456. Unpinned random seed to make TRex workers generate
- different sequences of packets. [CSIT-1731]
-
- [5] DONE Progression in tests with VPP (l2xc) inside a VM due to
- Gerrit 25309. Make VPP in VM worker placement deterministic.
- [CSIT-1738]
-
- [7] POSTPONED Possible anomaly, but stdev of results is high.
- Performance differences considered to probably be just noise.
-
- [8] DONE Regressions in some tests with VPP in VM due to Gerrit
- 26744. Switch to clang-9 compiler identified as cause. Tests using
- l2xcbase as vswitch with small stdev used for bisect. [CSIT-1741]
-
- [9] OPEN Progression in all ip6 scale tests. Changes to vppinfra
- bihash may have improved code efficiency. [CSIT-1735]
-
- [11] OPEN Progression in memif tests, mainly in
- avf-eth-l2xcbase-eth-2memif-1dcr. Two progression candidates found:
- Gerrit 24053 and Gerrit 26744. Performance results are not consistent enough
- to separate the two from other possible causes. [CSIT-1744]
-
- [12] OPEN Progression in some l2bdscale tests. [CSIT-1745]
-
- [13] DONE Stateless ACL tests have the same performance in 2005.0-4
- as in 2001.0-2. The difference shown here is inflated by an API
- change, see [1]. [CSIT-1739]
-
- [14] DONE Stateful ACL tests have better performance in 2005.0-4 as
- in 2001.0-2. The CSIT part of API change, Gerrit 26112, has fixed
- an earlier CSIT regression in the same tests. The difference shown here
- is further inflated by the API mismatch, see [1]. [CSIT-1739]
-
- [15] OPEN Progression in nat44 test (not scale ones). [CSIT-1747]
-
- [17] OPEN Progression in some vhost tests (dpdk in VM). [CSIT-1749]
-"
diff --git a/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca2.yaml b/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca2.yaml
deleted file mode 100644
index 2a20b5ea37..0000000000
--- a/resources/tools/presentation/rca/rca-2n-skx-2t1c-ndr-rca2.yaml
+++ /dev/null
@@ -1,37 +0,0 @@
-# VPP progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm: 7
-64b-2t1c-avf-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-avf-eth-l2xcbase-eth-2memif-1dcr: 11
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 13
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 13
-78b-2t1c-avf-ethip6-ip6scale200k: 7
-78b-2t1c-avf-ethip6-ip6scale2m: 7
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-ethip4udp-ip4base-nat44: 15
-78b-2t1c-ethip6-ip6scale200k: 9
-78b-2t1c-ethip6-ip6scale20k: 9
-78b-2t1c-ethip6-ip6scale2m: 9
-# VPP regressions.
-64b-2t1c-avf-dot1q-ip4base: 7
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-avf-eth-l2bdbasemaclrn: 7
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-avf-eth-l2bdscale1mmaclrn: 7
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 8
-64b-2t1c-avf-ethip4-ip4scale200k: 7
-64b-2t1c-avf-ethip4-ip4scale200k-rnd: 7
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-64b-2t1c-avf-ethip4-ip4scale2m-rnd: 7
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 8
-
-# Footnotes are in RCA1 file.
diff --git a/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca1.yaml b/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca1.yaml
deleted file mode 100644
index 38d67cd539..0000000000
--- a/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca1.yaml
+++ /dev/null
@@ -1,74 +0,0 @@
-# CSIT progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2xcbase: 4
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-# CSIT regressions.
-64b-2t1c-avf-dot1q-l2xcbase: 3
-64b-2t1c-avf-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-avf-ethip4-ip4scale2m-rnd: 2
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 1
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 1
-64b-2t1c-ethip4-ip4scale200k-rnd: 2
-64b-2t1c-ethip4-ip4scale2m: 7
-64b-2t1c-ethip4-ip4scale2m-rnd: 2
-
-# Multiline string, empty lines (or \n) are required,
-# see https://yaml-multiline.info/
-
-footnote: "
- [1] DONE Apparent regression in ACL tests due to Gerrit 26112. With CSIT
- using changed VPP API, instead of failing, misconfigured VPP passes
- the test, albeit with reduced performance. [CSIT-1739]
-
- [2] DONE Regression in tests using random flow sequencing due to
- Gerrit 26456. Unpinned random seed to make TRex workers generate
- different sequences of packets. [CSIT-1731]
-
- [3] DONE Regression in base dot1q-l2xcbase suites due to Gerrit
- 25363. Unified dot1q handling across various tests. Previously,
- this one suite was different, using dot1q on one port only.
-
- [4] DONE Progression in high performance tests due to Gerrit 26445.
- TRex setting improvement. [CSIT-1740]
-
- [5] DONE Progression in tests with VPP (l2xc) inside a VM due to
- Gerrit 25309. Make VPP in VM worker placement deterministic.
- [CSIT-1738]
-
- [7] POSTPONED Possible anomaly, but stdev of results is high.
- Performance differences considered to probably be just noise.
-
- [8] DONE Regressions in some tests with VPP in VM due to Gerrit
- 26744. Switch to clang-9 compiler identified as cause. Tests using
- l2xcbase as vswitch with small stdev used for bisect. [CSIT-1741]
-
- [9] OPEN Progression in all ip6 scale tests. Changes to vppinfra
- bihash may have improved code efficiency. [CSIT-1735]
-
- [11] OPEN Progression in memif tests, mainly in
- avf-eth-l2xcbase-eth-2memif-1dcr. Two progression candidates found:
- Gerrit 24053 and Gerrit 26744. Performance results are not consistent enough
- to separate the two from other possible causes. [CSIT-1744]
-
- [12] OPEN Progression in some l2bdscale tests. [CSIT-1745]
-
- [13] DONE Stateless ACL tests have the same performance in 2005.0-4
- as in 2001.0-2. The difference shown here is inflated by an API
- change, see [1]. [CSIT-1739]
-
- [14] DONE Stateful ACL tests have better performance in 2005.0-4 as
- in 2001.0-2. The CSIT part of API change, Gerrit 26112, has fixed
- an earlier CSIT regression in the same tests. The difference shown here
- is further inflated by the API mismatch, see [1]. [CSIT-1739]
-
- [15] OPEN Progression in nat44 test (not scale ones). [CSIT-1747]
-
- [17] OPEN Progression in some vhost tests (dpdk in VM). [CSIT-1749]
-"
diff --git a/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca2.yaml b/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca2.yaml
deleted file mode 100644
index 32c8055d6b..0000000000
--- a/resources/tools/presentation/rca/rca-2n-skx-2t1c-pdr-rca2.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-# VPP progressions.
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-avf-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-avf-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-avf-eth-l2xcbase-eth-2memif-1dcr: 11
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-iacl50sl-10kflows: 13
-64b-2t1c-avf-ethip4udp-ip4base-nat44: 15
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sf-10kflows: 14
-64b-2t1c-avf-ethip4udp-ip4base-oacl50sl-10kflows: 13
-64b-2t1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-eth-l2bdscale10kmaclr: 12
-64b-2t1c-eth-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-ethip4-ip4base-eth-2memif-1dcr: 11
-64b-2t1c-ethip4udp-ip4base-nat44: 15
-78b-2t1c-avf-ethip6-ip6scale200k: 9
-78b-2t1c-avf-ethip6-ip6scale2m: 9
-78b-2t1c-ethip6-ip6scale200k: 9
-78b-2t1c-ethip6-ip6scale2m: 9
-78b-2t1c-ethip6-ip6scale20k: 9
-78b-2t1c-avf-ethip6-ip6scale20k: 9
-# VPP regressions.
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-64b-2t1c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 8
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 8
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-
-# Footnotes are in RCA1 file.
diff --git a/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca1.yaml b/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca1.yaml
deleted file mode 100644
index 2c55514909..0000000000
--- a/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca1.yaml
+++ /dev/null
@@ -1,60 +0,0 @@
-# CSIT progressions.
-64b-2t1c-avf-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-avf-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 7
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-eth-l2xcbase: 4
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 5
-64b-2t1c-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4: 5
-64b-2t1c-ethip4-ip4base-eth-2vhostvr1024-1vm: 7
-# CSIT regressions.
-64b-2t1c-avf-eth-l2bdscale1mmaclrn: 7
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-64b-2t1c-ethip4-ip4scale2m: 7
-imix-2t1c-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm: 6
-imix-2t1c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm: 6
-imix-2t1c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm: 6
-imix-2t1c-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm: 6
-imix-2t1c-ethip4ipsec4tnlsw-ip4base-int-aes256gcm: 6
-
-# Multiline string, empty lines (or \n) are required,
-# see https://yaml-multiline.info/
-
-footnote: "
- [4] DONE Progression in high performance tests due to Gerrit 26445.
- TRex setting improvement. [CSIT-1740]
-
- [5] DONE Progression in tests with VPP (l2xc) inside a VM due to
- Gerrit 25309. Make VPP in VM worker placement deterministic.
- [CSIT-1738]
-
- [6] DONE Apparent regression in CSIT is caused by VPP renaming
- the most performant IPsec plugin, thus the current CSIT version used with
- the previous VPP version measures the less performant VPP IPsec plugin.
- [CSIT-1742]
-
- [7] POSTPONED Possible anomaly, but stdev of results is high.
- Performance differences considered to probably be just noise.
-
- [8] DONE Regressions in some tests with VPP in VM due to Gerrit
- 26744. Switch to clang-9 compiler identified as cause. Tests using
- l2xcbase as vswitch with small stdev used for bisect. [CSIT-1741]
-
- [9] OPEN Progression in all ip6 scale tests. Changes to vppinfra
- bihash may have improved code efficiency. [CSIT-1735]
-
- [10] OPEN Progression in ip6 base tests with dot1q. [CSIT-1746]
-
- [11] OPEN Progression in memif tests, mainly in
- avf-eth-l2xcbase-eth-2memif-1dcr. Two progression candidates found:
- Gerrit 24053 and Gerrit 26744. Performance results are not consistent enough
- to separate the two from other possible causes. [CSIT-1744]
-
- [12] OPEN Progression in some l2bdscale tests. [CSIT-1745]
-
- [16] OPEN Apparent progression in IPsec tests, only for aes128cbc-hmac512sha.
- Considering [6], the positive difference is not large enough,
- so there was probably a VPP regression. [CSIT-1748]
-
- [17] OPEN Progression in some vhost tests (dpdk in VM). [CSIT-1749]
-"
diff --git a/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca2.yaml b/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca2.yaml
deleted file mode 100644
index 25b4e65271..0000000000
--- a/resources/tools/presentation/rca/rca-3n-skx-2t1c-pdr-rca2.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-# VPP progressions.
-1518b-2t1c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha: 16
-64b-2t1c-avf-eth-l2bdscale100kmaclrn: 12
-64b-2t1c-avf-eth-l2bdscale10kmaclrn: 12
-64b-2t1c-avf-eth-l2xcbase-eth-2memif-1dcr: 11
-64b-2t1c-avf-eth-l2xcbase-eth-2memif-1lxc: 11
-64b-2t1c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr: 11
-64b-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-avf-ethip4-ip4base-eth-2vhostvr1024-1vm: 7
-64b-2t1c-eth-l2bdbasemaclrn-eth-2memif-1lxc: 11
-64b-2t1c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm: 17
-64b-2t1c-ethip4-ip4base-eth-2memif-1dcr: 11
-64b-2t1c-ethip4-ip4base-eth-2vhostvr1024-1vm: 17
-78b-2t1c-avf-dot1q-ip6base: 10
-78b-2t1c-avf-ethip6-ip6scale200k: 9
-78b-2t1c-avf-ethip6-ip6scale20k: 9
-78b-2t1c-avf-ethip6-ip6scale2m: 9
-78b-2t1c-ethip6-ip6scale2m: 9
-imix-2t1c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha: 16
-# VPP regressions.
-64b-2t1c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc: 8
-64b-2t1c-avf-ethip4-ip4scale2m: 7
-
-# Footnotes are in RCA1 file.
diff --git a/resources/tools/presentation/requirements.txt b/resources/tools/presentation/requirements.txt
deleted file mode 100644
index 1c976e273e..0000000000
--- a/resources/tools/presentation/requirements.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-Sphinx==3.5.4
-sphinx-rtd-theme==0.5.2
-sphinxcontrib-programoutput==0.17
-robotframework==3.1.2
-PyYAML==5.1
-numpy==1.17.3
-pandas==0.25.3
-plotly==4.1.1
-PTable==0.9.2
-hdrhistogram==0.6.1
-urllib3==1.25.6
-boto3==1.17.78
-botocore==1.20.78
diff --git a/resources/tools/presentation/run_convert.sh b/resources/tools/presentation/run_convert.sh
deleted file mode 100755
index 814fab3a28..0000000000
--- a/resources/tools/presentation/run_convert.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-set -x
-
-# set default values in config array
-typeset -A CFG
-typeset -A DIR
-
-DIR[WORKING]=_tmp
-
-# Create working directories
-mkdir ${DIR[WORKING]}
-
-# Create virtual environment
-virtualenv -p $(which python3) ${DIR[WORKING]}/env
-source ${DIR[WORKING]}/env/bin/activate
-
-# FIXME: s3 config (until migrated to vault, then account will be reset)
-mkdir -p ${HOME}/.aws
-echo "[nomad-s3]" >> ${HOME}/.aws/config
-echo "[nomad-s3]
-aws_access_key_id = csit
-aws_secret_access_key = Csit1234" >> ${HOME}/.aws/credentials
-
-# Install python dependencies:
-pip3 install -r requirements.txt
-
-export PYTHONPATH=`pwd`:`pwd`/../../../
-
-python pal.py \
- --specification specifications/converter \
- --logging INFO \
-
-RETURN_STATUS=$(echo $?)
-exit ${RETURN_STATUS}
diff --git a/resources/tools/presentation/specification_parser.py b/resources/tools/presentation/specification_parser.py
deleted file mode 100644
index 00614cf62f..0000000000
--- a/resources/tools/presentation/specification_parser.py
+++ /dev/null
@@ -1,917 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Specification
-
-Parsing of the specification YAML file.
-"""
-
-
-from os.path import join, exists
-
-import logging
-from pprint import pformat
-
-from yaml import load, FullLoader, YAMLError
-
-from pal_errors import PresentationError
-from pal_utils import (
- get_last_successful_build_nr, get_last_completed_build_number
-)
-
-
-class Specification:
- """Specification of Presentation and analytics layer.
-
- - based on specification specified in the specification YAML files
- - presentation and analytics layer is model driven
- """
-
- # Tags are used in specification YAML file and replaced while the file is
- # parsed.
- TAG_OPENER = u"{"
- TAG_CLOSER = u"}"
-
- def __init__(self, cfg_dir):
- """Initialization.
-
- :param cfg_dir: Directory with the specification files.
- :type cfg_dir: str
- """
- self._cfg_dir = cfg_dir
- self._cfg_yaml = None
-
- self._specification = {
- u"environment": dict(),
- u"data_sets": dict(),
- u"layouts": dict(),
- u"static": dict(),
- u"input": dict(),
- u"output": dict(),
- u"tables": list(),
- u"plots": list(),
- u"files": list(),
- u"cpta": dict()
- }
-
- @property
- def specification(self):
- """Getter - specification.
-
- :returns: Specification.
- :rtype: dict
- """
- return self._specification
-
- @property
- def environment(self):
- """Getter - environment.
-
- :returns: Environment specification.
- :rtype: dict
- """
- return self._specification[u"environment"]
-
- @property
- def data_sets(self):
- """Getter - data_sets.
-
- :returns: Data sets.
- :rtype: dict
- """
- return self._specification[u"data_sets"]
-
- @property
- def layouts(self):
- """Getter - layouts.
-
- :returns: Layouts.
- :rtype: dict
- """
- return self._specification[u"layouts"]
-
- @property
- def static(self):
- """Getter - static content.
-
- :returns: Static content specification.
- :rtype: dict
- """
- return self._specification[u"static"]
-
- @property
- def mapping(self):
- """Getter - Mapping.
-
- :returns: Mapping of the old names of test cases to the new (actual)
- one.
- :rtype: dict
- """
- return self.environment[u"mapping"]
-
- @property
- def ignore(self):
- """Getter - Ignore list.
-
- :returns: List of ignored test cases.
- :rtype: list
- """
- return self.environment[u"ignore"]
-
- @property
- def alerting(self):
- """Getter - Alerting.
-
- # TODO
-
- :returns: Specification of alerts.
- :rtype: dict
- """
- return self.environment[u"alerting"]
-
- @property
- def input(self):
- """Getter - specification - inputs.
- - jobs and builds.
-
- :returns: Inputs.
- :rtype: dict
- """
- return self._specification[u"input"]
-
- @input.setter
- def input(self, new_value):
- """Setter - specification - inputs.
-
- :param new_value: New value to be set.
- :type new_value: dict
- """
- self._specification[u"input"] = new_value
-
- def add_build(self, job, build):
- """Add a build to the list of builds if it does not exist there.
-
- :param job: The job which run the build.
- :param build: The build to be added.
- :type job: str
- :type build: dict
- """
- if self.input.get(job, None) is None:
- self.input[job] = list()
- for existing_build in self.input[job]:
- if existing_build[u"build"] == build[u"build"]:
- break
- else:
- self.input[job].append(build)
-
- @property
- def output(self):
- """Getter - specification - output formats and versions to be generated.
- - formats: html, pdf
- - versions: full, ...
-
- :returns: Outputs to be generated.
- :rtype: dict
- """
- return self._specification[u"output"]
-
- @property
- def tables(self):
- """Getter - tables to be generated.
-
- :returns: List of specifications of tables to be generated.
- :rtype: list
- """
- return self._specification.get(u"tables", list())
-
- @property
- def plots(self):
- """Getter - plots to be generated.
-
- :returns: List of specifications of plots to be generated.
- :rtype: list
- """
- return self._specification.get(u"plots", list())
-
- @property
- def files(self):
- """Getter - files to be generated.
-
- :returns: List of specifications of files to be generated.
- :rtype: list
- """
- return self._specification.get(u"files", list())
-
- @property
- def cpta(self):
- """Getter - Continuous Performance Trending and Analysis to be
- generated.
-
- :returns: List of specifications of Continuous Performance Trending and
- Analysis to be generated.
- :rtype: list
- """
- return self._specification[u"cpta"]
-
- def set_input_state(self, job, build_nr, state):
- """Set the state of the input.
-
- :param job: Job name.
- :param build_nr: Build number.
- :param state: The new input state.
- :type job: str
- :type build_nr: int
- :type state: str
- :raises: PresentationError if wrong job and/or build is provided.
- """
-
- try:
- for build in self.input[job]:
- if build[u"build"] == build_nr:
- build[u"status"] = state
- break
- else:
- raise PresentationError(
- f"Build {build_nr} is not defined for job {job} in "
- f"specification file."
- )
- except KeyError:
- raise PresentationError(
- f"Job {job} and build {build_nr} is not defined in "
- f"specification file."
- )
-
- def set_input_file_name(self, job, build_nr, file_name):
- """Set the file name for the input.
-
- :param job: Job name.
- :param build_nr: Build number.
- :param file_name: The new file name.
- :type job: str
- :type build_nr: int
- :type file_name: str
- :raises: PresentationError if wrong job and/or build is provided.
- """
-
- try:
- for build in self.input[job]:
- if build[u"build"] == build_nr:
- build[u"file-name"] = file_name
- break
- else:
- raise PresentationError(
- f"Build {build_nr} is not defined for job {job} in "
- f"specification file."
- )
- except KeyError:
- raise PresentationError(
- f"Job {job} and build {build_nr} is not defined in "
- f"specification file."
- )
-
- def _get_build_number(self, job, build_type):
- """Get the number of the job defined by its name:
- - lastSuccessfulBuild
- - lastCompletedBuild
-
- :param job: Job name.
- :param build_type: Build type:
- - lastSuccessfulBuild
- - lastCompletedBuild
- :type job" str
- :raises PresentationError: If it is not possible to get the build
- number.
- :returns: The build number.
- :rtype: int
- """
-
- # defined as a range <start, end>
- if build_type == u"lastSuccessfulBuild":
- # defined as a range <start, lastSuccessfulBuild>
- ret_code, build_nr, _ = get_last_successful_build_nr(
- self.environment[u"urls"][u"URL[JENKINS,CSIT]"], job)
- elif build_type == u"lastCompletedBuild":
- # defined as a range <start, lastCompletedBuild>
- ret_code, build_nr, _ = get_last_completed_build_number(
- self.environment[u"urls"][u"URL[JENKINS,CSIT]"], job)
- else:
- raise PresentationError(f"Not supported build type: {build_type}")
- if ret_code != 0:
- raise PresentationError(
- f"Not possible to get the build number of {job}."
- )
- try:
- build_nr = int(build_nr)
- return build_nr
- except ValueError as err:
- raise PresentationError(
- f"Not possible to get the build number of {job}. Reason:\n"
- f"{repr(err)}"
- )
-
- def _get_type_index(self, item_type):
- """Get index of item type (environment, input, output, ...) in
- specification YAML file.
-
- :param item_type: Item type: Top level items in specification YAML file,
- e.g.: environment, input, output.
- :type item_type: str
- :returns: Index of the given item type.
- :rtype: int
- """
-
- index = 0
- for item in self._cfg_yaml:
- if item[u"type"] == item_type:
- return index
- index += 1
- return None
-
- def _find_tag(self, text):
- """Find the first tag in the given text. The tag is enclosed by the
- TAG_OPENER and TAG_CLOSER.
-
- :param text: Text to be searched.
- :type text: str
- :returns: The tag, or None if not found.
- :rtype: str
- """
- try:
- start = text.index(self.TAG_OPENER)
- end = text.index(self.TAG_CLOSER, start + 1) + 1
- return text[start:end]
- except ValueError:
- return None
-
- def _replace_tags(self, data, src_data=None):
- """Replace tag(s) in the data by their values.
-
- :param data: The data where the tags will be replaced by their values.
- :param src_data: Data where the tags are defined. It is dictionary where
- the key is the tag and the value is the tag value. If not given,
- 'data' is used instead.
- :type data: str, list or dict
- :type src_data: dict
- :returns: Data with the tags replaced.
- :rtype: str, list or dict
- :raises: PresentationError if it is not possible to replace the tag or
- the data is not the supported data type (str, list or dict).
- """
-
- if src_data is None:
- src_data = data
-
- if isinstance(data, str):
- tag = self._find_tag(data)
- if tag is not None:
- data = data.replace(tag, src_data[tag[1:-1]])
- return data
-
- if isinstance(data, list):
- new_list = list()
- for item in data:
- new_list.append(self._replace_tags(item, src_data))
- return new_list
-
- if isinstance(data, dict):
- counter = 0
- for key, value in data.items():
- tag = self._find_tag(value)
- if tag is not None:
- try:
- data[key] = value.replace(tag, src_data[tag[1:-1]])
- counter += 1
- except KeyError:
- raise PresentationError(
- f"Not possible to replace the tag {tag}"
- )
- if counter:
- self._replace_tags(data, src_data)
- return data
-
- raise PresentationError(u"Replace tags: Not supported data type.")
-
- def _parse_env(self):
- """Parse environment specification in the specification YAML file.
- """
-
- logging.info(u"Parsing specification: ENVIRONMENT")
-
- idx = self._get_type_index(u"environment")
- if idx is None:
- return
-
- self._specification[u"environment"][u"spec-files"] = \
- self._cfg_yaml[idx].get(u"spec-files", None)
-
- try:
- self._specification[u"environment"][u"paths"] = \
- self._replace_tags(self._cfg_yaml[idx][u"paths"])
- except KeyError:
- self._specification[u"environment"][u"paths"] = None
-
- self._specification[u"environment"][u"data-sources"] = \
- self._cfg_yaml[idx].get(u"data-sources", tuple())
- # Add statistics:
- for source in self._specification[u"environment"][u"data-sources"]:
- source[u"successful-downloads"] = 0
-
- self._specification[u"environment"][u"make-dirs"] = \
- self._cfg_yaml[idx].get(u"make-dirs", None)
-
- self._specification[u"environment"][u"remove-dirs"] = \
- self._cfg_yaml[idx].get(u"remove-dirs", None)
-
- self._specification[u"environment"][u"build-dirs"] = \
- self._cfg_yaml[idx].get(u"build-dirs", None)
-
- self._specification[u"environment"][u"testbeds"] = \
- self._cfg_yaml[idx].get(u"testbeds", None)
-
- self._specification[u"environment"][u"limits"] = \
- self._cfg_yaml[idx].get(u"limits", None)
-
- self._specification[u"environment"][u"urls"] = \
- self._cfg_yaml[idx].get(u"urls", None)
-
- self._specification[u"environment"][u"archive-inputs"] = \
- self._cfg_yaml[idx].get(u"archive-inputs", False)
-
- self._specification[u"environment"][u"reverse-input"] = \
- self._cfg_yaml[idx].get(u"reverse-input", False)
-
- self._specification[u"environment"][u"time-period"] = \
- self._cfg_yaml[idx].get(u"time-period", None)
-
- self._specification[u"environment"][u"alerting"] = \
- self._cfg_yaml[idx].get(u"alerting", None)
-
- self._specification[u"environment"][u"mapping-file"] = \
- self._cfg_yaml[idx].get(u"mapping-file", None)
-
- self._specification[u"environment"][u"ignore-list"] = \
- self._cfg_yaml[idx].get(u"ignore-list", None)
-
- # Mapping table:
- self._load_mapping_table()
-
- # Ignore list:
- self._load_ignore_list()
-
- def _parse_layouts(self):
- """Parse layouts specification in the specification YAML file.
- """
-
- logging.info(u"Parsing specification: LAYOUTS")
-
- idx = self._get_type_index(u"layouts")
- if idx is None:
- return
-
- try:
- self._specification[u"layouts"] = self._cfg_yaml[idx]
- except KeyError:
- raise PresentationError(u"No layouts defined.")
-
- def _parse_data_sets(self):
- """Parse data sets specification in the specification YAML file.
- """
-
- logging.info(u"Parsing specification: DATA SETS")
-
- idx = self._get_type_index(u"data-sets")
- if idx is None:
- return
-
- try:
- self._specification[u"data_sets"] = self._cfg_yaml[idx]
- except KeyError:
- raise PresentationError(u"No Data sets defined.")
-
- # Replace ranges by lists
- for set_name, data_set in self.data_sets.items():
- if not isinstance(data_set, dict):
- continue
- for job, builds in data_set.items():
- if not builds:
- continue
- if isinstance(builds, dict):
- build_end = builds.get(u"end", None)
- max_builds = builds.get(u"max-builds", None)
- reverse = builds.get(u"reverse", False)
- try:
- build_end = int(build_end)
- except ValueError:
- # defined as a range <start, build_type>
- build_end = self._get_build_number(job, build_end)
- builds = list(range(builds[u"start"], build_end + 1))
- if max_builds and max_builds < len(builds):
- builds = builds[-max_builds:]
- if reverse:
- builds.reverse()
- self.data_sets[set_name][job] = builds
- elif isinstance(builds, list):
- for idx, item in enumerate(builds):
- try:
- builds[idx] = int(item)
- except ValueError:
- # defined as a range <build_type>
- builds[idx] = self._get_build_number(job, item)
-
- # Add sub-sets to sets (only one level):
- for set_name, data_set in self.data_sets.items():
- if isinstance(data_set, list):
- new_set = dict()
- for item in data_set:
- try:
- for key, val in self.data_sets[item].items():
- new_set[key] = val
- except KeyError:
- raise PresentationError(
- f"Data set {item} is not defined."
- )
- self.data_sets[set_name] = new_set
-
- def _load_mapping_table(self):
- """Load a mapping table if it is specified. If not, use empty dict.
- """
-
- mapping_file_name = self.environment.get(u"mapping-file", None)
- if mapping_file_name:
- try:
- with open(mapping_file_name, u'r') as mfile:
- mapping = load(mfile, Loader=FullLoader)
- # Make sure everything is lowercase
- self.environment[u"mapping"] = \
- {key.lower(): val.lower() for key, val in
- mapping.items()}
- logging.debug(f"Loaded mapping table:\n{mapping}")
- except (YAMLError, IOError) as err:
- raise PresentationError(
- msg=f"An error occurred while parsing the mapping file "
- f"{mapping_file_name}",
- details=repr(err)
- )
- else:
- self.environment[u"mapping"] = dict()
-
- def _load_ignore_list(self):
- """Load an ignore list if it is specified. If not, use empty list.
- """
-
- ignore_list_name = self.environment.get(u"ignore-list", None)
- if ignore_list_name:
- try:
- with open(ignore_list_name, u'r') as ifile:
- ignore = load(ifile, Loader=FullLoader)
- # Make sure everything is lowercase
- self.environment[u"ignore"] = \
- [item.lower() for item in ignore]
- logging.debug(f"Loaded ignore list:\n{ignore}")
- except (YAMLError, IOError) as err:
- raise PresentationError(
- msg=f"An error occurred while parsing the ignore list file "
- f"{ignore_list_name}.",
- details=repr(err)
- )
- else:
- self.environment[u"ignore"] = list()
-
- def _parse_output(self):
- """Parse output specification in the specification YAML file.
-
- :raises: PresentationError if there is no output defined.
- """
-
- logging.info(u"Parsing specification: OUTPUT")
-
- idx = self._get_type_index(u"output")
- if idx is None:
- raise PresentationError(u"No output defined.")
-
- try:
- self._specification[u"output"] = self._cfg_yaml[idx]
- except (KeyError, IndexError):
- raise PresentationError(u"No output defined.")
-
- def _parse_static(self):
- """Parse specification of the static content in the specification YAML
- file.
- """
-
- logging.info(u"Parsing specification: STATIC CONTENT")
-
- idx = self._get_type_index(u"static")
- if idx is None:
- logging.warning(u"No static content specified.")
- self._specification[u"static"] = dict()
- return
-
- for key, value in self._cfg_yaml[idx].items():
- if isinstance(value, str):
- try:
- self._cfg_yaml[idx][key] = self._replace_tags(
- value, self._specification[u"environment"][u"paths"])
- except KeyError:
- pass
-
- self._specification[u"static"] = self._cfg_yaml[idx]
-
- def _parse_elements_tables(self, table):
- """Parse tables from the specification YAML file.
-
- :param table: Table to be parsed from the specification file.
- :type table: dict
- :raises PresentationError: If wrong data set is used.
- """
-
- try:
- table[u"template"] = self._replace_tags(
- table[u"template"],
- self._specification[u"environment"][u"paths"])
- except KeyError:
- pass
-
- # Add data sets
- try:
- for item in (u"reference", u"compare"):
- if table.get(item, None):
- data_set = table[item].get(u"data", None)
- if isinstance(data_set, str):
- table[item][u"data"] = self.data_sets[data_set]
- data_set = table[item].get(u"data-replacement", None)
- if isinstance(data_set, str):
- table[item][u"data-replacement"] = \
- self.data_sets[data_set]
-
- if table.get(u"columns", None):
- for i in range(len(table[u"columns"])):
- data_set = table[u"columns"][i].get(u"data-set", None)
- if isinstance(data_set, str):
- table[u"columns"][i][u"data-set"] = \
- self.data_sets[data_set]
- data_set = table[u"columns"][i].get(
- u"data-replacement", None)
- if isinstance(data_set, str):
- table[u"columns"][i][u"data-replacement"] = \
- self.data_sets[data_set]
-
- if table.get(u"lines", None):
- for i in range(len(table[u"lines"])):
- data_set = table[u"lines"][i].get(u"data-set", None)
- if isinstance(data_set, str):
- table[u"lines"][i][u"data-set"] = \
- self.data_sets[data_set]
-
- except KeyError:
- raise PresentationError(
- f"Wrong set '{data_set}' used in {table.get(u'title', u'')}."
- )
-
- self._specification[u"tables"].append(table)
-
- def _parse_elements_plots(self, plot):
- """Parse plots from the specification YAML file.
-
- :param plot: Plot to be parsed from the specification file.
- :type plot: dict
- :raises PresentationError: If plot layout is not defined.
- """
-
- # Add layout to the plots:
- layout = plot[u"layout"].get(u"layout", None)
- if layout is not None:
- plot[u"layout"].pop(u"layout")
- try:
- for key, val in self.layouts[layout].items():
- plot[u"layout"][key] = val
- except KeyError:
- raise PresentationError(f"Layout {layout} is not defined.")
- self._specification[u"plots"].append(plot)
-
- def _parse_elements_files(self, file):
- """Parse files from the specification YAML file.
-
- :param file: File to be parsed from the specification file.
- :type file: dict
- """
-
- try:
- file[u"dir-tables"] = self._replace_tags(
- file[u"dir-tables"],
- self._specification[u"environment"][u"paths"])
- except KeyError:
- pass
- self._specification[u"files"].append(file)
-
- def _parse_elements_cpta(self, cpta):
- """Parse cpta from the specification YAML file.
-
- :param cpta: cpta to be parsed from the specification file.
- :type cpta: dict
- :raises PresentationError: If wrong data set is used or if plot layout
- is not defined.
- """
-
- for plot in cpta[u"plots"]:
- # Add layout to the plots:
- layout = plot.get(u"layout", None)
- if layout is not None:
- try:
- plot[u"layout"] = self.layouts[layout]
- except KeyError:
- raise PresentationError(f"Layout {layout} is not defined.")
- # Add data sets:
- if isinstance(plot.get(u"data", None), str):
- data_set = plot[u"data"]
- try:
- plot[u"data"] = self.data_sets[data_set]
- except KeyError:
- raise PresentationError(
- f"Data set {data_set} is not defined."
- )
- self._specification[u"cpta"] = cpta
-
- def _parse_elements(self):
- """Parse elements (tables, plots, ..) specification in the specification
- YAML file.
- """
-
- logging.info(u"Parsing specification: ELEMENTS")
-
- count = 1
- for element in self._cfg_yaml:
-
- # Replace tags:
- try:
- element[u"output-file"] = self._replace_tags(
- element[u"output-file"],
- self.environment[u"paths"]
- )
- except KeyError:
- pass
-
- try:
- element[u"input-file"] = self._replace_tags(
- element[u"input-file"],
- self.environment[u"paths"]
- )
- except KeyError:
- pass
-
- try:
- element[u"output-file-links"] = self._replace_tags(
- element[u"output-file-links"],
- self.environment[u"paths"]
- )
- except KeyError:
- pass
-
- # Add data sets to the elements:
- if isinstance(element.get(u"data", None), str):
- data_set = element[u"data"]
- try:
- element[u"data"] = self.data_sets[data_set]
- except KeyError:
- raise PresentationError(
- f"Data set {data_set} is not defined."
- )
- elif isinstance(element.get(u"data", None), list):
- new_list = list()
- for item in element[u"data"]:
- try:
- new_list.append(self.data_sets[item])
- except KeyError:
- raise PresentationError(
- f"Data set {item} is not defined."
- )
- element[u"data"] = new_list
-
- # Parse elements:
- if element[u"type"] == u"table":
- logging.info(f" {count:3d} Processing a table ...")
- self._parse_elements_tables(element)
- count += 1
- elif element[u"type"] == u"plot":
- logging.info(f" {count:3d} Processing a plot ...")
- self._parse_elements_plots(element)
- count += 1
- elif element[u"type"] == u"file":
- logging.info(f" {count:3d} Processing a file ...")
- self._parse_elements_files(element)
- count += 1
- elif element[u"type"] == u"cpta":
- logging.info(
- f" {count:3d} Processing Continuous Performance Trending "
- f"and Analysis ..."
- )
- self._parse_elements_cpta(element)
- count += 1
-
- def _prepare_input(self):
- """Use information from data sets and generate list of jobs and builds
- to download.
- """
-
- logging.info(u"Parsing specification: INPUT")
-
- idx = self._get_type_index(u"input")
- if idx is None:
- logging.info(u"Creating the list of inputs from data sets.")
- for data_set in self.data_sets.values():
- if data_set == "data-sets":
- continue
- for job, builds in data_set.items():
- for build in builds:
- self.add_build(
- job,
- {
- u"build": build,
- u"status": None,
- u"file-name": None,
- u"source": None
- }
- )
- else:
- logging.info(u"Reading pre-defined inputs.")
- for job, builds in self._cfg_yaml[idx][u"builds"].items():
- for build in builds:
- self.add_build(
- job,
- {
- u"build": build,
- u"status": None,
- u"file-name": None,
- u"source": None
- }
- )
-
- if self.environment[u"reverse-input"]:
- for builds in self.input.values():
- builds.sort(key=lambda k: k[u"build"], reverse=True)
-
- def read_specification(self):
- """Parse specification in the specification YAML files.
-
- :raises: PresentationError if an error occurred while parsing the
- specification file.
- """
-
- # It always starts with environment.yaml file, it must be present.
- spec_file = join(self._cfg_dir, u"environment.yaml")
- logging.info(f"Reading {spec_file}")
- if not exists(spec_file):
- raise PresentationError(f"The file {spec_file} does not exist.")
-
- with open(spec_file, u"r") as file_read:
- try:
- self._cfg_yaml = load(file_read, Loader=FullLoader)
- except YAMLError as err:
- raise PresentationError(
- f"An error occurred while parsing the specification file "
- f"{spec_file}",
- details=repr(err)
- )
-
- # Load the other specification files specified in the environment.yaml
- idx = self._get_type_index(u"environment")
- if idx is None:
- raise PresentationError(
- f"No environment defined in the file {spec_file}"
- )
- for spec_file in self._cfg_yaml[idx].get(u"spec-files", tuple()):
- logging.info(f"Reading {spec_file}")
- if not exists(spec_file):
- raise PresentationError(f"The file {spec_file} does not exist.")
- spec = None
- with open(spec_file, u"r") as file_read:
- try:
- spec = load(file_read, Loader=FullLoader)
- except YAMLError as err:
- raise PresentationError(
- f"An error occurred while parsing the specification "
- f"file {spec_file}",
- details=repr(err)
- )
- if spec:
- self._cfg_yaml.extend(spec)
-
- self._parse_env()
- self._parse_layouts()
- self._parse_data_sets()
- self._parse_output()
- self._parse_static()
- self._parse_elements()
- self._prepare_input()
-
- logging.debug(f"Specification: \n{pformat(self.specification)}")
diff --git a/resources/tools/presentation/specifications/converter/environment.yaml b/resources/tools/presentation/specifications/converter/environment.yaml
deleted file mode 100644
index 4ab9637eab..0000000000
--- a/resources/tools/presentation/specifications/converter/environment.yaml
+++ /dev/null
@@ -1,130 +0,0 @@
-################################################################################
-### E N V I R O N M E N T ###
-################################################################################
-
-- type: "environment"
-
- spec-files:
- - "specifications/converter/input.yaml" # Only for converter XML --> JSON
-
- paths:
- # Top level directories:
- ## Working directory
- DIR[WORKING]: "_tmp"
- ## Build directories
- DIR[BUILD,JSON]: "_build"
-
- # Working directories
- ## Input data files (.zip, .xml)
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
-
- # Data sources are used in this order:
- data-sources:
- # JSON from S3
- - type: "json"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.json.gz"
- file-format: ".gz"
- enabled: False
- # XML
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://s3-logs.fd.io/logs/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- # XML from docs.nexus
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "robot-plugin.zip"
- file-format: ".zip"
- enabled: True
-
- make-dirs:
- # List the directories which are created while preparing the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
-
- remove-dirs:
- # List the directories which are deleted while cleaning the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
-
- build-dirs:
- # List the directories where the results (build) is stored.
- # All directories MUST be defined in "paths" section.
- - "DIR[BUILD,JSON]"
-
-################################################################################
-### O U T P U T ###
-################################################################################
-
-- type: "output"
- output: "convert-xml-to-json"
- # type: flat | structured
- # - flat - all .gz files in one directory
- # - structured - .gz files in directories structured as job/build/*.gz
- structure: "tree" # Use flat or tree
- use-template: "json/template_0.1.0.json"
diff --git a/resources/tools/presentation/specifications/converter/input.yaml b/resources/tools/presentation/specifications/converter/input.yaml
deleted file mode 100644
index 0cf765030d..0000000000
--- a/resources/tools/presentation/specifications/converter/input.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-################################################################################
-### I N P U T X M L F I L E S ###
-################################################################################
-
-# This is only an example for converter XML --> JSON
-
-- type: "input"
-
- # 3n-hsw
-
- builds:
- csit-vpp-perf-report-iterative-2101-3n-hsw:
- - 65 # rls2101.rel NDRPDR reconf iter env 6
- - 69 # rls2101.rel Hoststack iter env 6
- - 64 # rls2101.rel NDRPDR iter env 6
- - 63 # rls2101.rel MRR iter env 6
- csit-vpp-perf-report-iterative-2101-2n-skx:
- - 94 # rls2101.rel NDRPDR iter env 6
- - 68 # rls2101.rel soak env 6
- csit-vpp-device-2101-ubuntu1804-1n-skx:
- - 358 # rls2101.rel VPP DEV env 6
diff --git a/resources/tools/presentation/specifications/report/data_sets.yaml b/resources/tools/presentation/specifications/report/data_sets.yaml
deleted file mode 100644
index 108086bf05..0000000000
--- a/resources/tools/presentation/specifications/report/data_sets.yaml
+++ /dev/null
@@ -1,1233 +0,0 @@
-################################################################################
-### D A T A S E T S ###
-################################################################################
-
-- type: "data-sets"
-
- vpp-device-results-ubuntu:
- csit-vpp-device-2110-ubuntu2004-x86_64-1n-skx:
- - 157 # rls2110.rc2 VPP DEV env 8
-
-################################################################################
-
- # 3n-skx
-
- vpp-3n-skx-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-3n-skx:
- - 36 # rls2101.rel NDRPDR iter env 6
- - 37 # rls2101.rel NDRPDR iter env 6
- - 38 # rls2101.rel NDRPDR iter env 6
- - 39 # rls2101.rel NDRPDR iter env 6
- - 40 # rls2101.rel NDRPDR iter env 6
- - 41 # rls2101.rel NDRPDR iter env 6
- - 42 # rls2101.rel NDRPDR iter env 6
- - 47 # rls2101.rel NDRPDR iter env 6
- - 48 # rls2101.rel NDRPDR iter env 6
- - 50 # rls2101.rel NDRPDR iter env 6
-
- vpp-3n-skx-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-3n-skx:
- - 40 # rls2106.rel NDRPDR iter env 7
- - 41 # rls2106.rel NDRPDR iter env 7
- - 42 # rls2106.rel NDRPDR iter env 7
- - 43 # rls2106.rel NDRPDR iter env 7
- - 44 # rls2106.rel NDRPDR iter env 7
- - 45 # rls2106.rel NDRPDR iter env 7
- - 49 # rls2106.rel NDRPDR iter env 7
- - 50 # rls2106.rel NDRPDR iter env 7
- - 52 # rls2106.rel NDRPDR iter env 7
- - 55 # rls2106.rel NDRPDR iter env 7
- - 59 # rls2106.rel NDRPDR iter env 7
-
- vpp-3n-skx-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 17 # rls2106.rel NDRPDR iter env 8
- - 18 # rls2106.rel NDRPDR iter env 8
- - 19 # rls2106.rel NDRPDR iter env 8
- - 20 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 24 # rls2106.rel NDRPDR iter env 8
- - 25 # rls2106.rel NDRPDR iter env 8
- - 26 # rls2106.rel NDRPDR iter env 8
- - 27 # rls2106.rel NDRPDR iter env 8
- - 28 # rls2106.rel NDRPDR iter env 8
-
- vpp-3n-skx-curr-iter:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 30 # rls2110.rc2 NDRPDR iter env 8
- - 31 # rls2110.rc2 NDRPDR iter env 8
- - 32 # rls2110.rc2 NDRPDR iter env 8
- - 33 # rls2110.rc2 NDRPDR iter env 8
- - 34 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-skx-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 33 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-skx-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-3n-skx:
- - 35 # rls2101.rel MRR iter env 6
-
- vpp-3n-skx-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-3n-skx:
- - 37 # rls2106.rel MRR iter env 7
-
- vpp-3n-skx-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 10 # rls2106.rel MRR iter env 8
-
- vpp-3n-skx-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 29 # rls2110.rc2 MRR iter env 8
-
- vpp-3n-skx-curr-iter-hoststack:
- csit-vpp-perf-report-iterative-2110-3n-skx:
- - 35 # rls2110.rc2 NDRPDR iter env 8
- - 36 # rls2110.rc2 NDRPDR iter env 8
- - 37 # rls2110.rc2 NDRPDR iter env 8
- - 38 # rls2110.rc2 NDRPDR iter env 8
- - 39 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-skx-curr-cov:
- csit-vpp-perf-report-coverage-2110-3n-skx:
- - 1 # rls2110.rc2 NDRPDR cov env 8
- - 2 # rls2110.rc2 NDRPDR cov env 8
- - 3 # rls2110.rc2 NDRPDR cov env 8
- - 4 # rls2110.rc2 NDRPDR cov env 8
- - 5 # rls2110.rc2 NDRPDR cov env 8
- - 6 # rls2110.rc2 NDRPDR cov env 8
- - 7 # rls2110.rc2 NDRPDR cov env 8
- - 8 # rls2110.rc2 NDRPDR cov env 8
-# - 9 # rls2110.rc2 NDRPDR cov env 8
- - 10 # rls2110.rc2 NDRPDR cov env 8
- - 11 # rls2110.rc2 NDRPDR cov env 8
- - 12 # rls2110.rc2 NDRPDR cov env 8
- - 13 # rls2110.rc2 NDRPDR cov env 8
- - 14 # rls2110.rc2 NDRPDR cov env 8
- - 15 # rls2110.rc2 NDRPDR cov env 8
- - 16 # rls2110.rc2 NDRPDR cov env 8
-# - 17 # rls2110.rc2 NDRPDR cov env 8
- - 18 # rls2110.rc2 NDRPDR cov env 8
- - 19 # rls2110.rc2 NDRPDR cov env 8
- - 20 # rls2110.rc2 NDRPDR cov env 8
-
- dpdk-3n-skx-hist-iter:
- csit-dpdk-perf-report-iterative-2101-3n-skx:
- - 12 # rls2101 NDRPDR iter env 6
- - 14 # rls2101 NDRPDR iter env 6
- - 15 # rls2101 NDRPDR iter env 6
- - 17 # rls2101 NDRPDR iter env 6
- - 19 # rls2101 NDRPDR iter env 6
- - 20 # rls2101 NDRPDR iter env 6
- - 21 # rls2101 NDRPDR iter env 6
- - 22 # rls2101 NDRPDR iter env 6
- - 25 # rls2101 NDRPDR iter env 6
- - 26 # rls2101 NDRPDR iter env 6
-
- dpdk-3n-skx-prev-iter:
- csit-dpdk-perf-report-iterative-2106-3n-skx:
- - 1 # rls2106 NDRPDR iter env 7
- - 2 # rls2106 NDRPDR iter env 7
- - 3 # rls2106 NDRPDR iter env 7
- - 4 # rls2106 NDRPDR iter env 7
- - 5 # rls2106 NDRPDR iter env 7
- - 6 # rls2106 NDRPDR iter env 7
- - 7 # rls2106 NDRPDR iter env 7
- - 8 # rls2106 NDRPDR iter env 7
- - 9 # rls2106 NDRPDR iter env 7
- - 10 # rls2106 NDRPDR iter env 7
-
- dpdk-3n-skx-curr-iter:
- csit-dpdk-perf-report-iterative-2110-3n-skx:
- - 7 # rls2110 NDRPDR iter env 8
- - 8 # rls2110 NDRPDR iter env 8
- - 10 # rls2110 NDRPDR iter env 8
- - 15 # rls2110 NDRPDR iter env 8
- - 16 # rls2110 NDRPDR iter env 8
- - 17 # rls2110 NDRPDR iter env 8
- - 18 # rls2110 NDRPDR iter env 8
- - 19 # rls2110 NDRPDR iter env 8
- - 20 # rls2110 NDRPDR iter env 8
- - 21 # rls2110 NDRPDR iter env 8
-
- dpdk-3n-skx-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-3n-skx:
- - 7 # rls2110 NDRPDR iter env 8
-
- # 2n-skx
-
- vpp-2n-skx-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-2n-skx:
- - 63 # rls2101.rel NDRPDR iter env 6
- - 69 # rls2101.rel NDRPDR iter env 6
- - 70 # rls2101.rel NDRPDR iter env 6
- - 75 # rls2101.rel NDRPDR iter env 6
- - 76 # rls2101.rel NDRPDR iter env 6
- - 77 # rls2101.rel NDRPDR iter env 6
- - 82 # rls2101.rel NDRPDR iter env 6
- - 85 # rls2101.rel NDRPDR iter env 6
- - 86 # rls2101.rel NDRPDR iter env 6
- - 94 # rls2101.rel NDRPDR iter env 6
- - 89 # rls2101.rel NDRPDR iter RND env 6
- - 90 # rls2101.rel NDRPDR iter RND env 6
- - 91 # rls2101.rel NDRPDR iter RND env 6
- - 92 # rls2101.rel NDRPDR iter RND env 6
- - 93 # rls2101.rel NDRPDR iter RND env 6
- - 96 # rls2101.rel NDRPDR iter RND env 6
- - 98 # rls2101.rel NDRPDR iter RND env 6
- - 99 # rls2101.rel NDRPDR iter RND env 6
- - 101 # rls2101.rel NDRPDR iter RND env 6
- - 102 # rls2101.rel NDRPDR iter RND env 6
- - 116 # rls2101.rel NDRPDR iter NAT env 6
- - 117 # rls2101.rel NDRPDR iter NAT env 6
- - 118 # rls2101.rel NDRPDR iter NAT env 6
- - 119 # rls2101.rel NDRPDR iter NAT env 6
- - 120 # rls2101.rel NDRPDR iter NAT env 6
- - 121 # rls2101.rel NDRPDR iter NAT env 6
- - 122 # rls2101.rel NDRPDR iter NAT env 6
- - 123 # rls2101.rel NDRPDR iter NAT env 6
- - 124 # rls2101.rel NDRPDR iter NAT env 6
- - 125 # rls2101.rel NDRPDR iter NAT env 6
-
- vpp-2n-skx-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-2n-skx:
- - 59 # rls2106.rel NDRPDR iter env 7
- - 60 # rls2106.rel NDRPDR iter env 7
- - 61 # rls2106.rel NDRPDR iter env 7
- - 65 # rls2106.rel NDRPDR iter env 7
- - 66 # rls2106.rel NDRPDR iter env 7
- - 67 # rls2106.rel NDRPDR iter env 7
- - 68 # rls2106.rel NDRPDR iter env 7
- - 69 # rls2106.rel NDRPDR iter env 7
- - 70 # rls2106.rel NDRPDR iter env 7
- - 71 # rls2106.rel NDRPDR iter env 7
- - 89 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 90 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 91 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 92 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 93 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 95 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 96 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 97 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 98 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 99 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 100 # rls2106.rel NDRPDR iter env 7
-
- vpp-2n-skx-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 33 # rls2106.rel NDRPDR iter env 8
- - 34 # rls2106.rel NDRPDR iter env 8
- - 35 # rls2106.rel NDRPDR iter env 8
- - 36 # rls2106.rel NDRPDR iter env 8
- - 37 # rls2106.rel NDRPDR iter env 8
- - 44 # rls2106.rel NDRPDR iter env 8
- - 45 # rls2106.rel NDRPDR iter env 8
- - 46 # rls2106.rel NDRPDR iter env 8
- - 48 # rls2106.rel NDRPDR iter env 8
- - 49 # rls2106.rel NDRPDR iter env 8
-
- vpp-2n-skx-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 51 # rls2110.rc2 NDRPDR iter env 8
- - 52 # rls2110.rc2 NDRPDR iter env 8
- - 53 # rls2110.rc2 NDRPDR iter env 8
- - 54 # rls2110.rc2 NDRPDR iter env 8
- - 55 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-skx-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 55 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-skx-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-2n-skx:
- - 62 # rls2101.rel MRR iter env 6
-
- vpp-2n-skx-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-2n-skx:
- - 52 # rls2106.rel MRR iter env 7
- - 88 # rls2106.rel MRR AF-XDP iter env 7
-
- vpp-2n-skx-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 17 # rls2106.rel MRR iter env 8
-
- vpp-2n-skx-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 50 # rls2110.rc2 MRR iter env 8
-
- vpp-2n-skx-curr-soak:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 59 # rls2110.rc2 soak env 8
- - 63 # rls2110.rc2 soak env 8
- vpp-soak-vs-ndr-2n-skx-ref:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 51 # rls2110.rc2 NDRPDR iter env 8
- - 52 # rls2110.rc2 NDRPDR iter env 8
- - 53 # rls2110.rc2 NDRPDR iter env 8
- - 54 # rls2110.rc2 NDRPDR iter env 8
- - 55 # rls2110.rc2 NDRPDR iter env 8
- vpp-soak-vs-ndr-2n-skx:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 51 # rls2110.rc2 NDRPDR iter env 8
- - 52 # rls2110.rc2 NDRPDR iter env 8
- - 53 # rls2110.rc2 NDRPDR iter env 8
- - 54 # rls2110.rc2 NDRPDR iter env 8
- - 55 # rls2110.rc2 NDRPDR iter env 8
- - 59 # rls2110.rc2 soak env 8
- - 63 # rls2110.rc2 soak env 8
-
- vpp-2n-skx-curr-nfv-ndrpdr:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 57 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 61 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 66 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 67 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 70 # rls2110.rc2 NDRPDR nf-density iter env 8
-
- vpp-2n-skx-curr-nfv-mrr:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 56 # rls2110.rc2 MRR nf-density iter env 8
-
- vpp-2n-skx-curr-nfv-reconf:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 58 # rls2110.rc2 NDRPDR reconf iter env 8
- - 62 # rls2110.rc2 NDRPDR reconf iter env 8
- - 68 # rls2110.rc2 NDRPDR reconf iter env 8
- - 69 # rls2110.rc2 NDRPDR reconf iter env 8
- - 71 # rls2110.rc2 NDRPDR reconf iter env 8
-
- vpp-2n-skx-curr-gso:
- csit-vpp-perf-report-iterative-2110-2n-skx:
- - 60 # rls2110.rc2 MRR GSO iter env 8
-
- vpp-2n-skx-curr-cov:
- csit-vpp-perf-report-coverage-2110-2n-skx:
- - 1 # rls2110.rc2 NDRPDR cov env 8
- - 2 # rls2110.rc2 NDRPDR cov env 8
- - 3 # rls2110.rc2 NDRPDR cov env 8
- - 4 # rls2110.rc2 NDRPDR cov env 8
- - 5 # rls2110.rc2 NDRPDR cov env 8
- - 6 # rls2110.rc2 NDRPDR cov env 8
- - 7 # rls2110.rc2 NDRPDR cov env 8
- - 8 # rls2110.rc2 NDRPDR cov env 8
- - 9 # rls2110.rc2 NDRPDR cov env 8
- - 10 # rls2110.rc2 NDRPDR cov env 8
- - 11 # rls2110.rc2 NDRPDR cov env 8
- - 12 # rls2110.rc2 NDRPDR cov env 8
- - 13 # rls2110.rc2 NDRPDR cov env 8
- - 14 # rls2110.rc2 NDRPDR cov env 8
- - 15 # rls2110.rc2 NDRPDR cov env 8
- - 16 # rls2110.rc2 NDRPDR cov env 8
- - 17 # rls2110.rc2 NDRPDR cov env 8
-
- dpdk-2n-skx-hist-iter:
- csit-dpdk-perf-report-iterative-2101-2n-skx:
- - 11 # rls2101 NDRPDR iter env 6
- - 12 # rls2101 NDRPDR iter env 6
- - 13 # rls2101 NDRPDR iter env 6
- - 14 # rls2101 NDRPDR iter env 6
- - 15 # rls2101 NDRPDR iter env 6
- - 17 # rls2101 NDRPDR iter env 6
- - 18 # rls2101 NDRPDR iter env 6
- - 19 # rls2101 NDRPDR iter env 6
- - 20 # rls2101 NDRPDR iter env 6
- - 21 # rls2101 NDRPDR iter env 6
-
- dpdk-2n-skx-prev-iter:
- csit-dpdk-perf-report-iterative-2106-2n-skx:
- - 11 # rls2106 NDRPDR iter env 7
- - 2 # rls2106 NDRPDR iter env 7
- - 3 # rls2106 NDRPDR iter env 7
- - 4 # rls2106 NDRPDR iter env 7
- - 5 # rls2106 NDRPDR iter env 7
- - 6 # rls2106 NDRPDR iter env 7
- - 7 # rls2106 NDRPDR iter env 7
- - 8 # rls2106 NDRPDR iter env 7
- - 9 # rls2106 NDRPDR iter env 7
- - 10 # rls2106 NDRPDR iter env 7
-
- dpdk-2n-skx-curr-iter:
- csit-dpdk-perf-report-iterative-2110-2n-skx:
- - 11 # rls2110 NDRPDR iter env 8
- - 12 # rls2110 NDRPDR iter env 8
- - 13 # rls2110 NDRPDR iter env 8
- - 14 # rls2110 NDRPDR iter env 8
- - 15 # rls2110 NDRPDR iter env 8
- - 16 # rls2110 NDRPDR iter env 8
- - 17 # rls2110 NDRPDR iter env 8
- - 18 # rls2110 NDRPDR iter env 8
- - 19 # rls2110 NDRPDR iter env 8
- - 20 # rls2110 NDRPDR iter env 8
-
- dpdk-2n-skx-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-2n-skx:
- - 11 # rls2110 NDRPDR iter env 8
-
- trex-2n-skx-curr-iter:
- csit-trex-perf-report-iterative-2110-2n-skx:
- - 3 # rls2110.rc2 NDRPDR iter env 8
- - 4 # rls2110.rc2 NDRPDR iter env 8
- - 5 # rls2110.rc2 NDRPDR iter env 8
- - 6 # rls2110.rc2 NDRPDR iter env 8
- - 7 # rls2110.rc2 NDRPDR iter env 8
-
- trex-2n-skx-curr-iter-best:
- csit-trex-perf-report-iterative-2110-2n-skx:
- - 3 # rls2110.rc2 NDRPDR iter env 8
-
- trex-2n-skx-curr-cov:
- csit-trex-perf-report-coverage-2110-2n-skx:
- - 2 # rls2110.rc2 NDRPDR cov env 8
-
- # 2n-zn2
-
- vpp-2n-zn2-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-2n-zn2:
- - 31 # rls2101.rel NDRPDR iter env 6
- - 32 # rls2101.rel NDRPDR iter env 6
- - 33 # rls2101.rel NDRPDR iter env 6
- - 34 # rls2101.rel NDRPDR iter env 6
- - 35 # rls2101.rel NDRPDR iter env 6
- - 36 # rls2101.rel NDRPDR iter env 6
- - 37 # rls2101.rel NDRPDR iter env 6
- - 38 # rls2101.rel NDRPDR iter env 6
- - 44 # rls2101.rel NDRPDR iter env 6
- - 49 # rls2101.rel NDRPDR iter env 6
- - 39 # rls2101.rel NDRPDR iter RND env 6
- - 40 # rls2101.rel NDRPDR iter RND env 6
- - 41 # rls2101.rel NDRPDR iter RND env 6
- - 42 # rls2101.rel NDRPDR iter RND env 6
- - 43 # rls2101.rel NDRPDR iter RND env 6
- - 45 # rls2101.rel NDRPDR iter RND env 6
- - 48 # rls2101.rel NDRPDR iter RND env 6
- - 50 # rls2101.rel NDRPDR iter RND env 6
- - 51 # rls2101.rel NDRPDR iter RND env 6
- - 52 # rls2101.rel NDRPDR iter RND env 6
-
- vpp-2n-zn2-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-2n-zn2:
- - 38 # rls2106.rel NDRPDR iter env 7
- - 39 # rls2106.rel NDRPDR iter env 7
- - 40 # rls2106.rel NDRPDR iter env 7
- - 41 # rls2106.rel NDRPDR iter env 7
- - 42 # rls2106.rel NDRPDR iter env 7
- - 43 # rls2106.rel NDRPDR iter env 7
- - 44 # rls2106.rel NDRPDR iter env 7
- - 45 # rls2106.rel NDRPDR iter env 7
- - 46 # rls2106.rel NDRPDR iter env 7
- - 47 # rls2106.rel NDRPDR iter env 7
- - 49 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 50 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 51 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 52 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 53 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 54 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 55 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 56 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 57 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 58 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 59 # rls2106.rel NDRPDR iter env 7
-
- vpp-2n-zn2-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 20 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 22 # rls2106.rel NDRPDR iter env 8
- - 23 # rls2106.rel NDRPDR iter env 8
- - 28 # rls2106.rel NDRPDR iter env 8
- - 31 # rls2106.rel NDRPDR iter env 8
- - 32 # rls2106.rel NDRPDR iter env 8
-
- vpp-2n-zn2-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 35 # rls2110.rc2 NDRPDR iter env 8
- - 37 # rls2110.rc2 NDRPDR iter env 8
- - 38 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-zn2-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 37 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-zn2-curr-iter-gso:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 29 # rls2110.rc1 MRR GSO iter env 8
-
- vpp-2n-zn2-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-2n-zn2:
- - 30 # rls2101.rel MRR iter env 6
-
- vpp-2n-zn2-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-2n-zn2:
- - 36 # rls2106.rel MRR iter env 7
- - 48 # rls2106.rel MRR AF-XDP iter env 7
-
- vpp-2n-zn2-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 3 # rls2110.rc1 MRR iter env 8 - REPLACE by 2106.rel
-
- vpp-2n-zn2-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 3 # rls2110.rc1 MRR iter env 8
-
- vpp-2n-zn2-curr-cov:
- # csit-vpp-perf-report-coverage-2110-2n-zn2:
- csit-vpp-perf-report-iterative-2110-2n-zn2:
- - 37 # rls2110.rc2 NDRPDR iter env 8
-
- dpdk-2n-zn2-hist-iter:
- csit-dpdk-perf-report-iterative-2101-2n-zn2:
- - 11 # rls2101 NDRPDR iter env 6
- - 12 # rls2101 NDRPDR iter env 6
- - 13 # rls2101 NDRPDR iter env 6
- - 14 # rls2101 NDRPDR iter env 6
- - 16 # rls2101 NDRPDR iter env 6
- - 17 # rls2101 NDRPDR iter env 6
- - 18 # rls2101 NDRPDR iter env 6
- - 19 # rls2101 NDRPDR iter env 6
- - 20 # rls2101 NDRPDR iter env 6
- - 21 # rls2101 NDRPDR iter env 6
-
- dpdk-2n-zn2-prev-iter:
- csit-dpdk-perf-report-iterative-2106-2n-zn2:
- - 11 # rls2106 NDRPDR iter env 7
- - 2 # rls2106 NDRPDR iter env 7
- - 3 # rls2106 NDRPDR iter env 7
- - 4 # rls2106 NDRPDR iter env 7
- - 5 # rls2106 NDRPDR iter env 7
- - 6 # rls2106 NDRPDR iter env 7
- - 7 # rls2106 NDRPDR iter env 7
- - 8 # rls2106 NDRPDR iter env 7
- - 9 # rls2106 NDRPDR iter env 7
- - 10 # rls2106 NDRPDR iter env 7
-
- dpdk-2n-zn2-curr-iter:
- csit-dpdk-perf-report-iterative-2110-2n-zn2:
- - 24 # rls2110 NDRPDR iter env 8
- - 25 # rls2110 NDRPDR iter env 8
- - 26 # rls2110 NDRPDR iter env 8
- - 27 # rls2110 NDRPDR iter env 8
- - 29 # rls2110 NDRPDR iter env 8
- - 30 # rls2110 NDRPDR iter env 8
- - 31 # rls2110 NDRPDR iter env 8
-
- dpdk-2n-zn2-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-2n-zn2:
- - 24 # rls2110 NDRPDR iter env 8
-
- # 2n-clx
-
- vpp-2n-clx-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-2n-clx:
- - 54 # rls2101.rel NDRPDR iter env 6
- - 59 # rls2101.rel NDRPDR iter env 6
- - 60 # rls2101.rel NDRPDR iter env 6
- - 63 # rls2101.rel NDRPDR iter env 6
- - 66 # rls2101.rel NDRPDR iter env 6
- - 68 # rls2101.rel NDRPDR iter env 6
- - 73 # rls2101.rel NDRPDR iter env 6
- - 75 # rls2101.rel NDRPDR iter env 6
- - 86 # rls2101.rel NDRPDR iter env 6
- - 90 # rls2101.rel NDRPDR iter env 6
- - 80 # rls2101.rel NDRPDR iter RND env 6
- - 87 # rls2101.rel NDRPDR iter RND env 6
- - 91 # rls2101.rel NDRPDR iter RND env 6
- - 92 # rls2101.rel NDRPDR iter RND env 6
- - 93 # rls2101.rel NDRPDR iter RND env 6
- - 94 # rls2101.rel NDRPDR iter RND env 6
- - 95 # rls2101.rel NDRPDR iter RND env 6
- - 100 # rls2101.rel NDRPDR iter RND env 6
- - 106 # rls2101.rel NDRPDR iter RND env 6
- - 108 # rls2101.rel NDRPDR iter RND env 6
- - 112 # rls2101.rel NDRPDR iter NAT env 6
- - 113 # rls2101.rel NDRPDR iter NAT env 6
- - 114 # rls2101.rel NDRPDR iter NAT env 6
- - 115 # rls2101.rel NDRPDR iter NAT env 6
- - 116 # rls2101.rel NDRPDR iter NAT env 6
- - 117 # rls2101.rel NDRPDR iter NAT env 6
- - 118 # rls2101.rel NDRPDR iter NAT env 6
- - 119 # rls2101.rel NDRPDR iter NAT env 6
- - 120 # rls2101.rel NDRPDR iter NAT env 6
- - 121 # rls2101.rel NDRPDR iter NAT env 6
- - 122 # rls2101.rel NDRPDR iter MLX env 6
- - 123 # rls2101.rel NDRPDR iter MLX env 6
- - 124 # rls2101.rel NDRPDR iter MLX env 6
- - 126 # rls2101.rel NDRPDR iter MLX env 6
- - 127 # rls2101.rel NDRPDR iter MLX env 6
- - 128 # rls2101.rel NDRPDR iter MLX env 6
- - 129 # rls2101.rel NDRPDR iter MLX env 6
- - 130 # rls2101.rel NDRPDR iter MLX env 6
- - 131 # rls2101.rel NDRPDR iter MLX env 6
- - 132 # rls2101.rel NDRPDR iter MLX env 6
-
- vpp-2n-clx-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-2n-clx:
- - 75 # rls2106.rel NDRPDR iter env 7
- - 76 # rls2106.rel NDRPDR iter env 7
- - 77 # rls2106.rel NDRPDR iter env 7
- - 82 # rls2106.rel NDRPDR iter env 7
- - 83 # rls2106.rel NDRPDR iter env 7
- - 84 # rls2106.rel NDRPDR iter env 7
- - 85 # rls2106.rel NDRPDR iter env 7
- - 86 # rls2106.rel NDRPDR iter env 7
- - 87 # rls2106.rel NDRPDR iter env 7
- - 88 # rls2106.rel NDRPDR iter env 7
- - 124 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 125 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 126 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 127 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 128 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 129 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 130 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 131 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 132 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 133 # rls2106.rel NDRPDR AF-XDP iter env 7
- - 144 # rls2106.rel NDRPDR iter env 7
-
- vpp-2n-clx-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 17 # rls2106.rel NDRPDR iter env 8
- - 18 # rls2106.rel NDRPDR iter env 8
- - 19 # rls2106.rel NDRPDR iter env 8
- - 20 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 30 # rls2106.rel NDRPDR iter env 8
- - 31 # rls2106.rel NDRPDR iter env 8
- - 33 # rls2106.rel NDRPDR iter env 8
- - 34 # rls2106.rel NDRPDR iter env 8
- - 35 # rls2106.rel NDRPDR iter env 8
-
- vpp-2n-clx-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 37 # rls2110.rc2 NDRPDR iter env 8
- - 38 # rls2110.rc2 NDRPDR iter env 8
- - 39 # rls2110.rc2 NDRPDR iter env 8
- - 40 # rls2110.rc2 NDRPDR iter env 8
- - 41 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-clx-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 40 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-clx-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-2n-clx:
- - 53 # rls2101.rel MRR iter env 6
- - 133 # rls2101.rel MRR MLX iter env 6
-
- vpp-2n-clx-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-2n-clx:
- - 66 # rls2106.rel MRR iter env 7
- - 123 # rls2101.rel MRR AF-XDP iter env 7
-
- vpp-2n-clx-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 5 # rls2106.rel MRR iter env 8
-
- vpp-2n-clx-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 36 # rls2110.rc2 MRR iter env 8
-
- vpp-2n-clx-curr-iter-gso:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 46 # rls2110.rc2 MRR GSO iter env 8
-
-# vpp-2n-clx-curr-iter-vsap:
-# csit-vpp-perf-report-iterative-2110-2n-clx:
-# - 28 # rls2110.rc1 VSAP iter env 8
-
- vpp-2n-clx-curr-nfv-ndrpdr:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 43 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 47 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 49 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 52 # rls2110.rc2 NDRPDR nf-density iter env 8
- - 55 # rls2110.rc2 NDRPDR nf-density iter env 8
-
- vpp-2n-clx-curr-nfv-mrr:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 42 # rls2110.rc2 NDRPDR nf-density iter env 8
-
- vpp-2n-clx-curr-nfv-reconf:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 44 # rls2110.rc2 NDRPDR reconf iter env 8
- - 48 # rls2110.rc2 NDRPDR reconf iter env 8
- - 50 # rls2110.rc2 NDRPDR reconf iter env 8
- - 51 # rls2110.rc2 NDRPDR reconf iter env 8
- - 53 # rls2110.rc2 NDRPDR reconf iter env 8
-
- vpp-2n-clx-curr-soak:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 45 # rls2110.rc2 soak env 8
- - 54 # rls2110.rc2 soak env 8
- vpp-soak-vs-ndr-2n-clx-ref:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 37 # rls2110.rc2 NDRPDR iter env 8
- - 38 # rls2110.rc2 NDRPDR iter env 8
- - 39 # rls2110.rc2 NDRPDR iter env 8
- - 40 # rls2110.rc2 NDRPDR iter env 8
- vpp-soak-vs-ndr-2n-clx:
- csit-vpp-perf-report-iterative-2110-2n-clx:
- - 37 # rls2110.rc2 NDRPDR iter env 8
- - 38 # rls2110.rc2 NDRPDR iter env 8
- - 39 # rls2110.rc2 NDRPDR iter env 8
- - 40 # rls2110.rc2 NDRPDR iter env 8
- - 45 # rls2110.rc2 soak env 8
- - 54 # rls2110.rc2 soak env 8
-
- vpp-2n-clx-curr-cov:
- csit-vpp-perf-report-coverage-2110-2n-clx:
- - 1 # rls2110.rc2 NDRPDR cov env 8
- - 2 # rls2110.rc2 NDRPDR cov env 8
- - 3 # rls2110.rc2 NDRPDR cov env 8
- - 4 # rls2110.rc2 NDRPDR cov env 8
- - 5 # rls2110.rc2 NDRPDR cov env 8
- - 6 # rls2110.rc2 NDRPDR cov env 8
- - 7 # rls2110.rc2 NDRPDR cov env 8
- - 8 # rls2110.rc2 NDRPDR cov env 8
- - 9 # rls2110.rc2 NDRPDR cov env 8
- - 10 # rls2110.rc2 NDRPDR cov env 8
- - 11 # rls2110.rc2 NDRPDR cov env 8
- - 12 # rls2110.rc2 NDRPDR cov env 8
- - 13 # rls2110.rc2 NDRPDR cov env 8
- - 14 # rls2110.rc2 NDRPDR cov env 8
- - 15 # rls2110.rc2 NDRPDR cov env 8
- - 16 # rls2110.rc2 NDRPDR cov env 8
- - 17 # rls2110.rc2 NDRPDR cov env 8
-
- dpdk-2n-clx-hist-iter:
- csit-dpdk-perf-report-iterative-2101-2n-clx:
- - 12 # rls2101 NDRPDR iter env 6
- - 13 # rls2101 NDRPDR iter env 6
- - 14 # rls2101 NDRPDR iter env 6
- - 18 # rls2101 NDRPDR iter env 6
- - 22 # rls2101 NDRPDR iter env 6
-
- dpdk-2n-clx-prev-iter:
- csit-dpdk-perf-report-iterative-2106-2n-clx:
- - 11 # rls2106 NDRPDR iter env 7
- - 2 # rls2106 NDRPDR iter env 7
- - 3 # rls2106 NDRPDR iter env 7
- - 4 # rls2106 NDRPDR iter env 7
- - 5 # rls2106 NDRPDR iter env 7
- - 6 # rls2106 NDRPDR iter env 7
- - 7 # rls2106 NDRPDR iter env 7
- - 8 # rls2106 NDRPDR iter env 7
- - 9 # rls2106 NDRPDR iter env 7
- - 10 # rls2106 NDRPDR iter env 7
-
- dpdk-2n-clx-curr-iter:
- csit-dpdk-perf-report-iterative-2110-2n-clx:
- - 5 # rls2110 NDRPDR iter env 8
- - 6 # rls2110 NDRPDR iter env 8
- - 7 # rls2110 NDRPDR iter env 8
- - 8 # rls2110 NDRPDR iter env 8
- - 10 # rls2110 NDRPDR iter env 8
- - 14 # rls2110 NDRPDR iter env 8
- - 15 # rls2110 NDRPDR iter env 8
- - 16 # rls2110 NDRPDR iter env 8
- - 17 # rls2110 NDRPDR iter env 8
- - 18 # rls2110 NDRPDR iter env 8
-
- dpdk-2n-clx-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-2n-clx:
- - 5 # rls2110 NDRPDR iter env 8
-
- # 3n-tsh
-
- vpp-3n-tsh-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-3n-tsh:
- - 23 # rls2101.rel NDRPDR iter env 6
- - 24 # rls2101.rel NDRPDR iter env 6
- - 25 # rls2101.rel NDRPDR iter env 6
- - 26 # rls2101.rel NDRPDR iter env 6
- - 27 # rls2101.rel NDRPDR iter env 6
- - 28 # rls2101.rel NDRPDR iter env 6
- - 29 # rls2101.rel NDRPDR iter env 6
- - 30 # rls2101.rel NDRPDR iter env 6
- - 31 # rls2101.rel NDRPDR iter env 6
- - 32 # rls2101.rel NDRPDR iter env 6
-
- vpp-3n-tsh-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-3n-tsh:
- - 19 # rls2106.rel NDRPDR iter env 7
- - 20 # rls2106.rel NDRPDR iter env 7
- - 21 # rls2106.rel NDRPDR iter env 7
- - 22 # rls2106.rel NDRPDR iter env 7
- - 23 # rls2106.rel NDRPDR iter env 7
- - 24 # rls2106.rel NDRPDR iter env 7
- - 25 # rls2106.rel NDRPDR iter env 7
- - 26 # rls2106.rel NDRPDR iter env 7
- - 27 # rls2106.rel NDRPDR iter env 7
- - 28 # rls2106.rel NDRPDR iter env 7
- - 30 # rls2106.rel NDRPDR iter env 7
-
- vpp-3n-tsh-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 12 # rls2106.rel NDRPDR iter env 8
- - 13 # rls2106.rel NDRPDR iter env 8
- - 14 # rls2106.rel NDRPDR iter env 8
- - 16 # rls2106.rel NDRPDR iter env 8
- - 18 # rls2106.rel NDRPDR iter env 8
- - 19 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 22 # rls2106.rel NDRPDR iter env 8
- - 23 # rls2106.rel NDRPDR iter env 8
-
- vpp-3n-tsh-curr-iter:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 25 # rls2110.rc2 NDRPDR iter env 8
- - 26 # rls2110.rc2 NDRPDR cov env 8
- - 27 # rls2110.rc2 NDRPDR iter env 8
- - 28 # rls2110.rc2 NDRPDR iter env 8
- - 29 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-tsh-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 25 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-tsh-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-3n-tsh:
- - 22 # rls2101.rel MRR iter env 6
-
- vpp-3n-tsh-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-3n-tsh:
- - 18 # rls2106.rel MRR iter env 7
-
- vpp-3n-tsh-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 11 # rls2106.rel MRR iter env 8
-
- vpp-3n-tsh-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 3 # rls2110.rc1 NDRPDR iter env 8
-
- vpp-3n-tsh-curr-cov:
- # csit-vpp-perf-report-coverage-2110-3n-tsh:
- csit-vpp-perf-report-iterative-2110-3n-tsh:
- - 25 # rls2110.rc2 NDRPDR iter env 8
-
- dpdk-3n-tsh-hist-iter:
- csit-dpdk-perf-report-iterative-2101-3n-tsh:
- - 11 # rls2101 NDRPDR iter env 6
- - 12 # rls2101 NDRPDR iter env 6
- - 13 # rls2101 NDRPDR iter env 6
- - 14 # rls2101 NDRPDR iter env 6
- - 16 # rls2101 NDRPDR iter env 6
- - 17 # rls2101 NDRPDR iter env 6
- - 18 # rls2101 NDRPDR iter env 6
- - 19 # rls2101 NDRPDR iter env 6
- - 20 # rls2101 NDRPDR iter env 6
- - 21 # rls2101 NDRPDR iter env 6
-
- dpdk-3n-tsh-prev-iter:
- csit-dpdk-perf-report-iterative-2106-3n-tsh:
- - 1 # rls2106 NDRPDR iter env 7
- - 2 # rls2106 NDRPDR iter env 7
- - 3 # rls2106 NDRPDR iter env 7
- - 4 # rls2106 NDRPDR iter env 7
- - 5 # rls2106 NDRPDR iter env 7
- - 6 # rls2106 NDRPDR iter env 7
- - 7 # rls2106 NDRPDR iter env 7
- - 8 # rls2106 NDRPDR iter env 7
- - 9 # rls2106 NDRPDR iter env 7
- - 10 # rls2106 NDRPDR iter env 7
-
- dpdk-3n-tsh-curr-iter:
- csit-dpdk-perf-report-iterative-2110-3n-tsh:
- - 12 # rls2110 NDRPDR iter env 8
- - 13 # rls2110 NDRPDR iter env 8
- - 14 # rls2110 NDRPDR iter env 8
- - 15 # rls2110 NDRPDR iter env 8
- - 17 # rls2110 NDRPDR iter env 8
- - 18 # rls2110 NDRPDR iter env 8
- - 19 # rls2110 NDRPDR iter env 8
- - 20 # rls2110 NDRPDR iter env 8
- - 21 # rls2110 NDRPDR iter env 8
-
- dpdk-3n-tsh-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-3n-tsh:
- - 17 # rls2110 NDRPDR iter env 8
-
- # 2n-tx2
-
- vpp-2n-tx2-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-2n-tx2:
- - 22 # rls2101.rel NDRPDR iter env 6
- - 23 # rls2101.rel NDRPDR iter env 6
- - 24 # rls2101.rel NDRPDR iter env 6
- - 25 # rls2101.rel NDRPDR iter env 6
- - 26 # rls2101.rel NDRPDR iter env 6
- - 27 # rls2101.rel NDRPDR iter env 6
- - 28 # rls2101.rel NDRPDR iter env 6
- - 29 # rls2101.rel NDRPDR iter env 6
- - 30 # rls2101.rel NDRPDR iter env 6
- - 31 # rls2101.rel NDRPDR iter env 6
-
- vpp-2n-tx2-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-2n-tx2:
- - 19 # rls2106.rel NDRPDR iter env 7
- - 20 # rls2106.rel NDRPDR iter env 7
- - 21 # rls2106.rel NDRPDR iter env 7
- - 22 # rls2106.rel NDRPDR iter env 7
- - 23 # rls2106.rel NDRPDR iter env 7
- - 24 # rls2106.rel NDRPDR iter env 7
- - 25 # rls2106.rel NDRPDR iter env 7
- - 26 # rls2106.rel NDRPDR iter env 7
- - 27 # rls2106.rel NDRPDR iter env 7
- - 28 # rls2106.rel NDRPDR iter env 7
- - 41 # rls2106.rel NDRPDR iter env 7
-
- vpp-2n-tx2-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 17 # rls2106.rel NDRPDR iter env 8
- - 18 # rls2106.rel NDRPDR iter env 8
- - 19 # rls2106.rel NDRPDR iter env 8
- - 20 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 24 # rls2106.rel NDRPDR iter env 8
- - 25 # rls2106.rel NDRPDR iter env 8
- - 26 # rls2106.rel NDRPDR iter env 8
- - 27 # rls2106.rel NDRPDR iter env 8
- - 28 # rls2106.rel NDRPDR iter env 8
-
- vpp-2n-tx2-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 30 # rls2110.rc2 NDRPDR iter env 8
- - 31 # rls2110.rc2 NDRPDR iter env 8
- - 32 # rls2110.rc2 NDRPDR iter env 8
- - 33 # rls2110.rc2 NDRPDR cov env 8
- - 34 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-tx2-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 30 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-tx2-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-2n-tx2:
- - 21 # rls2101.rel MRR iter env 6
-
- vpp-2n-tx2-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-2n-tx2:
- - 18 # rls2106.rel MRR iter env 7
- - 29 # rls2106.rel MRR AF-XDP iter env 7
-
- vpp-2n-tx2-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 16 # rls2106.rel MRR iter env 8
-
- vpp-2n-tx2-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 29 # rls2110.rc2 MRR iter env 8
-
- vpp-2n-tx2-curr-cov:
- # csit-vpp-perf-report-coverage-2110-2n-tx2:
- csit-vpp-perf-report-iterative-2110-2n-tx2:
- - 30 # rls2110.rc2 NDRPDR iter env 8
-
- dpdk-2n-tx2-curr-iter:
- csit-dpdk-perf-report-iterative-2110-2n-tx2:
- - 14 # rls2110 NDRPDR iter env 8
- - 15 # rls2110 NDRPDR iter env 8
- - 16 # rls2110 NDRPDR iter env 8
- - 17 # rls2110 NDRPDR iter env 8
- - 18 # rls2110 NDRPDR iter env 8
- - 19 # rls2110 NDRPDR iter env 8
- - 20 # rls2110 NDRPDR iter env 8
- - 21 # rls2110 NDRPDR iter env 8
- - 22 # rls2110 NDRPDR iter env 8
- - 23 # rls2110 NDRPDR iter env 8
-
- dpdk-2n-tx2-curr-iter-best:
- csit-dpdk-perf-report-iterative-2110-2n-tx2:
- - 18 # rls2110 NDRPDR iter env 8
-
- # 3n-dnv
-
- vpp-3n-dnv-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-3n-dnv:
- - 33 # rls2101.rel NDRPDR iter env 6
- - 34 # rls2101.rel NDRPDR iter env 6
- - 35 # rls2101.rel NDRPDR iter env 6
- - 36 # rls2101.rel NDRPDR iter env 6
- - 37 # rls2101.rel NDRPDR iter env 6
- - 38 # rls2101.rel NDRPDR iter env 6
- - 39 # rls2101.rel NDRPDR iter env 6
- - 40 # rls2101.rel NDRPDR iter env 6
- - 41 # rls2101.rel NDRPDR iter env 6
- - 42 # rls2101.rel NDRPDR iter env 6
- - 43 # rls2101.rel NDRPDR iter RND env 6
- - 44 # rls2101.rel NDRPDR iter RND env 6
- - 45 # rls2101.rel NDRPDR iter RND env 6
- - 46 # rls2101.rel NDRPDR iter RND env 6
- - 47 # rls2101.rel NDRPDR iter RND env 6
- - 48 # rls2101.rel NDRPDR iter RND env 6
- - 49 # rls2101.rel NDRPDR iter RND env 6
- - 50 # rls2101.rel NDRPDR iter RND env 6
- - 51 # rls2101.rel NDRPDR iter RND env 6
- - 52 # rls2101.rel NDRPDR iter RND env 6
-
- vpp-3n-dnv-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-3n-dnv:
- - 39 # rls2106.rel NDRPDR iter env 7
- - 40 # rls2106.rel NDRPDR iter env 7
- - 41 # rls2106.rel NDRPDR iter env 7
- - 42 # rls2106.rel NDRPDR iter env 7
- - 43 # rls2106.rel NDRPDR iter env 7
- - 44 # rls2106.rel NDRPDR iter env 7
- - 45 # rls2106.rel NDRPDR iter env 7
- - 46 # rls2106.rel NDRPDR iter env 7
- - 47 # rls2106.rel NDRPDR iter env 7
- - 48 # rls2106.rel NDRPDR iter env 7
-
- vpp-3n-dnv-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-3n-dnv:
- - 5 # rls2106.rel NDRPDR iter env 8
- - 12 # rls2106.rel NDRPDR iter env 8
- - 15 # rls2106.rel NDRPDR iter env 8
- - 17 # rls2106.rel NDRPDR iter env 8
- - 21 # rls2106.rel NDRPDR iter env 8
- - 22 # rls2106.rel NDRPDR iter env 8
- - 23 # rls2106.rel NDRPDR iter env 8
- - 24 # rls2106.rel NDRPDR iter env 8
- - 25 # rls2106.rel NDRPDR iter env 8
- - 26 # rls2106.rel NDRPDR iter env 8
-
- vpp-3n-dnv-curr-iter:
- csit-vpp-perf-report-iterative-2110-3n-dnv:
- - 28 # rls2110.rc2 NDRPDR iter env 8
- - 29 # rls2110.rc2 NDRPDR iter env 8
- - 30 # rls2110.rc2 NDRPDR iter env 8
- - 31 # rls2110.rc2 NDRPDR iter env 8
- - 32 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-dnv-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-3n-dnv:
- - 32 # rls2101.rel MRR iter env 6
-
- vpp-3n-dnv-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-3n-dnv:
- - 38 # rls2106.rel MRR iter env 7
-
- vpp-3n-dnv-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-3n-dnv:
- - 16 # rls2106.rel MRR iter env 8
-
- vpp-3n-dnv-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-3n-dnv:
- - 27 # rls2110.rc2 MRR iter env 8
-
- vpp-3n-dnv-curr-cov:
- csit-vpp-perf-report-coverage-2110-3n-dnv:
- - 2 # rls2110.rc2 NDRPDR cov env 8
- - 3 # rls2110.rc2 NDRPDR cov env 8
- - 4 # rls2110.rc2 NDRPDR cov env 8
- - 5 # rls2110.rc2 NDRPDR cov env 8
- - 6 # rls2110.rc2 NDRPDR cov env 8
- - 7 # rls2110.rc2 NDRPDR cov env 8
- - 8 # rls2110.rc2 NDRPDR cov env 8
- - 9 # rls2110.rc2 NDRPDR cov env 8
- - 10 # rls2110.rc2 NDRPDR cov env 8
- - 11 # rls2110.rc2 NDRPDR cov env 8
-
-# dpdk-performance-changes-3n-dnv-h1:
-# csit-dpdk-perf-verify-2101-3n-dnv:
-# - 12 # NDRPDR sel
-# - 13 # NDRPDR sel
-# - 14 # NDRPDR sel
-# - 15 # NDRPDR sel
-# - 16 # NDRPDR sel
-# - 17 # NDRPDR sel
-# - 18 # NDRPDR sel
-# - 19 # NDRPDR sel
-# - 20 # NDRPDR sel
-# - 22 # NDRPDR sel
-# dpdk-performance-changes-3n-dnv-ref:
-# # No data
-# dpdk-performance-changes-3n-dnv-cmp:
-# # No data
-# csit-dpdk-perf-report-iterative-2009-3n-dnv:
-
-# plot-dpdk-throughput-latency-3n-dnv:
-# # No data
-# csit-dpdk-perf-report-iterative-2009-3n-dnv:
-
-# dpdk-perf-results-3n-dnv:
-# # No data
-# csit-dpdk-perf-report-iterative-2009-3n-dnv:
-
- # 2n-dnv
-
- vpp-2n-dnv-hist-iter-new-env:
- csit-vpp-perf-report-iterative-2101-2n-dnv:
- - 32 # rls2101.rel NDRPDR iter env 6
- - 33 # rls2101.rel NDRPDR iter env 6
- - 34 # rls2101.rel NDRPDR iter env 6
- - 35 # rls2101.rel NDRPDR iter env 6
- - 39 # rls2101.rel NDRPDR iter env 6
- - 41 # rls2101.rel NDRPDR iter env 6
- - 42 # rls2101.rel NDRPDR iter env 6
- - 43 # rls2101.rel NDRPDR iter env 6
- - 44 # rls2101.rel NDRPDR iter env 6
- - 45 # rls2101.rel NDRPDR iter env 6
- - 46 # rls2101.rel NDRPDR iter RND env 6
- - 47 # rls2101.rel NDRPDR iter RND env 6
- - 48 # rls2101.rel NDRPDR iter RND env 6
- - 49 # rls2101.rel NDRPDR iter RND env 6
- - 50 # rls2101.rel NDRPDR iter RND env 6
- - 51 # rls2101.rel NDRPDR iter RND env 6
- - 52 # rls2101.rel NDRPDR iter RND env 6
- - 53 # rls2101.rel NDRPDR iter RND env 6
- - 54 # rls2101.rel NDRPDR iter RND env 6
- - 55 # rls2101.rel NDRPDR iter RND env 6
-
- vpp-2n-dnv-prev-iter-old-env:
- csit-vpp-perf-report-iterative-2106-2n-dnv:
- - 36 # rls2106.rel NDRPDR iter env 7
- - 37 # rls2106.rel NDRPDR iter env 7
- - 38 # rls2106.rel NDRPDR iter env 7
- - 39 # rls2106.rel NDRPDR iter env 7
- - 40 # rls2106.rel NDRPDR iter env 7
- - 41 # rls2106.rel NDRPDR iter env 7
- - 42 # rls2106.rel NDRPDR iter env 7
- - 43 # rls2106.rel NDRPDR iter env 7
- - 44 # rls2106.rel NDRPDR iter env 7
- - 45 # rls2106.rel NDRPDR iter env 7
-
- vpp-2n-dnv-prev-iter-new-env:
- csit-vpp-perf-report-iterative-2110-2n-dnv:
- - 4 # rls2106.rel NDRPDR iter env 8
- - 5 # rls2106.rel NDRPDR iter env 8
- - 6 # rls2106.rel NDRPDR iter env 8
- - 7 # rls2106.rel NDRPDR iter env 8
- - 8 # rls2106.rel NDRPDR iter env 8
- - 10 # rls2106.rel NDRPDR iter env 8
- - 11 # rls2106.rel NDRPDR iter env 8
- - 12 # rls2106.rel NDRPDR iter env 8
- - 13 # rls2106.rel NDRPDR iter env 8
- - 14 # rls2106.rel NDRPDR iter env 8
-
- vpp-2n-dnv-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-dnv:
- - 16 # rls2110.rc2 NDRPDR iter env 8
- - 17 # rls2110.rc2 NDRPDR iter env 8
- - 18 # rls2110.rc2 NDRPDR iter env 8
- - 19 # rls2110.rc2 NDRPDR iter env 8
- - 20 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-dnv-hist-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2101-2n-dnv:
- - 31 # rls2101.rel MRR iter env 6
-
- vpp-2n-dnv-prev-iter-mrr-old-env:
- csit-vpp-perf-report-iterative-2106-2n-dnv:
- - 35 # rls2106.rel MRR iter env 7
-
- vpp-2n-dnv-prev-iter-mrr-new-env:
- csit-vpp-perf-report-iterative-2110-2n-dnv:
- - 9 # rls2106.rel MRR iter env 8
-
- vpp-2n-dnv-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-dnv:
- - 15 # rls2110.rc2 MRR iter env 8
-
- vpp-2n-dnv-curr-cov:
- csit-vpp-perf-report-coverage-2110-2n-dnv:
- - 1 # rls2110.rc2 NDRPDR cov env 8
- - 2 # rls2110.rc2 NDRPDR cov env 8
- - 3 # rls2110.rc2 NDRPDR cov env 8
- - 4 # rls2110.rc2 NDRPDR cov env 8
- - 5 # rls2110.rc2 NDRPDR cov env 8
- - 6 # rls2110.rc2 NDRPDR cov env 8
-
-# dpdk-performance-changes-2n-dnv-h1:
-# csit-dpdk-perf-verify-2101-2n-dnv:
-# - 9 # NDRPDR sel
-# - 10 # NDRPDR sel
-# - 11 # NDRPDR sel
-# - 12 # NDRPDR sel
-# - 13 # NDRPDR sel
-# - 14 # NDRPDR sel
-# - 15 # NDRPDR sel
-# - 16 # NDRPDR sel
-# - 17 # NDRPDR sel
-# - 18 # NDRPDR sel
-# dpdk-performance-changes-2n-dnv-ref:
-# # No data
-# dpdk-performance-changes-2n-dnv-cmp:
-# # No data
-# csit-dpdk-perf-report-iterative-2009-2n-dnv:
-
-# dpdk-perf-results-2n-dnv:
-# # No data
-# csit-dpdk-perf-report-iterative-2009-2n-dnv:
-
- # 2n-aws
-
- vpp-2n-aws-curr-iter:
- csit-vpp-perf-report-iterative-2110-2n-aws:
- - 9 # rls2110.rc2 NDRPDR iter env 8
- - 10 # rls2110.rc2 NDRPDR iter env 8
-# - 19 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-aws-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-2n-aws:
- - 9 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-2n-aws-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-2n-aws:
- - 18 # rls2110.rc2 MRR iter env 8
-
- vpp-2n-aws-curr-cov:
- # csit-vpp-perf-report-coverage-2110-2n-aws:
- csit-vpp-perf-report-iterative-2110-2n-aws:
- - 9 # rls2110.rc2 NDRPDR iter env 8
-
- # 3n-aws
-
- vpp-3n-aws-curr-iter:
- csit-vpp-perf-report-iterative-2110-3n-aws:
- - 24 # rls2110.rc2 NDRPDR iter env 8
-# - 26 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-aws-curr-iter-best:
- csit-vpp-perf-report-iterative-2110-3n-aws:
- - 24 # rls2110.rc2 NDRPDR iter env 8
-
- vpp-3n-aws-curr-iter-mrr:
- csit-vpp-perf-report-iterative-2110-3n-aws:
- - 25 # rls2110.rc2 MRR iter env 8
-
- vpp-3n-aws-curr-cov:
- # csit-vpp-perf-report-coverage-2110-3n-aws:
- csit-vpp-perf-report-iterative-2110-3n-aws:
- - 24 # rls2110.rc2 NDRPDR iter env 8
-
- # 2n-icx
-
-# vpp-2n-icx-curr-iter:
-# intel-csit-vpp-perf-report-iterative-2101-2n-icx:
-# - 10 # rls2106.rel NDRPDR iter env 7
-#
-# vpp-2n-icx-curr-iter-best:
-# intel-csit-vpp-perf-report-iterative-2101-2n-icx:
-# - 10 # rls2106.rel NDRPDR iter env 7
-
-# vpp-2n-icx-curr-iter-mrr:
-# intel-csit-vpp-perf-report-iterative-2101-2n-icx:
-# - 1 # master NDRPDR iter env 6
-#
-# vpp-compare-testbeds-mrr-clx-icx-ref:
-# csit-vpp-perf-report-iterative-2101-2n-clx:
-# - 53 # rls2101.rel MRR iter env 6
-# vpp-compare-testbeds-mrr-clx-icx-cmp:
-# intel-csit-vpp-perf-report-iterative-2101-2n-icx:
-# - 1 # master NDRPDR iter env 6
-
- # 3n-icx
-
-# vpp-3n-icx-curr-iter:
-# intel-csit-vpp-perf-report-iterative-2101-3n-icx:
-# - 10 # rls2106.rel NDRPDR iter env 7
-#
-# vpp-3n-icx-curr-iter-best:
-# intel-csit-vpp-perf-report-iterative-2101-3n-icx:
-# - 10 # rls2106.rel NDRPDR iter env 7
diff --git a/resources/tools/presentation/specifications/report/elements.yaml b/resources/tools/presentation/specifications/report/elements.yaml
deleted file mode 100644
index f5f8d2c156..0000000000
--- a/resources/tools/presentation/specifications/report/elements.yaml
+++ /dev/null
@@ -1,12975 +0,0 @@
-################################################################################
-### T A B L E S ###
-################################################################################
-
-# Statistics: job-specs' durations
-- type: "table"
- title: "Job Specification Duration: 2n-clx-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-clx-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-clx-curr-iter-best"
- - job-spec: "vpp-gso-mrr-00"
- data-set: "vpp-2n-clx-curr-iter-gso"
- - job-spec: "soak-00"
- data-set: "vpp-2n-clx-curr-soak"
-# - job-spec: "vsap-00"
-# data-set: "vpp-2n-clx-curr-iter-vsap"
- - job-spec: "nfv-density-mrr-00"
- data-set: "vpp-2n-clx-curr-nfv-mrr"
- - job-spec: "nfv-density-mlr-00"
- data-set: "vpp-2n-clx-curr-nfv-ndrpdr"
- - job-spec: "reconf-00"
- data-set: "vpp-2n-clx-curr-nfv-reconf"
- - job-spec: "dpdk-mlr-00"
- data-set: "dpdk-2n-clx-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-clx-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-clx-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-clx-curr-cov"
-# lines:
-# - job-spec: "gso-00"
-# build: "1"
-# - job-spec: "ip4-00"
-# build: "2"
-# - job-spec: "ip4-01"
-# build: "3"
-# - job-spec: "ip4-02"
-# build: "4"
-# - job-spec: "ip4-03"
-# build: "5"
-# - job-spec: "ip4-04"
-# build: "6"
-# - job-spec: "ip4-05"
-# build: "7"
-# - job-spec: "ip4-06"
-# build: "8"
-# - job-spec: "ip4-07"
-# build: "9"
-# - job-spec: "ip4tun-00"
-# build: "10"
-# - job-spec: "ip6-00"
-# build: "11"
-# - job-spec: "ip6-01"
-# build: "12"
-# - job-spec: "l2-00"
-# build: "13"
-# - job-spec: "l2-01"
-# build: "14"
-# - job-spec: "lb-00"
-# build: "15"
-# - job-spec: "memif-00"
-# build: "16"
-# - job-spec: "vhost-00"
-# build: "17"
-
-- type: "table"
- title: "Job Specification Duration: 2n-dnv-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-dnv-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-dnv-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-dnv-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-dnv-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-dnv-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-dnv-curr-cov"
-# lines:
-# - job-spec: "ip4-00"
-# build: "7"
-# - job-spec: "ip4-01"
-# build: "8"
-# - job-spec: "ip6-00"
-# build: "9"
-# - job-spec: "ip6-01"
-# build: "10"
-# - job-spec: "l2-00"
-# build: "11"
-# - job-spec: "l2-01"
-# build: "13"
-
-- type: "table"
- title: "Job Specification Duration: 2n-aws-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-aws-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-aws-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-aws-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-aws-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-aws-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-aws-curr-cov"
-# lines:
-# - job-spec: "vpp-00"
-# build: "1"
-
-- type: "table"
- title: "Job Specification Duration: 3n-aws-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-aws-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-3n-aws-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-3n-aws-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 3n-aws-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-aws-cov"
-# jb-type: "coverage"
-# data: "vpp-3n-aws-curr-cov"
-# lines:
-# - job-spec: "vpp-00"
-# build: "1"
-
-- type: "table"
- title: "Job Specification Duration: 2n-skx-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-skx-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-skx-curr-iter-best"
- - job-spec: "vpp-gso-mrr-00"
- data-set: "vpp-2n-skx-curr-gso"
- - job-spec: "soak-00"
- data-set: "vpp-2n-skx-curr-soak"
- - job-spec: "nfv-density-mrr-00"
- data-set: "vpp-2n-skx-curr-nfv-mrr"
- - job-spec: "nfv-density-mlr-00"
- data-set: "vpp-2n-skx-curr-nfv-ndrpdr"
- - job-spec: "reconf-00"
- data-set: "vpp-2n-skx-curr-nfv-reconf"
- - job-spec: "dpdk-mlr-00"
- data-set: "dpdk-2n-skx-curr-iter"
- - job-spec: "trex-mlr-00"
- data-set: "trex-2n-skx-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-skx-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-skx-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-skx-curr-cov"
-# lines:
-# - job-spec: "gso-00"
-# build: "1"
-# - job-spec: "ip4-00"
-# build: "2"
-# - job-spec: "ip4-01"
-# build: "3"
-# - job-spec: "ip4-02"
-# build: "4"
-# - job-spec: "ip4-03"
-# build: "5"
-# - job-spec: "ip4-04"
-# build: "6"
-# - job-spec: "ip4-05"
-# build: "7"
-# - job-spec: "ip4-06"
-# build: "8"
-# - job-spec: "ip4-07"
-# build: "9"
-# - job-spec: "ip4tun-00"
-# build: "10"
-# - job-spec: "ip6-00"
-# build: "11"
-# - job-spec: "ip6-01"
-# build: "12"
-# - job-spec: "l2-00"
-# build: "13"
-# - job-spec: "l2-01"
-# build: "14"
-# - job-spec: "lb-00"
-# build: "15"
-# - job-spec: "memif-00"
-# build: "16"
-# - job-spec: "vhost-00"
-# build: "17"
-
-- type: "table"
- title: "Job Specification Duration: 2n-tx2-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-tx2-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-tx2-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-tx2-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-tx2-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-tx2-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-tx2-curr-cov"
-# lines:
-# - job-spec: "ip4-00"
-# build: "1"
-# - job-spec: "ip4-01"
-# build: "2"
-# - job-spec: "ip4-02"
-# build: "3"
-# - job-spec: "ip4-03"
-# build: "4"
-# - job-spec: "ip4-04"
-# build: "5"
-# - job-spec: "ip4-05"
-# build: "6"
-# - job-spec: "ip4-06"
-# build: "7"
-# - job-spec: "ip6-00"
-# build: "8"
-# - job-spec: "ip6-01"
-# build: "9"
-# - job-spec: "l2-00"
-# build: "10"
-# - job-spec: "l2-01"
-# build: "11"
-# - job-spec: "l2-02"
-# build: "12"
-# - job-spec: "l2-03"
-# build: "13"
-# - job-spec: "l2-04"
-# build: "14"
-
-- type: "table"
- title: "Job Specification Duration: 2n-zn2-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-zn2-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-2n-zn2-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-2n-zn2-curr-iter-best"
- - job-spec: "vpp-gso-mrr-00"
- data-set: "vpp-2n-zn2-curr-iter-gso"
- - job-spec: "dpdk-mlr-00"
- data-set: "dpdk-2n-zn2-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 2n-zn2-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-2n-zn2-cov"
-# jb-type: "coverage"
-# data: "vpp-2n-zn2-curr-cov"
-# lines:
-# - job-spec: "gso-00"
-# build: "1"
-# - job-spec: "ip4-00"
-# build: "2"
-# - job-spec: "ip4-01"
-# build: "3"
-# - job-spec: "ip4-02"
-# build: "4"
-# - job-spec: "ip4-03"
-# build: "18"
-# - job-spec: "ip4-04"
-# build: "6"
-# - job-spec: "ip4-05"
-# build: "7"
-# - job-spec: "ip4tun-00"
-# build: "8"
-# - job-spec: "ip6-00"
-# build: "9"
-# - job-spec: "ip6-01"
-# build: "19"
-# - job-spec: "l2-00"
-# build: "11"
-# - job-spec: "l2-01"
-# build: "12"
-# - job-spec: "lb-00"
-# build: "13"
-# - job-spec: "memif-00"
-# build: "14"
-# - job-spec: "vhost-00"
-# build: "15"
-
-- type: "table"
- title: "Job Specification Duration: 3n-dnv-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-dnv-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-3n-dnv-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-3n-dnv-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 3n-dnv-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-dnv-cov"
-# jb-type: "coverage"
-# data: "vpp-3n-dnv-curr-cov"
-# lines:
-# - job-spec: "crypto-00"
-# build: "11"
-# - job-spec: "crypto-01"
-# build: "12"
-# - job-spec: "crypto-02"
-# build: "13"
-# - job-spec: "ip4-00"
-# build: "14"
-# - job-spec: "ip4-01"
-# build: "15"
-# - job-spec: "ip4tun-00"
-# build: "16"
-# - job-spec: "ip6-00"
-# build: "17"
-# - job-spec: "ip6-01"
-# build: "10"
-# - job-spec: "l2-00"
-# build: "20"
-# - job-spec: "l2-01"
-# build: "21"
-
-- type: "table"
- title: "Job Specification Duration: 3n-skx-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-skx-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-3n-skx-curr-iter"
- - job-spec: "hoststack-00"
- data-set: "vpp-3n-skx-curr-iter-hoststack"
- - job-spec: "dpdk-mlr-00"
- data-set: "dpdk-3n-skx-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 3n-skx-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-skx-cov"
-# jb-type: "coverage"
-# data: "vpp-3n-skx-curr-cov"
-# lines:
-# - job-spec: "crypto-00"
-# build: "1"
-# - job-spec: "crypto-01"
-# build: "3"
-# - job-spec: "crypto-02"
-# build: "4"
-# - job-spec: "crypto-03"
-# build: "36"
-# - job-spec: "crypto-04"
-# build: "6"
-# - job-spec: "ip4-00"
-# build: "7"
-# - job-spec: "ip4-01"
-# build: "8"
-# - job-spec: "ip4-02"
-# build: "9"
-# - job-spec: "ip4-03"
-# build: "10"
-# - job-spec: "ip4-04"
-# build: "11"
-# - job-spec: "ip4-05"
-# build: "12"
-# - job-spec: "ip4-06"
-# build: "13"
-# - job-spec: "ip4-07"
-# build: "14"
-# - job-spec: "ip4tun-00"
-# build: "15"
-# - job-spec: "ip4tun-02"
-# build: "16"
-# - job-spec: "ip6-00"
-# build: "17"
-# - job-spec: "ip6-01"
-# build: "18"
-# - job-spec: "ip6tun-00"
-# build: "19"
-# - job-spec: "l2-00"
-# build: "20"
-# - job-spec: "l2-01"
-# build: "21"
-# - job-spec: "l2-02"
-# build: "22"
-# - job-spec: "l2-03"
-# build: "23"
-# - job-spec: "l2-04"
-# build: "24"
-# - job-spec: "l2-05"
-# build: "25"
-# - job-spec: "l2-06"
-# build: "26"
-# - job-spec: "l2-07"
-# build: "27"
-# - job-spec: "l2-08"
-# build: "28"
-# - job-spec: "l2-09"
-# build: "29"
-# - job-spec: "l2-10"
-# build: "30"
-# - job-spec: "memif-00"
-# build: "31"
-# - job-spec: "srv6-00"
-# build: "32"
-# - job-spec: "srv6-01"
-# build: "33"
-# - job-spec: "vhost-00"
-# build: "34"
-# - job-spec: "vhost-01"
-# build: "35"
-
-- type: "table"
- title: "Job Specification Duration: 3n-tsh-iterative"
- algorithm: "table_job_spec_duration"
- output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-tsh-iter"
- jb-type: "iterative"
- lines:
- - job-spec: "vpp-mrr-00"
- data-set: "vpp-3n-tsh-curr-iter-mrr"
- - job-spec: "vpp-mlr-00"
- data-set: "vpp-3n-tsh-curr-iter"
- - job-spec: "dpdk-mlr-00"
- data-set: "dpdk-3n-tsh-curr-iter"
-
-# - type: "table"
-# title: "Job Specification Duration: 3n-tsh-coverage"
-# algorithm: "table_job_spec_duration"
-# output-file: "{DIR[STATIC,VPP]}/job-spec-duration-3n-tsh-cov"
-# jb-type: "coverage"
-# data: "vpp-3n-tsh-curr-cov"
-# lines:
-# - job-spec: "ip4-00"
-# build: "7"
-# - job-spec: "ip4-01"
-# build: "8"
-# - job-spec: "ip4-02"
-# build: "9"
-# - job-spec: "ip4-03"
-# build: "10"
-# - job-spec: "ip4tun-00"
-# build: "15"
-# - job-spec: "ip6-00"
-# build: "17"
-# - job-spec: "ip6-01"
-# build: "18"
-# - job-spec: "l2-00"
-# build: "20"
-# - job-spec: "l2-01"
-# build: "21"
-# - job-spec: "l2-02"
-# build: "22"
-# - job-spec: "l2-03"
-# build: "23"
-# - job-spec: "l2-04"
-# build: "24"
-# - job-spec: "memif-00"
-# build: "31"
-# - job-spec: "srv6-00"
-# build: "32"
-# - job-spec: "srv6-01"
-# build: "33"
-# - job-spec: "vhost-00"
-# build: "34"
-# - job-spec: "vhost-01"
-# build: "35"
-
-# VPP Latency Changes 3n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 3n-skx 2t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-skx-xxv710-2t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 3n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 3n-skx 2t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-skx-xxv710-2t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 3n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 3n-skx 2t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-skx-xxv710-2t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-skx 2t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-skx-xxv710-2t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-skx 2t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-skx-xxv710-2t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-skx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-skx 2t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-skx-xxv710-2t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-xxv710-2t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-xxv710-2t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-xxv710-2t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-cx556a-2t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-cx556a-2t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-clx 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-clx 2t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-clx-cx556a-2t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-zn2 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-zn2 2t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-zn2-xxv710-2t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-zn2 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-zn2 2t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-zn2-xxv710-2t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-zn2 2t1c
-- type: "table"
- title: "VPP Latency Changes 2n-zn2 2t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-zn2-xxv710-2t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-tx2 1t1c
-- type: "table"
- title: "VPP Latency Changes 2n-tx2 1t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-tx2-xl710-1t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-tx2 1t1c
-- type: "table"
- title: "VPP Latency Changes 2n-tx2 1t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-tx2-xl710-1t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 2n-tx2 1t1c
-- type: "table"
- title: "VPP Latency Changes 2n-tx2 1t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-2n-tx2-xl710-1t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 3n-tsh 1t1c
-- type: "table"
- title: "VPP Latency Changes 3n-tsh 1t1c PDR50-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-tsh-x520-1t1c-pdr50-d1-avg"
- include-tests: "latency-PDR50-direction1-avg"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 3n-tsh 1t1c
-- type: "table"
- title: "VPP Latency Changes 3n-tsh 1t1c PDR90-direction1-avg"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-tsh-x520-1t1c-pdr90-d1-avg"
- include-tests: "latency-PDR90-direction1-avg"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Latency Changes 3n-tsh 1t1c
-- type: "table"
- title: "VPP Latency Changes 3n-tsh 1t1c PDR90-direction1-max"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/latency-changes-3n-tsh-x520-1t1c-pdr90-d1-max"
- include-tests: "latency-PDR90-direction1-max"
- filter: "'1T1C' and 'NDRPDR'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-best"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [uSec +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Soak vs NDR - 2n-skx
-- type: "table"
- title: "VPP Soak vs NDR 2n-skx"
- algorithm: "table_soak_vs_ndr"
- output-file: "{DIR[STATIC,VPP]}/soak-vs-ndr-2n-skx"
- reference:
- title: "NDR"
- data: "vpp-soak-vs-ndr-2n-skx-ref"
- compare:
- title: "Soak"
- data: "vpp-2n-skx-curr-soak"
- data: "vpp-soak-vs-ndr-2n-skx"
- include-tests: "NDR"
- filter: "('NDRPDR' or 'SOAK') and not 'NF_DENSITY'"
- parameters:
- - "throughput"
- - "name"
- - "parent"
-
-# VPP Soak vs NDR - 2n-clx
-- type: "table"
- title: "VPP Soak vs NDR 2n-clx"
- algorithm: "table_soak_vs_ndr"
- output-file: "{DIR[STATIC,VPP]}/soak-vs-ndr-2n-clx"
- reference:
- title: "NDR"
- data: "vpp-soak-vs-ndr-2n-clx-ref"
- compare:
- title: "Soak"
- data: "vpp-2n-clx-curr-soak"
- data: "vpp-soak-vs-ndr-2n-clx"
- include-tests: "NDR"
- filter: "('NDRPDR' or 'SOAK') and not 'NF_DENSITY'"
- parameters:
- - "throughput"
- - "name"
- - "parent"
-
-################################################################################
-
-# VPP Compare NICs 3n-skx 2t1c ndr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-nics-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 4t2c ndr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-nics-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 2t1c pdr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-nics-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 4t2c pdr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-nics-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 2t1c mrr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 4t2c mrr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 3n-skx 8t4c mrr
-- type: "table"
- title: "VPP Compare NICs 3n-skx 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-8t4c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 2t1c ndr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-nics-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 4t2c ndr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-nics-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 2t1c pdr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-nics-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 4t2c pdr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-nics-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 2t1c mrr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 4t2c mrr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-# VPP Compare NICs 2n-skx 8t4c mrr
-- type: "table"
- title: "VPP Compare NICs 2n-skx 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-8t4c-nics-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and not 'NF_DENSITY'"
- columns:
- - title: "x710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-X710"
- - title: "xxv710"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- tag: "NIC_Intel-XXV710"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "x710, xxv710 - NICs tested."
- - "Diff - difference between x710 and xxv710 NIC."
-
-################################################################################
-# VPP
-
-# VPP Performance Changes 3n-skx 2t1c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-skx 4t2c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-skx 2t1c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-skx 4t2c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 2t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 4t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 2t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 4t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 2t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 4t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 2t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 4t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 2t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 4t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 2t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 4t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 2t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 4t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 2t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 4t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-dnv 1t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 1t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-1t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 2n-dnv 2t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 2t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-2t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 2n-dnv 1t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 1t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-1t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 2n-dnv 2t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 2t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-2t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 3n-dnv 1t1c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 1t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-1t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 3n-dnv 2t2c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 2t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-2t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 3n-dnv 1t1c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 1t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-1t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 3n-dnv 2t2c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 2t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-2t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous.'
-
-# VPP Performance Changes 3n-tsh 1t1c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 1t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-1t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 2t2c pdr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 2t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-2t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 1t1c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 1t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-1t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 2t2c ndr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 2t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-2t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 1t1c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 1t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-1t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 2t2c pdr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 2t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-2t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: PDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 1t1c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 1t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-1t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 2t2c ndr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 2t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-2t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: NDR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c ndr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c ndr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c pdr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c pdr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c ndr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-1c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '1C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c ndr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-2c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '2C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c pdr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-1c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '1C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c pdr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-2c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '2C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-3n-skx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 3n-skx to 3n-icx 1c ndr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 3n-skx to 3n-icx 1c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-3n-skx-3n-icx-1c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '1C'"
-# columns:
-# - title: "3n-skx xxv710"
-# data-set: "vpp-3n-skx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "3n-icx e810cq"
-# data-set: "vpp-3n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "3n-skx xxv710, 3n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 3n-skx xxv710 and 3n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 3n-skx to 3n-icx 2c ndr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 3n-skx to 3n-icx ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-3n-skx-3n-icx-2c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '2C'"
-# columns:
-# - title: "3n-skx xxv710"
-# data-set: "vpp-3n-skx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "3n-icx e810cq"
-# data-set: "vpp-3n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "3n-skx xxv710, 3n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 3n-skx xxv710 and 3n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 3n-skx to 3n-icx 1c pdr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 3n-skx to 3n-icx 1c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-3n-skx-3n-icx-1c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '1C'"
-# columns:
-# - title: "3n-skx xxv710"
-# data-set: "vpp-3n-skx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "3n-icx e810cq"
-# data-set: "vpp-3n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "3n-skx xxv710, 3n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 3n-skx xxv710 and 3n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 3n-skx to 3n-icx 2c pdr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 3n-skx to 3n-icx 2c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-3n-skx-3n-icx-2c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'NDRPDR' and '2C'"
-# columns:
-# - title: "3n-skx xxv710"
-# data-set: "vpp-3n-skx-curr-iter"
-# tag: "NIC_Intel-XXV710"
-# - title: "3n-icx e810cq"
-# data-set: "vpp-3n-icx-curr-iter"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "3n-skx xxv710, 3n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 3n-skx xxv710 and 3n-icx e810cq testbeds."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 1c ndr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'NDRPDR' and '1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 2c ndr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'NDRPDR' and '2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 1c pdr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'NDRPDR' and '1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 2c pdr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'NDRPDR' and '2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Performance Changes 3n-skx 2t1c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-skx 4t2c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-skx 8t4c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-skx 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-skx-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 2t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 4t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-skx 8t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-skx 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-skx-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-skx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-skx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-skx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-skx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 2t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 4t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-xxv710 8t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-xxv710 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-xxv710-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 2t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 4t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-clx-cx556a 8t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-clx-cx556a 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-clx-cx556a-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and 'NIC_Mellanox-CX556A' and not 'NF_DENSITY'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-clx-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-clx-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-clx-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-clx with cx556a.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 2t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'MRR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 4t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'MRR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-zn2-xxv710 8t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-zn2-xxv710 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-zn2-xxv710-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'MRR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-zn2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-zn2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-zn2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-zn2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-zn2 with xxv710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-dnv 1t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 1t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-1t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-dnv 2t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 2t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-2t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-dnv 4t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-dnv 4t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-dnv-4t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T4C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-dnv 1t1c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 1t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-1t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-dnv 2t2c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 2t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-2t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-dnv 4t4c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-dnv 4t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-dnv-4t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T4C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-dnv-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-dnv-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-dnv-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-dnv-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-dnv with x553.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 1t1c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 1t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-1t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 2t2c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 2t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-2t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 3n-tsh 4t4c mrr
-- type: "table"
- title: "VPP Performance Changes 3n-tsh 4t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-3n-tsh-4t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T4C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-3n-tsh-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-3n-tsh-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-3n-tsh-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-3n-tsh-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 3n-tsh with x520.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 1t1c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 1t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-1t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 2t2c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 2t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-2t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Performance Changes 2n-tx2 4t4c mrr
-- type: "table"
- title: "VPP Performance Changes 2n-tx2 4t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-changes-2n-tx2-4t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T4C'"
- columns:
- - title: "2101.0-7"
- data-set: "vpp-2n-tx2-hist-iter-mrr-new-env"
- - title: "2106.0-7"
- data-set: "vpp-2n-tx2-prev-iter-mrr-old-env"
- - title: "2106.0-8"
- data-set: "vpp-2n-tx2-prev-iter-mrr-new-env"
- - title: "2110.0-8"
- data-set: "vpp-2n-tx2-curr-iter-mrr"
- comparisons:
- - title: "2106.0-8 vs 2106.0-7"
- reference: 2
- compare: 3
- - title: "2110.0-8 vs 2106.0-8"
- reference: 3
- compare: 4
- legend:
- - ''
- - 'Test Case: Test cases executed for: MRR throughput on 2n-tx2 with xl710.'
- - 'YYMM.V-E: [Mpps +- StDev] results for VPP (YY year, MM month, V minor version) tested in CSIT (E environment version, "7" for CSIT rls2106, "8" for CSIT rls2110).'
- - 'YYMM.V-E vs YYMM.V-E: [% +- StDev] Relative difference, latter is the base. [N] for Root Cause Analysis (RCA) reference, see RCA list below.'
- - '2106.0-8 vs 2106.0-7: Compares CSIT environment current vs previous with previous VPP code.'
- - '2110.0-8 vs 2106.0-8: Compares VPP code current vs previous in the current CSIT environment.'
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c mrr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 2t1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-2t1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c mrr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 4t2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-4t2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Testbeds 2n-skx to 2n-clx 8t4c mrr
-- type: "table"
- title: "VPP Comparison Across Testbeds 2n-skx to 2n-clx 8t4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-skx-2n-clx-8t4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'8T4C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- - title: "2n-clx"
- data-set: "vpp-2n-clx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 1c mrr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 1c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-1c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'MRR' and '1C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 2c mrr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 2c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-2c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'MRR' and '2C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# VPP Comparison Across Topologies 3n-skx to 2n-skx 4c mrr
-- type: "table"
- title: "VPP Comparison Across Topologies 3n-skx to 2n-skx 4c mrr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,VPP]}/performance-compare-topologies-3n-skx-2n-skx-4c-mrr"
- include-tests: "MRR" # "PDR" | "NDR" | "MRR"
- filter: "'MRR' and '4C' and 'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "vpp-3n-skx-curr-iter-mrr"
- - title: "2n-skx"
- data-set: "vpp-2n-skx-curr-iter-mrr"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c mrr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 1c mrr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-1c-mrr"
-# include-tests: "MRR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'MRR' and '1C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter-mrr"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter-mrr"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c mrr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 2c mrr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-2c-mrr"
-# include-tests: "MRR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'MRR' and '2C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter-mrr"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter-mrr"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-#
-# # VPP Comparison Across Testbeds 2n-clx to 2n-icx 4c mrr
-# - type: "table"
-# title: "VPP Comparison Across Testbeds 2n-clx to 2n-icx 4c mrr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,VPP]}/performance-compare-testbeds-2n-clx-2n-icx-4c-mrr"
-# include-tests: "MRR" # "PDR" | "NDR" | "MRR"
-# filter: "('NIC_Intel-XXV710' or 'NIC_Intel-E810CQ') and 'MRR' and '4C'"
-# columns:
-# - title: "2n-clx xxv710"
-# data-set: "vpp-2n-clx-curr-iter-mrr"
-# tag: "NIC_Intel-XXV710"
-# - title: "2n-icx e810cq"
-# data-set: "vpp-2n-icx-curr-iter-mrr"
-# tag: "NIC_Intel-E810CQ"
-# comparisons:
-# - title: "Diff"
-# reference: 1
-# compare: 2
-# legend:
-# - ""
-# - "2n-clx xxv710, 2n-icx e810cq - testbeds and NICs tested."
-# - "Diff - difference between 2n-clx xxv710 and 2n-icx e810cq testbeds."
-
-# Detailed Test Results - VPP Performance Results 3n-skx
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 3n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,3N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-3n-skx-curr-cov"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-skx
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-skx-curr-cov"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-zn2
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-zn2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,ZN2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-zn2-curr-cov"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-clx
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-clx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,CLX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-clx-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# # Detailed Test Results - VPP Performance Results 2n-icx
-# - type: "table"
-# title: "Detailed Test Results - VPP Performance Results 2n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,PERF,VPP,2N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
-# data: "data msg"
-# data: "vpp-2n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-# remove-ndr: True
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-#
-# # Detailed Test Results - VPP Performance Results 3n-icx
-# - type: "table"
-# title: "Detailed Test Results - VPP Performance Results 3n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,PERF,VPP,3N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
-# data: "data msg"
-# data: "vpp-3n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-# remove-ndr: True
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-
-# Detailed Test Results - VPP Performance Results 3n-tsh
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 3n-tsh"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,3N,TSH]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-3n-tsh-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-tx2
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-tx2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,TX2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-tx2-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 3n-dnv
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 3n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,3N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-3n-dnv-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-dnv
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,DNV]}/vpp_performance_results_2n_dnv"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-dnv-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 2n-aws
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,AWS]}/vpp_performance_results_2n_aws"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-2n-aws-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP Performance Results 3n-aws
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,3N,AWS]}/vpp_performance_results_3n_aws"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-3n-aws-curr-cov"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Test configuration - VPP Performance Test Configs 3n-skx
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 3n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,3N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-skx-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-skx
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-skx-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-zn2
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-zn2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,ZN2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-zn2-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-clx
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-clx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,CLX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-clx-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# # Test configuration - VPP Performance Test Configs 2n-icx
-# - type: "table"
-# title: "Test configuration - VPP Performance Test Configs 2n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTC,PERF,VPP,2N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
-# data: "data conf-history"
-# data: "vpp-2n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-# remove-ndr: True
-# parameters:
-# - "parent"
-# - "name"
-# - "conf-history"
-#
-# # Test configuration - VPP Performance Test Configs 3n-icx
-# - type: "table"
-# title: "Test configuration - VPP Performance Test Configs 3n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTC,PERF,VPP,3N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
-# data: "data conf-history"
-# data: "vpp-3n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-# remove-ndr: True
-# parameters:
-# - "parent"
-# - "name"
-# - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 3n-tsh
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 3n-tsh"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,3N,TSH]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-tsh-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-tx2
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-tx2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,TX2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-tx2-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 3n-dnv
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 3n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,3N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-dnv-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-dnv
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-dnv-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 2n-aws
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-aws-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP Performance Test Configs 3n-aws
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,3N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-aws-curr-cov"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test Operational Data - VPP Performance Operational Data 3n-skx
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 3n-skx"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,3N,SKX]}/"
- data: "vpp-3n-skx-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-skx
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-skx"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,SKX]}/"
- data: "vpp-2n-skx-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-zn2
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-zn2"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,ZN2]}/"
- data: "vpp-2n-zn2-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-clx
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-clx"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,CLX]}/"
- data: "vpp-2n-clx-curr-cov"
- filter: "all"
-
-# # Test Operational Data - VPP Performance Operational Data 2n-icx
-# - type: "table"
-# title: "Test Operational Data - VPP Performance Operational Data 2n-icx"
-# algorithm: "table_oper_data_html"
-# output-file: "{DIR[DTO,PERF,VPP,2N,ICX]}/"
-# data: "vpp-2n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-
-# # Test Operational Data - VPP Performance Operational Data 3n-icx
-# - type: "table"
-# title: "Test Operational Data - VPP Performance Operational Data 3n-icx"
-# algorithm: "table_oper_data_html"
-# output-file: "{DIR[DTO,PERF,VPP,3N,ICX]}/"
-# data: "vpp-3n-icx-curr-iter-best"
-# filter: "'NDRPDR'"
-
-# Test Operational Data - VPP Performance Operational Data 3n-tsh
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 3n-tsh"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,3N,TSH]}/"
- data: "vpp-3n-tsh-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-tx2
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-tx2"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,TX2]}/"
- data: "vpp-2n-tx2-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 3n-dnv
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 3n-dnv"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,3N,DNV]}/"
- data: "vpp-3n-dnv-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-dnv
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-dnv"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,DNV]}/"
- data: "vpp-2n-dnv-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 2n-aws
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-aws"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,AWS]}/"
- data: "vpp-2n-aws-curr-cov"
- filter: "all"
-
-# Test Operational Data - VPP Performance Operational Data 3n-aws
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 3n-aws"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,3N,AWS]}/"
- data: "vpp-3n-aws-curr-cov"
- filter: "all"
-
-# Detailed Test Results - VPP MRR Results 3n-skx
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 3n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,3N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-3n-skx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-skx
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-skx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-zn2
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-zn2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,ZN2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-zn2-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-clx
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-clx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,CLX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-clx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# # Detailed Test Results - VPP MRR Results 2n-icx
-# - type: "table"
-# title: "Detailed Test Results - VPP MRR Results 2n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,MRR,VPP,2N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
-# data: "data msg"
-# data: "vpp-2n-icx-curr-iter-mrr"
-# filter: "'MRR'"
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-
-# # Detailed Test Results - VPP MRR Results 3n-icx
-# - type: "table"
-# title: "Detailed Test Results - VPP MRR Results 3n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,MRR,VPP,3N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
-# data: "data msg"
-# data: "vpp-mrr-results-3n-icx"
-# filter: "'MRR'"
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-
-# Detailed Test Results - VPP MRR Results 3n-tsh
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 3n-tsh"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,3N,TSH]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-3n-tsh-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-tx2
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-tx2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,TX2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-tx2-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 3n-dnv
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 3n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,3N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-3n-dnv-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-dnv
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-dnv-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 2n-aws
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,2N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-2n-aws-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - VPP MRR Results 3n-aws
-- type: "table"
- title: "Detailed Test Results - VPP MRR Results 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,MRR,VPP,3N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Maximum Receive Rate trial [Mpps] |preout| "
- data: "data msg"
- data: "vpp-3n-aws-curr-iter-mrr"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Test configuration - VPP MRR Test Configs 3n-skx
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 3n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,3N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-skx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-skx
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,SKX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-skx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-zn2
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-zn2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,ZN2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-zn2-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-clx
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-clx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,CLX]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-clx-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# # Test configuration - VPP MRR Test Configs 2n-icx
-# - type: "table"
-# title: "Test configuration - VPP MRR Test Configs 2n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTC,MRR,VPP,2N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
-# data: "data conf-history"
-# data: "vpp-2n-icx-curr-iter-mrr"
-# filter: "'MRR'"
-# parameters:
-# - "parent"
-# - "name"
-# - "conf-history"
-
-# # Test configuration - VPP MRR Test Configs 3n-icx
-# - type: "table"
-# title: "Test configuration - VPP MRR Test Configs 3n-icx"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTC,MRR,VPP,3N,ICX]}/"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
-# data: "data conf-history"
-# data: "vpp-mrr-results-3n-icx"
-# filter: "'MRR'"
-# parameters:
-# - "parent"
-# - "name"
-# - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 3n-tsh
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 3n-tsh"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,3N,TSH]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-tsh-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-tx2
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-tx2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,TX2]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-tx2-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 3n-dnv
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 3n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,3N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-dnv-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-dnv
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-dnv"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,DNV]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-dnv-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 2n-aws
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,2N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-2n-aws-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test configuration - VPP MRR Test Configs 3n-aws
-- type: "table"
- title: "Test configuration - VPP MRR Test Configs 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,MRR,VPP,3N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-3n-aws-curr-iter-mrr"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Detailed Test Results - VPP Device Results - Ubuntu
-- type: "table"
- title: "Detailed Test Results - VPP Device Results - Ubuntu"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]}/vpp_device_results_ubuntu"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Status |preout| "
- data: "data status"
- data: "vpp-device-results-ubuntu"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "doc"
- - "status"
-
-# Test configuration - VPP Device Test Configs - Ubuntu
-- type: "table"
- title: "Test configuration - VPP Device Test Configs - Ubuntu"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,FUNC,VPP,DEVICE,UBUNTU]}/vpp_device_configuration_ubuntu"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-device-results-ubuntu"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-################################################################################
-
-# DPDK Performance Changes 3n-skx 2t1c pdr
-- type: "table"
- title: "DPDK Performance Changes 3n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-skx 4t2c pdr
-- type: "table"
- title: "DPDK Performance Changes 3n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-skx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-skx 2t1c ndr
-- type: "table"
- title: "DPDK Performance Changes 3n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-skx 4t2c ndr
-- type: "table"
- title: "DPDK Performance Changes 3n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-skx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-skx 2t1c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-skx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-skx 4t2c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-skx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-skx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-skx 2t1c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-skx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-skx 4t2c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-skx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-skx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-skx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-skx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-clx 2t1c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-clx 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-clx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-clx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-clx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-clx 4t2c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-clx 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-clx-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-clx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-clx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-clx 2t1c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-clx 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-clx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-clx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-clx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-clx 4t2c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-clx 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-clx-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-clx-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-clx-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-zn2 2t1c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-zn2 2t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-zn2-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-zn2-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-zn2-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-zn2-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-zn2 4t2c pdr
-- type: "table"
- title: "DPDK Performance Changes 2n-zn2 4t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-zn2-4t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-zn2-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-zn2-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-zn2-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-zn2 2t1c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-zn2 2t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-zn2-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-zn2-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-zn2-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-zn2-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 2n-zn2 4t2c ndr
-- type: "table"
- title: "DPDK Performance Changes 2n-zn2 4t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-zn2-4t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'4T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-2n-zn2-hist-iter"
- - title: "21.02"
- data-set: "dpdk-2n-zn2-prev-iter"
- - title: "21.08"
- data-set: "dpdk-2n-zn2-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-## DPDK Performance Changes 2n-dnv 1t1c pdr
-#- type: "table"
-# title: "DPDK Performance Changes 2n-dnv 1t1c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-dnv-1t1c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-2n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-2n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-2n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 2n-dnv 2t2c pdr
-#- type: "table"
-# title: "DPDK Performance Changes 2n-dnv 2t2c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-dnv-2t2c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-2n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-2n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-2n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 2n-dnv 1t1c ndr
-#- type: "table"
-# title: "DPDK Performance Changes 2n-dnv 1t1c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-dnv-1t1c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-2n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-2n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-2n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 2n-dnv 2t2c ndr
-#- type: "table"
-# title: "DPDK Performance Changes 2n-dnv 2t2c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-2n-dnv-2t2c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-2n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-2n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-2n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 3n-dnv 1t1c pdr
-#- type: "table"
-# title: "DPDK Performance Changes 3n-dnv 1t1c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-dnv-1t1c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-3n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-3n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-3n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 3n-dnv 2t2c pdr
-#- type: "table"
-# title: "DPDK Performance Changes 3n-dnv 2t2c pdr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-dnv-2t2c-pdr"
-# include-tests: "PDR" # "PDR" | "NDR" | "MRR"
-# filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-3n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-3n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-3n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 3n-dnv 1t1c ndr
-#- type: "table"
-# title: "DPDK Performance Changes 3n-dnv 1t1c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-dnv-1t1c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-3n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-3n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-3n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-#
-## DPDK Performance Changes 3n-dnv 2t2c ndr
-#- type: "table"
-# title: "DPDK Performance Changes 3n-dnv 2t2c ndr"
-# algorithm: "table_comparison"
-# output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-dnv-2t2c-ndr"
-# include-tests: "NDR" # "PDR" | "NDR" | "MRR"
-# filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-X553'"
-# columns:
-# - title: "2001"
-# data-set: "dpdk-performance-changes-3n-dnv-h1"
-# - title: "2005"
-# data-set: "dpdk-performance-changes-3n-dnv-ref"
-# - title: "2009"
-# data-set: "dpdk-performance-changes-3n-dnv-cmp"
-# comparisons:
-# - title: "Diff"
-# reference: 2
-# compare: 3
-# legend:
-# - ""
-# - "2001, 2005, 2009 - DPDK versions tested."
-# - "Diff - difference between 2005 and 2009 DPDK version."
-
-# DPDK Performance Changes 3n-tsh 1t1c pdr
-- type: "table"
- title: "DPDK Performance Changes 3n-tsh 1t1c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-tsh-1t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-tsh-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-tsh-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-tsh-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-tsh 2t2c pdr
-- type: "table"
- title: "DPDK Performance Changes 3n-tsh 2t2c pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-tsh-2t2c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-tsh-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-tsh-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-tsh-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-tsh 1t1c ndr
-- type: "table"
- title: "DPDK Performance Changes 3n-tsh 1t1c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-tsh-1t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'1T1C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-tsh-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-tsh-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-tsh-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Performance Changes 3n-tsh 2t2c ndr
-- type: "table"
- title: "DPDK Performance Changes 3n-tsh 2t2c ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-changes-3n-tsh-2t2c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'2T2C' and 'NDRPDR' and 'NIC_Intel-XXV710'"
- columns:
- - title: "20.11"
- data-set: "dpdk-3n-tsh-hist-iter"
- - title: "21.02"
- data-set: "dpdk-3n-tsh-prev-iter"
- - title: "21.08"
- data-set: "dpdk-3n-tsh-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 2
- compare: 3
- legend:
- - ""
- - "20.11, 21.02, 21.08 - DPDK versions tested."
- - "Diff - difference between 21.02 and 21.08 DPDK version."
-
-# DPDK Comparison Across Testbeds 2n-skx to 2n-clx ndr
-- type: "table"
- title: "DPDK Comparison Across Testbeds 2n-skx to 2n-clx ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-compare-testbeds-2n-skx-2n-clx-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "dpdk-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# DPDK Comparison Across Testbeds 2n-skx to 2n-clx pdr
-- type: "table"
- title: "DPDK Comparison Across Testbeds 2n-skx to 2n-clx pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-compare-testbeds-2n-skx-2n-clx-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'NIC_Intel-XXV710'"
- columns:
- - title: "2n-skx"
- data-set: "dpdk-2n-skx-curr-iter"
- - title: "2n-clx"
- data-set: "dpdk-2n-clx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "2n-skx, 2n-clx - testbeds and NICs tested."
- - "Diff - difference between 2n-skx and 2n-clx testbeds."
-
-# DPDK Comparison Across Topologies 3n-skx to 2n-skx ndr
-- type: "table"
- title: "DPDK Comparison Across Topologies 3n-skx to 2n-skx ndr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-compare-topologies-3n-skx-2n-skx-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- filter: "'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "dpdk-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# DPDK Comparison Across Topologies 3n-skx to 2n-skx pdr
-- type: "table"
- title: "DPDK Comparison Across Topologies 3n-skx to 2n-skx pdr"
- algorithm: "table_comparison"
- output-file: "{DIR[STATIC,DPDK]}/performance-compare-topologies-3n-skx-2n-skx-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- filter: "'NIC_Intel-XXV710'"
- columns:
- - title: "3n-skx"
- data-set: "dpdk-3n-skx-curr-iter"
- - title: "2n-skx"
- data-set: "dpdk-2n-skx-curr-iter"
- comparisons:
- - title: "Diff"
- reference: 1
- compare: 2
- legend:
- - ""
- - "3n-skx, 2n-skx - topologies tested."
- - "Diff - difference between 3n-skx and 2n-skx topologies."
-
-# Detailed Test Results - DPDK Performance Results 3n-skx
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 3n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,3N,SKX]}/dpdk_performance_results_3n_skx"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-3n-skx-curr-iter-best"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - DPDK Performance Results 2n-skx
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,2N,SKX]}/dpdk_performance_results_2n_skx"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-2n-skx-curr-iter-best"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - DPDK Performance Results 2n-zn2
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 2n-zn2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,2N,SKX]}/dpdk_performance_results_2n_zn2"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-2n-zn2-curr-iter-best"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - DPDK Performance Results 2n-clx
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 2n-clx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,2N,CLX]}/dpdk_performance_results_2n_clx"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-2n-clx-curr-iter-best"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-## Detailed Test Results - DPDK Performance Results 2n-dnv
-#- type: "table"
-# title: "Detailed Test Results - DPDK Performance Results 2n-dnv"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,PERF,DPDK,2N,DNV]}/dpdk_performance_results_2n_dnv"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
-# data: "data msg"
-# data: "dpdk-perf-results-2n-dnv"
-# filter: "all"
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-#
-## Detailed Test Results - DPDK Performance Results 3n-dnv
-#- type: "table"
-# title: "Detailed Test Results - DPDK Performance Results 3n-dnv"
-# algorithm: "table_merged_details"
-# output-file: "{DIR[DTR,PERF,DPDK,3N,DNV]}/dpdk_performance_results_3n_dnv"
-# columns:
-# - title: " |prein| Test Name |preout| "
-# data: "data name"
-# - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
-# data: "data msg"
-# data: "dpdk-perf-results-3n-dnv"
-# filter: "all"
-# parameters:
-# - "name"
-# - "parent"
-# - "msg"
-
-# Detailed Test Results - DPDK Performance Results 3n-tsh
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 3n-tsh"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,3N,TSH]}/dpdk_performance_results_3n_tsh"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-3n-tsh-curr-iter-best"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - DPDK Performance Results 2n-tx2
-- type: "table"
- title: "Detailed Test Results - DPDK Performance Results 2n-tx2"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,DPDK,2N,TX2]}/dpdk_performance_results_2n_tx2"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "dpdk-2n-tx2-curr-iter-best"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Detailed Test Results - TRex Performance Results 2n-skx
-- type: "table"
- title: "Detailed Test Results - TRex Performance Results 2n-skx"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,TREX,2N,SKX]}/trex_performance_results_2n_skx"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "trex-2n-skx-curr-cov"
- filter: "all"
- remove-ndr: False
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-################################################################################
-### F I L E S ###
-################################################################################
-
-# VPP Performance Results
-- type: "file"
- title: "VPP Performance Results"
- algorithm: "file_details_split"
- output-file: "{DIR[DTR,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTR,PERF,VPP,2N,SKX]}"
- - "{DIR[DTR,PERF,VPP,3N,SKX]}"
- - "{DIR[DTR,PERF,VPP,2N,CLX]}"
-# - "{DIR[DTR,PERF,VPP,2N,ICX]}"
-# - "{DIR[DTR,PERF,VPP,3N,ICX]}"
- - "{DIR[DTR,PERF,VPP,2N,ZN2]}"
- - "{DIR[DTR,PERF,VPP,3N,TSH]}"
- - "{DIR[DTR,PERF,VPP,2N,TX2]}"
- - "{DIR[DTR,PERF,VPP,2N,DNV]}"
- - "{DIR[DTR,PERF,VPP,3N,DNV]}"
- - "{DIR[DTR,PERF,VPP,2N,AWS]}"
- - "{DIR[DTR,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-2n-skx-curr-cov"
- - "vpp-3n-skx-curr-cov"
- - "vpp-2n-clx-curr-cov"
-# - "vpp-2n-icx-curr-iter-best"
-# - "vpp-3n-icx-curr-iter-best"
- - "vpp-2n-zn2-curr-cov"
- - "vpp-3n-tsh-curr-cov"
- - "vpp-2n-tx2-curr-cov"
- - "vpp-2n-dnv-curr-cov"
- - "vpp-3n-dnv-curr-cov"
- - "vpp-2n-aws-curr-cov"
- - "vpp-3n-aws-curr-cov"
- filter: "'NDRPDR'"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
-# - "2n-icx"
-# - "3n-icx"
- - "2n-zn2"
- - "3n-tsh"
- - "2n-tx2"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "e810cq"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP Performance Configuration
-- type: "file"
- title: "VPP Performance Configuration"
- algorithm: "file_details_split"
- output-file: "{DIR[DTC,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTC,PERF,VPP,2N,SKX]}"
- - "{DIR[DTC,PERF,VPP,3N,SKX]}"
- - "{DIR[DTC,PERF,VPP,2N,CLX]}"
-# - "{DIR[DTC,PERF,VPP,2N,ICX]}"
-# - "{DIR[DTC,PERF,VPP,3N,ICX]}"
- - "{DIR[DTC,PERF,VPP,2N,ZN2]}"
- - "{DIR[DTC,PERF,VPP,3N,TSH]}"
- - "{DIR[DTC,PERF,VPP,2N,TX2]}"
- - "{DIR[DTC,PERF,VPP,2N,DNV]}"
- - "{DIR[DTC,PERF,VPP,3N,DNV]}"
- - "{DIR[DTC,PERF,VPP,2N,AWS]}"
- - "{DIR[DTC,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-2n-skx-curr-cov"
- - "vpp-3n-skx-curr-cov"
- - "vpp-2n-clx-curr-cov"
-# - "vpp-2n-icx-curr-iter-best"
-# - "vpp-3n-icx-curr-iter-best"
- - "vpp-2n-zn2-curr-cov"
- - "vpp-3n-tsh-curr-cov"
- - "vpp-2n-tx2-curr-cov"
- - "vpp-2n-dnv-curr-cov"
- - "vpp-3n-dnv-curr-cov"
- - "vpp-2n-aws-curr-cov"
- - "vpp-3n-aws-curr-cov"
- filter: "'NDRPDR'"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
-# - "2n-icx"
-# - "3n-icx"
- - "2n-zn2"
- - "3n-tsh"
- - "2n-tx2"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "e810cq"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP Performance Operational
-- type: "file"
- title: "VPP Performance Operational"
- algorithm: "file_details_split_html"
- output-file: "{DIR[DTO,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTO,PERF,VPP,2N,SKX]}"
- - "{DIR[DTO,PERF,VPP,3N,SKX]}"
- - "{DIR[DTO,PERF,VPP,2N,CLX]}"
-# - "{DIR[DTO,PERF,VPP,2N,ICX]}"
-# - "{DIR[DTO,PERF,VPP,3N,ICX]}"
- - "{DIR[DTO,PERF,VPP,2N,ZN2]}"
- - "{DIR[DTO,PERF,VPP,3N,TSH]}"
- - "{DIR[DTO,PERF,VPP,2N,TX2]}"
- - "{DIR[DTO,PERF,VPP,2N,DNV]}"
- - "{DIR[DTO,PERF,VPP,3N,DNV]}"
- - "{DIR[DTO,PERF,VPP,2N,AWS]}"
- - "{DIR[DTO,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-2n-skx-curr-cov"
- - "vpp-3n-skx-curr-cov"
- - "vpp-2n-clx-curr-cov"
-# - "vpp-2n-icx-curr-iter-best"
-# - "vpp-3n-icx-curr-iter-best"
- - "vpp-2n-zn2-curr-cov"
- - "vpp-3n-tsh-curr-cov"
- - "vpp-2n-tx2-curr-cov"
- - "vpp-2n-dnv-curr-cov"
- - "vpp-3n-dnv-curr-cov"
- - "vpp-2n-aws-curr-cov"
- - "vpp-3n-aws-curr-cov"
- filter: "'NDRPDR'"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
-# - "2n-icx"
-# - "3n-icx"
- - "2n-zn2"
- - "3n-tsh"
- - "2n-tx2"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "e810cq"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP MRR Results
-- type: "file"
- title: "VPP MRR Results"
- algorithm: "file_details_split"
- output-file: "{DIR[DTR,MRR,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTR,MRR,VPP,2N,SKX]}"
- - "{DIR[DTR,MRR,VPP,3N,SKX]}"
- - "{DIR[DTR,MRR,VPP,2N,CLX]}"
-# - "{DIR[DTR,MRR,VPP,2N,ICX]}"
-# - "{DIR[DTR,MRR,VPP,3N,ICX]}"
- - "{DIR[DTR,MRR,VPP,2N,ZN2]}"
- - "{DIR[DTR,MRR,VPP,3N,TSH]}"
- - "{DIR[DTR,MRR,VPP,2N,TX2]}"
- - "{DIR[DTR,MRR,VPP,2N,DNV]}"
- - "{DIR[DTR,MRR,VPP,3N,DNV]}"
- - "{DIR[DTR,MRR,VPP,2N,AWS]}"
- - "{DIR[DTR,MRR,VPP,3N,AWS]}"
- data:
- - "vpp-2n-skx-curr-iter-mrr"
- - "vpp-3n-skx-curr-iter-mrr"
- - "vpp-2n-clx-curr-iter-mrr"
-# - "vpp-2n-icx-curr-iter-mrr"
-# - "vpp-mrr-results-3n-icx"
- - "vpp-2n-zn2-curr-iter-mrr"
- - "vpp-3n-tsh-curr-iter-mrr"
- - "vpp-2n-tx2-curr-iter-mrr"
- - "vpp-2n-dnv-curr-iter-mrr"
- - "vpp-3n-dnv-curr-iter-mrr"
- - "vpp-2n-aws-curr-iter-mrr"
- - "vpp-3n-aws-curr-iter-mrr"
- filter: "'MRR'"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
-# - "2n-icx"
-# - "3n-icx"
- - "2n-zn2"
- - "3n-tsh"
- - "2n-tx2"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "e810cq"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP MRR Configuration
-- type: "file"
- title: "VPP MRR Configuration"
- algorithm: "file_details_split"
- output-file: "{DIR[DTC,MRR,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTC,MRR,VPP,2N,SKX]}"
- - "{DIR[DTC,MRR,VPP,3N,SKX]}"
- - "{DIR[DTC,MRR,VPP,2N,CLX]}"
-# - "{DIR[DTC,MRR,VPP,2N,ICX]}"
-# - "{DIR[DTC,MRR,VPP,3N,ICX]}"
- - "{DIR[DTC,MRR,VPP,2N,ZN2]}"
- - "{DIR[DTC,MRR,VPP,3N,TSH]}"
- - "{DIR[DTC,MRR,VPP,2N,TX2]}"
- - "{DIR[DTC,MRR,VPP,2N,DNV]}"
- - "{DIR[DTC,MRR,VPP,3N,DNV]}"
- - "{DIR[DTC,MRR,VPP,2N,AWS]}"
- - "{DIR[DTC,MRR,VPP,3N,AWS]}"
- data:
- - "vpp-2n-skx-curr-iter-mrr"
- - "vpp-3n-skx-curr-iter-mrr"
- - "vpp-2n-clx-curr-iter-mrr"
-# - "vpp-2n-icx-curr-iter-mrr"
-# - "vpp-mrr-results-3n-icx"
- - "vpp-2n-zn2-curr-iter-mrr"
- - "vpp-3n-tsh-curr-iter-mrr"
- - "vpp-2n-tx2-curr-iter-mrr"
- - "vpp-2n-dnv-curr-iter-mrr"
- - "vpp-3n-dnv-curr-iter-mrr"
- - "vpp-2n-aws-curr-iter-mrr"
- - "vpp-3n-aws-curr-iter-mrr"
- filter: "'MRR'"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
-# - "2n-icx"
-# - "3n-icx"
- - "2n-zn2"
- - "3n-tsh"
- - "2n-tx2"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "e810cq"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP Device Results - Ubuntu
-- type: "file"
- title: "VPP Device Results - Ubuntu"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]}"
- dir-tables: "{DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]}"
- data: "vpp-device-results-ubuntu"
- filter: "all"
- data-start-level: 4
-
-# VPP Device Configuration - Ubuntu
-- type: "file"
- title: "VPP Device Configuration - Ubuntu"
- algorithm: "file_test_results"
- output-file: "{DIR[DTC,FUNC,VPP,DEVICE,UBUNTU]}"
- dir-tables: "{DIR[DTC,FUNC,VPP,DEVICE,UBUNTU]}"
- data: "vpp-device-results-ubuntu"
- filter: "all"
- data-start-level: 4
-
-# DPDK Performance Results 3n-skx
-- type: "file"
- title: "DPDK Performance Results 3n-skx"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,3N,SKX]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,3N,SKX]}"
- data: "dpdk-3n-skx-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-# DPDK Performance Results 2n-skx
-- type: "file"
- title: "DPDK Performance Results 2n-skx"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,2N,SKX]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,2N,SKX]}"
- data: "dpdk-2n-skx-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-# DPDK Performance Results 2n-zn2
-- type: "file"
- title: "DPDK Performance Results 2n-zn2"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,2N,ZN2]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,2N,ZN2]}"
- data: "dpdk-2n-zn2-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-# DPDK Performance Results 2n-clx
-- type: "file"
- title: "DPDK Performance Results 2n-clx"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,2N,CLX]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,2N,CLX]}"
- data: "dpdk-2n-clx-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-## DPDK Performance Results 2n-dnv
-#- type: "file"
-# title: "DPDK Performance Results 2n-dnv"
-# algorithm: "file_test_results"
-# output-file: "{DIR[DTR,PERF,DPDK,2N,DNV]}"
-# dir-tables: "{DIR[DTR,PERF,DPDK,2N,DNV]}"
-# data: "dpdk-perf-results-2n-dnv"
-# filter: "all"
-# data-start-level: 4
-#
-## DPDK Performance Results 3n-dnv
-#- type: "file"
-# title: "DPDK Performance Results 3n-dnv"
-# algorithm: "file_test_results"
-# output-file: "{DIR[DTR,PERF,DPDK,3N,DNV]}"
-# dir-tables: "{DIR[DTR,PERF,DPDK,3N,DNV]}"
-# data: "dpdk-perf-results-3n-dnv"
-# filter: "all"
-# data-start-level: 4
-
-# DPDK Performance Results 3n-tsh
-- type: "file"
- title: "DPDK Performance Results 3n-tsh"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,3N,TSH]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,3N,TSH]}"
- data: "dpdk-3n-tsh-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-# DPDK Performance Results 2n-tx2
-- type: "file"
- title: "DPDK Performance Results 2n-tx2"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,DPDK,2N,TX2]}"
- dir-tables: "{DIR[DTR,PERF,DPDK,2N,TX2]}"
- data: "dpdk-2n-tx2-curr-iter-best"
- filter: "all"
- data-start-level: 4
-
-# TRex Performance Results 2n-skx
-- type: "file"
- title: "TRex Performance Results 2n-skx"
- algorithm: "file_test_results"
- output-file: "{DIR[DTR,PERF,TREX,2N,SKX]}"
- dir-tables: "{DIR[DTR,PERF,TREX,2N,SKX]}"
- data: "trex-2n-skx-curr-cov"
- filter: "all"
- data-start-level: 4
-
-################################################################################
-### P L O T S ###
-################################################################################
-
-# VSAP tests 2n-clx
-
-# - type: "plot"
-# title: "2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-Cps.0B-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-cps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-Cps.0B-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-cps"
-# layout:
-# title: "2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-Cps.64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-cps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-Cps.64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-cps"
-# layout:
-# title: "2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-Cps.1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-cps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-Cps.1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-cps"
-# layout:
-# title: "2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-cps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-Cps.2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-cps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-Cps.2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-cps"
-# layout:
-# title: "2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-rps.0B-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-rps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-rps.0B-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-rps"
-# layout:
-# title: "2n-clx-e810cg-0b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-rps.64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-rps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-rps.64b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-rps"
-# layout:
-# title: "2n-clx-e810cg-64b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-rps.1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-rps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-rps.1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-rps"
-# layout:
-# title: "2n-clx-e810cg-1024b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-#
-# - type: "plot"
-# title: "2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# algorithm: "plot_perf_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-rps"
-# data: "vpp-2n-clx-curr-iter-vsap"
-# include:
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.14.2-rps.2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.14.2-rps"
-# - "Tests.Vpp.Perf.Hoststack.2N1L-100Ge2P1E810Cq-Eth-Ip4Tcphttp-Ldpreload-Nginx-1.15.0-rps.2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx-1.15.0-rps"
-# layout:
-# title: "2n-clx-e810cg-2048b-2t1c-eth-ip4tcphttp-ldpreload-nginx"
-# layout: "plot-hoststack"
-
-# Hoststack tests 3n-skx
-
-- type: "plot"
- title: "Bandwidth: 3n-skx-xxv710-1460b-2t1c-eth-ip4tcp-ldpreload-iperf3"
- algorithm: "plot_perf_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-1460b-2t1c-eth-ip4tcp-ldpreload-iperf3-bps"
- data: "vpp-3n-skx-curr-iter-hoststack"
- include:
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Tcpbase-Ldpreload-Iperf3-Bps.1460B-2t1c-eth-ip4tcpbase-ldpreload-iperf3-bps"
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Tcpscale1Cl10S-Ldpreload-Iperf3-Bps.1460B-2t1c-eth-ip4tcpscale1cl10s-ldpreload-iperf3-bps"
- layout:
- title: "3n-skx-xxv710-1460b-2t1c-eth-ip4tcp-ldpreload-iperf3"
- layout: "plot-hoststack"
-
-- type: "plot"
- title: "Bandwidth: 3n-skx-xxv710-1460b-2t1c-eth-ip4udp-ldpreload-iperf3"
- algorithm: "plot_perf_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-1460b-2t1c-eth-ip4udp-ldpreload-iperf3-bps"
- data: "vpp-3n-skx-curr-iter-hoststack"
- include:
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpbase-Ldpreload-Iperf3-Bps.1460B-2t1c-eth-ip4udpbase-ldpreload-iperf3-bps"
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpscale1Cl10S-Ldpreload-Iperf3-Bps.1460B-2t1c-eth-ip4udpscale1cl10s-ldpreload-iperf3-bps"
- layout:
- title: "3n-skx-xxv710-1460b-2t1c-eth-ip4udp-ldpreload-iperf3"
- layout: "plot-hoststack"
-
-- type: "plot"
- title: "Bandwidth: 3n-skx-xxv710-1280b-2t1c-eth-ip4udpquic-vppecho"
- algorithm: "plot_perf_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-1280b-2t1c-eth-ip4udpquic-vppecho-bps"
- data: "vpp-3n-skx-curr-iter-hoststack"
- include:
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpquicbase-Vppecho-Bps.1280B-2t1c-eth-ip4udpquicbase-vppecho-bps"
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpquicscale1Cl10S-Vppecho-Bps.1280B-2t1c-eth-ip4udpquicscale1cl10s-vppecho-bps"
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpquicscale10Cl1S-Vppecho-Bps.1280B-2t1c-eth-ip4udpquicscale10cl1s-vppecho-bps"
- - "Tests.Vpp.Perf.Hoststack.25Ge2P1Xxv710-Eth-Ip4Udpquicscale10Cl10S-Vppecho-Bps.1280B-2t1c-eth-ip4udpquicscale10cl10s-vppecho-bps"
- layout:
- title: "3n-skx-xxv710-1280b-2t1c-eth-ip4udpquic-vppecho"
- layout: "plot-hoststack"
-
-################################################################################
-
-# Soak Test (PLRsearch), boxes - 2n-clx
-- type: "plot"
- title: "VPP Critical rate: 30 Minutes Soak Test (PLRsearch)"
- algorithm: "plot_perf_box_name"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/soak-test-1"
- data: "vpp-2n-clx-curr-soak"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Soak.64B-2t1c-avf-eth-l2xcbase-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Soak.64B-2t1c-eth-l2xcbase-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Soak.64B-2t1c-eth-l2bdbasemaclrn-soak"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Soak.64B-2t1c-avf-ethip4-ip4base-soak"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Soak.64B-2t1c-ethip4-ip4base-soak"
- layout:
- title: "30 Minutes Soak Test (PLRsearch)"
- layout: "plot-soak-throughput"
-
-# Soak Test (PLRsearch), boxes - 2n-clx
-- type: "plot"
- title: "VPP Critical rate: 30 Minutes Soak Test (PLRsearch)"
- algorithm: "plot_perf_box_name"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/soak-test-2"
- data: "vpp-2n-clx-curr-soak"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Soak.78B-2t1c-avf-ethip6-ip6base-soak"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Soak.78B-2t1c-ethip6-ip6base-soak"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-soak"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Soak.64B-2t1c-eth-l2bdbasemaclrn-eth-2memif-1dcr-soak"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-soak"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-soak"
- layout:
- title: "30 Minutes Soak Test (PLRsearch)"
- layout: "plot-soak-throughput"
-
-# Soak Test (PLRsearch), boxes - 2n-skx
-- type: "plot"
- title: "VPP Critical rate: 30 Minutes Soak Test (PLRsearch)"
- algorithm: "plot_perf_box_name"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/soak-test-2n-skx-1"
- data: "vpp-2n-skx-curr-soak"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Soak.64B-2t1c-avf-eth-l2xcbase-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Soak.64B-2t1c-eth-l2xcbase-soak"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Soak.64B-2t1c-eth-l2bdbasemaclrn-soak"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Soak.64B-2t1c-avf-ethip4-ip4base-soak"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Soak.64B-2t1c-ethip4-ip4base-soak"
- layout:
- title: "30 Minutes Soak Test (PLRsearch)"
- layout: "plot-soak-throughput"
-
-# Soak Test (PLRsearch), boxes - 2n-skx
-- type: "plot"
- title: "VPP Critical rate: 30 Minutes Soak Test (PLRsearch)"
- algorithm: "plot_perf_box_name"
- output-file-type: ".html"
- output-file: "{DIR[STATIC,VPP]}/soak-test-2n-skx-2"
- data: "vpp-2n-skx-curr-soak"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Soak.78B-2t1c-avf-ethip6-ip6base-soak"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Soak.78B-2t1c-ethip6-ip6base-soak"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-soak"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Soak.64B-2t1c-eth-l2bdbasemaclrn-eth-2memif-1dcr-soak"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-soak"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Soak.64B-2t1c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-soak"
- layout:
- title: "30 Minutes Soak Test (PLRsearch)"
- layout: "plot-soak-throughput"
-
-###############################################################################
-
-# Reconf tests 2n-skx
-
-- type: "plot"
- title: "NFV Effective Blocked Time: 2n-skx-xxv710-imix-{core}-dot1qip4vxlan-l2bd-{Y}ch-1ach-{2XY}vh-{XY}vm-reconf"
- algorithm: "plot_nf_reconf_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-imix-{core}-dot1qip4vxlan-l2bd-reconf"
- data: "vpp-2n-skx-curr-nfv-reconf"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-1Ach-2Vh-1Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-1Ach-4Vh-2Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-1Ach-8Vh-4Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-1Ach-12Vh-6Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-8Ch-1Ach-16Vh-8Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-8ch-1ach-16vh-8vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-10Ch-1Ach-20Vh-10Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-10ch-1ach-20vh-10vm1t-testpmd-reconf"
- layout:
- title: "dot1qip4vxlan-l2bd-{Y}ch-1ach-{2XY}vh-{XY}vm-testpmd"
- layout: "plot-throughput"
-
-###############################################################################
-
-# Reconf tests 2n-clx
-
-- type: "plot"
- title: "NFV Effective Blocked Time: 2n-clx-xxv710-imix-{core}-dot1qip4vxlan-l2bd-{Y}ch-1ach-{2XY}vh-{XY}vm-reconf"
- algorithm: "plot_nf_reconf_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-imix-{core}-dot1qip4vxlan-l2bd-reconf"
- data: "vpp-2n-clx-curr-nfv-reconf"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-1Ach-2Vh-1Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-1ach-2vh-1vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-1Ach-4Vh-2Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-1ach-4vh-2vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-1Ach-8Vh-4Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-1ach-8vh-4vm1t-testpmd-reconf"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-1Ach-12Vh-6Vm1T-Testpmd-Reconf.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-1ach-12vh-6vm1t-testpmd-reconf"
- layout:
- title: "dot1qip4vxlan-l2bd-{Y}ch-1ach-{2XY}vh-{XY}vm-testpmd"
- layout: "plot-throughput"
-
-###############################################################################
-
-# Plots - NF Density - 2n-skx - VSC - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-vsc-{test_type}"
- data: "vpp-2n-skx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-mrr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-skx - VSC - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-vsc-{test_type}"
- data: "vpp-2n-skx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-skx - VSC vxlan - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-vsc-vxlan-{test_type}"
- data: "vpp-2n-skx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-mrr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-skx - VSC vxlan - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-vsc-vxlan-{test_type}"
- data: "vpp-2n-skx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-test_type"
- layout: "plot-service-density"
-
-###############################################################################
-
-# Plots - NF Density - 2n-skx - CSC - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-csc-{test_type}"
- data: "vpp-2n-skx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-mrr"
- x-axis: "X = CNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-skx - CSC - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-csc-{test_type}"
- data: "vpp-2n-skx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Mif-1Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-2mif-1dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr"
- x-axis: "X = CNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-###############################################################################
-
-# Plots - NF Density - 2n-skx - CSP - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-csp-{test_type}"
- data: "vpp-2n-skx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-mrr"
- x-axis: "X = CNFs per Service Pipeline"
- y-axis: "Y = Number of Service Pipelines"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-skx - CSP - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-skx-xxv710-imix-{core}-base-csp-{test_type}"
- data: "vpp-2n-skx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr"
- x-axis: "X = CNFs per Service Pipeline"
- y-axis: "Y = Number of Service Pipelines"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-###############################################################################
-
-# Plots - NF Density - 2n-clx - VSC - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-vsc-{test_type}"
- data: "vpp-2n-clx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-mrr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-clx - VSC - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-vsc-{test_type}"
- data: "vpp-2n-clx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-ndrpdr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-clx - VSC vxlan - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-vsc-vxlan-{test_type}"
- data: "vpp-2n-clx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-mrr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-clx - VSC vxlan - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-vsc-vxlan-{test_type}"
- data: "vpp-2n-clx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-ndrpdr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-ndrpdr"
- x-axis: "X = VNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}vh-{XY}vm-vxlan-vppip4-test_type"
- layout: "plot-service-density"
-
-###############################################################################
-
-# Plots - NF Density - 2n-clx - CSC - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-csc-{test_type}"
- data: "vpp-2n-clx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-mrr"
- x-axis: "X = CNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-clx - CSC - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-csc-{test_type}"
- data: "vpp-2n-clx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-ndrpdr"
- x-axis: "X = CNFs per Service Chain"
- y-axis: "Y = Number of Service Chains"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}ch-{2XY}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-###############################################################################
-
-# Plots - NF Density - 2n-clx - CSP - MRR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-csp-{test_type}"
- data: "vpp-2n-clx-curr-nfv-mrr"
- core: ["2t1c", "4t2c", "8t4c"]
- test-type: ["mrr", ]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-mrr"
- x-axis: "X = CNFs per Service Pipeline"
- y-axis: "Y = Number of Service Pipelines"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-# Plots - NF Density - 2n-clx - CSP - NDRPDR IMIX
-- type: "plot"
- title: "Packet Throughput: eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-{test_type}"
- algorithm: "plot_nf_heatmap"
- output-file: "{DIR[STATIC,VPP]}/l2bd-2n-clx-xxv710-imix-{core}-base-csp-{test_type}"
- data: "vpp-2n-clx-curr-nfv-ndrpdr"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-ndrpdr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-ndrpdr"
- x-axis: "X = CNFs per Service Pipeline"
- y-axis: "Y = Number of Service Pipelines"
- z-axis: "IMIX Packet Throughput (mean {test_type}) [Mpps]"
- layout:
- title: "<b>Throughput:</b> eth-l2bd-{Y}pl-{2Y}mif-{XY}dcr-vppip4-test_type"
- layout: "plot-service-density"
-
-################################################################################
-
-# Packet Throughput
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-skx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- layout: "plot-cps"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- layout: "plot-cps"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput2-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput2-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput2-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput2-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-x710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-avf-dot1q-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-x710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-avf-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-features-ip4routing-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-features-ip4routing-base-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-features-ip4routing-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-features-ip4routing-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-features-ip4routing-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-features-ip4routing-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-{core}-ip4routing-base-scale-[ixgbe,af_xdp]-{test_type}"
- data: "vpp-2n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- data: "vpp-2n-aws-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- data: "vpp-2n-aws-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-ndrpdr.1518b-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.1518b-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- data: "vpp-3n-aws-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- data: "vpp-3n-aws-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-ndrpdr.1518b-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.1518b-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-ip4tunnel-base-[avf,dpdk]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-ip4tunnel-base-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Gtpusw-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4gtpusw-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Gtpusw-Ip4Base-Ndrpdr.64B-{core}-ethip4gtpusw-ip4base-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-ip4tunnel-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-{core}-ip4tunnel-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-skx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af_xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-af_xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-x710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-avf-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-x710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-avf-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-tsh-x520-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-dnv-x553-78b-{core}-ip6routing-base-scale-[ixgbe,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-78b-{core}-ip6routing-base-scale-[ixgbe,af_xdp]-{test_type}"
- data: "vpp-2n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- layout:
- title: "2n-dnv-x553-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-dnv-x553-78b-{core}-ip6routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-1518b-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-1518b-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518B-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518B-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518B-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518B-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518B-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518B-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-skx-xxv710-1518b-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-tsh-x520-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-dnv-x553-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b-{core}-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-64b-{core}-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-x710-64b-{core}-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-x710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-x710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-l2switching-base-[avf,dpdk]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-l2switching-base-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-l2switching-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-features-l2switching-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-features-l2switching-base-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-features-l2switching-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-features-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-features-l2switching-base-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-features-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-l2switching-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-l2switching-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- data: "vpp-2n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- data: "vpp-2n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-{core}-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-dnv-x553-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- data: "vpp-3n-dnv-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-{core}-features-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-{core}-avf-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
-# - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
-# - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
-# - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-{core}-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-78b-{core}-srv6-ip6routing-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-78b-{core}-srv6-ip6routing-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-{core}-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout:
- title: "3n-tsh-x520-78b-{core}-srv6-ip6routing-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-vhost-base-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-{core}-vhost-base-vpp-{test_type}"
- data: "vpp-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-vhost-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-vhost-base-avf-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Vppip4-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-skx-xxv710-64b-{core}-vhost-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-{core}-vhost-base-dpdk-{test_type}"
- data: "vpp-3n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-vhost-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-vhost-base-ixgbe-vppl2xc-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-vhost-base-ixgbe-vppl2xc-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-{core}-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-vppl2xc-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-tsh-x520-64b-{core}-vhost-base-ixgbe-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-{core}-vhost-base-ixgbe-{test_type}"
- data: "vpp-3n-tsh-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-features-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-features-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Iacldstbase-Ndrpdr.64B-{core}-ethip4-ip4base-iacldstbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-ip4routing-features-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Iacldstbase-Ndrpdr.78B-{core}-ethip6-ip6base-iacldstbase-ndrpdr"
- layout:
- title: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-l2switching-base-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-l2switching-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-l2switching-scale-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-l2switching-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-l2switching-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-l2switching-scale-af_xdp-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-l2switching-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-tx2-xl710-64b-{core}-features-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-{core}-features-l2switching-base-dpdk-{test_type}"
- data: "vpp-2n-tx2-curr-iter"
- core: ["1t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-features-l2switching-base-{test_type}"
- layout: "plot-throughput"
-
-################################################################################
-
-# Packet Speedup
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-memif-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-memif-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-memif-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-memif-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-skx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis-cps"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis-cps"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput2-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput2-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput2-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput2-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-x710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-avf-dot1q-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-x710-64b-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-avf-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-eth-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-features-ip4routing-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-features-ip4routing-base-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-features-ip4routing-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-ip4tunnel-base-[avf,dpdk]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-ip4tunnel-base-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Gtpusw-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4gtpusw-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-.t.c-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Gtpusw-Ip4Base-Ndrpdr.64B-.t.c-ethip4gtpusw-ip4base-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-ip4tunnel-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-skx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-x710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-avf-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-x710-78b-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-avf-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-skx-xxv710-imix-ipsec-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-x710-64b-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-x710-64b-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-x710-64b-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-l2switching-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-.t.c-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-.t.c-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-x710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-x710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-x710-64b-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-l2switching-base-[avf,dpdk]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-l2switching-base-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-l2switching-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-features-l2switching-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-features-l2switching-base-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-features-l2switching-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-78b-srv6-ip6routing-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-78b-srv6-ip6routing-base-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-.t.c-avf-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-.t.c-avf-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-.t.c-avf-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-.t.c-avf-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-.t.c-avf-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-.t.c-avf-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout:
- title: "3n-skx-xxv710-78b-srv6-ip6routing-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-vhost-base-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-skx-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-xxv710-64b-vhost-base-vpp-{test_type}-tsa"
- data: "vpp-2n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-vhost-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-vhost-base-avf-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-vhost-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-vhost-base-avf-vpp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-vhost-base-avf-vpp-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Vppip4-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-vhost-base-avf-vpp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-skx-xxv710-64b-vhost-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-skx-xxv710-64b-vhost-base-dpdk-{test_type}-tsa"
- data: "vpp-3n-skx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-vhost-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-ip4routing-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-ip4routing-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-features-ip4routing-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-features-ip4routing-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-features-ip4routing-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-ip4tunnel-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-ip4tunnel-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-.t.c-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-ip4tunnel-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-78b-ip6routing-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-78b-ip6routing-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-tsh-x520-78b-ip6routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-tsh-x520-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-l2switching-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-l2switching-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-features-l2switching-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-features-l2switching-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-features-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-78b-srv6-ip6routing-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-78b-srv6-ip6routing-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-.t.c-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout:
- title: "3n-tsh-x520-78b-srv6-ip6routing-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-vhost-base-ixgbe-vppl2xc-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-vhost-base-ixgbe-vppl2xc-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-.t.c-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-vppl2xc-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-vhost-base-ixgbe-vppl2xc-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-tsh-x520-64b-vhost-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-vhost-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-tsh-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-vhost-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-#- type: "plot"
-# title: "Speedup: 3n-tsh-x520-64b-link-bonding-vhost-base-ixgbe-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-tsh-x520-64b-link-bonding-vhost-base-ixgbe-{test_type}-tsa"
-# data: "vpp-3n-tsh-curr-iter"
-# test-type: ["ndr", "pdr"]
-# include:
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-1Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-1Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
-# - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
-# layout:
-# title: "3n-tsh-x520-64b-link-bonding-vhost-base-ixgbe-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-dnv-x553-64b-ip4routing-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-ip4routing-base-scale-[ixgbe,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-af-xdp-Ethip4-Ip4Scale20K-rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-dnv-x553-78b-ip6routing-base-scale-[ixgbe,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-78b-ip6routing-base-scale-[ixgbe,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- layout:
- title: "2n-dnv-x553-78b-ip6routing-base-scale-[ixgbe,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}-tsa"
- data: "vpp-2n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-2n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-dnv-x553-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-2n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-af-xdp-Eth-L2Patch-Ndrpdr.64B-.t.c-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-.t.c-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- layout:
- title: "2n-dnv-x553-64b-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-64b-ip4routing-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-ip4routing-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-rnd-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-ip4routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-64b-ip4tunnel-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-ip4tunnel-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-.t.c-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-ip4tunnel-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-78b-ip6routing-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-78b-ip6routing-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "3n-dnv-x553-78b-ip6routing-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-.t.c-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout:
- title: "3n-dnv-x553-imix-ipsec-ip4routing-base-scale-sw-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-l2switching-base-scale-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 3n-dnv-x553-64b-features-l2switching-base-ixgbe-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-64b-features-l2switching-base-ixgbe-{test_type}-tsa"
- data: "vpp-3n-dnv-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "3n-dnv-x553-64b-features-l2switching-base-ixgbe-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-#- type: "plot"
-# title: "Speedup: 3n-dnv-x553-78b-srv6-ip6routing-base-ixgbe-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-dnv-x553-78b-srv6-ip6routing-base-ixgbe-{test_type}-tsa"
-# data: "vpp-3n-dnv-curr-iter"
-# test-type: ["ndr", "pdr"]
-# include:
-# - "Tests.Vpp.Perf.Srv6.10Ge2P1X553-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-.t.c-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
-# - "Tests.Vpp.Perf.Srv6.10Ge2P1X553-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
-# - "Tests.Vpp.Perf.Srv6.10Ge2P1X553-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-.t.c-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
-# layout:
-# title: "3n-dnv-x553-78b-srv6-ip6routing-base-ixgbe-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-features-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-features-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Iacldstbase-Ndrpdr.64B-.t.c-ethip4-ip4base-iacldstbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-ip4routing-features-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Iacldstbase-Ndrpdr.78B-.t.c-ethip6-ip6base-iacldstbase-ndrpdr"
- layout:
- title: "2n-tx2-xl710-78b-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "2n-tx2-xl710-78b-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-l2switching-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-l2switching-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-l2switching-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-l2switching-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-l2switching-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-l2switching-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-l2switching-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Patch-Ndrpdr.64B-.t.c-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-.t.c-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-l2switching-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-tx2-xl710-64b-features-l2switching-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-tx2-xl710-64b-features-l2switching-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-tx2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-features-l2switching-base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-################################################################################
-
-# Packet Throughput - DPDK
-
-# 2n-skx
-
-- type: "plot"
- title: "DPDK Throughput: 2n-skx-xxv710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-skx-xxv710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-skx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-skx-xxv710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "DPDK Throughput: 2n-skx-x710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-skx-x710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-skx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-skx-x710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-# 3n-skx
-
-- type: "plot"
- title: "DPDK Throughput: 3n-skx-xxv710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/3n-skx-xxv710-64b-{core}-base-{test_type}"
- data: "dpdk-3n-skx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.25ge2p1xxv710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.25ge2p1xxv710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "3n-skx-xxv710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "DPDK Throughput: 3n-skx-x710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/3n-skx-x710-64b-{core}-base-{test_type}"
- data: "dpdk-3n-skx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "3n-skx-x710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-## 2n-dnv-x553
-#
-#- type: "plot"
-# title: "DPDK Throughput: 2n-dnv-x553-64b-{core}-base-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,DPDK]}/2n-dnv-x553-64b-{core}-base-{test_type}"
-# data: "plot-dpdk-throughput-latency-2n-dnv"
-# core: ["1t1c", "2t2c"]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.dpdk.perf.2N1L-10Ge2P1X553-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
-# - "tests.dpdk.perf.2N1L-10Ge2P1X553-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
-# layout:
-# title: "2n-dnv-x553-64b-{core}-base-{test_type}"
-# layout: "plot-throughput"
-#
-## 3n-dnv-x553
-#
-#- type: "plot"
-# title: "DPDK Throughput: 3n-dnv-x553-64b-{core}-base-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,DPDK]}/3n-dnv-x553-64b-{core}-base-{test_type}"
-# data: "plot-dpdk-throughput-latency-3n-dnv"
-# core: ["1t1c", "2t2c"]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.dpdk.perf.10Ge2P1X553-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
-# - "tests.dpdk.perf.10Ge2P1X553-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
-# layout:
-# title: "3n-dnv-x553-64b-{core}-base-{test_type}"
-# layout: "plot-throughput"
-
-# 3n-tsh-x520
-
-- type: "plot"
- title: "DPDK Throughput: 3n-tsh-x520-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/3n-tsh-x520-64b-{core}-base-{test_type}"
- data: "dpdk-3n-tsh-curr-iter"
- core: ["1t1c", "2t2c"]
- include:
- - "tests.dpdk.perf.10ge2p1x520-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.10ge2p1x520-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "3n-tsh-x520-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-# 2n-tx2-xl710
-
-- type: "plot"
- title: "DPDK Throughput: 2n-tx2-xl710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-tx2-xl710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-tx2-curr-iter"
- core: ["1t1c", "2t2c"]
- include:
- - "tests.dpdk.perf.2N1L-40ge2p1xl710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2N1L-40ge2p1xl710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-tx2-xl710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-################################################################################
-### 2n-clx ###
-################################################################################
-
-# Packet Throughput
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-clx-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- layout: "plot-cps"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- layout: "plot-cps"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput2-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput2-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput2-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput2-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-rdma-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-clx-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-rdma-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Ndrpdr.78B-{core}-rdma-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-x710-64b-{core}-l2switching-base-scale-[avf,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-64b-{core}-l2switching-base-scale-[avf,af_xdp]-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-x710-64b-{core}-l2switching-base-scale-[avf,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-rdma-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Ndrpdr.64B-{core}-rdma-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-vhost-base-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-{core}-vhost-base-vpp-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-clx-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- data: "vpp-2n-clx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- layout: "plot-throughput"
-
-################################################################################
-
-# Packet Speedup
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-memif-base-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-memif-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-memif-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-clx-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis-cps"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis-cps"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput2-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput2-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput2-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput2-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H1024-P63-S64512-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H4096-P63-S258048-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H16384-P63-S1032192-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H65536-P63-S4128768-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-Ethip4Udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Nat44Ed-H262144-P63-S16515072-Tput-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-ip4base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-ip4base-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-rdma-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-rdma-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-ip4base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-ethip4-features-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-ethip4-features-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-.t.c-rdma-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-.t.c-rdma-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-ethip4-features-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-clx-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-78b-rdma-ip6routing-base-scale-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-78b-rdma-ip6routing-base-scale-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-rdma-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-rdma-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-clx-cx556a-78b-rdma-ip6routing-base-scale-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-x710-64b-l2switching-base-scale-[avf,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-x710-64b-l2switching-base-scale-[avf,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-x710-64b-l2switching-base-scale-[avf,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-l2switching-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-.t.c-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-.t.c-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-l2switching-base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-l2switching-base-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-rdma-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Ndrpdr.64B-.t.c-rdma-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-l2switching-base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-l2switching-scale-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-l2switching-scale-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-l2switching-scale-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-vhost-base-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-xxv710-64b-vhost-base-vpp-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-clx-cx556a-64b-rdma-l2-vhost-base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-cx556a-64b-rdma-l2-vhost-base-{test_type}-tsa"
- data: "vpp-2n-clx-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-clx-cx556a-64b-rdma-l2-vhost-base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-# # 2n-icx
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-64b-{core}-ip4routing-base-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-{core}-ip4routing-base-scale-avf-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-{core}-ip4routing-base-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-78b-{core}-ip6routing-base-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-78b-{core}-ip6routing-base-scale-avf-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-78b-{core}-ip6routing-base-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-64b-{core}-l2switching-base-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-{core}-l2switching-base-scale-avf-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-{core}-l2switching-base-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 2n-icx-e810cq-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
-# data: "vpp-2n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-64b-ip4routing-base-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-ip4routing-base-scale-avf-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-ip4routing-base-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1E810Cq-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-ip4routing-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-78b-ip6routing-base-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-78b-ip6routing-base-scale-avf-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-78b-ip6routing-base-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
-# - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1E810Cq-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-78b-ip6routing-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-64b-l2switching-base-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-l2switching-base-scale-avf-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale10kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale100kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-l2switching-base-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 2n-icx-e810cq-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-icx-e810cq-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
-# data: "vpp-2n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
-# - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1E810Cq-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
-# layout:
-# title: "2n-icx-e810cq-64b-l2switching-base-scale-dpdk-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# # 3n-icx
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-64b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-1518b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-imix-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-{core}-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-64b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-1518b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-imix-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-{core}-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-64b-{core}-ip4tunnel-base-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-{core}-ip4tunnel-base-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-{core}-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-1518b-{core}-ip4tunnel-base-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-{core}-ip4tunnel-base-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.1518b-{core}-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.1518b-{core}-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-{core}-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Throughput: 3n-icx-e810cq-imix-{core}-ip4tunnel-base-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-{core}-ip4tunnel-base-avf-{test_type}"
-# data: "vpp-3n-icx-curr-iter"
-# core: ["2t1c", ]
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.imix-{core}-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.imix-{core}-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-{core}-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-64b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-1518b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-imix-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-ipsec-aes128gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-64b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.64B-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-1518b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-imix-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec40Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec40tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec400Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec400tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec20000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec20000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# - "Tests.Vpp.Perf.Crypto.100Ge2P1E810Cq-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.imix-.t.c-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-ipsec-aes256gcm-ip4routing-scale-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-64b-ip4tunnel-base-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-64b-ip4tunnel-base-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-64b-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-1518b-ip4tunnel-base-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-1518b-ip4tunnel-base-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.1518b-.t.c-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.1518b-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-1518b-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-# - type: "plot"
-# title: "Speedup: 3n-icx-e810cq-imix-ip4tunnel-base-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/3n-icx-e810cq-imix-ip4tunnel-base-avf-{test_type}-tsa"
-# data: "vpp-3n-icx-curr-iter"
-# include:
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.imix-.t.c-avf-ethip4vxlan-l2xcbase-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4 Tunnels.100Ge2P1E810Cq-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.imix-.t.c-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
-# layout:
-# title: "3n-icx-e810cq-imix-ip4tunnel-base-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-
-# Packet Throughput - DPDK
-
-# 2n-clx
-
-- type: "plot"
- title: "DPDK Throughput: 2n-clx-xxv710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-clx-xxv710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-clx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-clx-xxv710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "DPDK Throughput: 2n-clx-x710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-clx-x710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-clx-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-clx-x710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-###############################################################################
-
-# 2n-zn2
-
-# Packet Throughput
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-memif-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-memif-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-zn2-x710-64b-{core}-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput"
-
-#- type: "plot"
-# title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
-# data: "vpp-2n-zn2-curr-iter"
-# core: ["2t1c", ]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
-# layout: "plot-throughput"
-#
-#- type: "plot"
-# title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
-# data: "vpp-2n-zn2-curr-iter"
-# core: ["2t1c", ]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
-# layout: "plot-cps"
-#
-#- type: "plot"
-# title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
-# data: "vpp-2n-zn2-curr-iter"
-# core: ["2t1c", ]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
-# layout: "plot-throughput"
-#
-#- type: "plot"
-# title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
-# data: "vpp-2n-zn2-curr-iter"
-# core: ["2t1c", ]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
-# layout: "plot-cps"
-#
-#- type: "plot"
-# title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
-# algorithm: "plot_ndrpdr_box_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
-# data: "vpp-2n-zn2-curr-iter"
-# core: ["2t1c", ]
-# test-type: ["ndr", "pdr"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
-# layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-pdr"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-pdr"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-pdr"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip4Base-Ndrpdr.64B-{core}-rdma-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-ip4base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-ethip4-features-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-zn2-x710-78b-{core}-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip6Base-Ndrpdr.78B-{core}-rdma-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Ndrpdr.78B-{core}-rdma-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-78b-{core}-rdma-ip6routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-x710-64b-{core}-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-64b-{core}-l2switching-base-scale-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-x710-64b-{core}-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-l2switching-base-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-{core}-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Xcbase-Ndrpdr.64B-{core}-rdma-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Ndrpdr.64B-{core}-rdma-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-vhost-base-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-{core}-vhost-base-vpp-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- data: "vpp-2n-zn2-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-{core}-rdma-l2-vhost-base-{test_type}"
- layout: "plot-throughput"
-
-################################################################################
-
-# Packet Speedup
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-memif-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-memif-base-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-memif-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-memif-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-memif-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-.t.c-rdma-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-l2-eth-2memif-1dcr-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- layout:
- title: "2n-zn2-x710-64b-ip4routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-ip4routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-ip4routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-ip4routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-ip4routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-features-ip4routing-base-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-features-ip4routing-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-.t.c-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-#- type: "plot"
-# title: "Speedup: 2n-zn2-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}-tsa"
-# data: "vpp-2n-zn2-curr-iter"
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-#- type: "plot"
-# title: "Speedup: 2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}-tsa"
-# data: "vpp-2n-zn2-curr-iter"
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis-cps"
-#
-#- type: "plot"
-# title: "Speedup: 2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}-tsa"
-# data: "vpp-2n-zn2-curr-iter"
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-#
-#- type: "plot"
-# title: "Speedup: 2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}-tsa"
-# data: "vpp-2n-zn2-curr-iter"
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis-cps"
-#
-#- type: "plot"
-# title: "Speedup: 2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}-tsa"
-# algorithm: "plot_tsa_name"
-# output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}-tsa"
-# data: "vpp-2n-zn2-curr-iter"
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-.t.c-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
-# layout:
-# title: "2n-zn2-xxv710-64b-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
-# layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-ip4base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-ip4base-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip4Base-Ndrpdr.64B-.t.c-rdma-dot1q-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Ndrpdr.64B-.t.c-rdma-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-.t.c-rdma-ethip4-ip4scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-ip4base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-ethip4-features-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-ethip4-features-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-.t.c-rdma-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-.t.c-rdma-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-.t.c-rdma-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-ethip4-features-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-1tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-4tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-16tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-64tun-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Ndrpdr.64B-.t.c-avf-ethip4--ethip4udpgeneve-256tun-ip4base-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-ethip4--ethip4udpgeneve-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- layout:
- title: "2n-zn2-x710-78b-ip6routing-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-ip6routing-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-ip6routing-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-ip6routing-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-.t.c-ethip6-ip6scale2m-rnd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-78b-ip6routing-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-78b-rdma-ip6routing-base-scale-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-78b-rdma-ip6routing-base-scale-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-Ip6Base-Ndrpdr.78B-.t.c-rdma-dot1q-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Ndrpdr.78B-.t.c-rdma-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Ndrpdr.78B-.t.c-rdma-ethip6-ip6scale2m-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-78b-rdma-ip6routing-base-scale-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-x710-64b-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-x710-64b-l2switching-base-scale-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-x710-64b-l2switching-base-scale-[avf,dpdk,af_xdp]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-l2switching-base-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-avf-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-.t.c-avf-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-.t.c-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-l2switching-base-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-l2switching-base-scale-avf-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-l2switching-base-scale-avf-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-.t.c-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-.t.c-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-l2switching-base-scale-af_xdp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-l2switching-base-dpdk-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-.t.c-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-.t.c-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-.t.c-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-l2switching-base-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-l2switching-base-scale-dpdk-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-l2switching-base-scale-dpdk-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-l2switching-base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-l2switching-base-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Xcbase-Ndrpdr.64B-.t.c-rdma-dot1q-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Gbp-Ndrpdr.64B-.t.c-rdma-dot1q-l2bdbasemaclrn-gbp-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Ndrpdr.64B-.t.c-rdma-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-l2switching-base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-l2switching-scale-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-l2switching-scale-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-.t.c-rdma-eth-l2bdscale1mmaclrn-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-l2switching-scale-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-vhost-base-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-vhost-base-[avf,dpdk]-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-xxv710-64b-vhost-base-vpp-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-vhost-base-[avf,dpdk]-vpp-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-- type: "plot"
- title: "Speedup: 2n-zn2-cx556a-64b-rdma-l2-vhost-base-{test_type}-tsa"
- algorithm: "plot_tsa_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-cx556a-64b-rdma-l2-vhost-base-{test_type}-tsa"
- data: "vpp-2n-zn2-curr-iter"
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-.t.c-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout:
- title: "2n-zn2-cx556a-64b-rdma-l2-vhost-base-{test_type}"
- layout: "plot-throughput-speedup-analysis"
-
-# Packet Throughput - DPDK
-
-# 2n-zn2
-
-- type: "plot"
- title: "DPDK Throughput: 2n-zn2-xxv710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-zn2-xxv710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-zn2-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-zn2-xxv710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "DPDK Throughput: 2n-zn2-x710-64b-{core}-base-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,DPDK]}/2n-zn2-x710-64b-{core}-base-{test_type}"
- data: "dpdk-2n-zn2-curr-iter"
- core: ["2t1c", "4t2c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-ndrpdr.64b-{core}-eth-l2xcbase-testpmd-ndrpdr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-ndrpdr.64b-{core}-ethip4-ip4base-l3fwd-ndrpdr"
- layout:
- title: "2n-zn2-x710-64b-{core}-base-{test_type}"
- layout: "plot-throughput"
-
-################################################################################
-
-- type: "plot"
- title: "Latency by percentile: 2n-skx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-skx"
- output-file-links: "{DIR[LAT,VPP]}/2n_skx.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-skx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: TRex 2n-skx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,TREX]}/hdrh-lat-percentile-2n-skx"
- output-file-links: "{DIR[LAT,TREX]}/2n_skx.rst"
- target-links: "../../_static/trex"
- data: "trex-2n-skx-curr-iter-best"
- filter: "'NIC_Intel-X710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 2n-zn2"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-zn2"
- output-file-links: "{DIR[LAT,VPP]}/2n_zn2.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-zn2-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 3n-skx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-3n-skx"
- output-file-links: "{DIR[LAT,VPP]}/3n_skx.rst"
- target-links: "../../_static/vpp"
- data: "vpp-3n-skx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 2n-clx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-clx"
- output-file-links: "{DIR[LAT,VPP]}/2n_clx.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-clx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 2n-clx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-clx"
- output-file-links: "{DIR[LAT,VPP]}/2n_clx.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-clx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Mellanox-CX556A'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-# - type: "plot"
-# title: "Latency by percentile: 2n-icx"
-# algorithm: "plot_hdrh_lat_by_percentile_x_log"
-# output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-icx"
-# output-file-links: "{DIR[LAT,VPP]}/2n_icx.rst"
-# target-links: "../../_static/vpp"
-# data: "vpp-2n-icx-curr-iter-best"
-# filter: "'2T1C' and 'NIC_Intel-E810CQ' and 'NDRPDR'"
-# layout:
-# layout: "plot-hdrh-latency-percentile-x-log"
-#
-# - type: "plot"
-# title: "Latency by percentile: 3n-icx"
-# algorithm: "plot_hdrh_lat_by_percentile_x_log"
-# output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-3n-icx"
-# output-file-links: "{DIR[LAT,VPP]}/3n_icx.rst"
-# target-links: "../../_static/vpp"
-# data: "vpp-3n-icx-curr-iter-best"
-# filter: "'2T1C' and 'NIC_Intel-E810CQ' and 'NDRPDR'"
-# layout:
-# layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 3n-tsh"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-3n-tsh"
- output-file-links: "{DIR[LAT,VPP]}/3n_tsh.rst"
- target-links: "../../_static/vpp"
- data: "vpp-3n-tsh-curr-iter-best"
- filter: "'1T1C' and 'NIC_Intel-X520-DA2'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 2n-tx2"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-tx2"
- output-file-links: "{DIR[LAT,VPP]}/2n-tx2.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-tx2-curr-iter"
- filter: "'1T1C' and 'NIC_Intel-XL710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 2n-aws"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-aws"
- output-file-links: "{DIR[LAT,VPP]}/2n_aws.rst"
- target-links: "../../_static/vpp"
- data: "vpp-2n-aws-curr-iter-best"
- filter: "'2T1C'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 3n-aws"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-3n-aws"
- output-file-links: "{DIR[LAT,VPP]}/3n_aws.rst"
- target-links: "../../_static/vpp"
- data: "vpp-3n-aws-curr-iter-best"
- filter: "'2T1C'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 2n-skx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-2n-skx"
- output-file-links: "{DIR[LAT,DPDK]}/2n_skx.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-2n-skx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 3n-skx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-3n-skx"
- output-file-links: "{DIR[LAT,DPDK]}/3n_skx.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-3n-skx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 2n-clx"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-2n-clx"
- output-file-links: "{DIR[LAT,DPDK]}/2n_clx.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-2n-clx-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 2n-zn2"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-2n-zn2"
- output-file-links: "{DIR[LAT,DPDK]}/2n_zn2.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-2n-zn2-curr-iter-best"
- filter: "'2T1C' and 'NIC_Intel-XXV710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 3n-tsh"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-3n-tsh"
- output-file-links: "{DIR[LAT,DPDK]}/3n_tsh.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-3n-tsh-curr-iter-best"
- filter: "'1T1C' and 'NIC_Intel-X520-DA2'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: DPDK 2n-tx2"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,DPDK]}/hdrh-lat-percentile-2n-tx2"
- output-file-links: "{DIR[LAT,DPDK]}/2n-tx2.rst"
- target-links: "../../_static/dpdk"
- data: "dpdk-2n-tx2-curr-iter-best"
- filter: "'1T1C' and 'NIC_Intel-XL710'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-###############################################################################
-
-# GSO
-
-- type: "plot"
- title: "Throughput: 2n-skx-128kb-{core}-ip4routing-iperf3"
- algorithm: "plot_mrr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-skx-128kb-{core}-ip4routing-iperf3"
- data: "vpp-2n-skx-curr-gso"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-iperf3-mrr"
- layout:
- title: "2n-skx-128kb-{core}-ip4routing-iperf3"
- layout: "plot-throughput-gbps"
-
-- type: "plot"
- title: "Throughput: 2n-clx-128kb-{core}-ip4routing-iperf3"
- algorithm: "plot_mrr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-clx-128kb-{core}-ip4routing-iperf3"
- data: "vpp-2n-clx-curr-iter-gso"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-iperf3-mrr"
- layout:
- title: "2n-clx-128kb-{core}-ip4routing-iperf3"
- layout: "plot-throughput-gbps"
-
-- type: "plot"
- title: "Throughput: 2n-zn2-128kb-{core}-ip4routing-iperf3"
- algorithm: "plot_mrr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-zn2-128kb-{core}-ip4routing-iperf3"
- data: "vpp-2n-zn2-curr-iter-gso"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Tap-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2tap-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Gso-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-gso-iperf3-mrr"
- - "Tests.Vpp.Perf.Gso.2N1L-10Ge2P1X710-Ethip4-Ip4Base-2Vhost-Iperf3-Mrr.128KB-{core}-ethip4-ip4base-2vhost-iperf3-mrr"
- layout:
- title: "2n-zn2-128kb-{core}-ip4routing-iperf3"
- layout: "plot-throughput-gbps"
-
-###############################################################################
-
-# TRex 2n-skx
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b--ip4-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,TREX]}/2n-skx-x710-64b--ip4-base-scale-{test_type}"
- data: "trex-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4-Ip4Base-Tg-Ndrpdr.64B--ethip4-ip4base-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4-Ip4Scale2M-Tg-Ndrpdr.64B--ethip4-ip4scale2m-tg-ndrpdr"
- layout:
- title: "2n-skx-x710-64b--ip4-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b--ip4routing-stf-cps-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,TREX]}/2n-skx-x710-64b--ip4routing-stf-cps-{test_type}"
- data: "trex-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H1024-P63-S64512-Cps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h1024-p63-s64512-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H262144-P63-S16515072-Cps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H1024-P63-S64512-Cps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h1024-p63-s64512-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H262144-P63-S16515072-Cps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h262144-p63-s16515072-cps-tg-ndrpdr"
- layout:
- title: "2n-skx-x710-64b--ip4routing-stf-cps-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b--ip4routing-stf-pps-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,TREX]}/2n-skx-x710-64b--ip4routing-stf-pps-{test_type}"
- data: "trex-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H1024-P63-S64512-pps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H262144-P63-S16515072-pps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H1024-P63-S64512-pps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H262144-P63-S16515072-pps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr"
- layout:
- title: "2n-skx-x710-64b--ip4routing-stf-pps-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-78b--ip6-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,TREX]}/2n-skx-x710-78b--ip6-base-scale-{test_type}"
- data: "trex-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Trex.Perf.Ip6.1N1L-10Ge2P1X710-Ethip6-Ip6Base-Tg-Ndrpdr.78B--ethip6-ip6base-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip6.1N1L-10Ge2P1X710-Ethip6-Ip6Scale2M-Tg-Ndrpdr.78B--ethip6-ip6scale2m-tg-ndrpdr"
- layout:
- title: "2n-skx-x710-78b--ip6-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-skx-x710-64b--l2-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,TREX]}/2n-skx-x710-64b--l2-scale-{test_type}"
- data: "trex-2n-skx-curr-iter"
- core: ["2t1c", ]
- include:
- - "Tests.Trex.Perf.L2.1N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-Tg-Ndrpdr.64B--eth-l2bdscale1mmaclrn-tg-ndrpdr"
- layout:
- title: "2n-skx-x710-64b--l2-scale-{test_type}"
- layout: "plot-throughput"
diff --git a/resources/tools/presentation/specifications/report/environment.yaml b/resources/tools/presentation/specifications/report/environment.yaml
deleted file mode 100644
index f4ce1065f8..0000000000
--- a/resources/tools/presentation/specifications/report/environment.yaml
+++ /dev/null
@@ -1,271 +0,0 @@
-################################################################################
-### E N V I R O N M E N T ###
-################################################################################
-
-- type: "environment"
-
- spec-files:
- - "specifications/report/data_sets.yaml"
- - "specifications/report/layouts.yaml"
- - "specifications/report/elements.yaml"
-
- paths:
- # Top level directories:
- ## Working directory
- DIR[WORKING]: "_tmp"
- ## Build directories
- DIR[BUILD,HTML]: "_build"
- DIR[BUILD,LATEX]: "_build_latex"
-
- # Static .rst files
- DIR[RST]: "../../../docs/report"
-
- # Working directories
- ## Input data files (.zip, .xml)
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
- ## Static source files from git
- DIR[WORKING,SRC]: "{DIR[WORKING]}/src"
- DIR[WORKING,SRC,STATIC]: "{DIR[WORKING,SRC]}/_static"
-
- # Static html content
- DIR[STATIC]: "{DIR[BUILD,HTML]}/_static"
- DIR[STATIC,VPP]: "{DIR[STATIC]}/vpp"
- DIR[STATIC,DPDK]: "{DIR[STATIC]}/dpdk"
- DIR[STATIC,TREX]: "{DIR[STATIC]}/trex"
- DIR[STATIC,ARCH]: "{DIR[STATIC]}/archive"
-
- # Detailed test results
- DIR[DTR]: "{DIR[WORKING,SRC]}/detailed_test_results"
- DIR[DTR,PERF,DPDK,3N,SKX]: "{DIR[DTR]}/dpdk_performance_results_3n_skx"
- DIR[DTR,PERF,DPDK,2N,SKX]: "{DIR[DTR]}/dpdk_performance_results_2n_skx"
- DIR[DTR,PERF,DPDK,2N,ZN2]: "{DIR[DTR]}/dpdk_performance_results_2n_zn2"
- DIR[DTR,PERF,DPDK,2N,CLX]: "{DIR[DTR]}/dpdk_performance_results_2n_clx"
- DIR[DTR,PERF,DPDK,2N,DNV]: "{DIR[DTR]}/dpdk_performance_results_2n_dnv"
- DIR[DTR,PERF,DPDK,3N,DNV]: "{DIR[DTR]}/dpdk_performance_results_3n_dnv"
- DIR[DTR,PERF,DPDK,3N,TSH]: "{DIR[DTR]}/dpdk_performance_results_3n_tsh"
- DIR[DTR,PERF,DPDK,2N,TX2]: "{DIR[DTR]}/dpdk_performance_results_2n_tx2"
- DIR[DTR,PERF,TREX,2N,SKX]: "{DIR[DTR]}/trex_performance_results_2n_skx"
- DIR[DTR,PERF,VPP,ALL]: "{DIR[DTR]}/vpp_performance_results"
- DIR[DTR,PERF,VPP,3N,SKX]: "{DIR[DTR]}/vpp_performance_results_3n_skx"
- DIR[DTR,PERF,VPP,2N,SKX]: "{DIR[DTR]}/vpp_performance_results_2n_skx"
- DIR[DTR,PERF,VPP,2N,ZN2]: "{DIR[DTR]}/vpp_performance_results_2n_zn2"
- DIR[DTR,PERF,VPP,2N,CLX]: "{DIR[DTR]}/vpp_performance_results_2n_clx"
- DIR[DTR,PERF,VPP,2N,ICX]: "{DIR[DTR]}/vpp_performance_results_2n_icx"
- DIR[DTR,PERF,VPP,3N,ICX]: "{DIR[DTR]}/vpp_performance_results_3n_icx"
- DIR[DTR,PERF,VPP,3N,TSH]: "{DIR[DTR]}/vpp_performance_results_3n_tsh"
- DIR[DTR,PERF,VPP,2N,TX2]: "{DIR[DTR]}/vpp_performance_results_2n_tx2"
- DIR[DTR,PERF,VPP,3N,DNV]: "{DIR[DTR]}/vpp_performance_results_3n_dnv"
- DIR[DTR,PERF,VPP,2N,DNV]: "{DIR[DTR]}/vpp_performance_results_2n_dnv"
- DIR[DTR,PERF,VPP,3N,AWS]: "{DIR[DTR]}/vpp_performance_results_3n_aws"
- DIR[DTR,PERF,VPP,2N,AWS]: "{DIR[DTR]}/vpp_performance_results_2n_aws"
- DIR[DTR,MRR,VPP,ALL]: "{DIR[DTR]}/vpp_mrr_results"
- DIR[DTR,MRR,VPP,3N,SKX]: "{DIR[DTR]}/vpp_mrr_results_3n_skx"
- DIR[DTR,MRR,VPP,2N,SKX]: "{DIR[DTR]}/vpp_mrr_results_2n_skx"
- DIR[DTR,MRR,VPP,2N,ZN2]: "{DIR[DTR]}/vpp_mrr_results_2n_zn2"
- DIR[DTR,MRR,VPP,2N,CLX]: "{DIR[DTR]}/vpp_mrr_results_2n_clx"
- DIR[DTR,MRR,VPP,2N,ICX]: "{DIR[DTR]}/vpp_mrr_results_2n_icx"
- DIR[DTR,MRR,VPP,3N,ICX]: "{DIR[DTR]}/vpp_mrr_results_3n_icx"
- DIR[DTR,MRR,VPP,3N,TSH]: "{DIR[DTR]}/vpp_mrr_results_3n_tsh"
- DIR[DTR,MRR,VPP,2N,TX2]: "{DIR[DTR]}/vpp_mrr_results_2n_tx2"
- DIR[DTR,MRR,VPP,3N,DNV]: "{DIR[DTR]}/vpp_mrr_results_3n_dnv"
- DIR[DTR,MRR,VPP,2N,DNV]: "{DIR[DTR]}/vpp_mrr_results_2n_dnv"
- DIR[DTR,MRR,VPP,3N,AWS]: "{DIR[DTR]}/vpp_mrr_results_3n_aws"
- DIR[DTR,MRR,VPP,2N,AWS]: "{DIR[DTR]}/vpp_mrr_results_2n_aws"
- DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]: "{DIR[DTR]}/vpp_device_results_ubuntu"
-
- # Detailed test configurations
- DIR[DTC]: "{DIR[WORKING,SRC]}/test_configuration"
- DIR[DTC,PERF,VPP,ALL]: "{DIR[DTC]}/vpp_performance_configuration"
- DIR[DTC,PERF,VPP,3N,SKX]: "{DIR[DTC]}/vpp_performance_configuration_3n_skx"
- DIR[DTC,PERF,VPP,2N,SKX]: "{DIR[DTC]}/vpp_performance_configuration_2n_skx"
- DIR[DTC,PERF,VPP,2N,ZN2]: "{DIR[DTC]}/vpp_performance_configuration_2n_zn2"
- DIR[DTC,PERF,VPP,2N,CLX]: "{DIR[DTC]}/vpp_performance_configuration_2n_clx"
- DIR[DTC,PERF,VPP,2N,ICX]: "{DIR[DTC]}/vpp_performance_configuration_2n_icx"
- DIR[DTC,PERF,VPP,3N,ICX]: "{DIR[DTC]}/vpp_performance_configuration_3n_icx"
- DIR[DTC,PERF,VPP,3N,TSH]: "{DIR[DTC]}/vpp_performance_configuration_3n_tsh"
- DIR[DTC,PERF,VPP,2N,TX2]: "{DIR[DTC]}/vpp_performance_configuration_2n_tx2"
- DIR[DTC,PERF,VPP,3N,DNV]: "{DIR[DTC]}/vpp_performance_configuration_3n_dnv"
- DIR[DTC,PERF,VPP,2N,DNV]: "{DIR[DTC]}/vpp_performance_configuration_2n_dnv"
- DIR[DTC,PERF,VPP,3N,AWS]: "{DIR[DTC]}/vpp_performance_configuration_3n_aws"
- DIR[DTC,PERF,VPP,2N,AWS]: "{DIR[DTC]}/vpp_performance_configuration_2n_aws"
- DIR[DTC,MRR,VPP,ALL]: "{DIR[DTC]}/vpp_mrr_configuration"
- DIR[DTC,MRR,VPP,3N,SKX]: "{DIR[DTC]}/vpp_mrr_configuration_3n_skx"
- DIR[DTC,MRR,VPP,2N,SKX]: "{DIR[DTC]}/vpp_mrr_configuration_2n_skx"
- DIR[DTC,MRR,VPP,2N,ZN2]: "{DIR[DTC]}/vpp_mrr_configuration_2n_zn2"
- DIR[DTC,MRR,VPP,2N,CLX]: "{DIR[DTC]}/vpp_mrr_configuration_2n_clx"
- DIR[DTC,MRR,VPP,2N,ICX]: "{DIR[DTC]}/vpp_mrr_configuration_2n_icx"
- DIR[DTC,MRR,VPP,3N,ICX]: "{DIR[DTC]}/vpp_mrr_configuration_3n_icx"
- DIR[DTC,MRR,VPP,3N,TSH]: "{DIR[DTC]}/vpp_mrr_configuration_3n_tsh"
- DIR[DTC,MRR,VPP,2N,TX2]: "{DIR[DTC]}/vpp_mrr_configuration_2n_tx2"
- DIR[DTC,MRR,VPP,3N,DNV]: "{DIR[DTC]}/vpp_mrr_configuration_3n_dnv"
- DIR[DTC,MRR,VPP,2N,DNV]: "{DIR[DTC]}/vpp_mrr_configuration_2n_dnv"
- DIR[DTC,MRR,VPP,3N,AWS]: "{DIR[DTC]}/vpp_mrr_configuration_3n_aws"
- DIR[DTC,MRR,VPP,2N,AWS]: "{DIR[DTC]}/vpp_mrr_configuration_2n_aws"
- DIR[DTC,FUNC,VPP,DEVICE,UBUNTU]: "{DIR[DTC]}/vpp_device_configuration_ubuntu"
-
- # Detailed tests operational data
- DIR[DTO]: "{DIR[WORKING,SRC]}/test_operational_data"
- DIR[DTO,PERF,VPP,ALL]: "{DIR[DTO]}/vpp_performance_operational_data"
- DIR[DTO,PERF,VPP,3N,SKX]: "{DIR[DTO]}/vpp_performance_operational_data_3n_skx"
- DIR[DTO,PERF,VPP,2N,SKX]: "{DIR[DTO]}/vpp_performance_operational_data_2n_skx"
- DIR[DTO,PERF,VPP,2N,ZN2]: "{DIR[DTO]}/vpp_performance_operational_data_2n_zn2"
- DIR[DTO,PERF,VPP,2N,CLX]: "{DIR[DTO]}/vpp_performance_operational_data_2n_clx"
- DIR[DTO,PERF,VPP,2N,ICX]: "{DIR[DTO]}/vpp_performance_operational_data_2n_icx"
- DIR[DTO,PERF,VPP,3N,ICX]: "{DIR[DTO]}/vpp_performance_operational_data_3n_icx"
- DIR[DTO,PERF,VPP,3N,TSH]: "{DIR[DTO]}/vpp_performance_operational_data_3n_tsh"
- DIR[DTO,PERF,VPP,2N,TX2]: "{DIR[DTO]}/vpp_performance_operational_data_2n_tx2"
- DIR[DTO,PERF,VPP,3N,DNV]: "{DIR[DTO]}/vpp_performance_operational_data_3n_dnv"
- DIR[DTO,PERF,VPP,2N,DNV]: "{DIR[DTO]}/vpp_performance_operational_data_2n_dnv"
- DIR[DTO,PERF,VPP,3N,AWS]: "{DIR[DTO]}/vpp_performance_operational_data_3n_aws"
- DIR[DTO,PERF,VPP,2N,AWS]: "{DIR[DTO]}/vpp_performance_operational_data_2n_aws"
-
- # Latencies:
- DIR[LAT,VPP]: "{DIR[WORKING,SRC]}/vpp_performance_tests/hdrh_packet_latency_by_percentile_graphs"
- DIR[LAT,DPDK]: "{DIR[WORKING,SRC]}/dpdk_performance_tests/hdrh_packet_latency_by_percentile_graphs"
- DIR[LAT,TREX]: "{DIR[WORKING,SRC]}/trex_performance_tests/hdrh_packet_latency_by_percentile_graphs"
-
- # .css patch file to fix tables generated by Sphinx
- DIR[CSS_PATCH_FILE]: "{DIR[STATIC]}/theme_overrides.css"
- DIR[CSS_PATCH_FILE2]: "{DIR[WORKING,SRC,STATIC]}/theme_overrides.css"
-
- # Data sources are used in this order:
- data-sources:
- # XML
- - type: "xml"
- url: "https://s3-logs.fd.io/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- # To be deprecated soon:
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- # Deprecated:
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- # JSON from S3
- - type: "json"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.json.gz"
- file-format: ".gz"
- enabled: False
-
- archive-inputs: False
-
- mapping-file: ""
-
- ignore-list: ""
-
- make-dirs:
- # List the directories which are created while preparing the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
- - "DIR[STATIC,VPP]"
- - "DIR[STATIC,DPDK]"
- - "DIR[STATIC,TREX]"
- - "DIR[STATIC,ARCH]"
- - "DIR[BUILD,LATEX]"
- - "DIR[WORKING,SRC]"
- - "DIR[WORKING,SRC,STATIC]"
-
- remove-dirs:
- # List the directories which are deleted while cleaning the environment.
- # All directories MUST be defined in "paths" section.
- # - "DIR[BUILD,HTML]"
- - "DIR[WORKING,DATA]"
-
- build-dirs:
- # List the directories where the results (build) is stored.
- # All directories MUST be defined in "paths" section.
- - "DIR[BUILD,HTML]"
- - "DIR[BUILD,LATEX]"
-
- reverse-input: False # Needed for trending, not important for the report
-
- limits:
- nic:
- x520: 24460000
- x553: 29761905
- x710: 35800000
- xxv710: 35800000
- xl710: 35800000
- cx556a: 148809523.81
- e810cq: 148809523.81
-
- link:
- 10ge: 14880952.38
- 25ge: 37202380.95
- 40ge: 59523809.52
- 100ge: 148809523.81
-
- pci:
- pci-g3-x8: 74404761.90
- pci-g3-x16: 148809523.81
-
-################################################################################
-### S T A T I C ###
-################################################################################
-
-- type: "static"
- src-path: "{DIR[RST]}"
- dst-path: "{DIR[WORKING,SRC]}"
-
-################################################################################
-### O U T P U T ###
-################################################################################
-
-- type: "output"
- arch-file-format:
- - ".gz"
- - ".zip"
- output: "report"
- format:
- html:
- - full
-# pdf:
-# - minimal
diff --git a/resources/tools/presentation/specifications/report/layouts.yaml b/resources/tools/presentation/specifications/report/layouts.yaml
deleted file mode 100644
index 0f5b4a5220..0000000000
--- a/resources/tools/presentation/specifications/report/layouts.yaml
+++ /dev/null
@@ -1,875 +0,0 @@
-################################################################################
-### L A Y O U T S ###
-################################################################################
-
-- type: "layouts"
-
- plot-soak-throughput:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Critical Rate Lower Bound [Mpps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,50]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-service-density:
- titlefont:
- size: 16
- xaxis:
- side: "top"
- autorange: True
- fixedrange: False
- showgrid: False
- showline: False
- showticklabels: False
- ticks: ""
- ticklen: 0
- tickwidth: 0
- zeroline: False
- yaxis:
- autorange: "reversed"
- showgrid: False
- showline: False
- showticklabels: False
- ticks: ""
- ticklen: 0
- tickwidth: 0
- zeroline: False
- showlegend: False
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- width: 700
- height: 700
- hoverlabel:
- namelength: -1
-
- plot-hoststack:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Bandwidth [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- rangemode: "tozero"
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(230, 230, 230)"
- tickformat: ".3s"
- tickfont:
- size: 14
- zeroline: False
- autosize: False
- margin:
- t: 50
- b: 20
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 800
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Mpps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,50]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Data Throughput [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-cps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Connection Rate [Mcps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput-speedup-analysis:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Mpps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __ ...",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.14,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured Limit",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-throughput-speedup-analysis-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Gbps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.13,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-throughput-speedup-analysis-cps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Connection Rate [Mcps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.13,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-latency:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Direction</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: False
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Latency [uSec]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- legend:
- orientation: "h"
- font:
- size: 14
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 80
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-hdrh-latency:
- title:
- text: ""
- xanchor: "center"
- x: 0.5
- font:
- size: 16
- width: 700
- plot_bgcolor: "white"
- annotations:
- - font:
- size: 14
- showarrow: False
- text: "<b>Packet Latency [uSec]</b>"
- x: 1
- xanchor: "right"
- xref: "paper"
- y: -0.045
- yanchor: "top"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Probability [%]</b>"
- textangle: 270
- x: -0.06
- xanchor: "center"
- xref: "paper"
- y: 0.5
- yanchor: "middle"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Direction: E-W</b>"
- x: 0.24
- xanchor: "center"
- xref: "paper"
- y: 1.05
- yanchor: "bottom"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Direction: W-E</b>"
- x: 0.74
- xanchor: "center"
- xref: "paper"
- y: 1.05
- yanchor: "bottom"
- yref: "paper"
-
- plot-hdrh-latency-percentile-x-log:
- title:
- text: "<b>Latency by Percentile Distribution</b>"
- xanchor: "center"
- x: 0.5
- font:
- size: 18
- showlegend: True
- legend:
- traceorder: "normal"
- orientation: "h"
- font:
- size: 16
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- xaxis:
- type: "log"
- title: "<b>Percentile [%]</b>"
- titlefont:
- size: 14
- autorange: False
- fixedrange: True
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickvals: [1, 2, 1e1, 20, 1e2, 1e3, 1e4, 1e5, 1e6]
- ticktext: [0, 50, 90, 95, 99, 99.9, 99.99, 99.999, 99.9999]
- tickfont:
- size: 14
- yaxis:
- title: "<b>One-Way Latency per Direction [uSec]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- autosize: False
- width: 700
- height: 700
- paper_bgcolor: "white"
- plot_bgcolor: "white"
-
- plot-hdrh-latency-by-percentile:
- title:
- text: "<b>Latency by Percentile Distribution</b>"
- xanchor: "center"
- x: 0.5
- font:
- size: 18
- showlegend: True
- legend:
- traceorder: "normal"
- orientation: "h"
- font:
- size: 16
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- xaxis:
- type: "linear"
- title: "<b>Percentile [%]</b>"
- titlefont:
- size: 14
- autorange: False
- fixedrange: False
- range: [0, 100]
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickvals: [0, 25, 50, 75, 100]
- ticktext: [0, 25, 50, 75, 100]
- tickfont:
- size: 14
- yaxis:
- title: "<b>One-Way Latency per Direction [uSec]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- width: 700
- height: 700
- paper_bgcolor: "white"
- plot_bgcolor: "white"
-
- plot-scatter-error-bars-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Data Throughput [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
diff --git a/resources/tools/presentation/specifications/report_local/data_sets.yaml b/resources/tools/presentation/specifications/report_local/data_sets.yaml
deleted file mode 100644
index c756a4667e..0000000000
--- a/resources/tools/presentation/specifications/report_local/data_sets.yaml
+++ /dev/null
@@ -1,51 +0,0 @@
-################################################################################
-### D A T A S E T S ###
-################################################################################
-
-- type: "data-sets"
-
- plot-vpp-throughput-tsa-3n-aws:
- 3n-aws-iter:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
-
- vpp-perf-results-3n-aws:
- 3n-aws-iter:
- - 1
- - 2
-
- plot-vpp-latency-3n-aws:
- 3n-aws-iter:
- - 1
- - 2
-
- plot-vpp-throughput-tsa-2n-aws:
- 2n-aws-iter:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
- - 9
- - 10
-
- vpp-perf-results-2n-aws:
- 2n-aws-iter:
- - 1
- - 2
- - 9
-
- plot-vpp-latency-2n-aws:
- 2n-aws-iter:
- - 1
- - 2
- - 9
diff --git a/resources/tools/presentation/specifications/report_local/elements.yaml b/resources/tools/presentation/specifications/report_local/elements.yaml
deleted file mode 100644
index 87ee409266..0000000000
--- a/resources/tools/presentation/specifications/report_local/elements.yaml
+++ /dev/null
@@ -1,322 +0,0 @@
-# Tables:
-
-# Detailed Test Results - VPP Performance Results 3n-aws
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,3N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-perf-results-3n-aws"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Test configuration - VPP Performance Test Configs 3n-aws
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 3n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,3N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-perf-results-3n-aws"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test Operational Data - VPP Performance Operational Data 3n-aws
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 3n-aws"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,3N,AWS]}/"
- data: "vpp-perf-results-3n-aws"
- filter: "all"
-
-# Detailed Test Results - VPP Performance Results 2n-aws
-- type: "table"
- title: "Detailed Test Results - VPP Performance Results 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTR,PERF,VPP,2N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| Throughput: |br| 1. Mpps Gbps (NDR) |br| 2. Mpps Gbps (PDR) |br| |br| One-Way Latency Percentiles in uSec at %PDR load, |br| one set per each direction: |br| 3. P50 P90 P99 P50 P90 P99 (10% PDR) |br| 4. P50 P90 P99 P50 P90 P99 (50% PDR) |br| 5. P50 P90 P99 P50 P90 P99 (90% PDR) |preout| "
- data: "data msg"
- data: "vpp-perf-results-2n-aws"
- filter: "all"
- parameters:
- - "name"
- - "parent"
- - "msg"
-
-# Test configuration - VPP Performance Test Configs 2n-aws
-- type: "table"
- title: "Test configuration - VPP Performance Test Configs 2n-aws"
- algorithm: "table_merged_details"
- output-file: "{DIR[DTC,PERF,VPP,2N,AWS]}/"
- columns:
- - title: " |prein| Test Name |preout| "
- data: "data name"
- - title: " |prein| VPP API Test Commands History - Commands Used Per Test Case |preout| "
- data: "data conf-history"
- data: "vpp-perf-results-2n-aws"
- filter: "all"
- parameters:
- - "parent"
- - "name"
- - "conf-history"
-
-# Test Operational Data - VPP Performance Operational Data 2n-aws
-- type: "table"
- title: "Test Operational Data - VPP Performance Operational Data 2n-aws"
- algorithm: "table_oper_data_html"
- output-file: "{DIR[DTO,PERF,VPP,2N,AWS]}/"
- data: "vpp-perf-results-2n-aws"
- filter: "all"
-
-# Files:
-
-# VPP Performance Results
-- type: "file"
- title: "VPP Performance Results"
- algorithm: "file_details_split"
- output-file: "{DIR[DTR,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTR,PERF,VPP,2N,AWS]}"
- - "{DIR[DTR,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-perf-results-2n-aws"
- - "vpp-perf-results-3n-aws"
- filter: "all"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
- - "3n-hsw"
- - "3n-tsh"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP Performance Configuration
-- type: "file"
- title: "VPP Performance Configuration"
- algorithm: "file_details_split"
- output-file: "{DIR[DTC,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTC,PERF,VPP,2N,AWS]}"
- - "{DIR[DTC,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-perf-results-2n-aws"
- - "vpp-perf-results-3n-aws"
- filter: "all"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
- - "3n-hsw"
- - "3n-tsh"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# VPP Performance Operational
-- type: "file"
- title: "VPP Performance Operational"
- algorithm: "file_details_split_html"
- output-file: "{DIR[DTO,PERF,VPP,ALL]}"
- dir-tables:
- - "{DIR[DTO,PERF,VPP,2N,AWS]}"
- - "{DIR[DTO,PERF,VPP,3N,AWS]}"
- data:
- - "vpp-perf-results-2n-aws"
- - "vpp-perf-results-3n-aws"
- filter: "all"
- data-start-level: 4
- order-chapters:
- level-1:
- - "l2"
- - "ip4"
- - "ip6"
- - "srv6"
- - "ip4_tunnels"
- - "ip6_tunnels"
- - "vm_vhost"
- - "container_memif"
- - "crypto"
- - "vts"
- - "lb"
- - "nfv_density"
- - "hoststack"
- level-2:
- - "2n-skx"
- - "3n-skx"
- - "2n-clx"
- - "3n-hsw"
- - "3n-tsh"
- - "2n-dnv"
- - "3n-dnv"
- - "2n-aws"
- - "3n-aws"
- level-3:
- - "xl710"
- - "x520"
- - "xxv710"
- - "x710"
- - "x553"
- - "cx556a"
- - "vic1227"
- - "vic1385"
- - "ena"
-
-# Plots:
-
-- type: "plot"
- title: "Throughput: 2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- data: "plot-vpp-throughput-tsa-2n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- data: "plot-vpp-throughput-tsa-2n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-ndrpdr.1518B-{core}-ethip4-ip4base-ndrpdr"
-# - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.1518B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 2n-aws-nitro50g-imix-{core}-ip4routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/2n-aws-nitro50g-imix-{core}-ip4routing-base-scale-{test_type}"
- data: "plot-vpp-throughput-tsa-2n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.IMIX-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "2n-aws-nitro50g-imix-{core}-ip4routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- data: "plot-vpp-throughput-tsa-3n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Throughput: 3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- algorithm: "plot_ndrpdr_box_name"
- output-file: "{DIR[STATIC,VPP]}/3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- data: "plot-vpp-throughput-tsa-3n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-ndrpdr.1518B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-ndrpdr.1518B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout:
- title: "3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-{test_type}"
- layout: "plot-throughput"
-
-- type: "plot"
- title: "Latency by percentile: 2n-aws"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-2n-aws"
- output-file-links: "{DIR[LAT,VPP]}/2n_aws.rst"
- target-links: "../../_static/vpp"
- data: "plot-vpp-latency-2n-aws"
- filter: "'2T1C'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
-
-- type: "plot"
- title: "Latency by percentile: 3n-aws"
- algorithm: "plot_hdrh_lat_by_percentile_x_log"
- output-file: "{DIR[STATIC,VPP]}/hdrh-lat-percentile-3n-aws"
- output-file-links: "{DIR[LAT,VPP]}/3n_aws.rst"
- target-links: "../../_static/vpp"
- data: "plot-vpp-latency-3n-aws"
- filter: "'2T1C'"
- layout:
- layout: "plot-hdrh-latency-percentile-x-log"
diff --git a/resources/tools/presentation/specifications/report_local/environment.yaml b/resources/tools/presentation/specifications/report_local/environment.yaml
deleted file mode 100644
index cdbce03155..0000000000
--- a/resources/tools/presentation/specifications/report_local/environment.yaml
+++ /dev/null
@@ -1,265 +0,0 @@
-################################################################################
-### E N V I R O N M E N T ###
-################################################################################
-
-- type: "environment"
-
- spec-files:
- - "specifications/report_local/data_sets.yaml"
- - "specifications/report_local/layouts.yaml"
- - "specifications/report_local/elements.yaml"
-
- paths:
- # Top level directories:
- ## Working directory
- DIR[WORKING]: "_tmp"
- ## Build directories
- DIR[BUILD,HTML]: "_build"
- DIR[BUILD,LATEX]: "_build_latex"
-
- # Static .rst files
- DIR[RST]: "../../../docs/report"
-
- # Working directories
- ## Input data files (.zip, .xml)
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
- ## Static source files from git
- DIR[WORKING,SRC]: "{DIR[WORKING]}/src"
- DIR[WORKING,SRC,STATIC]: "{DIR[WORKING,SRC]}/_static"
-
- # Static html content
- DIR[STATIC]: "{DIR[BUILD,HTML]}/_static"
- DIR[STATIC,VPP]: "{DIR[STATIC]}/vpp"
- DIR[STATIC,DPDK]: "{DIR[STATIC]}/dpdk"
- DIR[STATIC,ARCH]: "{DIR[STATIC]}/archive"
-
- # Detailed test results
- DIR[DTR]: "{DIR[WORKING,SRC]}/detailed_test_results"
- DIR[DTR,PERF,DPDK,3N,HSW]: "{DIR[DTR]}/dpdk_performance_results_3n_hsw"
- DIR[DTR,PERF,DPDK,3N,SKX]: "{DIR[DTR]}/dpdk_performance_results_3n_skx"
- DIR[DTR,PERF,DPDK,2N,SKX]: "{DIR[DTR]}/dpdk_performance_results_2n_skx"
- DIR[DTR,PERF,DPDK,2N,CLX]: "{DIR[DTR]}/dpdk_performance_results_2n_clx"
- DIR[DTR,PERF,DPDK,2N,DNV]: "{DIR[DTR]}/dpdk_performance_results_2n_dnv"
- DIR[DTR,PERF,DPDK,3N,DNV]: "{DIR[DTR]}/dpdk_performance_results_3n_dnv"
- DIR[DTR,PERF,DPDK,3N,TSH]: "{DIR[DTR]}/dpdk_performance_results_3n_tsh"
- DIR[DTR,PERF,VPP,ALL]: "{DIR[DTR]}/vpp_performance_results"
- DIR[DTR,PERF,VPP,3N,HSW]: "{DIR[DTR]}/vpp_performance_results_3n_hsw"
- DIR[DTR,PERF,VPP,3N,SKX]: "{DIR[DTR]}/vpp_performance_results_3n_skx"
- DIR[DTR,PERF,VPP,2N,SKX]: "{DIR[DTR]}/vpp_performance_results_2n_skx"
- DIR[DTR,PERF,VPP,2N,CLX]: "{DIR[DTR]}/vpp_performance_results_2n_clx"
- DIR[DTR,PERF,VPP,3N,TSH]: "{DIR[DTR]}/vpp_performance_results_3n_tsh"
- DIR[DTR,PERF,VPP,3N,DNV]: "{DIR[DTR]}/vpp_performance_results_3n_dnv"
- DIR[DTR,PERF,VPP,2N,DNV]: "{DIR[DTR]}/vpp_performance_results_2n_dnv"
- DIR[DTR,PERF,VPP,3N,AWS]: "{DIR[DTR]}/vpp_performance_results_3n_aws"
- DIR[DTR,PERF,VPP,2N,AWS]: "{DIR[DTR]}/vpp_performance_results_2n_aws"
- DIR[DTR,MRR,VPP,ALL]: "{DIR[DTR]}/vpp_mrr_results"
- DIR[DTR,MRR,VPP,3N,HSW]: "{DIR[DTR]}/vpp_mrr_results_3n_hsw"
- DIR[DTR,MRR,VPP,3N,SKX]: "{DIR[DTR]}/vpp_mrr_results_3n_skx"
- DIR[DTR,MRR,VPP,2N,SKX]: "{DIR[DTR]}/vpp_mrr_results_2n_skx"
- DIR[DTR,MRR,VPP,2N,CLX]: "{DIR[DTR]}/vpp_mrr_results_2n_clx"
- DIR[DTR,MRR,VPP,3N,TSH]: "{DIR[DTR]}/vpp_mrr_results_3n_tsh"
- DIR[DTR,MRR,VPP,3N,DNV]: "{DIR[DTR]}/vpp_mrr_results_3n_dnv"
- DIR[DTR,MRR,VPP,2N,DNV]: "{DIR[DTR]}/vpp_mrr_results_2n_dnv"
- DIR[DTR,FUNC,VPP,DEVICE,UBUNTU]: "{DIR[DTR]}/vpp_device_results_ubuntu"
-
- # Detailed test configurations
- DIR[DTC]: "{DIR[WORKING,SRC]}/test_configuration"
- DIR[DTC,PERF,VPP,ALL]: "{DIR[DTC]}/vpp_performance_configuration"
- DIR[DTC,PERF,VPP,3N,HSW]: "{DIR[DTC]}/vpp_performance_configuration_3n_hsw"
- DIR[DTC,PERF,VPP,3N,SKX]: "{DIR[DTC]}/vpp_performance_configuration_3n_skx"
- DIR[DTC,PERF,VPP,2N,SKX]: "{DIR[DTC]}/vpp_performance_configuration_2n_skx"
- DIR[DTC,PERF,VPP,2N,CLX]: "{DIR[DTC]}/vpp_performance_configuration_2n_clx"
- DIR[DTC,PERF,VPP,3N,TSH]: "{DIR[DTC]}/vpp_performance_configuration_3n_tsh"
- DIR[DTC,PERF,VPP,3N,DNV]: "{DIR[DTC]}/vpp_performance_configuration_3n_dnv"
- DIR[DTC,PERF,VPP,2N,DNV]: "{DIR[DTC]}/vpp_performance_configuration_2n_dnv"
- DIR[DTC,PERF,VPP,3N,AWS]: "{DIR[DTC]}/vpp_performance_configuration_3n_aws"
- DIR[DTC,PERF,VPP,2N,AWS]: "{DIR[DTC]}/vpp_performance_configuration_2n_aws"
- DIR[DTC,MRR,VPP,ALL]: "{DIR[DTC]}/vpp_mrr_configuration"
- DIR[DTC,MRR,VPP,3N,HSW]: "{DIR[DTC]}/vpp_mrr_configuration_3n_hsw"
- DIR[DTC,MRR,VPP,3N,SKX]: "{DIR[DTC]}/vpp_mrr_configuration_3n_skx"
- DIR[DTC,MRR,VPP,2N,SKX]: "{DIR[DTC]}/vpp_mrr_configuration_2n_skx"
- DIR[DTC,MRR,VPP,2N,CLX]: "{DIR[DTC]}/vpp_mrr_configuration_2n_clx"
- DIR[DTC,MRR,VPP,3N,TSH]: "{DIR[DTC]}/vpp_mrr_configuration_3n_tsh"
- DIR[DTC,MRR,VPP,3N,DNV]: "{DIR[DTC]}/vpp_mrr_configuration_3n_dnv"
- DIR[DTC,MRR,VPP,2N,DNV]: "{DIR[DTC]}/vpp_mrr_configuration_2n_dnv"
- DIR[DTC,FUNC,VPP,DEVICE,UBUNTU]: "{DIR[DTC]}/vpp_device_configuration_ubuntu"
-
- # Detailed tests operational data
- DIR[DTO]: "{DIR[WORKING,SRC]}/test_operational_data"
- DIR[DTO,PERF,VPP,ALL]: "{DIR[DTO]}/vpp_performance_operational_data"
- DIR[DTO,PERF,VPP,3N,HSW]: "{DIR[DTO]}/vpp_performance_operational_data_3n_hsw"
- DIR[DTO,PERF,VPP,3N,SKX]: "{DIR[DTO]}/vpp_performance_operational_data_3n_skx"
- DIR[DTO,PERF,VPP,2N,SKX]: "{DIR[DTO]}/vpp_performance_operational_data_2n_skx"
- DIR[DTO,PERF,VPP,2N,CLX]: "{DIR[DTO]}/vpp_performance_operational_data_2n_clx"
- DIR[DTO,PERF,VPP,3N,TSH]: "{DIR[DTO]}/vpp_performance_operational_data_3n_tsh"
- DIR[DTO,PERF,VPP,3N,DNV]: "{DIR[DTO]}/vpp_performance_operational_data_3n_dnv"
- DIR[DTO,PERF,VPP,2N,DNV]: "{DIR[DTO]}/vpp_performance_operational_data_2n_dnv"
- DIR[DTO,PERF,VPP,3N,AWS]: "{DIR[DTO]}/vpp_performance_operational_data_3n_aws"
- DIR[DTO,PERF,VPP,2N,AWS]: "{DIR[DTO]}/vpp_performance_operational_data_2n_aws"
-
- # Latencies:
- DIR[LAT,VPP]: "{DIR[WORKING,SRC]}/vpp_performance_tests/hdrh_packet_latency_by_percentile_graphs"
- DIR[LAT,DPDK]: "{DIR[WORKING,SRC]}/dpdk_performance_tests/hdrh_packet_latency_by_percentile_graphs"
-
- # .css patch file to fix tables generated by Sphinx
- DIR[CSS_PATCH_FILE]: "{DIR[STATIC]}/theme_overrides.css"
- DIR[CSS_PATCH_FILE2]: "{DIR[WORKING,SRC,STATIC]}/theme_overrides.css"
-
- # Data sources are used in this order:
- data-sources:
- # JSON from S3
- - type: "json"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.json.gz"
- file-format: ".gz"
- enabled: False
- # XML from S3
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://s3-logs.fd.io/logs/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- # XML from docs.nexus
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml-docs"
- url: "https://docs.fd.io/csit"
- path: "report/_static/archive"
- file-name: "robot-plugin.zip"
- file-format: ".zip"
- enabled: True
-
- archive-inputs: True
-
- mapping-file: ""
-
- ignore-list: ""
-
- make-dirs:
- # List the directories which are created while preparing the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
- - "DIR[STATIC,VPP]"
- - "DIR[STATIC,DPDK]"
- - "DIR[STATIC,ARCH]"
- - "DIR[BUILD,LATEX]"
- - "DIR[WORKING,SRC]"
- - "DIR[WORKING,SRC,STATIC]"
-
- remove-dirs:
- # List the directories which are deleted while cleaning the environment.
- # All directories MUST be defined in "paths" section.
- # - "DIR[BUILD,HTML]"
- - "DIR[WORKING,DATA]"
-
- build-dirs:
- # List the directories where the results (build) is stored.
- # All directories MUST be defined in "paths" section.
- - "DIR[BUILD,HTML]"
- - "DIR[BUILD,LATEX]"
-
- reverse-input: False # Needed for trending, not important for the report
-
- # TODO: Change in code needed, it was in type: "configuration"
- limits:
- nic:
- x520: 24460000
- x553: 29761905
- x710: 35800000
- xxv710: 35800000
- xl710: 35800000
- cx556a: 148809523.81
- e810cq: 148809523.81
-
- link:
- 10ge: 14880952.38
- 25ge: 37202380.95
- 40ge: 59523809.52
- 100ge: 148809523.81
-
- pci:
- pci-g3-x8: 74404761.90
- pci-g3-x16: 148809523.81
-
-################################################################################
-### S T A T I C ###
-################################################################################
-
-- type: "static"
- src-path: "{DIR[RST]}"
- dst-path: "{DIR[WORKING,SRC]}"
-
-################################################################################
-### O U T P U T ###
-################################################################################
-
-- type: "output"
- arch-file-format: # moved from input, TODO: change it in the code
- - ".gz"
- - ".zip"
- output: "report"
- format:
- html:
- - full
-# pdf:
-# - minimal
diff --git a/resources/tools/presentation/specifications/report_local/layouts.yaml b/resources/tools/presentation/specifications/report_local/layouts.yaml
deleted file mode 100644
index 0f5b4a5220..0000000000
--- a/resources/tools/presentation/specifications/report_local/layouts.yaml
+++ /dev/null
@@ -1,875 +0,0 @@
-################################################################################
-### L A Y O U T S ###
-################################################################################
-
-- type: "layouts"
-
- plot-soak-throughput:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Critical Rate Lower Bound [Mpps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,50]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-service-density:
- titlefont:
- size: 16
- xaxis:
- side: "top"
- autorange: True
- fixedrange: False
- showgrid: False
- showline: False
- showticklabels: False
- ticks: ""
- ticklen: 0
- tickwidth: 0
- zeroline: False
- yaxis:
- autorange: "reversed"
- showgrid: False
- showline: False
- showticklabels: False
- ticks: ""
- ticklen: 0
- tickwidth: 0
- zeroline: False
- showlegend: False
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- width: 700
- height: 700
- hoverlabel:
- namelength: -1
-
- plot-hoststack:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Bandwidth [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- rangemode: "tozero"
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(230, 230, 230)"
- tickformat: ".3s"
- tickfont:
- size: 14
- zeroline: False
- autosize: False
- margin:
- t: 50
- b: 20
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 800
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Mpps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,50]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Data Throughput [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-cps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Connection Rate [Mcps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-throughput-speedup-analysis:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Mpps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __ ...",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.14,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured Limit",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-throughput-speedup-analysis-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Throughput [Gbps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.13,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-throughput-speedup-analysis-cps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Number of Cores [Qty]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Connection Rate [Mcps]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- range: [0,100]
- legend:
- orientation: "h"
- font:
- size: 14
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 85
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
- annotations: [
- {
- text: "_ _ __",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.13,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- {
- text: " Perfect Measured",
- align: "left",
- showarrow: False,
- xref: "paper",
- yref: "paper",
- xanchor: "left",
- yanchor: "top",
- x: 0,
- y: -0.15,
- font: {
- family: "Consolas, Courier New",
- size: 13
- },
- },
- ]
-
- plot-latency:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Direction</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: False
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Packet Latency [uSec]</b>"
- titlefont:
- size: 14
- type: "linear"
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4s"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickformat: ".4s"
- tickfont:
- size: 14
- zeroline: True
- rangemode: "tozero"
- legend:
- orientation: "h"
- font:
- size: 14
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- autosize: False
- margin:
- 't': 50
- 'b': 150
- 'l': 80
- 'r': 10
- showlegend: True
- width: 700
- height: 700
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-hdrh-latency:
- title:
- text: ""
- xanchor: "center"
- x: 0.5
- font:
- size: 16
- width: 700
- plot_bgcolor: "white"
- annotations:
- - font:
- size: 14
- showarrow: False
- text: "<b>Packet Latency [uSec]</b>"
- x: 1
- xanchor: "right"
- xref: "paper"
- y: -0.045
- yanchor: "top"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Probability [%]</b>"
- textangle: 270
- x: -0.06
- xanchor: "center"
- xref: "paper"
- y: 0.5
- yanchor: "middle"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Direction: E-W</b>"
- x: 0.24
- xanchor: "center"
- xref: "paper"
- y: 1.05
- yanchor: "bottom"
- yref: "paper"
- - font:
- size: 14
- showarrow: False
- text: "<b>Direction: W-E</b>"
- x: 0.74
- xanchor: "center"
- xref: "paper"
- y: 1.05
- yanchor: "bottom"
- yref: "paper"
-
- plot-hdrh-latency-percentile-x-log:
- title:
- text: "<b>Latency by Percentile Distribution</b>"
- xanchor: "center"
- x: 0.5
- font:
- size: 18
- showlegend: True
- legend:
- traceorder: "normal"
- orientation: "h"
- font:
- size: 16
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- xaxis:
- type: "log"
- title: "<b>Percentile [%]</b>"
- titlefont:
- size: 14
- autorange: False
- fixedrange: True
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickvals: [1, 2, 1e1, 20, 1e2, 1e3, 1e4, 1e5, 1e6]
- ticktext: [0, 50, 90, 95, 99, 99.9, 99.99, 99.999, 99.9999]
- tickfont:
- size: 14
- yaxis:
- title: "<b>One-Way Latency per Direction [uSec]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- autosize: False
- width: 700
- height: 700
- paper_bgcolor: "white"
- plot_bgcolor: "white"
-
- plot-hdrh-latency-by-percentile:
- title:
- text: "<b>Latency by Percentile Distribution</b>"
- xanchor: "center"
- x: 0.5
- font:
- size: 18
- showlegend: True
- legend:
- traceorder: "normal"
- orientation: "h"
- font:
- size: 16
- xanchor: "left"
- yanchor: "top"
- x: 0
- y: -0.2
- bgcolor: "rgba(255, 255, 255, 0)"
- bordercolor: "rgba(255, 255, 255, 0)"
- xaxis:
- type: "linear"
- title: "<b>Percentile [%]</b>"
- titlefont:
- size: 14
- autorange: False
- fixedrange: False
- range: [0, 100]
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickvals: [0, 25, 50, 75, 100]
- ticktext: [0, 25, 50, 75, 100]
- tickfont:
- size: 14
- yaxis:
- title: "<b>One-Way Latency per Direction [uSec]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- width: 700
- height: 700
- paper_bgcolor: "white"
- plot_bgcolor: "white"
-
- plot-scatter-error-bars-gbps:
- titlefont:
- size: 16
- xaxis:
- title: "<b>Test Cases [Index]</b>"
- titlefont:
- size: 14
- autorange: True
- fixedrange: False
- gridcolor: "rgb(230, 230, 230)"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickmode: "linear"
- tickfont:
- size: 14
- zeroline: False
- yaxis:
- title: "<b>Data Throughput [Gbps]</b>"
- titlefont:
- size: 14
- gridcolor: "rgb(230, 230, 230)"
- hoverformat: ".4r"
- tickformat: ".3r"
- linecolor: "rgb(220, 220, 220)"
- linewidth: 1
- showgrid: True
- showline: True
- showticklabels: True
- tickcolor: "rgb(220, 220, 220)"
- tickfont:
- size: 14
- zeroline: False
- range: [0,10]
- autosize: False
- margin:
- t: 50
- b: 0
- l: 80
- r: 20
- showlegend: True
- legend:
- orientation: "h"
- font:
- size: 14
- width: 700
- height: 900
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
diff --git a/resources/tools/presentation/specifications/trending/data_sets.yaml b/resources/tools/presentation/specifications/trending/data_sets.yaml
deleted file mode 100644
index f40fe1fb9a..0000000000
--- a/resources/tools/presentation/specifications/trending/data_sets.yaml
+++ /dev/null
@@ -1,254 +0,0 @@
-################################################################################
-### D A T A S E T S ###
-################################################################################
-
-- type: "data-sets"
-
- # Compressed failed tests (last builds)
- table-last-failed-tests-3n-skx:
- csit-vpp-perf-mrr-daily-master-3n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-skx:
- csit-vpp-perf-mrr-daily-master-2n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-clx:
- csit-vpp-perf-mrr-daily-master-2n-clx:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-zn2:
- csit-vpp-perf-mrr-daily-master-2n-zn2:
- - "lastCompletedBuild"
- table-last-failed-tests-3n-tsh:
- csit-vpp-perf-mrr-daily-master-3n-tsh:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-tx2:
- csit-vpp-perf-mrr-daily-master-2n-tx2:
- - "lastCompletedBuild"
- table-last-failed-tests-3n-dnv:
- csit-vpp-perf-mrr-daily-master-3n-dnv:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-dnv:
- csit-vpp-perf-mrr-daily-master-2n-dnv:
- - "lastCompletedBuild"
- table-last-failed-tests-3n-aws:
- csit-vpp-perf-mrr-weekly-master-3n-aws:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-aws:
- csit-vpp-perf-mrr-weekly-master-2n-aws:
- - "lastCompletedBuild"
- table-last-failed-tests-3n-skx-ndrpdr:
- csit-vpp-perf-ndrpdr-weekly-master-3n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-skx-ndrpdr:
- csit-vpp-perf-ndrpdr-weekly-master-2n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-2n-clx-ndrpdr:
- csit-vpp-perf-ndrpdr-weekly-master-2n-clx:
- - "lastCompletedBuild"
- table-last-failed-tests-dpdk-3n-skx:
- csit-dpdk-perf-mrr-weekly-master-3n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-dpdk-2n-skx:
- csit-dpdk-perf-mrr-weekly-master-2n-skx:
- - "lastCompletedBuild"
- table-last-failed-tests-dpdk-2n-clx:
- csit-dpdk-perf-mrr-weekly-master-2n-clx:
- - "lastCompletedBuild"
- table-last-failed-tests-dpdk-3n-tsh:
- csit-dpdk-perf-mrr-weekly-master-3n-tsh:
- - "lastCompletedBuild"
- table-last-failed-tests-dpdk-2n-tx2:
- csit-dpdk-perf-mrr-weekly-master-2n-tx2:
- - "lastCompletedBuild"
- table-last-failed-tests-trex-2n-skx-ndrpdr:
- csit-trex-perf-ndrpdr-weekly-master-2n-skx:
- - "lastCompletedBuild"
-
- # 3n-skx
- plot-performance-trending-all-3n-skx:
- csit-vpp-perf-mrr-daily-master-3n-skx:
- start: 834
- end: "lastCompletedBuild"
- max-builds: 180
- csit-dpdk-perf-mrr-weekly-master-3n-skx:
- start: 72
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-performance-trending-vpp-3n-skx:
- csit-vpp-perf-mrr-daily-master-3n-skx:
- start: 834
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-dpdk-3n-skx:
- csit-dpdk-perf-mrr-weekly-master-3n-skx:
- start: 72
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 2n-skx
- plot-performance-trending-all-2n-skx:
- csit-vpp-perf-mrr-daily-master-2n-skx:
- start: 858
- end: "lastCompletedBuild"
- max-builds: 180
- csit-dpdk-perf-mrr-weekly-master-2n-skx:
- start: 78
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-performance-trending-vpp-2n-skx:
- csit-vpp-perf-mrr-daily-master-2n-skx:
- start: 858
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-dpdk-2n-skx:
- csit-dpdk-perf-mrr-weekly-master-2n-skx:
- start: 78
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-performance-trending-vpp-nfv-2n-skx:
- csit-vpp-perf-mrr-weekly-master-2n-skx:
- start: 66
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-ndrpdr-trending-trex-2n-skx:
- csit-trex-perf-ndrpdr-weekly-master-2n-skx:
- start: 3
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 2n-clx
- plot-performance-trending-vpp-2n-clx:
- csit-vpp-perf-mrr-daily-master-2n-clx:
- start: 236
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-vpp-nfv-2n-clx:
- csit-vpp-perf-mrr-weekly-master-2n-clx:
- start: 37
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-performance-trending-dpdk-2n-clx:
- csit-dpdk-perf-mrr-weekly-master-2n-clx:
- start: 23
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 2n-zn2
- plot-performance-trending-vpp-2n-zn2:
- csit-vpp-perf-mrr-daily-master-2n-zn2:
- start: 1
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-dpdk-2n-zn2:
- csit-dpdk-perf-mrr-weekly-master-2n-zn2:
- start: 1
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 3n-tsh
- plot-performance-trending-all-3n-tsh:
- csit-vpp-perf-mrr-daily-master-3n-tsh:
- start: 144
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-vpp-3n-tsh:
- csit-vpp-perf-mrr-daily-master-3n-tsh:
- start: 144
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-dpdk-3n-tsh:
- csit-dpdk-perf-mrr-weekly-master-3n-tsh:
- start: 4
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 2n-tx2
- plot-performance-trending-vpp-2n-tx2:
- csit-vpp-perf-mrr-daily-master-2n-tx2:
- start: 1
- end: "lastCompletedBuild"
- max-builds: 180
-
- plot-performance-trending-dpdk-2n-tx2:
- csit-dpdk-perf-mrr-weekly-master-2n-tx2:
- start: 1
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 3n-dnv
- plot-performance-trending-vpp-3n-dnv:
- csit-vpp-perf-mrr-daily-master-3n-dnv:
- start: 329
- end: "lastCompletedBuild"
- max-builds: 180
-
- # 2n-dnv
- plot-performance-trending-vpp-2n-dnv:
- csit-vpp-perf-mrr-daily-master-2n-dnv:
- start: 335
- end: "lastCompletedBuild"
- max-builds: 180
-
- # 3n-aws
- plot-performance-trending-vpp-3n-aws:
- csit-vpp-perf-mrr-weekly-master-3n-aws:
- start: 5
- end: "lastCompletedBuild"
- max-builds: 26
-
- # 2n-aws
- plot-performance-trending-vpp-2n-aws:
- csit-vpp-perf-mrr-weekly-master-2n-aws:
- start: 4
- end: "lastCompletedBuild"
- max-builds: 26
-
- # NDRPDR
- plot-ndrpdr-comparison-2n-skx:
- csit-vpp-perf-ndrpdr-weekly-master-2n-skx:
- start: 76
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-ndrpdr-comparison-3n-skx:
- csit-vpp-perf-ndrpdr-weekly-master-3n-skx:
- start: 76
- end: "lastCompletedBuild"
- max-builds: 26
-
- plot-ndrpdr-comparison-2n-clx:
- csit-vpp-perf-ndrpdr-weekly-master-2n-clx:
- start: 21
- end: "lastCompletedBuild"
- max-builds: 26
-
- table-ndrpdr-comparison-2n-skx:
- csit-vpp-perf-ndrpdr-weekly-master-2n-skx:
- start: 76
- end: "lastCompletedBuild"
- max-builds: 26
- reverse: True # Must be reversed
-
- table-ndrpdr-comparison-3n-skx:
- csit-vpp-perf-ndrpdr-weekly-master-3n-skx:
- start: 76
- end: "lastCompletedBuild"
- max-builds: 26
- reverse: True # Must be reversed
-
- table-ndrpdr-comparison-2n-clx:
- csit-vpp-perf-ndrpdr-weekly-master-2n-clx:
- start: 21
- end: "lastCompletedBuild"
- max-builds: 26
- reverse: True # Must be reversed
diff --git a/resources/tools/presentation/specifications/trending/elements.yaml b/resources/tools/presentation/specifications/trending/elements.yaml
deleted file mode 100644
index 9afd0e00ec..0000000000
--- a/resources/tools/presentation/specifications/trending/elements.yaml
+++ /dev/null
@@ -1,5314 +0,0 @@
-################################################################################
-### P L O T S ###
-################################################################################
-
-- type: "plot"
- title: "Statistics: 3n-skx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-3n-skx-mrr"
- data: "plot-performance-trending-vpp-3n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 3n-skx ndrpdr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-3n-skx-ndrpdr"
- data: "plot-ndrpdr-comparison-3n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 3n-skx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-3n-skx-mrr"
- data: "plot-performance-trending-dpdk-3n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-skx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-skx-mrr"
- data: "plot-performance-trending-vpp-2n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-skx ndrpdr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-skx-ndrpdr"
- data: "plot-ndrpdr-comparison-2n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 2n-skx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-2n-skx-mrr"
- data: "plot-performance-trending-dpdk-2n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: TRex 2n-skx ndrpdr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-trex-2n-skx-ndrpdr"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-clx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-clx-mrr"
- data: "plot-performance-trending-vpp-2n-clx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-clx ndrpdr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-clx-ndrpdr"
- data: "plot-ndrpdr-comparison-2n-clx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 2n-clx mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-2n-clx-mrr"
- data: "plot-performance-trending-dpdk-2n-clx"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-zn2 mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-zn2-mrr"
- data: "plot-performance-trending-vpp-2n-zn2"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 2n-zn2 mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-2n-zn2-mrr"
- data: "plot-performance-trending-dpdk-2n-zn2"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 3n-tsh mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-3n-tsh-mrr"
- data: "plot-performance-trending-vpp-3n-tsh"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 3n-tsh mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-3n-tsh-mrr"
- data: "plot-performance-trending-dpdk-3n-tsh"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-tx2 mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-tx2-mrr"
- data: "plot-performance-trending-vpp-2n-tx2"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: DPDK 2n-tx2 mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-dpdk-2n-tx2-mrr"
- data: "plot-performance-trending-dpdk-2n-tx2"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 3n-dnv mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-3n-dnv-mrr"
- data: "plot-performance-trending-vpp-3n-dnv"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-dnv mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-dnv-mrr"
- data: "plot-performance-trending-vpp-2n-dnv"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 3n-aws mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-3n-aws-mrr"
- data: "plot-performance-trending-vpp-3n-aws"
- layout:
- layout: "plot-statistics"
-
-- type: "plot"
- title: "Statistics: 2n-aws mrr"
- algorithm: "plot_statistics"
- output-file: "{DIR[STATIC,VPP]}/stats-2n-aws-mrr"
- data: "plot-performance-trending-vpp-2n-aws"
- layout:
- layout: "plot-statistics"
-
-################################################################################
-### T A B L E S ###
-################################################################################
-
-# VPP NDRPDR weekly comparison 2n-skx-xxv710 2t1c ndr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 2n-skx-xxv710 2t1c ndr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-2n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-2n-skx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-# VPP NDRPDR weekly comparison 2n-skx-xxv710 2t1c pdr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 2n-skx-xxv710 2t1c pdr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-2n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-2n-skx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-# VPP NDRPDR weekly comparison 3n-skx-xxv710 2t1c ndr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 3n-skx-xxv710 2t1c ndr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-3n-skx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-3n-skx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-# VPP NDRPDR weekly comparison 3n-skx-xxv710 2t1c pdr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 3n-skx-xxv710 2t1c pdr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-3n-skx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-3n-skx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-# VPP NDRPDR weekly comparison 2n-clx-xxv710 2t1c ndr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 2n-clx-xxv710 2t1c ndr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-2n-clx-2t1c-ndr"
- include-tests: "NDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-2n-clx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-# VPP NDRPDR weekly comparison 2n-clx-xxv710 2t1c pdr
-- type: "table"
- title: "VPP NDRPDR weekly comparison 2n-clx-xxv710 2t1c pdr"
- algorithm: "table_weekly_comparison"
- output-file: "{DIR[STATIC,VPP]}/ndrpdr-weekly-comp-2n-clx-2t1c-pdr"
- include-tests: "PDR" # "PDR" | "NDR" | "MRR"
- data: "table-ndrpdr-comparison-2n-clx"
- filter: "'2T1C' and 'NDRPDR' and 'NIC_Intel-XXV710' and not 'NF_DENSITY'"
- nr-of-data-columns: 3
- comparisons:
- - reference: -3
- compare: -1
- - reference: -2
- compare: -1
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 3n-skx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-3n-skx-mrr"
- data: "table-last-failed-tests-3n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-skx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-skx-mrr"
- data: "table-last-failed-tests-2n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-clx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-clx-mrr"
- data: "table-last-failed-tests-2n-clx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-zn2"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-zn2-mrr"
- data: "table-last-failed-tests-2n-zn2"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 3n-tsh"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-3n-tsh-mrr"
- data: "table-last-failed-tests-3n-tsh"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-tx2"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-tx2-mrr"
- data: "table-last-failed-tests-2n-tx2"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 3n-dnv"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-3n-dnv-mrr"
- data: "table-last-failed-tests-3n-dnv"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-dnv"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-dnv-mrr"
- data: "table-last-failed-tests-2n-dnv"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 3n-aws"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-3n-aws-mrr"
- data: "table-last-failed-tests-3n-aws"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-aws"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-aws-mrr"
- data: "table-last-failed-tests-2n-aws"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 3n-skx-ndrpdr"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-3n-skx-ndrpdr"
- data: "table-last-failed-tests-3n-skx-ndrpdr"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-skx-ndrpdr"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-skx-ndrpdr"
- data: "table-last-failed-tests-2n-skx-ndrpdr"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) VPP 2n-clx-ndrpdr"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-vpp-2n-clx-ndrpdr"
- data: "table-last-failed-tests-2n-clx-ndrpdr"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) DPDK 3n-tsh"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-dpdk-3n-tsh-mrr"
- data: "table-last-failed-tests-dpdk-3n-tsh"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) DPDK 2n-tx2"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-dpdk-2n-tx2-mrr"
- data: "table-last-failed-tests-dpdk-2n-tx2"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) DPDK 3n-skx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-dpdk-3n-skx-mrr"
- data: "table-last-failed-tests-dpdk-3n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) DPDK 2n-skx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-dpdk-2n-skx-mrr"
- data: "table-last-failed-tests-dpdk-2n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-- type: "table"
- title: "Last failed tests (last builds) DPDK 2n-clx"
- algorithm: "table_last_failed_tests"
- output-file-ext: ".txt"
- output-file: "{DIR[STATIC,VPP]}/last-failed-tests-dpdk-2n-clx-mrr"
- data: "table-last-failed-tests-dpdk-2n-clx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
-
-# 3n-skx
-- type: "table"
- title: "Performance trending dashboard 2t1c-3n-skx ndr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-ndr"
- data: "plot-ndrpdr-comparison-3n-skx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "NDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 4
- long-trend-window: 12
-
-- type: "table"
- title: "Performance trending dashboard 2t1c-3n-skx pdr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-pdr"
- data: "plot-ndrpdr-comparison-3n-skx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "PDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 4
- long-trend-window: 12
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-3n-skx ndr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-ndr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-ndr.rst"
- testbed: "3n-skx"
- test-type: "NDR"
- add-links: True
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-3n-skx pdr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-pdr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx-pdr.rst"
- testbed: "3n-skx"
- test-type: "PDR"
- add-links: True
-
-# 2n-skx
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-skx ndr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-ndr"
- data: "plot-ndrpdr-comparison-2n-skx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "NDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 4
- long-trend-window: 12
-
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-skx pdr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-pdr"
- data: "plot-ndrpdr-comparison-2n-skx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "PDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 4
- long-trend-window: 12
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-skx ndr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-ndr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-ndr.rst"
- testbed: "2n-skx"
- test-type: "NDR"
- add-links: True
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-skx pdr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-pdr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx-pdr.rst"
- testbed: "2n-skx"
- test-type: "PDR"
- add-links: True
-
-# 2n-clx
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-clx ndr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-ndr"
- data: "plot-ndrpdr-comparison-2n-clx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "NDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-clx pdr"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-pdr"
- data: "plot-ndrpdr-comparison-2n-clx"
- filter: "'NDRPDR' and '2T1C'"
- include-tests: "PDR"
- parameters:
- - "name"
- - "parent"
- - "throughput"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-clx ndr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-ndr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-ndr.rst"
- testbed: "2n-clx"
- test-type: "NDR"
- add-links: True
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-clx pdr"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-pdr.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx-pdr.rst"
- testbed: "2n-clx"
- test-type: "PDR"
- add-links: True
-
-###############################################################################
-# 3n-skx
-- type: "table"
- title: "Performance trending dashboard 2t1c-3n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx"
- data: "plot-performance-trending-all-3n-skx"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-3n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-skx"
- data: "plot-performance-trending-all-3n-skx"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 8t4c-3n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-3n-skx"
- data: "plot-performance-trending-all-3n-skx"
- filter: "'MRR' and '8T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-3n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-skx.rst"
- testbed: "3n-skx"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-3n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-skx.rst"
- testbed: "3n-skx"
-
-- type: "table"
- title: "HTML performance trending dashboard 8t4c-3n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-3n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-3n-skx.rst"
- testbed: "3n-skx"
-
-- type: "table"
- title: "Failed MRR tests 3n-skx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx"
- data: "plot-performance-trending-all-3n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 3n-skx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx.rst"
- testbed: "3n-skx"
-
-- type: "table"
- title: "Failed NDRPDR tests 3n-skx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx-ndrpdr"
- data: "plot-ndrpdr-comparison-3n-skx"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 30 # days
-
-- type: "table"
- title: "HTML Failed NDRPDR tests 3n-skx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx-ndrpdr.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-skx-ndrpdr.rst"
- testbed: "3n-skx"
- test-type: "NDRPDR"
-
-################################################################################
-# 2n-skx
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx"
- data: "plot-performance-trending-all-2n-skx"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-2n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-skx"
- data: "plot-performance-trending-all-2n-skx"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 8t4c-2n-skx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-skx"
- data: "plot-performance-trending-all-2n-skx"
- filter: "'MRR' and '8T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-skx.rst"
- testbed: "2n-skx"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-2n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-skx.rst"
- testbed: "2n-skx"
-
-- type: "table"
- title: "HTML performance trending dashboard 8t4c-2n-skx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-skx.rst"
- testbed: "2n-skx"
-
-- type: "table"
- title: "Failed MRR tests 2n-skx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx"
- data: "plot-performance-trending-all-2n-skx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-skx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx.rst"
- testbed: "2n-skx"
-
-- type: "table"
- title: "Failed NDRPDR tests 2n-skx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx-ndrpdr"
- data: "plot-ndrpdr-comparison-2n-skx"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 30 # days
-
-- type: "table"
- title: "HTML Failed NDRPDR tests 2n-skx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx-ndrpdr.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-skx-ndrpdr.rst"
- testbed: "2n-skx"
- test-type: "NDRPDR"
-
-################################################################################
-# 2n-clx
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-clx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx"
- data: "plot-performance-trending-vpp-2n-clx"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-2n-clx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-clx"
- data: "plot-performance-trending-vpp-2n-clx"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 8t4c-2n-clx"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-clx"
- data: "plot-performance-trending-vpp-2n-clx"
- filter: "'MRR' and '8T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-clx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-clx.rst"
- testbed: "2n-clx"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-2n-clx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-clx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-clx.rst"
- testbed: "2n-clx"
-
-- type: "table"
- title: "HTML performance trending dashboard 8t4c-2n-clx"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-clx.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-clx.rst"
- testbed: "2n-clx"
-
-- type: "table"
- title: "Failed MRR tests 2n-clx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx"
- data: "plot-performance-trending-vpp-2n-clx"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-clx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx.rst"
- testbed: "2n-clx"
-
-- type: "table"
- title: "Failed NDRPDR tests 2n-clx"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx-ndrpdr"
- data: "plot-ndrpdr-comparison-2n-clx"
- filter: "'NDRPDR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 30 # days
-
-- type: "table"
- title: "HTML Failed NDRPDR tests 2n-clx"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx-ndrpdr.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-clx-ndrpdr.rst"
- testbed: "2n-clx"
- test-type: "NDRPDR"
-
-################################################################################
-# 2n-zn2
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-zn2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-zn2"
- data: "plot-performance-trending-vpp-2n-zn2"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-2n-zn2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-zn2"
- data: "plot-performance-trending-vpp-2n-zn2"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 8t4c-2n-zn2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-zn2"
- data: "plot-performance-trending-vpp-2n-zn2"
- filter: "'MRR' and '8T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-zn2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-zn2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-zn2.rst"
- testbed: "2n-zn2"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-2n-zn2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-zn2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-zn2.rst"
- testbed: "2n-zn2"
-
-- type: "table"
- title: "HTML performance trending dashboard 8t4c-2n-zn2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-zn2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-8t4c-2n-zn2.rst"
- testbed: "2n-zn2"
-
-- type: "table"
- title: "Failed MRR tests 2n-zn2"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-zn2"
- data: "plot-performance-trending-vpp-2n-zn2"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-zn2"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-zn2.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-zn2.rst"
- testbed: "2n-zn2"
-
-################################################################################
-# 3n-tsh
-- type: "table"
- title: "Performance trending dashboard 1t1c-3n-tsh"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-tsh"
- data: "plot-performance-trending-all-3n-tsh"
- filter: "'MRR' and '1T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 2t2c-3n-tsh"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-tsh"
- data: "plot-performance-trending-all-3n-tsh"
- filter: "'MRR' and '2T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t4c-3n-tsh"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-tsh"
- data: "plot-performance-trending-all-3n-tsh"
- filter: "'MRR' and '4T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 1t1c-3n-tsh"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-tsh.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-tsh.rst"
- testbed: "3n-tsh"
-
-- type: "table"
- title: "HTML performance trending dashboard 2t2c-3n-tsh"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-tsh.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-tsh.rst"
- testbed: "3n-tsh"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t4c-3n-tsh"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-tsh.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-tsh.rst"
- testbed: "3n-tsh"
-
-- type: "table"
- title: "Failed MRR tests 3n-tsh"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-tsh"
- data: "plot-performance-trending-all-3n-tsh"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 3n-tsh"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-3n-tsh.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-tsh.rst"
- testbed: "3n-tsh"
-
-################################################################################
-# 2n-tx2
-- type: "table"
- title: "Performance trending dashboard 1t1c-2n-tx2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-tx2"
- data: "plot-performance-trending-vpp-2n-tx2"
- filter: "'MRR' and '1T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 2t2c-2n-tx2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-tx2"
- data: "plot-performance-trending-vpp-2n-tx2"
- filter: "'MRR' and '2T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t4c-2n-tx2"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-tx2"
- data: "plot-performance-trending-vpp-2n-tx2"
- filter: "'MRR' and '4T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 1t1c-2n-tx2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-tx2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-tx2.rst"
- testbed: "2n-tx2"
-
-- type: "table"
- title: "HTML performance trending dashboard 2t2c-2n-tx2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-tx2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-tx2.rst"
- testbed: "2n-tx2"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t4c-2n-tx2"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-tx2.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-tx2.rst"
- testbed: "2n-tx2"
-
-- type: "table"
- title: "Failed MRR tests 2n-tx2"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-tx2"
- data: "plot-performance-trending-vpp-2n-tx2"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-tx2"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-tx2.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-tx2.rst"
- testbed: "2n-tx2"
-
-################################################################################
-# 3n-dnv
-- type: "table"
- title: "Performance trending dashboard 1t1c-3n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-dnv"
- data: "plot-performance-trending-vpp-3n-dnv"
- filter: "'MRR' and '1T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 2t2c-3n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-dnv"
- data: "plot-performance-trending-vpp-3n-dnv"
- filter: "'MRR' and '2T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t4c-3n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-dnv"
- data: "plot-performance-trending-vpp-3n-dnv"
- filter: "'MRR' and '4T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 1t1c-3n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-3n-dnv.rst"
- testbed: "3n-dnv"
-
-- type: "table"
- title: "HTML performance trending dashboard 2t2c-3n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-3n-dnv.rst"
- testbed: "3n-dnv"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t4c-3n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-3n-dnv.rst"
- testbed: "3n-dnv"
-
-- type: "table"
- title: "Failed MRR tests 3n-dnv"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-dnv"
- data: "plot-performance-trending-vpp-3n-dnv"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 3n-dnv"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-3n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-dnv.rst"
- testbed: "3n-dnv"
-
-################################################################################
-# 2n-dnv
-- type: "table"
- title: "Performance trending dashboard 1t1c-2n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-dnv"
- data: "plot-performance-trending-vpp-2n-dnv"
- filter: "'MRR' and '1T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 2t2c-2n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-dnv"
- data: "plot-performance-trending-vpp-2n-dnv"
- filter: "'MRR' and '2T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "Performance trending dashboard 4t4c-2n-dnv"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-dnv"
- data: "plot-performance-trending-vpp-2n-dnv"
- filter: "'MRR' and '4T4C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 14
- long-trend-window: 180
-
-- type: "table"
- title: "HTML performance trending dashboard 1t1c-2n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-1t1c-2n-dnv.rst"
- testbed: "2n-dnv"
-
-- type: "table"
- title: "HTML performance trending dashboard 2t2c-2n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t2c-2n-dnv.rst"
- testbed: "2n-dnv"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t4c-2n-dnv"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t4c-2n-dnv.rst"
- testbed: "2n-dnv"
-
-- type: "table"
- title: "Failed MRR tests 2n-dnv"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-dnv"
- data: "plot-performance-trending-vpp-2n-dnv"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-dnv"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-dnv.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-dnv.rst"
- testbed: "2n-dnv"
-
-
-################################################################################
-# 3n-aws
-- type: "table"
- title: "Performance trending dashboard 2t1c-3n-aws"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-aws"
- data: "plot-performance-trending-vpp-3n-aws"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 5
- long-trend-window: 26
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-3n-aws"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-aws"
- data: "plot-performance-trending-vpp-3n-aws"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 5
- long-trend-window: 26
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-3n-aws"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-3n-aws.rst"
- testbed: "3n-aws"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-3n-aws"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-3n-aws.rst"
- testbed: "3n-aws"
-
-- type: "table"
- title: "Failed MRR tests 3n-aws"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-aws"
- data: "plot-performance-trending-vpp-3n-aws"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 3n-aws"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-3n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-3n-aws.rst"
- testbed: "3n-aws"
-
-################################################################################
-# 2n-aws
-- type: "table"
- title: "Performance trending dashboard 2t1c-2n-aws"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-aws"
- data: "plot-performance-trending-vpp-2n-aws"
- filter: "'MRR' and '2T1C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 5
- long-trend-window: 26
-
-- type: "table"
- title: "Performance trending dashboard 4t2c-2n-aws"
- algorithm: "table_perf_trending_dash"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-aws"
- data: "plot-performance-trending-vpp-2n-aws"
- filter: "'MRR' and '4T2C'"
- parameters:
- - "name"
- - "parent"
- - "result"
- window: 5
- long-trend-window: 26
-
-- type: "table"
- title: "HTML performance trending dashboard 2t1c-2n-aws"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-2t1c-2n-aws.rst"
- testbed: "2n-aws"
-
-- type: "table"
- title: "HTML performance trending dashboard 4t2c-2n-aws"
- algorithm: "table_perf_trending_dash_html"
- input-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/performance-trending-dashboard-4t2c-2n-aws.rst"
- testbed: "2n-aws"
-
-- type: "table"
- title: "Failed MRR tests 2n-aws"
- algorithm: "table_failed_tests"
- output-file-ext: ".csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-aws"
- data: "plot-performance-trending-vpp-2n-aws"
- filter: "'MRR'"
- parameters:
- - "name"
- - "parent"
- - "status"
- - "msg"
- window: 7 # days
-
-- type: "table"
- title: "HTML Failed MRR tests 2n-aws"
- algorithm: "table_failed_tests_html"
- input-file: "{DIR[STATIC,VPP]}/failed-tests-2n-aws.csv"
- output-file: "{DIR[STATIC,VPP]}/failed-tests-2n-aws.rst"
- testbed: "2n-aws"
-
-################################################################################
-### C P T A ###
-################################################################################
-
-# Plots VPP Continuous Performance Trending and Analysis
-
-- type: "cpta"
- title: "Continuous Performance Trending and Analysis"
- output-file: "{DIR[STATIC,VPP]}"
-
- plots:
-
-################################################################################
-# NFV
-
-# 2n-skx
-
- - title: "VPP NF Service Density VNFc IMIX MRR Trending 2n-skx"
- output-file-name: "2n-skx-xxv710-imix-{core}-vhost-chains-avf"
- data: "plot-performance-trending-vpp-nfv-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density VNFc VXLAN IMIX MRR Trending 2n-skx"
- output-file-name: "2n-skx-xxv710-imix-{core}-vhost-chains-vxlan-avf"
- data: "plot-performance-trending-vpp-nfv-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-mrr"
- groups:
- - ["1R1C", ]
- - ["2R1C", ]
- - ["4R1C", ]
- - ["6R1C", ]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density CNFc IMIX MRR Trending 2n-skx"
- output-file-name: "2n-skx-xxv710-imix-{core}-memif-chains-avf"
- data: "plot-performance-trending-vpp-nfv-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density CNFp IMIX MRR Trending 2n-skx"
- output-file-name: "2n-skx-xxv710-imix-{core}-memif-pipelines-avf"
- data: "plot-performance-trending-vpp-nfv-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Pipe"
- - "2 Pipes"
- - "4 Pipes"
- - "6 Pipes"
- layout: "plot-cpta"
-
-# 2n-clx
-
- - title: "VPP NF Service Density VNFc IMIX MRR Trending 2n-clx"
- output-file-name: "2n-clx-xxv710-imix-{core}-vhost-chains-avf"
- data: "plot-performance-trending-vpp-nfv-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Vh-1Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2vh-1vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12vh-6vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Vh-2Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4vh-2vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Vh-4Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8vh-4vm1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Vh-6Vm1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12vh-6vm1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density VNFc VXLAN IMIX MRR Trending 2n-clx"
- output-file-name: "2n-clx-xxv710-imix-{core}-vhost-chains-vxlan-avf"
- data: "plot-performance-trending-vpp-nfv-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-1Ch-2Vh-1Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-1ch-2vh-1vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-2Ch-4Vh-2Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-2ch-4vh-2vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-4Ch-8Vh-4Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-4ch-8vh-4vm1t-testpmd-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Vm Vhost.Chain Dot1Qip4Vxlan.2N-25Ge2P1Xxv710-Avf-Dot1Qip4Vxlan-L2Bd-6Ch-12Vh-6Vm1T-Testpmd-Mrr.IMIX-{core}-avf-dot1qip4vxlan-l2bd-6ch-12vh-6vm1t-testpmd-mrr"
- groups:
- - ["1R1C", ]
- - ["2R1C", ]
- - ["4R1C", ]
- - ["6R1C", ]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density CNFc IMIX MRR Trending 2n-clx"
- output-file-name: "2n-clx-xxv710-imix-{core}-memif-chains-avf"
- data: "plot-performance-trending-vpp-nfv-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1ch-12mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-4Ch-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-4ch-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Chain.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Ch-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6ch-12mif-6dcr1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Chain"
- - "2 Chains"
- - "4 Chains"
- - "6 Chains"
- layout: "plot-cpta"
-
- - title: "VPP NF Service Density CNFp IMIX MRR Trending 2n-clx"
- output-file-name: "2n-clx-xxv710-imix-{core}-memif-pipelines-avf"
- data: "plot-performance-trending-vpp-nfv-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-1Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-1dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-1Pl-2Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-1pl-2mif-6dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-2Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-2dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-4Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-4mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-2Pl-8Mif-4Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-2pl-8mif-4dcr1t-vppip4-mrr"
- - "Tests.Vpp.Perf.Nfv Density.Dcr Memif.Pipeline.2N-25Ge2P1Xxv710-Avf-Eth-L2Bd-6Pl-12Mif-6Dcr1T-Vppip4-Mrr.IMIX-{core}-avf-eth-l2bd-6pl-12mif-6dcr1t-vppip4-mrr"
- groups:
- - ["1R1C", "1R2C", "1R4C", "1R6C", "1R8C", "1R10C"]
- - ["2R1C", "2R2C", "2R4C", "2R6C", "2R8C", "2R10C"]
- - ["4R1C", "4R2C", "4R4C", "4R6C"]
- - ["6R1C", "6R2C", "6R4C"]
- group-names:
- - "1 Pipe"
- - "2 Pipes"
- - "4 Pipes"
- - "6 Pipes"
- layout: "plot-cpta"
-
-################################################################################
-
- - title: "2n-clx-xxv710-64b-{core}-memif-base-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-memif-base-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-memif-base-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-memif-base-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-memif-base-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-memif-base-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-memif-base-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-memif-base-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-memif-base-avf"
- output-file-name: "3n-skx-xxv710-64b-{core}-memif-base-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Lxc-mrr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-memif-base-dpdk"
- output-file-name: "3n-skx-xxv710-64b-{core}-memif-base-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Lxc-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-xxv710-64b-{core}-memif-base-dpdk"
- output-file-name: "3n-tsh-xxv710-64b-{core}-memif-base-dpdk"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.10ge2p1x520-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.10ge2p1x520-Eth-L2Xcbase-Eth-2Memif-1Lxc-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.10ge2p1x520-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1lxc-mrr"
- - "Tests.Vpp.Perf.Container Memif.10ge2p1x520-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-64b-{core}-ip4routing-base-scale-avf-dpdk"
- output-file-name: "2n-clx-x710-64b-{core}-ip4-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4routing-base-avf-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4routing-scale-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-scale-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-mrr.64B-{core}-avf-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-mrr.64B-{core}-avf-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4routing-scale-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-features-ip4routing-base-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-features-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-mrr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Mrr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr"
- layout: "plot-cpta-cps"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr"
- layout: "plot-cpta-cps"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H1024-P63-S64512-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H4096-P63-S258048-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H16384-P63-S1032192-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H65536-P63-S4128768-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H262144-P63-S16515072-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-ip4base"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-ip4base"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Mrr.64B-{core}-rdma-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-ethip4-ip4scale"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-ethip4-ip4scale"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Mrr.64B-{core}-rdma-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Mrr.64B-{core}-rdma-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Mrr.64B-{core}-rdma-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-ethip4-features"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-ethip4-features"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Mrr.64B-{core}-rdma-ethip4udp-nat44det-h1-p1-s1-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Mrr.64B-{core}-rdma-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe"
- output-file-name: "2n-dnv-x553-64b-{core}-ip4-ixgbe"
- data: "plot-performance-trending-vpp-2n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-mrr.64B-{core}-ethip4-ip4scale20k-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena"
- output-file-name: "2n-aws-nitro50g-64b-{core}-ip4-ena"
- data: "plot-performance-trending-vpp-2n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena"
- output-file-name: "2n-aws-nitro50g-1518b-{core}-ip4-ena"
- data: "plot-performance-trending-vpp-2n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4base-mrr.1518B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2n1l-50ge1p1ENA-ethip4-ip4scale2m-mrr.1518B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-ip4routing-base-scale-avf-dpdk"
- output-file-name: "2n-skx-x710-64b-{core}-ip4-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-mrr.64B-{core}-avf-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-mrr.64B-{core}-avf-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf-rnd"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-scale-avf-rnd"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk-rnd"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-scale-dpdk-rnd"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-features-ip4routing-base-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-features-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-mrr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Mrr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4routing-base-scale-af_xdp"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr"
- layout: "plot-cpta-cps"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr"
- layout: "plot-cpta-cps"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H1024-P63-S64512-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H4096-P63-S258048-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H16384-P63-S1032192-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H65536-P63-S4128768-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Tcp-Nat44Ed-H262144-P63-S16515072-Tput-mrr.64B-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-tput-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H1024-P63-S64512-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H4096-P63-S258048-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H16384-P63-S1032192-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H65536-P63-S4128768-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-tput-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4udp-Nat44Ed-H262144-P63-S16515072-Tput-mrr.64B-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-tput-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-features-ip4routing-base-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-features-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-ethip4udp-nat44det-h1-p1-s1-mrr.64B-{core}-ethip4udp-nat44det-h1-p1-s1-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-64b-{core}-ip4routing-base-scale-ixgbe"
- output-file-name: "3n-dnv-x553-64b-{core}-ip4-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X553-Ethip4-Ip4Scale20K-rnd-mrr.64B-{core}-ethip4-ip4scale20k-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "3n-aws-nitro50g-64b-{core}-ip4routing-base-scale-ena"
- output-file-name: "3n-aws-nitro50g-64b-{core}-ip4-ena"
- data: "plot-performance-trending-vpp-3n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-aws-nitro50g-1518b-{core}-ip4routing-base-scale-ena"
- output-file-name: "3n-aws-nitro50g-1518b-{core}-ip4-ena"
- data: "plot-performance-trending-vpp-3n-aws"
- core: ["2t1c", "4t2c"]
- include:
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4base-mrr.1518B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.50ge1p1ENA-ethip4-ip4scale2m-mrr.1518B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-ip4routing-base-scale-avf"
- output-file-name: "3n-skx-x710-64b-{core}-ip4-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Base-Mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4routing-base-scale-avf"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-mrr.64B-{core}-avf-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-mrr.64B-{core}-avf-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4routing-base-scale-dpdk"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-base-scale-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-ip4routing-base-scale-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-ip4-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-ip4routing-features-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-ip4-features-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X520-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-64b-{core}-ip4tunnel-base-scale-ixgbe"
- output-file-name: "3n-dnv-x553-64b-{core}-ip4-tunnels-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Xcbase-mrr.64B-{core}-ethip4vxlan-l2xcbase-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X553-Ethip4Vxlan-L2Bdbasemaclrn-mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4tunnel-base-scale-avf-dpdk"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-tunnels-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Mrr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Xcbase-Mrr.64B-{core}-avf-ethip4vxlan-l2xcbase-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Xcbase-Mrr.64B-{core}-ethip4vxlan-l2xcbase-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-ip4tunnel-base-scale-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-ip4-tunnels-base-scale-dpdk"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Xcbase-mrr.64B-{core}-ethip4vxlan-l2xcbase-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-78b-{core}-ip6routing-base-scale-avf-dpdk"
- output-file-name: "2n-clx-x710-78b-{core}-ip6-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-avf"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-mrr.78B-{core}-avf-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-mrr.78B-{core}-avf-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6routing-rnd-base-scale-avf"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-dpdk"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6routing-rnd-base-scale-dpdk"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6routing-base-scale-af_xdp"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-mrr.78B-{core}-af-xdp-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-mrr.78B-{core}-af-xdp-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-mrr.78B-{core}-af-xdp-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-78b-{core}-rdma-ip6routing-base-scale"
- output-file-name: "2n-clx-cx556a-78b-{core}-rdma-ip6routing-base-scale"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Mrr.78B-{core}-rdma-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Mrr.78B-{core}-rdma-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Mrr.78B-{core}-rdma-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Mrr.78B-{core}-rdma-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-dnv-x553-78b-{core}-ip6-base-scale-ixgbe"
- output-file-name: "2n-dnv-x553-78b-{core}-ip6-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-2n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X553-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-78b-{core}-ip6routing-base-scale-avf-dpdk"
- output-file-name: "2n-skx-x710-78b-{core}-ip6-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-mrr.78B-{core}-avf-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-mrr.78B-{core}-avf-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6routing-rnd-base-scale-avf"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6routing-rnd-base-scale-dpdk"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-78b-{core}-ip6routing-base-scale-ixgbe"
- output-file-name: "3n-dnv-x553-78b-{core}-ip6-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X553-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-78b-{core}-ip6routing-base-scale-avf"
- output-file-name: "3n-skx-x710-78b-{core}-ip6-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-78b-{core}-ip6routing-base-scale-avf"
- output-file-name: "3n-skx-xxv710-78b-{core}-ip6-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-mrr.78B-{core}-avf-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-mrr.78B-{core}-avf-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-78b-{core}-ip6routing-base-scale-dpdk"
- output-file-name: "3n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-78b-{core}-ip6routing-base-scale-ixgbe"
- output-file-name: "3n-tsh-x520-78b-{core}-ip6-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X520-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-imix-{core}-ipsec-base-scale-sw-ixgbe"
- output-file-name: "3n-dnv-x553-imix-{core}-ipsec-base-scale-sw-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-1518b-{core}-ipsec-base-scale-sw-ixgbe"
- output-file-name: "3n-dnv-x553-1518b-{core}-ipsec-base-scale-sw-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X553-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-avf"
- output-file-name: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-imix-{core}-ipsec-ip4routing-base-scale-dpdk"
- output-file-name: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-1518b-{core}-ipsec-ip4routing-base-scale-avf"
- output-file-name: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-1518b-{core}-ipsec-ip4routing-base-scale-dpdk"
- output-file-name: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-imix-{core}-ipsec-ip4routing-base-scale-sw-ixgbe"
- output-file-name: "3n-tsh-x520-imix-{core}-ipsec-base-scale-sw-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-1518b-{core}-ipsec-ip4routing-base-scale-sw-ixgbe"
- output-file-name: "3n-tsh-x520-1518b-{core}-ipsec-base-scale-sw-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-mrr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-mrr"
- - "Tests.Vpp.Perf.Crypto.10Ge2P1X520-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-mrr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-64b-{core}-l2switching-base-scale-avf-dpdk"
- output-file-name: "2n-clx-x710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-avf-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2switching-base-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2switching-base-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2switching-base-scale-af_xdp"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-mrr.64B-{core}-af-xdp-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-mrr.64B-{core}-af-xdp-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2switching-base"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2switching-base"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Mrr.64B-{core}-rdma-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Mrr.64B-{core}-rdma-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2switching-scale"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2switching-scale"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe"
- output-file-name: "2n-dnv-x553-64b-{core}-l2-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-2n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X553-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Patch-Mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Xcbase-mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-l2switching-base-scale-dpdk"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Patch-Mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Xcbase-Mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-l2switching-base-scale-af_xdp"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2switching-base-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2switching-base-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2switching-base-scale-af_xdp"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-mrr.64B-{core}-af-xdp-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-mrr.64B-{core}-af-xdp-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-dnv-x553-64b-{core}-l2switching-base-scale-ixgbe"
- output-file-name: "3n-dnv-x553-64b-{core}-l2-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-dnv"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X553-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "3n-skx-x710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Patch-Mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Xcbase-Mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2switching-base-avf"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-base-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2switching-base-scale-avf-dpdk"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-base-scale-dpdk"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-l2switching-base-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-l2-base-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Dot1Q-L2Bdbasemaclrn-mrr.64B-{core}-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Patch-Mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-l2switching-base-scale-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-l2-base-scale-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-features-l2switching-base-ixgbe"
- output-file-name: "3n-tsh-x520-64b-{core}-l2-features-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-mrr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-mrr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-mrr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-mrr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X520-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-mrr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-78b-{core}-srv6-ip6routing-base-avf"
- output-file-name: "3n-skx-xxv710-78b-{core}-srv6-base-avf"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-mrr.78B-{core}-avf-ethip6ip6-ip6base-srv6enc1sid-mrr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-mrr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-mrr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-mrr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-mrr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-dyn-mrr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-mrr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-masq-mrr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-mrr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-stat-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-78b-{core}-srv6-ip6routing-base-ixgbe"
- output-file-name: "3n-tsh-x520-78b-{core}-srv6-base-ixgbe"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-mrr.78B-{core}-ethip6ip6-ip6base-srv6enc1sid-mrr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-mrr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-mrr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-mrr.78B-{core}-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-mrr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-mrr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-dyn-mrr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-mrr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-masq-mrr"
- - "Tests.Vpp.Perf.Srv6.10Ge2P1X520-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-mrr.78B-{core}-ethip6srhip6-ip6base-srv6proxy-stat-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-avf-vpp"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-avf-vpp"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2-vhost-base"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2-vhost-base"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2-vhost-vppl2xc-base"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2-vhost-vppl2xc-base"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-114b-{core}-vts-l2switching-base-avf-dpdk"
- output-file-name: "2n-clx-xxv710-114b-{core}-vts-l2switching-base-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Noacl-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermit-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermitreflect-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-avf-vpp"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-avf-vpp"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-testpmd"
- output-file-name: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-testpmd"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-vpp"
- output-file-name: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-vpp"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-avf-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-mrr.64B-{core}-avf-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp"
- data: "plot-performance-trending-vpp-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-testpmd"
- output-file-name: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-testpmd"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-mrr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-vpp"
- output-file-name: "3n-tsh-x520-64b-{core}-vhost-base-ixgbe-vpp"
- data: "plot-performance-trending-vpp-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X520-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-114b-{core}-vts-l2switching-base-avf"
- output-file-name: "2n-skx-xxv710-114b-{core}-vts-l2switching-base-avf"
- data: "plot-performance-trending-vpp-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Noacl-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermit-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermitreflect-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-dpdk"
- output-file-name: "2n-skx-x710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-dpdk"
- output-file-name: "2n-skx-xxv710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-64b-{core}-dpdk"
- output-file-name: "2n-clx-x710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-dpdk"
- output-file-name: "2n-clx-xxv710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-clx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-dpdk"
- output-file-name: "3n-skx-x710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.10ge2p1x710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.10ge2p1x710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-dpdk"
- output-file-name: "3n-skx-xxv710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-3n-skx"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.25ge2p1xxv710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "3n-tsh-x520-64b-{core}-dpdk"
- output-file-name: "3n-tsh-x520-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-3n-tsh"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Dpdk.Perf.10Ge2P1X520-Eth-L2Xcbase-Testpmd-Mrr.64B-{core}-eth-l2xcbase-testpmd-mrr"
- - "Tests.Dpdk.Perf.10Ge2P1X520-Ethip4-Ip4Base-L3Fwd-Mrr.64B-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
-# 2n-zn2
-
- - title: "2n-zn2-xxv710-64b-{core}-memif-base-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-memif-base-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-memif-base-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-memif-base-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-mrr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-eth-l2xcbase-eth-2memif-1dcr-mrr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Mrr.64B-{core}-rdma-ethip4-ip4base-eth-2memif-1dcr-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-x710-64b-{core}-ip4routing-base-scale-avf-dpdk"
- output-file-name: "2n-zn2-x710-64b-{core}-ip4-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-ip4routing-base-avf-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ip4-base-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-mrr.64B-{core}-avf-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-mrr.64B-{core}-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-ip4routing-scale-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ip4-scale-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-mrr.64B-{core}-avf-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-mrr.64B-{core}-avf-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-mrr.64B-{core}-avf-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-avf-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-ip4routing-scale-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ip4-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-ip4routing-scale-af_xdp"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ip4-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-features-ip4routing-base-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ip4-features-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-mrr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-mrr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Mrr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-mrr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-mrr"
- layout: "plot-cpta"
-
-# - title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
-# output-file-name: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf"
-# data: "plot-performance-trending-vpp-2n-zn2"
-# core: ["2t1c", "4t2c", "8t4c"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-mrr"
-# layout: "plot-cpta"
-#
-# - title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
-# output-file-name: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf"
-# data: "plot-performance-trending-vpp-2n-zn2"
-# core: ["2t1c", "4t2c", "8t4c"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-mrr"
-# layout: "plot-cpta-cps"
-#
-# - title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
-# output-file-name: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf"
-# data: "plot-performance-trending-vpp-2n-zn2"
-# core: ["2t1c", "4t2c", "8t4c"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-mrr"
-# layout: "plot-cpta"
-#
-# - title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
-# output-file-name: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf"
-# data: "plot-performance-trending-vpp-2n-zn2"
-# core: ["2t1c", "4t2c", "8t4c"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-mrr"
-# layout: "plot-cpta-cps"
-#
-# - title: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
-# output-file-name: "2n-zn2-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf"
-# data: "plot-performance-trending-vpp-2n-zn2"
-# core: ["2t1c", "4t2c", "8t4c"]
-# include:
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-mrr"
-# - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-mrr"
-# layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-ip4base"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-ip4base"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Mrr.64B-{core}-rdma-ethip4-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-ethip4-ip4scale"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-ethip4-ip4scale"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Mrr.64B-{core}-rdma-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Mrr.64B-{core}-rdma-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Mrr.64B-{core}-rdma-ethip4-ip4scale2m-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Mrr.64B-{core}-rdma-ethip4-ip4scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-ethip4-features"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-ethip4-features"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Mrr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Mrr.64B-{core}-rdma-ethip4udp-nat44det-h1-p1-s1-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Mrr.64B-{core}-rdma-ethip4udp-nat44det-h1024-p63-s64512-mrr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-ethip4--ethip4udpgeneve-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-1Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-1tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-4Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-4tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-16Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-16tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-64Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-64tun-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.2N1L-25Ge2P1Xxv710-Avf-Ethip4--Ethip4Udpgeneve-256Tun-Ip4Base-Mrr.64B-{core}-avf-ethip4--ethip4udpgeneve-256tun-ip4base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-x710-78b-{core}-ip6routing-base-scale-avf-dpdk"
- output-file-name: "2n-zn2-x710-78b-{core}-ip6-base-scale-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-avf"
- output-file-name: "2n-zn2-xxv710-78b-{core}-ip6-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-mrr.78B-{core}-avf-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-mrr.78B-{core}-avf-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-mrr.78B-{core}-avf-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-78b-{core}-ip6routing-rnd-base-scale-avf"
- output-file-name: "2n-zn2-xxv710-78b-{core}-ip6-rnd-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-mrr.78B-{core}-avf-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-avf-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-avf-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-dpdk"
- output-file-name: "2n-zn2-xxv710-78b-{core}-ip6-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-78b-{core}-ip6routing-rnd-base-scale-dpdk"
- output-file-name: "2n-zn2-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-78b-{core}-ip6routing-base-scale-af_xdp"
- output-file-name: "2n-zn2-xxv710-78b-{core}-ip6-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-mrr.78B-{core}-af-xdp-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale20k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-mrr.78B-{core}-af-xdp-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale200k-rnd-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-mrr.78B-{core}-af-xdp-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-mrr.78B-{core}-af-xdp-ethip6-ip6scale2m-rnd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-78b-{core}-rdma-ip6routing-base-scale"
- output-file-name: "2n-zn2-cx556a-78b-{core}-rdma-ip6routing-base-scale"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Mrr.78B-{core}-rdma-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Mrr.78B-{core}-rdma-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Mrr.78B-{core}-rdma-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Mrr.78B-{core}-rdma-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-x710-64b-{core}-l2switching-base-scale-avf-dpdk"
- output-file-name: "2n-zn2-x710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-avf-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-l2switching-base-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-l2-base-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-mrr.64B-{core}-avf-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-mrr.64B-{core}-avf-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-l2switching-base-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-l2-base-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-avf"
- output-file-name: "2n-zn2-xxv710-64b-{core}-l2-base-scale-avf"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-mrr.64B-{core}-avf-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-avf-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-avf-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-l2-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-l2switching-base-scale-af_xdp"
- output-file-name: "2n-zn2-xxv710-64b-{core}-l2-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-mrr.64B-{core}-af-xdp-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-mrr.64B-{core}-af-xdp-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-base"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-base"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Mrr.64B-{core}-rdma-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Mrr.64B-{core}-rdma-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-scale"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-l2switching-scale"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-rdma-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-vhost-base-avf-testpmd"
- output-file-name: "2n-zn2-xxv710-64b-{core}-vhost-base-avf-testpmd"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-vhost-base-avf-vpp"
- output-file-name: "2n-zn2-xxv710-64b-{core}-vhost-base-avf-vpp"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- output-file-name: "2n-zn2-xxv710-64b-{core}-vhost-base-dpdk-testpmd"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- output-file-name: "2n-zn2-xxv710-64b-{core}-vhost-base-dpdk-vpp"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-8t4c-rdma-l2-vhost-base"
- output-file-name: "2n-zn2-cx556a-64b-8t4c-rdma-l2-vhost-base"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-8t4c-rdma-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Mrr.64B-8t4c-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Mrr.64B-8t4c-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-cx556a-64b-{core}-rdma-l2-vhost-vppl2xc-base"
- output-file-name: "2n-zn2-cx556a-64b-{core}-rdma-l2-vhost-vppl2xc-base"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Mrr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-114b-{core}-vts-l2switching-base-avf-dpdk"
- output-file-name: "2n-zn2-xxv710-114b-{core}-vts-l2switching-base-avf-dpdk"
- data: "plot-performance-trending-vpp-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Noacl-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermit-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-mrr"
- - "Tests.Vpp.Perf.Vts.2n1l-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermitreflect-2Vhostvr1024-1Vm-mrr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-mrr"
- layout: "plot-cpta"
-
-# 2n-zn2 DPDK
-
- - title: "2n-zn2-x710-64b-{core}-dpdk"
- output-file-name: "2n-zn2-x710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-10ge2p1x710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-10ge2p1x710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
- - title: "2n-zn2-xxv710-64b-{core}-dpdk"
- output-file-name: "2n-zn2-xxv710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-zn2"
- core: ["2t1c", "4t2c", "8t4c"]
- include:
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2n1l-25ge2p1xxv710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
-# 2n-tx2
-
- - title: "2n-tx2-xl710-64b-{core}-ipsec-base-scale-sw-policy-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-ipsec-base-scale-sw-policy-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1Tnlsw-Ip4Base-Policy-Aes256Gcm-Udir-Mrr.64B-{core}-ethip4ipsec1tnlsw-ip4base-policy-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1Tnlsw-Ip4Base-Policy-Aes128Cbc-Hmac512Sha-Udir-Mrr.64B-{core}-ethip4ipsec1tnlsw-ip4base-policy-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec40Tnlsw-Ip4Base-Policy-Aes256Gcm-Udir-Mrr.64B-{core}-ethip4ipsec40tnlsw-ip4base-policy-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec40Tnlsw-Ip4Base-Policy-Aes128Cbc-Hmac512Sha-Udir-Mrr.64B-{core}-ethip4ipsec40tnlsw-ip4base-policy-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Policy-Aes256Gcm-Udir-Mrr.64B-{core}-ethip4ipsec1000tnlsw-ip4base-policy-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Policy-Aes128Cbc-Hmac512Sha-Udir-Mrr.64B-{core}-ethip4ipsec1000tnlsw-ip4base-policy-aes128cbc-hmac512sha-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-1518b-{core}-ipsec-base-scale-sw-cbc-dpdk"
- output-file-name: "2n-tx2-xl710-1518b-{core}-ipsec-base-scale-sw-cbc-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.1518B-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.1518B-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.1518B-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-imix-{core}-ipsec-base-scale-sw-cbc-dpdk"
- output-file-name: "2n-tx2-xl710-imix-{core}-ipsec-base-scale-sw-cbc-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.imix-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.imix-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Udir-Mrr.imix-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-1518b-{core}-ipsec-base-scale-sw-gcm-dpdk"
- output-file-name: "2n-tx2-xl710-1518b-{core}-ipsec-base-scale-sw-gcm-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.1518B-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-imix-{core}-ipsec-base-scale-sw-gcm-dpdk"
- output-file-name: "2n-tx2-xl710-imix-{core}-ipsec-base-scale-sw-gcm-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.imix-{core}-ethip4ipsec4tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.imix-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.imix-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.imix-{core}-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Gcm-Udir-Mrr.imix-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes128gcm-udir-mrr"
- - "Tests.Vpp.Perf.Crypto.2N1L-40Ge2P1Xl710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Udir-Mrr.imix-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-udir-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Mrr.64B-{core}-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale20K-Mrr.64B-{core}-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale200K-Mrr.64B-{core}-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Scale2M-Mrr.64B-{core}-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-af_xdp"
- output-file-name: "2n-tx2-xl710-64b-{core}-ip4routing-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Base-mrr.64B-{core}-af-xdp-ethip4-ip4base-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale20K-mrr.64B-{core}-af-xdp-ethip4-ip4scale20k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale200K-mrr.64B-{core}-af-xdp-ethip4-ip4scale200k-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-af-xdp-Ethip4-Ip4Scale2M-mrr.64B-{core}-af-xdp-ethip4-ip4scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-features-ip4routing-base-scale-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-features-ip4routing-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4-Ip4Base-Iacldstbase-Mrr.64B-{core}-ethip4-ip4base-iacldstbase-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.Ip4.2N1L-40Ge2P1Xl710-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Mrr.64B-{core}-ethip4udp-ip4base-oacl50sl-10kflows-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-dpdk"
- output-file-name: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Mrr.78B-{core}-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale20K-Mrr.78B-{core}-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale200K-Mrr.78B-{core}-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Scale2M-Mrr.78B-{core}-ethip6-ip6scale2m-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-Ethip6-Ip6Base-Iacldstbase-Mrr.78B-{core}-ethip6-ip6base-iacldstbase-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-af_xdp"
- output-file-name: "2n-tx2-xl710-78b-{core}-ip6routing-base-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Base-mrr.78B-{core}-af-xdp-ethip6-ip6base-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale20K-mrr.78B-{core}-af-xdp-ethip6-ip6scale20k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale200K-mrr.78B-{core}-af-xdp-ethip6-ip6scale200k-mrr"
- - "Tests.Vpp.Perf.Ip6.2N1L-40Ge2P1Xl710-af-xdp-Ethip6-Ip6Scale2M-mrr.78B-{core}-af-xdp-ethip6-ip6scale2m-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-l2switching-base-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-l2switching-base-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Dot1Q-L2Bdbasemaclrn-Mrr.64B-{core}-dot1q-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Patch-Mrr.64B-{core}-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Xcbase-Mrr.64B-{core}-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-l2switching-scale-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-l2switching-scale-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Mrr.64B-{core}-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale10Kmaclrn-Mrr.64B-{core}-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale100Kmaclrn-Mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdscale1Mmaclrn-Mrr.64B-{core}-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-l2switching-scale-af_xdp"
- output-file-name: "2n-tx2-xl710-64b-{core}-l2switching-scale-af_xdp"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Patch-mrr.64B-{core}-af-xdp-eth-l2patch-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Xcbase-mrr.64B-{core}-af-xdp-eth-l2xcbase-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdbasemaclrn-mrr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale10Kmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale100Kmaclrn-mrr.64B-{core}-eth-l2bdscale100kmaclrn-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-af-xdp-Eth-L2Bdscale1Mmaclrn-mrr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-features-l2switching-base-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-features-l2switching-base-dpdk"
- data: "plot-performance-trending-vpp-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sf-10Kflows-Mrr.64B-{core}-eth-l2bdbasemaclrn-iacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Iacl50Sl-10Kflows-Mrr.64B-{core}-eth-l2bdbasemaclrn-iacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sf-10Kflows-Mrr.64B-{core}-eth-l2bdbasemaclrn-oacl50sf-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Oacl50Sl-10Kflows-Mrr.64B-{core}-eth-l2bdbasemaclrn-oacl50sl-10kflows-mrr"
- - "Tests.Vpp.Perf.L2.2N1L-40Ge2P1Xl710-Eth-L2Bdbasemaclrn-Macip-Iacl50Sl-10Kflows-Mrr.64B-{core}-eth-l2bdbasemaclrn-macip-iacl50sl-10kflows-mrr"
- layout: "plot-cpta"
-
- - title: "2n-tx2-xl710-64b-{core}-dpdk"
- output-file-name: "2n-tx2-xl710-64b-{core}-dpdk"
- data: "plot-performance-trending-dpdk-2n-tx2"
- core: ["1t1c", "2t2c", "4t4c"]
- include:
- - "tests.dpdk.perf.2N1L-40ge2p1xl710-eth-l2xcbase-testpmd-mrr.64b-{core}-eth-l2xcbase-testpmd-mrr"
- - "tests.dpdk.perf.2N1L-40ge2p1xl710-ethip4-ip4base-l3fwd-mrr.64b-{core}-ethip4-ip4base-l3fwd-mrr"
- layout: "plot-cpta"
-
-################################################################################
-
-# NDRPDR Trending
-
-# 2n-clx memif
-
- - title: "2n-clx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-rdma-l2-eth-2memif-1dcr-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-clx ip4
-
- - title: "2n-clx-x710-64b-{core}-ip4-base-avf-dpdk-{test_type}"
- output-file-name: "2n-clx-x710-64b-{core}-ip4-base-avf-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-ip4-base-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-ip4-base-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Base-Ndrpdr.64B-{core}-rdma-ethip4-ip4base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-ip4-scale-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-ip4-scale-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-rdma-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-ip4-features-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-ip4-features-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-rdma-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-100Ge2P1Cx556A-Rdma-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-rdma-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-base-scale-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-scale-avf-rnd-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-scale-avf-rnd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-features-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-features-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-scale-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout: "plot-cpta-cps"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout: "plot-cpta-cps"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-base-scale-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-scale-dpdk-rnd-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-scale-dpdk-rnd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-ip4-base-features-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-ip4-base-features-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-ip4base-nat44-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-clx ip6
-
- - title: "2n-clx-cx556a-78b-{core}-ip6-base-scale-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-78b-{core}-ip6-base-scale-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Base-Ndrpdr.78B-{core}-rdma-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-100Ge2P1Cx556A-Rdma-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-rdma-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-78b-{core}-ip6-base-scale-avf-dpdk-{test_type}"
- output-file-name: "2n-clx-x710-78b-{core}-ip6-base-scale-avf-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-78b-{core}-ip6-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-clx-xxv710-78b-{core}-ip6-base-scale-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-af-xdp-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-clx L2
-
- - title: "2n-clx-cx556a-64b-{core}-l2-base-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-l2-base-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Patch-Ndrpdr.64B-{core}-rdma-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-l2-base-scale-rdma-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-l2-base-scale-rdma-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-rdma-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-x710-64b-{core}-l2-base-scale-avf-dpdk-{test_type}"
- output-file-name: "2n-clx-x710-64b-{core}-l2-base-scale-avf-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2-base-scale-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-clx VHost
-
- - title: "2n-clx-cx556a-64b-{core}-vhost-base-rdma-testpmd-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-vhost-base-rdma-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-cx556a-64b-{core}-vhost-base-rdma-vpp-{test_type}"
- output-file-name: "2n-clx-cx556a-64b-{core}-vhost-base-rdma-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-100Ge2P1Cx556A-Rdma-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-rdma-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-avf-dpdk-testpmd-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-avf-dpdk-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-64b-{core}-vhost-base-avf-dpdk-vpp-{test_type}"
- output-file-name: "2n-clx-xxv710-64b-{core}-vhost-base-avf-dpdk-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-clx-xxv710-114b-{core}-vts-l2switching-base-avf-{test_type}"
- output-file-name: "2n-clx-xxv710-114b-{core}-vts-l2switching-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-clx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vts.2N1L-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermit-2Vhostvr1024-1Vm-Ndrpdr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermit-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vts.2N1L-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Aclpermitreflect-2Vhostvr1024-1Vm-Ndrpdr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-aclpermitreflect-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vts.2N1L-25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-Iacldstbase-Noacl-2Vhostvr1024-1Vm-Ndrpdr.114B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-iacldstbase-noacl-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-skx memif
-
- - title: "2n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-skx ip4
-
- - title: "2n-skx-x710-64b-{core}-ip4-base-scale-avf-dpdk-{test_type}"
- output-file-name: "2n-skx-x710-64b-{core}-ip4-base-scale-avf-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-10Ge2P1X710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-base-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-scale-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-avf-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-features-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-features-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Iacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-iacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sf-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sf-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-Ethip4Udp-Ip4Base-Oacl50Sl-10Kflows-Ndrpdr.64B-{core}-avf-ethip4udp-ip4base-oacl50sl-10kflows-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Avf-ethip4udp-nat44det-h1024-p63-s64512-Ndrpdr.64B-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Base-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-af-xdp-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-af-xdp-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44det-ip4routing-stl-bidir-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h1024-p63-s64512-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h4096-p63-s258048-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h16384-p63-s1032192-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h65536-p63-s4128758-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr.64b-{core}-avf-ethip4udp-nat44det-h262144-p63-s16515072-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-stl-unidir-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-udir-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-udir-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-cps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout: "plot-cpta-cps"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-stf-pps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-cps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-cps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-cps-ndrpdr"
- layout: "plot-cpta-cps"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-stf-pps-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-tcp-tput-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4tcp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-nat44ed-ip4routing-udp-tput-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-nat44ed-h262144-p63-s16515072-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h1024-p63-s64512-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h4096-p63-s258048-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h16384-p63-s1032192-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h65536-p63-s4128768-pps-ndrpdr"
- - "tests.vpp.perf.ip4.2n1l-25ge2p1xxv710-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr.64b-{core}-avf-ethip4udp-ip4base-h262144-p63-s16515072-pps-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-base-features-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-base-features-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-ethip4udp-nat44det-h1-p1-s1-Ndrpdr.64B-{core}-ethip4udp-nat44det-h1-p1-s1-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-ip4-scale-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-ip4-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale20K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale200K-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.2N1L-25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Rnd-Ndrpdr.64B-{core}-ethip4-ip4scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-skx ip6
-
- - title: "2n-skx-x710-78b-{core}-ip6-base-scale-avf-dpdk-{test_type}"
- output-file-name: "2n-skx-x710-78b-{core}-ip6-base-scale-avf-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-10Ge2P1X710-af-xdp-Ethip6-Ip6Base-Ndrpdr.78B-{core}-af-xdp-ethip6-ip6base-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-ethip6-ip6scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-78b-{core}-ip6-rnd-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale20K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale20k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale200K-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale200k-rnd-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.2N1L-25Ge2P1Xxv710-Ethip6-Ip6Scale2M-rnd-Ndrpdr.78B-{core}-ethip6-ip6scale2m-rnd-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-skx L2
-
- - title: "2n-skx-x710-64b-{core}-l2-base-scale-avf-{test_type}"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-skx-x710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-10Ge2P1X710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2-base-scale-avf-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2-base-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-l2-base-scale-af_xdp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Patch-Ndrpdr.64B-{core}-af-xdp-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Xcbase-Ndrpdr.64B-{core}-af-xdp-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.2N1L-25Ge2P1Xxv710-af-xdp-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-af-xdp-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
-# 2n-skx VHost
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-vpp-{test_type}"
- output-file-name: "2n-skx-xxv710-64b-{core}-vhost-base-dpdk-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.2N1L-25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx memif
-
- - title: "3n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-memif-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-memif-base-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1dcr-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Memif-1Lxc-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2memif-1lxc-ndrpdr"
- - "Tests.Vpp.Perf.Container Memif.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Memif-1Dcr-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2memif-1dcr-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx ipsec
-
- - title: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.IMIX-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518b-{core}-avf-ethip4ipsec4tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec1000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518b-{core}-avf-ethip4ipsec1000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Avf-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes128Cbc-Hmac512Sha-Ndrpdr.1518b-{core}-avf-ethip4ipsec10000tnlsw-ip4base-int-aes128cbc-hmac512sha-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-imix-{core}-ipsec-base-scale-sw-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.IMIX-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-1518b-{core}-ipsec-base-scale-sw-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec4Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-ethip4ipsec4tnlsw-ip4base-int-aes256gcm-ndrpdr"
- - "Tests.Vpp.Perf.Crypto.25Ge2P1Xxv710-Ethip4Ipsec10000Tnlsw-Ip4Base-Int-Aes256Gcm-Ndrpdr.1518b-{core}-ethip4ipsec10000tnlsw-ip4base-int-aes256gcm-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx ip4
-
- - title: "3n-skx-x710-64b-{core}-ip4-base-scale-avf-{test_type}"
- output-file-name: "3n-skx-x710-64b-{core}-ip4-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.10Ge2P1X710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4-base-scale-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Ndrpdr.64B-{core}-avf-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale20K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale200K-Ndrpdr.64B-{core}-avf-ethip4-ip4scale200k-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Avf-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-avf-ethip4-ip4scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4-base-scale-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Base-Ndrpdr.64B-{core}-ethip4-ip4base-ndrpdr"
- - "Tests.Vpp.Perf.Ip4.25Ge2P1Xxv710-Ethip4-Ip4Scale2M-Ndrpdr.64B-{core}-ethip4-ip4scale2m-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx ip4 tunnels
-
- - title: "3n-skx-xxv710-64b-{core}-ip4-tunnels-base-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-tunnels-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-ip4-tunnels-base-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-ip4-tunnels-base-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Xcbase-Ndrpdr.64B-{core}-ethip4vxlan-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.Ip4 Tunnels.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx ip6
-
- - title: "3n-skx-x710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- output-file-name: "3n-skx-x710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.10Ge2P1X710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-78b-{core}-ip6-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Base-Ndrpdr.78B-{core}-avf-ethip6-ip6base-ndrpdr"
- - " Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale20K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale20k-ndrpdr"
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale200K-Ndrpdr.78B-{core}-avf-ethip6-ip6scale200k-ndrpdr"
- - " Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Avf-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-avf-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-78b-{core}-ip6-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Base-Ndrpdr.78B-{core}-ethip6-ip6base-ndrpdr"
- - " Tests.Vpp.Perf.Ip6.25Ge2P1Xxv710-Ethip6-Ip6Scale2M-Ndrpdr.78B-{core}-ethip6-ip6scale2m-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx L2
-
- - title: "3n-skx-x710-64b-{core}-l2-base-scale-avf-{test_type}"
- output-file-name: "3n-skx-x710-64b-{core}-l2-base-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.10Ge2P1X710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Dot1Q-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-dot1q-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Patch-Ndrpdr.64B-{core}-avf-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Ndrpdr.64B-{core}-avf-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2-scale-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-scale-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-avf-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale10Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale10kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale100Kmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale100kmaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Avf-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-avf-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-l2-base-scale-dpdk-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Patch-Ndrpdr.64B-{core}-eth-l2patch-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Xcbase-Ndrpdr.64B-{core}-eth-l2xcbase-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-ndrpdr"
- - "Tests.Vpp.Perf.L2.25Ge2P1Xxv710-Eth-L2Bdscale1Mmaclrn-Ndrpdr.64B-{core}-eth-l2bdscale1mmaclrn-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx srv6
-
- - title: "3n-skx-xxv710-78b-{core}-srv6-base-avf-{test_type}"
- output-file-name: "3n-skx-xxv710-78b-{core}-srv6-base-avf-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Ip6-Ip6Base-Srv6Enc1Sid-Ndrpdr.78B-{core}-avf-ethip6ip6-ip6base-srv6enc1sid-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Enc2Sids-Nodecaps-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6enc2sids-nodecaps-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Dyn-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-dyn-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Masq-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-masq-ndrpdr"
- - "Tests.Vpp.Perf.Srv6.25Ge2P1Xxv710-Avf-Ethip6Srhip6-Ip6Base-Srv6Proxy-Stat-Ndrpdr.78B-{core}-avf-ethip6srhip6-ip6base-srv6proxy-stat-ndrpdr"
- layout: "plot-cpta"
-
-# 3n-skx VHost
-
- - title: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-testpmd-{test_type}"
- output-file-name: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-vpp-{test_type}"
- output-file-name: "3n-skx-x710-64b-{core}-link-bonding-vhost-base-avf-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-2lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.10Ge2P1X710-Avf-2Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-2lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-dpdk-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-link-bonding-vhost-base-avf-testpmd-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-link-bonding-vhost-base-avf-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-1Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-1Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-link-bonding-vhost-base-avf-vpp-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-link-bonding-vhost-base-avf-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-1Lbvpplacp-Dot1Q-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-1Lbvpplacp-Dot1Q-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-1lbvpplacp-dot1q-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-avf-testpmd-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-ndrpdr"
- layout: "plot-cpta"
-
- - title: "3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- output-file-name: "3n-skx-xxv710-64b-{core}-vhost-base-avf-vpp-{test_type}"
- data: "plot-ndrpdr-comparison-3n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Xcbase-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2xcbase-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Eth-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-eth-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4-Ip4Base-Eth-2Vhostvr1024-1Vm-Vppip4-Ndrpdr.64B-{core}-avf-ethip4-ip4base-eth-2vhostvr1024-1vm-vppip4-ndrpdr"
- - "Tests.Vpp.Perf.Vm Vhost.25Ge2P1Xxv710-Avf-Ethip4Vxlan-L2Bdbasemaclrn-Eth-2Vhostvr1024-1Vm-Vppl2Xc-Ndrpdr.64B-{core}-avf-ethip4vxlan-l2bdbasemaclrn-eth-2vhostvr1024-1vm-vppl2xc-ndrpdr"
- layout: "plot-cpta"
-
-# TRex 2n-skx
-
- - title: "2n-skx-x710-64b--ip4-base-scale-{test_type}"
- output-file-name: "2n-skx-x710-64b--ip4-base-scale-{test_type}"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4-Ip4Base-Tg-Ndrpdr.64B--ethip4-ip4base-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4-Ip4Scale2M-Tg-Ndrpdr.64B--ethip4-ip4scale2m-tg-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b--ip4routing-stf-cps-{test_type}"
- output-file-name: "2n-skx-x710-64b--ip4routing-stf-cps-{test_type}"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H1024-P63-S64512-Cps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h1024-p63-s64512-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H262144-P63-S16515072-Cps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h262144-p63-s16515072-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H1024-P63-S64512-Cps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h1024-p63-s64512-cps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H262144-P63-S16515072-Cps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h262144-p63-s16515072-cps-tg-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b--ip4routing-stf-pps-{test_type}"
- output-file-name: "2n-skx-x710-64b--ip4routing-stf-pps-{test_type}"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H1024-P63-S64512-pps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Tcp-Ip4Base-H262144-P63-S16515072-pps-Tg-Ndrpdr.64B--ethip4tcp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H1024-P63-S64512-pps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h1024-p63-s64512-pps-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip4.1N1L-10Ge2P1X710-Ethip4Udp-Ip4Base-H262144-P63-S16515072-pps-Tg-Ndrpdr.64B--ethip4udp-ip4base-h262144-p63-s16515072-pps-tg-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-78b--ip6-base-scale-{test_type}"
- output-file-name: "2n-skx-x710-78b--ip6-base-scale-{test_type}"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Trex.Perf.Ip6.1N1L-10Ge2P1X710-Ethip6-Ip6Base-Tg-Ndrpdr.78B--ethip6-ip6base-tg-ndrpdr"
- - "Tests.Trex.Perf.Ip6.1N1L-10Ge2P1X710-Ethip6-Ip6Scale2M-Tg-Ndrpdr.78B--ethip6-ip6scale2m-tg-ndrpdr"
- layout: "plot-cpta"
-
- - title: "2n-skx-x710-64b--l2-scale-{test_type}"
- output-file-name: "2n-skx-x710-64b--l2-scale-{test_type}"
- data: "plot-ndrpdr-trending-trex-2n-skx"
- core: ["2t1c", ]
- test-type: ["ndr", "pdr"]
- include:
- - "Tests.Trex.Perf.L2.1N1L-10Ge2P1X710-Eth-L2Bdscale1Mmaclrn-Tg-Ndrpdr.64B--eth-l2bdscale1mmaclrn-tg-ndrpdr"
- layout: "plot-cpta"
diff --git a/resources/tools/presentation/specifications/trending/environment.yaml b/resources/tools/presentation/specifications/trending/environment.yaml
deleted file mode 100644
index 2440b653e7..0000000000
--- a/resources/tools/presentation/specifications/trending/environment.yaml
+++ /dev/null
@@ -1,243 +0,0 @@
-################################################################################
-### E N V I R O N M E N T ###
-################################################################################
-
-- type: "environment"
-
- spec-files:
- - "specifications/trending/data_sets.yaml"
- - "specifications/trending/layouts.yaml"
- - "specifications/trending/elements.yaml"
-
- paths:
- # Top level directories:
- ## Working directory
- DIR[WORKING]: "_tmp"
- ## Build directories
- DIR[BUILD,HTML]: "_build"
- ## Static .rst files
- DIR[RST]: "../../../docs/cpta"
-
- # Static html content
- DIR[STATIC]: "{DIR[BUILD,HTML]}/_static"
- DIR[STATIC,VPP]: "{DIR[STATIC]}/vpp"
- DIR[STATIC,ARCH]: "{DIR[STATIC]}/archive"
-
- # Working directories
- ## Input data files (.zip, .xml)
- DIR[WORKING,DATA]: "{DIR[WORKING]}/data"
- ## Static source files from git
- DIR[WORKING,SRC]: "{DIR[WORKING]}/src"
- DIR[WORKING,SRC,STATIC]: "{DIR[WORKING,SRC]}/_static"
-
- # .css patch file
- DIR[CSS_PATCH_FILE]: "{DIR[STATIC]}/theme_overrides.css"
- DIR[CSS_PATCH_FILE2]: "{DIR[WORKING,SRC,STATIC]}/theme_overrides.css"
-
- urls:
- URL[JENKINS,CSIT]: "https://jenkins.fd.io/view/csit/job"
-
- make-dirs:
- # List the directories which are created while preparing the environment.
- # All directories MUST be defined in "paths" section.
- - "DIR[WORKING,DATA]"
- - "DIR[WORKING,SRC,STATIC]"
- - "DIR[BUILD,HTML]"
- - "DIR[STATIC,VPP]"
- - "DIR[STATIC,ARCH]"
- build-dirs:
- # List the directories where the results (build) is stored.
- # All directories MUST be defined in "paths" section.
- - "DIR[BUILD,HTML]"
-
- testbeds:
- "10.30.51.45": "LF-2n-SKX-21"
- "10.30.51.53": "LF-2n-SKX-22"
- "10.30.51.55": "LF-2n-SKX-23"
- "10.30.51.57": "LF-2n-SKX-24"
- "10.32.8.19": "LF-2n-CLX-27"
- "10.32.8.21": "LF-2n-CLX-28"
- "10.32.8.23": "LF-2n-CLX-29"
- "10.30.51.48": "LF-3n-SKX-31"
- "10.30.51.60": "LF-3n-SKX-32"
- "10.30.51.49": "LF-3n-TSH-33"
- "10.30.51.49": "LF-2n-TX2-34"
- "10.32.8.25": "LF-2n-ZN2-210"
- "10.32.8.10": "LF-DNV"
-
- # Data sources are used in this order:
- data-sources:
- # XML
- - type: "xml"
- url: "https://s3-logs.fd.io/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- # To be deprecated soon:
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: True
- # Deprecated:
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output_info.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/archives/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- - type: "xml"
- url: "https://logs.fd.io/production/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.xml.gz"
- file-format: ".gz"
- enabled: False
- # JSON from S3
- - type: "json"
- url: "https://logs.nginx.service.consul/vex-yul-rot-jenkins-1"
- path: "{job}/{build}/{filename}"
- file-name: "output.json.gz"
- file-format: ".gz"
- enabled: False
-
- archive-inputs: False
-
- reverse-input: True # Needed for trending, not important for the report
-
- # Number of days from now to the past. Only files generated in this
- # time period are used.
- # Only for trending
- time-period: 180
-
- mapping-file: ""
-
- ignore-list: ""
-
- alerting:
-
- alerts:
-
- # Jenkins job sends the email with failed tests.
- # Pre-requisites:
- # - Jenkins job is configured to send emails in "Post-build Actions" -->
- # "Editable Email Notification".
- jenkins-send-failed-tests:
- title: "Trending: Failed Tests"
- type: "failed-tests"
- way: "jenkins"
- include:
- - "last-failed-tests-vpp-2n-skx-mrr"
- - "last-failed-tests-vpp-3n-skx-mrr"
- - "last-failed-tests-vpp-2n-clx-mrr"
- - "last-failed-tests-vpp-2n-zn2-mrr"
- - "last-failed-tests-vpp-3n-tsh-mrr"
- - "last-failed-tests-vpp-2n-tx2-mrr"
- - "last-failed-tests-vpp-2n-dnv-mrr"
- - "last-failed-tests-vpp-3n-dnv-mrr"
- - "last-failed-tests-vpp-2n-aws-mrr"
- - "last-failed-tests-vpp-3n-aws-mrr"
- - "last-failed-tests-dpdk-2n-skx-mrr"
- - "last-failed-tests-dpdk-3n-skx-mrr"
- - "last-failed-tests-dpdk-2n-clx-mrr"
- - "last-failed-tests-dpdk-3n-tsh-mrr"
- - "last-failed-tests-dpdk-2n-tx2-mrr"
- - "last-failed-tests-vpp-2n-skx-ndrpdr"
- - "last-failed-tests-vpp-3n-skx-ndrpdr"
- - "last-failed-tests-vpp-2n-clx-ndrpdr"
- - "last-failed-tests-trex-2n-skx-mrr"
- urls:
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-clx"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-zn2"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-tsh"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-tx2"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-2n-dnv"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-daily-master-3n-dnv"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-weekly-master-2n-aws"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-mrr-weekly-master-3n-aws"
- - "https://jenkins.fd.io/view/csit/job/csit-dpdk-perf-mrr-weekly-master-2n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-dpdk-perf-mrr-weekly-master-3n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-dpdk-perf-mrr-weekly-master-2n-clx"
- - "https://jenkins.fd.io/view/csit/job/csit-dpdk-perf-mrr-weekly-master-3n-tsh"
- - "https://jenkins.fd.io/view/csit/job/csit-dpdk-perf-mrr-weekly-master-2n-tx2"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-ndrpdr-weekly-master-2n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-ndrpdr-weekly-master-3n-skx"
- - "https://jenkins.fd.io/view/csit/job/csit-vpp-perf-ndrpdr-weekly-master-2n-clx"
- - "https://jenkins.fd.io/view/csit/job/csit-trex-perf-ndrpdr-weekly-master-2n-skx"
- url-details: "https://s3-docs.fd.io/csit/master/trending/introduction/failures.html"
-
- configurations:
- # Configuration of the email notifications.
- email:
- # SMTP server
- server: "localhost"
- # List of recipients.
- address-to:
- - "csit-report@lists.fd.io"
- # Sender
- address-from: "testuser@testserver.com"
-
- # Configuration of notifications sent by Jenkins.
- jenkins:
- # The directory in the workspace where the generated data is stored and
- # then read by Jenkins job.
- output-dir: "_build/_static/vpp"
- # The name of the output files. ASCII text and HTML formats are
- # generated.
- output-file: "trending-failed-tests"
- # If defined, all output files are zipped into this file.
- zip-output: "failed-tests.tar.gz"
-
-################################################################################
-### S T A T I C ###
-################################################################################
-
-- type: "static"
- src-path: "{DIR[RST]}"
- dst-path: "{DIR[WORKING,SRC]}"
-
-################################################################################
-### O U T P U T ###
-################################################################################
-
-- type: "output"
- arch-file-format:
- - ".gz"
- - ".zip"
- output: "trending"
- format:
- html:
- - full
diff --git a/resources/tools/presentation/specifications/trending/layouts.yaml b/resources/tools/presentation/specifications/trending/layouts.yaml
deleted file mode 100644
index 97dee3f9e2..0000000000
--- a/resources/tools/presentation/specifications/trending/layouts.yaml
+++ /dev/null
@@ -1,212 +0,0 @@
-################################################################################
-### L A Y O U T S ###
-################################################################################
-
-- type: "layouts"
-
- plot-statistics:
- title: ""
- titlefont:
- size: 16
- autosize: True
- showlegend: True
- width: 1050
- height: 800
- yaxis:
- showticklabels: True
- title: "Number of Passed / Failed Tests"
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- showline: True
- zeroline: False
- tickcolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- rangemode: "tozero"
- xaxis:
- title: 'Date [MMDD]'
- type: "date"
- autorange: True
- fixedrange: False
- showgrid: True
- gridcolor: "rgb(238, 238, 238)"
- showline: True
- linecolor: "rgb(238, 238, 238)"
- zeroline: False
- linewidth: 1
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "auto"
- tickformat: "%m%d"
- rangeselector:
- buttons:
- - count: 14
- label: "2w"
- step: "day"
- stepmode: "backward"
- - count: 1
- label: "1m"
- step: "month"
- stepmode: "backward"
- - count: 2
- label: "2m"
- step: "month"
- stepmode: "backward"
- - count: 3
- label: "3m"
- step: "month"
- stepmode: "backward"
- - step: "all"
- margin:
- r: 20
- b: 5
- t: 5
- l: 70
- legend:
- orientation: "h"
- xanchor: "center"
- x: 0.5
- bordercolor: "rgb(238, 238, 238)"
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- barmode: "stack"
- hoverlabel:
- namelength: -1
-
- plot-cpta:
- title: ""
- titlefont:
- size: 16
- autosize: True
- showlegend: True
- width: 1100
- height: 800
- yaxis:
- showticklabels: True
- tickformat: ".5s"
- title: "Throughput [Mpps]"
- hoverformat: ".5s"
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- showline: True
- zeroline: False
- tickcolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- xaxis:
- title: 'Date [MMDD]'
- type: "date"
- autorange: True
- fixedrange: False
- showgrid: True
- gridcolor: "rgb(238, 238, 238)"
- showline: True
- linecolor: "rgb(238, 238, 238)"
- zeroline: False
- linewidth: 1
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "auto"
- tickformat: "%m%d"
- rangeselector:
- buttons:
- - count: 14
- label: "2w"
- step: "day"
- stepmode: "backward"
- - count: 1
- label: "1m"
- step: "month"
- stepmode: "backward"
- - count: 2
- label: "2m"
- step: "month"
- stepmode: "backward"
- - count: 3
- label: "3m"
- step: "month"
- stepmode: "backward"
- - step: "all"
- margin:
- r: 20
- b: 5
- t: 5
- l: 70
- legend:
- orientation: "h"
- xanchor: "auto"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- bordercolor: "rgb(238, 238, 238)"
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
-
- plot-cpta-cps:
- title: ""
- titlefont:
- size: 16
- autosize: True
- showlegend: True
- width: 1100
- height: 800
- yaxis:
- showticklabels: True
- tickformat: ".5s"
- title: "Connection Rate [Mcps]"
- hoverformat: ".5s"
- gridcolor: "rgb(238, 238, 238)"
- linecolor: "rgb(238, 238, 238)"
- showline: True
- zeroline: False
- tickcolor: "rgb(238, 238, 238)"
- linewidth: 1
- showgrid: True
- xaxis:
- title: 'Date [MMDD]'
- type: "date"
- autorange: True
- fixedrange: False
- showgrid: True
- gridcolor: "rgb(238, 238, 238)"
- showline: True
- linecolor: "rgb(238, 238, 238)"
- zeroline: False
- linewidth: 1
- showticklabels: True
- tickcolor: "rgb(238, 238, 238)"
- tickmode: "auto"
- tickformat: "%m%d"
- rangeselector:
- buttons:
- - count: 14
- label: "2w"
- step: "day"
- stepmode: "backward"
- - count: 1
- label: "1m"
- step: "month"
- stepmode: "backward"
- - count: 2
- label: "2m"
- step: "month"
- stepmode: "backward"
- - count: 3
- label: "3m"
- step: "month"
- stepmode: "backward"
- - step: "all"
- margin:
- r: 20
- b: 5
- t: 5
- l: 70
- legend:
- orientation: "h"
- xanchor: "auto"
- traceorder: "normal" # "grouped" does not work: bug https://github.com/plotly/plotly.js/issues/1913
- bordercolor: "rgb(238, 238, 238)"
- paper_bgcolor: "#fff"
- plot_bgcolor: "#fff"
- hoverlabel:
- namelength: -1
diff --git a/resources/tools/presentation/sphinx_conf/report/conf.py b/resources/tools/presentation/sphinx_conf/report/conf.py
deleted file mode 100644
index f3d0f4c926..0000000000
--- a/resources/tools/presentation/sphinx_conf/report/conf.py
+++ /dev/null
@@ -1,296 +0,0 @@
-# -*- coding: utf-8 -*-
-
-"""CSIT report documentation build configuration file
-
-This file is execfile()d with the current directory set to its
-containing dir.
-
-Note that not all possible configuration values are present in this
-autogenerated file.
-
-All configuration values have a default; values that are commented out
-serve to show the default.
-
-If extensions (or modules to document with autodoc) are in another directory,
-add these directories to sys.path here. If the directory is relative to the
-documentation root, use os.path.abspath to make it absolute, like shown here.
-"""
-
-
-import os
-import sys
-
-sys.path.insert(0, os.path.abspath(u'.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [u'sphinxcontrib.programoutput',
- u'sphinx.ext.ifconfig']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = [u'_templates']
-
-# The suffix(es) of source file names.
-# You can specify multiple suffix as a list of string:
-#
-source_suffix = [u'.rst', u'.md']
-
-# The master toctree document.
-master_doc = u'index'
-
-# General information about the project.
-report_week = u'42'
-project = u'FD.io CSIT-2110.{week}'.format(week=report_week)
-copyright = u'2021, FD.io'
-author = u'FD.io CSIT'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-# version = u''
-# The full version, including alpha/beta/rc tags.
-# release = u''
-
-rst_epilog = u"""
-.. |release-1| replace:: {prev_release}
-.. |srelease| replace:: {srelease}
-.. |csit-release| replace:: CSIT-{csitrelease}
-.. |csit-release-1| replace:: CSIT-{csit_prev_release}
-.. |vpp-release| replace:: VPP-{vpprelease} release
-.. |vpp-release-1| replace:: VPP-{vpp_prev_release} release
-.. |dpdk-release| replace:: DPDK-{dpdkrelease}
-.. |dpdk-release-1| replace:: DPDK-{dpdk_prev_release}
-.. |trex-release| replace:: TRex {trex_version}
-
-.. _pdf version of this report: https://s3-docs.fd.io/csit/{release}/report/_static/archive/csit_{release}.{report_week}.pdf
-.. _tag documentation rst file: https://git.fd.io/csit/tree/docs/tag_documentation.rst?h={release}
-.. _TRex driver: https://git.fd.io/csit/tree/GPL/tools/trex/trex_stl_profile.py?h={release}
-.. _CSIT Performance Tests Documentation: https://s3-docs.fd.io/csit/{release}/docs/index.html
-.. _VPP test framework documentation: https://docs.fd.io/vpp/{vpprelease}/vpp_make_test/html/
-.. _FD.io CSIT testbeds - Xeon Skylake, Arm, Atom: https://git.fd.io/csit/tree/docs/lab/testbeds_sm_skx_hw_bios_cfg.md?h={release}
-.. _FD.io CSIT testbeds - Xeon Cascade Lake: https://git.fd.io/csit/tree/docs/lab/testbeds_sm_clx_hw_bios_cfg.md?h={release}
-.. _Ansible inventory - hosts: https://git.fd.io/csit/tree/fdio.infra.ansible/inventories/lf_inventory/host_vars?h={release}
-.. _build logs from FD.io trex performance job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-trex-perf-report-iterative-{srelease}-2n-skx
-.. _build logs from FD.io dpdk performance job 3n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-3n-skx
-.. _build logs from FD.io dpdk performance job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-2n-skx
-.. _build logs from FD.io dpdk performance job 2n-clx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-2n-clx
-.. _build logs from FD.io dpdk performance job 2n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-2n-dnv
-.. _build logs from FD.io dpdk performance job 3n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-3n-dnv
-.. _build logs from FD.io dpdk performance job 3n-tsh: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-3n-tsh
-.. _build logs from FD.io dpdk performance job 2n-tx2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-2n-tx2
-.. _build logs from FD.io dpdk performance job 2n-zn2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-iterative-{srelease}-2n-zn2
-.. _build logs from FD.io vpp performance job 3n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-3n-skx
-.. _build logs from FD.io vpp performance job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-skx
-.. _build logs from FD.io vpp performance job 3n-tsh: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-3n-tsh
-.. _build logs from FD.io vpp performance job 2n-tx2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-tx2
-.. _build logs from FD.io vpp performance job 3n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-3n-dnv
-.. _build logs from FD.io vpp performance job 2n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-dnv
-.. _build logs from FD.io vpp performance job 2n-clx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-clx
-.. _build logs from FD.io vpp performance job 2n-icx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-icx
-.. _build logs from FD.io vpp performance job 3n-icx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-3n-icx
-.. _build logs from FD.io vpp performance job 2n-zn2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-zn2
-.. _build logs from FD.io vpp performance job 3n-aws: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-3n-aws
-.. _build logs from FD.io vpp performance job 2n-aws: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-iterative-{srelease}-2n-aws
-.. _build logs from FD.io dpdk coverage job 3n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-3n-skx
-.. _build logs from FD.io dpdk coverage job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-2n-skx
-.. _build logs from FD.io dpdk coverage job 2n-clx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-2n-clx
-.. _build logs from FD.io dpdk coverage job 2n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-2n-dnv
-.. _build logs from FD.io dpdk coverage job 3n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-3n-dnv
-.. _build logs from FD.io dpdk coverage job 3n-tsh: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-3n-tsh
-.. _build logs from FD.io dpdk coverage job 2n-tx2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-2n-tx2
-.. _build logs from FD.io dpdk coverage job 2n-zn2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-dpdk-perf-report-coverage-{srelease}-2n-zn2
-.. _build logs from FD.io trex coverage job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-trex-perf-report-coverage-{srelease}-2n-skx
-.. _build logs from FD.io vpp coverage job 3n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-3n-skx
-.. _build logs from FD.io vpp coverage job 2n-skx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-skx
-.. _build logs from FD.io vpp coverage job 3n-tsh: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-3n-tsh
-.. _build logs from FD.io vpp coverage job 2n-tx2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-tx2
-.. _build logs from FD.io vpp coverage job 3n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-3n-dnv
-.. _build logs from FD.io vpp coverage job 2n-dnv: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-dnv
-.. _build logs from FD.io vpp coverage job 2n-clx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-clx
-.. _build logs from FD.io vpp coverage job 2n-icx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-icx
-.. _build logs from FD.io vpp coverage job 3n-icx: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-3n-icx
-.. _build logs from FD.io vpp coverage job 2n-zn2: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-zn2
-.. _build logs from FD.io vpp coverage job 3n-aws: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-3n-aws
-.. _build logs from FD.io vpp coverage job 2n-aws: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-perf-report-coverage-{srelease}-2n-aws
-.. _build logs from FD.io vpp device jobs using Ubuntu: https://s3-logs.fd.io/vex-yul-rot-jenkins-1/csit-vpp-device-{srelease}-ubuntu2004-1n-skx
-.. _FD.io VPP compile job: https://jenkins.fd.io/view/vpp/job/vpp-merge-{srelease}-ubuntu2004-x86_64/
-.. _CSIT Testbed Setup: https://git.fd.io/csit/tree/fdio.infra.ansible?h={release}
-.. _VPP startup.conf: https://git.fd.io/vpp/tree/src/vpp/conf/startup.conf?h=stable/{srelease}&id={vpp_release_commit_id}
-""".format(release=u'rls2110',
- report_week=report_week,
- prev_release=u'rls2106',
- srelease=u'2110',
- csitrelease=u'2110',
- csit_prev_release=u'2106',
- vpprelease=u'21.10',
- vpp_prev_release=u'21.06',
- dpdkrelease=u'21.08',
- dpdk_prev_release=u'21.02',
- sdpdkrelease=u'2108',
- trex_version=u'v2.88',
- vpp_release_commit_id=u'3d2d96e5547484290c9368bac0a420afa8c4c068')
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = u'en'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = [u'_build', u'Thumbs.db', u'.DS_Store']
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = u'sphinx'
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = u'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-html_theme_options = {
- u'canonical_url': u'',
- u'analytics_id': u'',
- u'logo_only': False,
- u'display_version': True,
- u'prev_next_buttons_location': u'bottom',
- u'style_external_links': False,
- # Toc options
- u'collapse_navigation': True,
- u'sticky_navigation': True,
- u'navigation_depth': 3,
- u'includehidden': True,
- u'titles_only': False
-}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_theme_path = [u'env/lib/python3.8/site-packages/sphinx_rtd_theme']
-
-# html_static_path = ['_build/_static']
-html_static_path = [u'_tmp/src/_static']
-
-html_context = {
- u'css_files': [
- # overrides for wide tables in RTD theme
- u'_static/theme_overrides.css'
- ]
-}
-
-# If false, no module index is generated.
-html_domain_indices = True
-
-# If false, no index is generated.
-html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-html_split_index = False
-
-# -- Options for LaTeX output ---------------------------------------------
-
-latex_engine = u'pdflatex'
-
-latex_elements = {
- # The paper size ('letterpaper' or 'a4paper').
- #
- u'papersize': u'a4paper',
-
- # The font size ('10pt', '11pt' or '12pt').
- #
- #'pointsize': '10pt',
-
- # Additional stuff for the LaTeX preamble.
- #
- u'preamble': r'''
- \usepackage{pdfpages}
- \usepackage{svg}
- \usepackage{charter}
- \usepackage[defaultsans]{lato}
- \usepackage{inconsolata}
- \usepackage{csvsimple}
- \usepackage{longtable}
- \usepackage{booktabs}
- ''',
-
- # Latex figure (float) alignment
- #
- u'figure_align': u'H',
-
- # Latex font setup
- #
- u'fontpkg': r'''
- \renewcommand{\familydefault}{\sfdefault}
- ''',
-
- # Latex other setup
- #
- u'extraclassoptions': u'openany',
- u'sphinxsetup': r'''
- TitleColor={RGB}{225,38,40},
- InnerLinkColor={RGB}{62,62,63},
- OuterLinkColor={RGB}{225,38,40},
- shadowsep=0pt,
- shadowsize=0pt,
- shadowrule=0pt
- '''
-}
-
-# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title,
-# author, documentclass [howto, manual, or own class]).
-latex_documents = [
- (master_doc, u'csit.tex', u'CSIT REPORT', u'', u'manual'),
-]
-
-# The name of an image file (relative to this directory) to place at the top of
-# the title page.
-#
-# latex_logo = 'fdio.pdf'
-
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#
-# latex_use_parts = True
-
-# If true, show page references after internal links.
-#
-latex_show_pagerefs = True
-
-# If true, show URL addresses after external links.
-#
-latex_show_urls = u'footnote'
-
-# Documents to append as an appendix to all manuals.
-#
-# latex_appendices = []
-
-# It false, will not define \strong, \code, itleref, \crossref ... but only
-# \sphinxstrong, ..., \sphinxtitleref, ... To help avoid clash with user added
-# packages.
-#
-# latex_keep_old_macro_names = True
-
-# If false, no module index is generated.
-#
-# latex_domain_indices = True
diff --git a/resources/tools/presentation/sphinx_conf/trending/conf.py b/resources/tools/presentation/sphinx_conf/trending/conf.py
deleted file mode 100644
index 53af4ed68a..0000000000
--- a/resources/tools/presentation/sphinx_conf/trending/conf.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# -*- coding: utf-8 -*-
-#
-# CSIT report documentation build configuration file
-#
-# This file is execfile()d with the current directory set to its
-# containing dir.
-#
-# Note that not all possible configuration values are present in this
-# autogenerated file.
-#
-# All configuration values have a default; values that are commented out
-# serve to show the default.
-
-# If extensions (or modules to document with autodoc) are in another directory,
-# add these directories to sys.path here. If the directory is relative to the
-# documentation root, use os.path.abspath to make it absolute, like shown here.
-#
-import os
-import sys
-
-sys.path.insert(0, os.path.abspath(u'.'))
-
-# -- General configuration ------------------------------------------------
-
-# If your documentation needs a minimal Sphinx version, state it here.
-#
-# needs_sphinx = '1.0'
-
-# Add any Sphinx extension module names here, as strings. They can be
-# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
-# ones.
-extensions = [u'sphinxcontrib.programoutput',
- u'sphinx.ext.ifconfig']
-
-# Add any paths that contain templates here, relative to this directory.
-templates_path = [u'_templates']
-
-# The suffix(es) of source filenames.
-# You can specify multiple suffix as a list of string:
-#
-source_suffix = [u'.rst', u'.md']
-
-# The master toctree document.
-master_doc = u'index'
-
-# General information about the project.
-project = u'FD.io CSIT'
-copyright = u'2020, FD.io'
-author = u'FD.io CSIT'
-
-# The version info for the project you're documenting, acts as replacement for
-# |version| and |release|, also used in various other places throughout the
-# built documents.
-#
-# The short X.Y version.
-#version = u''
-# The full version, including alpha/beta/rc tags.
-#release = u''
-
-# The language for content autogenerated by Sphinx. Refer to documentation
-# for a list of supported languages.
-#
-# This is also used if you do content translation via gettext catalogs.
-# Usually you set "language" from the command line for these cases.
-language = u'en'
-
-# List of patterns, relative to source directory, that match files and
-# directories to ignore when looking for source files.
-# This patterns also effect to html_static_path and html_extra_path
-exclude_patterns = [u'_build', u'Thumbs.db', u'.DS_Store']
-
-# The name of the Pygments (syntax highlighting) style to use.
-pygments_style = u'sphinx'
-
-# If true, `todo` and `todoList` produce output, else they produce nothing.
-todo_include_todos = False
-
-# -- Options for HTML output ----------------------------------------------
-
-# The theme to use for HTML and HTML Help pages. See the documentation for
-# a list of builtin themes.
-#
-html_theme = u'sphinx_rtd_theme'
-
-# Theme options are theme-specific and customize the look and feel of a theme
-# further. For a list of options available for each theme, see the
-# documentation.
-#
-# html_theme_options = {}
-
-# Add any paths that contain custom static files (such as style sheets) here,
-# relative to this directory. They are copied after the builtin static files,
-# so a file named "default.css" will overwrite the builtin "default.css".
-html_theme_path = [u'env/lib/python3.8/site-packages/sphinx_rtd_theme']
-
-# html_static_path = ['_build/_static']
-html_static_path = [u'../_tmp/src/_static']
-
-html_context = {
- u'css_files': [
- # overrides for wide tables in RTD theme
- u'_static/theme_overrides.css',
- ],
-}
-
-# If false, no module index is generated.
-html_domain_indices = True
-
-# If false, no index is generated.
-html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-html_split_index = False
diff --git a/resources/tools/presentation/static_content.py b/resources/tools/presentation/static_content.py
deleted file mode 100644
index 831d8a8f84..0000000000
--- a/resources/tools/presentation/static_content.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Static content
-
-Process the static content stored in the git.
-"""
-
-import logging
-
-from os import makedirs
-from os.path import isdir
-from shutil import rmtree, copytree, Error
-
-from pal_errors import PresentationError
-
-
-def prepare_static_content(spec):
- """Prepare the static content which is stored in the git.
-
- :param spec: Specification read from the specification file.
- :type spec: Specification
- :raises PresentationError: If it is not possible to process the static
- content.
- """
-
- src = spec.static.get(u"src-path", None)
- dst = spec.static.get(u"dst-path", None)
- if src is None or dst is None:
- logging.warning(u"No static content specified, skipping")
- return
-
- # Copy all the static content to the build directory:
- logging.info(u"Copying the static content ...")
- logging.info(f" Source: {src}")
- logging.info(f" Destination: {dst}")
-
- try:
- if isdir(dst):
- rmtree(dst)
-
- copytree(src, dst)
-
- makedirs(spec.environment[u"paths"][u"DIR[WORKING,SRC,STATIC]"])
-
- except (Error, OSError) as err:
- raise PresentationError(
- u"Not possible to process the static content.",
- repr(err)
- )
-
- logging.info(u"Done.")
diff --git a/resources/tools/scripts/topo_reservation.py b/resources/tools/scripts/topo_reservation.py
index c1b5c4658e..f2d18bcafd 100755
--- a/resources/tools/scripts/topo_reservation.py
+++ b/resources/tools/scripts/topo_reservation.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
diff --git a/resources/tools/storage/__init__.py b/resources/tools/storage/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/resources/tools/storage/__init__.py
+++ /dev/null
diff --git a/resources/tools/storage/__main__.py b/resources/tools/storage/__main__.py
deleted file mode 100644
index e8452dc9d1..0000000000
--- a/resources/tools/storage/__main__.py
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""S3 Storage Backend."""
-
-from json import dumps
-
-from argparse import ArgumentParser, RawDescriptionHelpFormatter
-
-from .storage import Storage
-
-
-def main():
- """
- Main entry function when called from CLI.
- """
- parser = ArgumentParser(
- description=u"S3 Storage Backend Operation.",
- formatter_class=RawDescriptionHelpFormatter
- )
- parser.add_argument(
- u"-e", u"--expression", required=False, type=str,
- default=u"select * from s3object s",
- help=u"S3 compatible SQL query."
- )
-
- args = parser.parse_args()
-
- json_iterator = Storage(
- endpoint_url=u"http://storage.service.consul:9000",
- bucket=u"docs",
- profile_name=u"nomad-s3"
- ).s3_file_processing(
- prefix=u"", expression=args.expression
- )
- for item in json_iterator:
- print(dumps(item, indent=4, sort_keys=False))
-
-
-if __name__ == u"__main__":
- main()
diff --git a/resources/tools/storage/storage.py b/resources/tools/storage/storage.py
deleted file mode 100755
index 9932bc3bb5..0000000000
--- a/resources/tools/storage/storage.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/env/env python3
-
-# Copyright (c) 2021 Cisco and/or its affiliates.
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at:
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-"""Storage Backend Class."""
-
-from json import loads
-from struct import unpack
-from gzip import GzipFile
-
-from boto3 import Session
-from botocore import exceptions
-
-S3_API_LIMIT = 1048576
-
-
-class Storage:
- """Class implementing storage object retrieval.
- S3 Select API allows us to retrieve a subset of data by using simple SQL
- expressions. By using Select API to retrieve only the data needed by the
- application, drastic performance improvements can be achieved.
- """
- def __init__(self, endpoint_url, bucket, profile_name):
- """Class init function to create S3 client object.
-
- :param endpoint_url: S3 storage endpoint url.
- :param bucket: S3 parent bucket.
- :param profile_name: S3 storage configuration.
- :type endpoint_url: str
- :type bucket: str
- :type profile_name: str
- """
- self.endpoint_url = endpoint_url
- self.bucket = bucket
- self.profile_name = profile_name
-
- self.session = Session(profile_name=self.profile_name)
- self.client = self.session.client(
- service_name=u"s3", endpoint_url=self.endpoint_url
- )
- self.resource = self.session.resource(
- service_name=u"s3", endpoint_url=self.endpoint_url
- )
-
- def __repr__(self):
- """Return a string executable as Python constructor call.
-
- :returns: Executable constructor call.
- :rtype: str
- """
- return (
- f"Storage(endpoint_url={self.endpoint_url!r}, "
- f"bucket={self.bucket!r}, "
- f"profile_name={self.profile_name!r})"
- )
-
- def _get_matching_s3_keys(
- self, bucket, prefix=u"", suffix=u""):
- """This function generates the keys in an S3 bucket. Function act as
- a Python generator object.
-
- :param bucket: Name of the S3 bucket.
- :param prefix: Only fetch keys that start with this prefix (optional).
- :param suffix: Only fetch keys that end with this suffix (optional).
- :type bucket: str
- :type prefix: str
- :type suffix: str
- :raises RuntimeError: If connection to storage fails.
- """
- kwargs = {
- u"Bucket": bucket
- }
-
- prefixes = (prefix, ) if isinstance(prefix, str) else prefix
-
- for key_prefix in prefixes:
- kwargs[u"Prefix"] = key_prefix
- try:
- paginator = self.client.get_paginator(u"list_objects_v2")
- for page in paginator.paginate(**kwargs):
- try:
- contents = page[u"Contents"]
- except KeyError:
- break
-
- for obj in contents:
- key = obj[u"Key"]
- if key.endswith(suffix):
- yield obj
- except exceptions.EndpointConnectionError:
- raise RuntimeError(
- u"Connection Error!"
- )
-
- def _get_matching_s3_content(
- self, key, expression):
- """This function filters the contents of an S3 object based on a simple
- structured query language (SQL) statement. In the request, along with
- the SQL expression, we are specifying JSON serialization of the object.
- S3 uses this format to parse object data into records, and returns only
- records that match the specified SQL expression. Data serialization
- format for the response is set to JSON.
-
- :param key: S3 Key (file path).
- :param expression: S3 compatible SQL query.
- :type key: str
- :type expression: str
- :returns: JSON content of interest.
- :rtype: str
- :raises RuntimeError: If connection to storage fails.
- :raises ValueError: If JSON reading fails.
- """
- try:
- content = self.client.select_object_content(
- Bucket=self.bucket,
- Key=key,
- ExpressionType=u"SQL",
- Expression=expression,
- InputSerialization={
- u"JSON": {
- u"Type": u"Document"
- },
- u"CompressionType": u"GZIP"
- },
- OutputSerialization={
- u"JSON": {
- u"RecordDelimiter": u""
- }
- }
- )
- records = u""
- for event in content[u"Payload"]:
- if u"Records" in event:
- records = event[u"Records"][u"Payload"].decode(u"utf-8")
- return records
- except exceptions.EndpointConnectionError:
- raise RuntimeError(
- u"Connection Error!"
- )
- except exceptions.EventStreamError:
- raise ValueError(
- u"Malformed JSON content!"
- )
-
- def _get_matching_s3_object(
- self, key):
- """Gets full S3 object. If the file is gzip'd it will be unpacked.
-
- :param key: Name of the S3 key (file).
- :type key: str
- :returns: JSON file of interest.
- :rtype: str
- :raises RuntimeError: If connection to storage fails.
- """
- try:
- streaming_object = self.client.get_object(
- Bucket=self.bucket,
- Key=key
- )[u"Body"]
- with GzipFile(fileobj=streaming_object) as gzipfile:
- content = gzipfile.read()
- return content
- except exceptions.EndpointConnectionError:
- raise RuntimeError(
- u"Connection Error!"
- )
-
- def _get_matching_s3_length(
- self, key):
- """Gets the file size of S3 object. If the file is gzip'd the packed
- size is reported.
-
- :param key: Name of the S3 key (file).
- :type key: str
- :returns: File size in bytes. Defaults to 0 if any error.
- :rtype: int
- :raises RuntimeError: If connection to storage fails.
- """
- try:
- compressed_size = self.client.get_object(
- Bucket=self.bucket,
- Key=key
- )[u"ContentLength"]
- last_four_bytes = self.client.get_object(
- Bucket=self.bucket,
- Key=key,
- Range=f"bytes={compressed_size-4}-{compressed_size}"
- )[u"Body"]
- return unpack(u"I", last_four_bytes.read(4))[0]
- except exceptions.EndpointConnectionError:
- return 0
-
- def is_large_file(
- self, key):
- """Returns True if file is larger then 1MB that S3 select allows.
-
- :param key: Name of the S3 key (file).
- :type key: str
- :returns: Returns True if file is large then 1MB that S3 select allows.
- :rtype: bool
- """
- return bool(
- self._get_matching_s3_length(key=key[u"Key"]) > S3_API_LIMIT
- )
-
- def s3_file_processing(
- self, prefix=u"", suffix=u"json.gz",
- expression=u"select * from s3object s"):
- """Batch S3 key processing. Function retrieves list of files and use
- S3 Select API to query content.
-
- :param prefix: Only fetch keys that start with this prefix (optional).
- :param suffix: Only fetch keys that end with this suffix (optional).
- :param expression: S3 compatible SQL query (optional).
- :type prefix: str
- :type suffix: str
- :type expression: str
- """
- key_iterator = self._get_matching_s3_keys(
- bucket=self.bucket,
- prefix=prefix,
- suffix=suffix
- )
-
- for key in key_iterator:
- try:
- yield key[u"Key"], loads(
- self._get_matching_s3_content(
- key=key[u"Key"], expression=expression
- )
- )
- except ValueError:
- return
-
- def s3_dump_file_processing(
- self, prefix=u"", suffix=u"json.gz"):
- """Batch S3 key processing. Function retrieves list of files and use
- S3 Get Object API to query content.
-
- :param prefix: Only fetch keys that start with this prefix (optional).
- :param suffix: Only fetch keys that end with this suffix (optional).
- :type prefix: str
- :type suffix: str
- """
- key_iterator = self._get_matching_s3_keys(
- bucket=self.bucket,
- prefix=prefix,
- suffix=suffix
- )
-
- for key in key_iterator:
- try:
- yield loads(
- self._get_matching_s3_object(
- key=key[u"Key"]
- )
- )
- except ValueError:
- return
diff --git a/resources/tools/telemetry/__main__.py b/resources/tools/telemetry/__main__.py
index 2ab87b661a..7a612b8eea 100755
--- a/resources/tools/telemetry/__main__.py
+++ b/resources/tools/telemetry/__main__.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -19,6 +19,7 @@ from argparse import ArgumentParser, RawDescriptionHelpFormatter
from .executor import Executor
+
def main():
"""
Main entry function when called from cli
@@ -45,5 +46,6 @@ def main():
else:
Executor(args.config).execute(args.hook)
+
if __name__ == u"__main__":
main()
diff --git a/resources/tools/telemetry/bundle_bpf.py b/resources/tools/telemetry/bundle_bpf.py
index 77bc9acf91..58cfd5d0b6 100644
--- a/resources/tools/telemetry/bundle_bpf.py
+++ b/resources/tools/telemetry/bundle_bpf.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -17,6 +17,7 @@ from logging import getLogger
import sys
from bcc import BPF
+from .constants import Constants
class BundleBpf:
@@ -51,12 +52,15 @@ class BundleBpf:
self.obj = BPF(text=self.code)
- def attach(self, duration):
+
+ def attach(self, sample_period):
"""
Attach events to BPF.
- :param duration: Trial duration.
- :type duration: int
+ :param sample_period: A "sampling" event is one that generates
+ an overflow notification every N events, where N is given by
+ sample_period.
+ :type sample_period: int
"""
try:
for event in self.events:
@@ -64,15 +68,16 @@ class BundleBpf:
ev_type=event[u"type"],
ev_config=event[u"name"],
fn_name=event[u"target"],
- sample_period=duration
+ sample_period=sample_period
)
except AttributeError:
- getLogger(__name__).error(u"Cannot attach BPF events!")
- sys.exit(1)
+ getLogger("console_stderr").error(f"Could not attach BPF event: "
+ f"{event[u'name']}")
+ sys.exit(Constants.err_linux_attach)
def detach(self):
"""
- Dettach events from BPF.
+ Detach events from BPF.
"""
try:
for event in self.events:
@@ -81,26 +86,70 @@ class BundleBpf:
ev_config=event[u"name"]
)
except AttributeError:
- getLogger(__name__).error(u"Cannot dettach BPF events!")
- sys.exit(1)
+ getLogger("console_stderr").error(u"Could not detach BPF events!")
+ sys.exit(Constants.err_linux_detach)
def fetch_data(self):
"""
Fetch data by invoking API calls to BPF.
"""
self.serializer.create(metrics=self.metrics)
+
+ max_len = {"cpu": 3, "pid": 3, "name": 4, "value": 5}
+ text = ""
+ table_name = ""
+ item_list = []
+
for _, metric_list in self.metrics.items():
for metric in metric_list:
+ if table_name != metric[u"name"]:
+ table_name = metric[u"name"]
+ text += f"{table_name}\n"
for (key, val) in self.obj.get_table(metric[u"name"]).items():
item = dict()
labels = dict()
item[u"name"] = metric[u"name"]
item[u"value"] = val.value
- for label in metric[u"labels"]:
+ for label in metric[u"labelnames"]:
labels[label] = getattr(key, label)
item[u"labels"] = labels
+ item[u'labels'][u'name'] = \
+ item[u'labels'][u'name'].decode(u'utf-8')
+ if item[u"labels"][u"name"] == u"python3":
+ continue
+ if len(str(item[u'labels'][u'cpu'])) > max_len["cpu"]:
+ max_len["cpu"] = len(str(item[u'labels'][u'cpu']))
+ if len(str(item[u'labels'][u'pid'])) > max_len[u"pid"]:
+ max_len[u"pid"] = len(str(item[u'labels'][u'pid']))
+ if len(str(item[u'labels'][u'name'])) > max_len[u"name"]:
+ max_len[u"name"] = len(str(item[u'labels'][u'name']))
+ if len(str(item[u'value'])) > max_len[u"value"]:
+ max_len[u"value"] = len(str(item[u'value']))
+
self.api_replies_list.append(item)
- getLogger(__name__).info(item)
+ item_list.append(item)
+
+ item_list = sorted(item_list, key=lambda x: x['labels']['cpu'])
+ item_list = sorted(item_list, key=lambda x: x['name'])
+
+ for itl in item_list:
+ if table_name != itl[u"name"]:
+ table_name = itl[u"name"]
+ text += f"\n==={table_name}===\n" \
+ f"cpu {u' ' * (max_len[u'cpu'] - 3)} " \
+ f"pid {u' ' * (max_len[u'pid'] - 3)} " \
+ f"name {u' ' * (max_len[u'name'] - 4)} " \
+ f"value {u' ' * (max_len[u'value'] - 5)}\n"
+ text += (
+ f"""{str(itl[u'labels'][u'cpu']) + u' ' *
+ (max_len[u"cpu"] - len(str(itl[u'labels'][u'cpu'])))} """
+ f"""{str(itl[u'labels'][u'pid']) + u' ' *
+ (max_len[u"pid"] - len(str(itl[u'labels'][u'pid'])))} """
+ f"""{str(itl[u'labels'][u'name']) + u' ' *
+ (max_len[u"name"] - len(str(itl[u'labels'][u'name'])))} """
+ f"""{str(itl[u'value']) + u' ' *
+ (max_len[u"value"] - len(str(itl[u'value'])))}\n""")
+ getLogger(u"console_stdout").info(text)
def process_data(self):
"""
diff --git a/resources/tools/telemetry/bundle_perf_stat.py b/resources/tools/telemetry/bundle_perf_stat.py
new file mode 100644
index 0000000000..471dd07b18
--- /dev/null
+++ b/resources/tools/telemetry/bundle_perf_stat.py
@@ -0,0 +1,112 @@
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Perf Stat performance bundle."""
+
+from logging import getLogger
+import sys
+import subprocess
+
+from .constants import Constants
+
+
+class BundlePerfStat:
+ """
+ Creates a Perf stat object. This is the main object for defining a Perf Stat
+ program and interacting with its output.
+
+ Syntax: perf stat [-e <EVENT> | --event=EVENT] [-a] — <command> [<options>]
+ """
+ def __init__(self, program, serializer, hook):
+ """Initialize Bundle Perf Stat event class.
+
+ :param program: events
+ :param serializer: Metric serializer.
+ :param hook: Process ID.
+ :type program: dict
+ :type serializer: Serializer
+ :type hook: int
+ """
+ self.metrics = program[u"metrics"]
+ self.events = program[u"events"]
+ self.api_replies_list = list()
+ self.serializer = serializer
+ self.hook = hook
+
+ def attach(self, duration=1):
+ """
+ Performs perf stat.
+
+ :param duration: Time how long perf stat is collecting data (in
+ seconds). Default value is 1 second.
+ :type duration: int
+ """
+ try:
+ self.serializer.create(metrics=self.metrics)
+ event = self.events[0]
+ text = subprocess.getoutput(
+ f"""sudo perf stat -x\; -e\
+ '{{cpu/event={hex(event[u"eventcode"])},\
+ umask={hex(event[u"umask"])}/u}}'\
+ -a --per-thread\
+ sleep {duration}"""
+ )
+ except subprocess.CalledProcessError:
+ getLogger("console_stderr").error(f"Could not successfully run "
+ f"perf stat command.")
+ sys.exit(Constants.err_linux_perf_stat)
+
+ if text == u"":
+ getLogger("console_stdout").info(event[u"eventcode"])
+ else:
+ for line in text.splitlines():
+ if line.count(u";") < 6:
+ getLogger("console_stdout").info(
+ f"Could not get counters for current thread."
+ f"{line}"
+ )
+ continue
+ item = dict()
+ labels = dict()
+ item[u"name"] = self.metrics['counter'][0]['name']
+ item[u"value"] = line.split(";")[1]
+ labels["thread"] = u"-".join(
+ line.split(";")[0].split("-")[0:-1]
+ )
+ labels["pid"] = line.split(";")[0].split("-")[-1]
+ item[u"labels"] = labels
+
+ getLogger("console_stdout").info(item)
+ self.api_replies_list.append(item)
+
+
+ def detach(self):
+ """
+ Detach function.
+ """
+ pass
+
+ def fetch_data(self):
+ """
+ Fetch data function.
+ """
+ pass
+
+ def process_data(self):
+ """
+ Post process API replies.
+ """
+ for item in self.api_replies_list:
+ self.serializer.serialize(
+ metric=item[u"name"], labels=item[u"labels"], item=item
+ )
diff --git a/resources/tools/telemetry/bundle_vpp.py b/resources/tools/telemetry/bundle_vpp.py
index 01526fe83f..963690bb5d 100644
--- a/resources/tools/telemetry/bundle_vpp.py
+++ b/resources/tools/telemetry/bundle_vpp.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -20,7 +20,7 @@ import struct
import sys
from vpp_papi.vpp_papi import VPPApiClient as vpp_class
-
+from .constants import Constants
M_RUN_THREAD = (
r"Thread\s"
@@ -209,8 +209,8 @@ class BundleVpp:
try:
self.obj.connect(name=u"telemetry")
except (ConnectionRefusedError, OSError):
- getLogger(__name__).error(u"Cannot connect to VPP!")
- sys.exit(1)
+ getLogger("console_stderr").error(u"Could not connect to VPP!")
+ sys.exit(Constants.err_vpp_connect)
for command in self.code.splitlines():
api_name = u"cli_inband"
@@ -223,7 +223,11 @@ class BundleVpp:
"""
Detach from VPP.
"""
- self.obj.disconnect()
+ try:
+ self.obj.disconnect()
+ except (ConnectionRefusedError, OSError):
+ getLogger("console_stderr").error(u"Could not disconnect from VPP!")
+ sys.exit(Constants.err_vpp_disconnect)
def fetch_data(self):
"""
@@ -234,8 +238,12 @@ class BundleVpp:
papi_fn = getattr(self.obj.api, command[u"api_name"])
getLogger(__name__).info(command[u"api_args"][u"cmd"])
replies = papi_fn(**command[u"api_args"])
- except (AttributeError, IOError, struct.error) as err:
- raise AssertionError(err)
+ except (AssertionError, AttributeError, IOError, struct.error):
+ getLogger("console_stderr").error(
+ f"Failed when executing command: "
+ f"{command['api_args']['cmd']}"
+ )
+ sys.exit(Constants.err_vpp_execute)
if not isinstance(replies, list):
replies = [replies]
@@ -253,27 +261,27 @@ class BundleVpp:
Post process command reply.
"""
for command in zip(self.api_command_list, self.api_replies_list):
- self_fn = command[0][u"api_args"][u"cmd"]
+ self_fn = command[0][u"api_args"][u"cmd"].replace(u" ", u"_")
+ self_method_list = [meth for meth in dir(self)
+ if callable(getattr(self, meth)) and
+ meth.startswith('__') is False]
+ if self_fn not in self_method_list:
+ continue
try:
- self_fn = getattr(self, self_fn.replace(u" ", u"_"))
+ self_fn = getattr(self, self_fn)
self_fn(command[1].reply)
except AttributeError:
pass
+ except (KeyError, ValueError, TypeError) as exc:
+ getLogger("console_stderr").error(
+ f"Failed when processing data. Error message {exc}"
+ )
+ sys.exit(Constants.err_telemetry_process)
def show_interface(self, reply):
"""
Parse the show interface output.
- Output format:
- {
- "name": "rx_packets",
- "labels": {
- "name": "tap0",
- "index": "0",
- },
- "value": "31",
- },
-
:param reply: API reply.
:type reply: str
"""
@@ -302,19 +310,6 @@ class BundleVpp:
"""
Parse the show runtime output.
- Output format:
- {
- "name": "clocks",
- "labels": {
- "name": "virtio-input",
- "state": "polling",
- "thread_name": "vpp_wk_1",
- "thread_id": "2",
- "thread_lcore": "3",
- },
- "value": "3.17e2",
- },
-
:param reply: API reply.
:type reply: str
"""
@@ -347,19 +342,6 @@ class BundleVpp:
"""
Parse the show node conuter output.
- Output format:
- {
- "name": "node_counters",
- "labels": {
- "name": "dpdk-input",
- "reason": "no_error",
- "severity": "error",
- "thread_name": "vpp_wk_1",
- "thread_id": "2",
- },
- "value": "1",
- },
-
:param reply: API reply.
:type reply: str
"""
@@ -391,19 +373,6 @@ class BundleVpp:
"""
Parse the permon output.
- Output format:
- {
- "name": "clocks",
- "labels": {
- "name": "virtio-input",
- "state": "polling",
- "thread_name": "vpp_wk_1",
- "thread_id": "2",
- "thread_lcore": "3",
- },
- "value": "3.17e2",
- },
-
:param reply: API reply.
:type reply: str
"""
@@ -480,15 +449,6 @@ class BundleVpp:
"""
Parse the version output.
- Output format:
- {
- "name": "version",
- "labels": {
- "version": "v21.06-rc0~596-g1ca6c65e5~b1065",
- },
- "value": 1.0,
- },
-
:param reply: API reply.
:type reply: str
"""
@@ -499,7 +459,7 @@ class BundleVpp:
item[u"name"] = metric
labels[u"version"] = version
item[u"labels"] = labels
- item[u"value"] = 1.0
+ item[u"value"] = {}
self.serializer.serialize(
metric=metric, labels=labels, item=item
)
diff --git a/resources/tools/telemetry/bundle_vppctl.py b/resources/tools/telemetry/bundle_vppctl.py
new file mode 100644
index 0000000000..d0ee3754c7
--- /dev/null
+++ b/resources/tools/telemetry/bundle_vppctl.py
@@ -0,0 +1,425 @@
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""VPP execution bundle."""
+
+from logging import getLogger
+from re import fullmatch, sub
+import subprocess
+import sys
+
+from .constants import Constants
+
+M_RUN_THREAD = (
+ r"Thread\s"
+ r"(?P<thread_id>\d+)\s"
+ r"(?P<thread_name>\S+)\s.*"
+ r"(?P<thread_lcore>\d+).*"
+)
+M_RUN_SEPARATOR = (
+ r"(-)+"
+)
+M_RUN_NODES = (
+ r"(?P<node_name>\S+)\s+"
+ r"(?P<state>\S+\s\S+|\S+)\s+"
+ r"(?P<calls>\d+)\s+"
+ r"(?P<vectors>\d+)\s+"
+ r"(?P<suspends>\d+)\s+"
+ r"(?P<clocks>\S+)\s+"
+ r"(?P<vectors_calls>\S+)"
+)
+M_RUN_TIME = (
+ r"Time\s\S+,\s\d+\ssec\sinternal\snode\svector\srate\s"
+ r"(?P<rate>\S+)\sloops/sec\s"
+ r"(?P<loops>\S+)"
+)
+M_INT_BEGIN = (
+ r"(?P<name>\S+)\s+"
+ r"(?P<index>\S+)\s+"
+ r"(?P<state>\S+)\s+"
+ r"(?P<mtu>\S+)\s+"
+ r"(?P<counter>\S+\s\S+|\S+)\s+"
+ r"(?P<count>\d+)"
+)
+M_INT_CONT = (
+ r"\s+"
+ r"(?P<counter>\S+\s\S+|\S+)\s+"
+ r"(?P<count>\d+)"
+)
+M_NODE_COUNTERS_THREAD = (
+ r"Thread\s"
+ r"(?P<thread_id>\d+)\s\("
+ r"(?P<thread_name>\S+)\):\s*"
+)
+M_NODE_COUNTERS = (
+ r"\s*"
+ r"(?P<count>\d+)\s+"
+ r"(?P<name>\S+)\s+"
+ r"(?P<reason>(\S+\s)+)\s+"
+ r"(?P<severity>\S+)\s+"
+ r"(?P<index>\d+)\s*"
+)
+M_PMB_CS_HEADER = (
+ r"\s*per-thread\s+context\s+switches.*"
+)
+M_PMB_CS = (
+ r"(?P<thread_name>\S+)\s+\("
+ r"(?P<thread_id>\S+)\)\s+\S+\s+"
+ r"(?P<context_switches>[\d\.]+)"
+)
+M_PMB_PF_HEADER = (
+ r"\s*per-thread\s+page\s+faults.*"
+)
+M_PMB_PF = (
+ r"(?P<thread_name>\S+)\s+\("
+ r"(?P<thread_id>\S+)\)\s+\S+\s+"
+ r"(?P<minor_page_faults>[\d\.]+)\s+"
+ r"(?P<major_page_faults>[\d\.]+)"
+)
+M_PMB_THREAD = (
+ r"\s*"
+ r"(?P<thread_name>\S+)\s+\("
+ r"(?P<thread_id>\d+)\)\s*"
+)
+M_PMB_IC_HEADER = (
+ r"\s*instructions/packet,\s+cycles/packet\s+and\s+IPC.*"
+)
+M_PMB_IC_NODE = (
+ r"\s*"
+ r"(?P<node_name>\S+)\s+"
+ r"(?P<calls>[\d\.]+)\s+"
+ r"(?P<packets>[\d\.]+)\s+"
+ r"(?P<packets_per_call>[\d\.]+)\s+"
+ r"(?P<clocks_per_packets>[\d\.]+)\s+"
+ r"(?P<instructions_per_packets>[\d\.]+)\s+"
+ r"(?P<ipc>[\d\.]+)"
+)
+M_PMB_CM_HEADER = (
+ r"\s*cache\s+hits\s+and\s+misses.*"
+)
+M_PMB_CM_NODE = (
+ r"\s*"
+ r"(?P<node_name>\S+)\s+"
+ r"(?P<l1_hit>[\d\.]+)\s+"
+ r"(?P<l1_miss>[\d\.]+)\s+"
+ r"(?P<l2_hit>[\d\.]+)\s+"
+ r"(?P<l2_miss>[\d\.]+)\s+"
+ r"(?P<l3_hit>[\d\.]+)\s+"
+ r"(?P<l3_miss>[\d\.]+)"
+)
+M_PMB_LO_HEADER = (
+ r"\s*load\s+operations.*"
+)
+M_PMB_LO_NODE = (
+ r"\s*"
+ r"(?P<node_name>\S+)\s+"
+ r"(?P<calls>[\d\.]+)\s+"
+ r"(?P<packets>[\d\.]+)\s+"
+ r"(?P<one>[\d\.]+)\s+"
+ r"(?P<two>[\d\.]+)\s+"
+ r"(?P<three>[\d\.]+)"
+)
+M_PMB_BM_HEADER = (
+ r"\s*Branches,\s+branches\s+taken\s+and\s+mis-predictions.*"
+)
+M_PMB_BM_NODE = (
+ r"\s*"
+ r"(?P<node_name>\S+)\s+"
+ r"(?P<branches_per_call>[\d\.]+)\s+"
+ r"(?P<branches_per_packet>[\d\.]+)\s+"
+ r"(?P<taken_per_call>[\d\.]+)\s+"
+ r"(?P<taken_per_packet>[\d\.]+)\s+"
+ r"(?P<mis_predictions>[\d\.]+)"
+)
+M_PMB_MB_HEADER = (
+ r"\s*memory\s+reads\s+and\s+writes\s+per\s+memory\s+controller.*"
+)
+M_PMB_MB = (
+ r"\s*"
+ r"(?P<name>\S+)\s+"
+ r"(?P<runtime>[\d\.]+)\s+"
+ r"(?P<reads_mbs>[\d\.]+)\s+"
+ r"(?P<writes_mbs>[\d\.]+)\s+"
+ r"(?P<total_mbs>[\d\.]+)"
+)
+
+
+class BundleVppctl:
+ """
+ Creates a VPP object. This is the main object for defining a VPP program,
+ and interacting with its output.
+ """
+ def __init__(self, program, serializer, hook):
+ """
+ Initialize Bundle VPP class.
+
+ :param program: VPP instructions.
+ :param serializer: Metric serializer.
+ :param hook: VPP CLI socket.
+ :type program: dict
+ :type serializer: Serializer
+ :type hook: int
+ """
+ self.obj = None
+ self.code = program["code"]
+ self.metrics = program["metrics"]
+ self.cli_command_list = list()
+ self.cli_replies_list = list()
+ self.serializer = serializer
+ self.hook = hook
+
+ def attach(self, duration):
+ """
+ Attach events to VPP.
+
+ :param duration: Trial duration.
+ :type duration: int
+ """
+ for command in self.code.splitlines():
+ self.cli_command_list.append(
+ command.format(duration=duration, socket=self.hook)
+ )
+
+ def detach(self):
+ """
+ Detach from VPP.
+ """
+
+ def fetch_data(self):
+ """
+ Fetch data by invoking subprocess calls.
+ """
+ for command in self.cli_command_list:
+ try:
+ getLogger(__name__).info(command)
+ replies = subprocess.getoutput(command)
+ except (AssertionError, AttributeError):
+ getLogger("console_stderr").error(
+ f"Failed when executing command: {command}"
+ )
+ sys.exit(Constants.err_vpp_execute)
+
+ self.cli_replies_list.append(replies)
+ replies = sub(r"\x1b[^m]*m", "", replies)
+ if replies:
+ getLogger(__name__).info(replies)
+ else:
+ getLogger(__name__).info("<no reply>")
+ self.serializer.create(metrics=self.metrics)
+
+ def process_data(self):
+ """
+ Post process command reply.
+ """
+ for command in zip(self.cli_command_list, self.cli_replies_list):
+ self_fn = command[0].replace(
+ f"-s {self.hook} ", "").replace(" ", "_")
+ self_method_list = [meth for meth in dir(self)
+ if callable(getattr(self, meth)) and
+ meth.startswith('__') is False]
+ if self_fn not in self_method_list:
+ continue
+ try:
+ self_fn = getattr(self, self_fn)
+ self_fn(command[1])
+ except AttributeError:
+ pass
+ except (KeyError, ValueError, TypeError) as exc:
+ getLogger("console_stderr").error(
+ f"Failed when processing data. Error message {exc}"
+ )
+ sys.exit(Constants.err_telemetry_process)
+
+ def vppctl_show_interface(self, reply):
+ """
+ Parse the show interface output.
+
+ :param reply: VPP reply.
+ :type reply: str
+ """
+ for line in reply.splitlines():
+ item = dict()
+ labels = dict()
+ if fullmatch(M_INT_BEGIN, line):
+ ifc = fullmatch(M_INT_BEGIN, line).groupdict()
+ metric = ifc["counter"].replace(" ", "_").replace("-", "_")
+ item["name"] = metric
+ item["value"] = ifc["count"]
+ if fullmatch(M_INT_CONT, line):
+ ifc_cnt = fullmatch(M_INT_CONT, line).groupdict()
+ metric = ifc_cnt["counter"].replace(" ", "_").replace("-", "_")
+ item["name"] = metric
+ item["value"] = ifc_cnt["count"]
+ if fullmatch(M_INT_BEGIN, line) or fullmatch(M_INT_CONT, line):
+ labels["name"] = ifc["name"]
+ labels["index"] = ifc["index"]
+ item["labels"] = labels
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ def vppctl_show_runtime(self, reply):
+ """
+ Parse the show runtime output.
+
+ :param reply: VPP reply.
+ :type reply: str
+ """
+ for line in reply.splitlines():
+ if fullmatch(M_RUN_THREAD, line):
+ thread = fullmatch(M_RUN_THREAD, line).groupdict()
+ if fullmatch(M_RUN_NODES, line):
+ nodes = fullmatch(M_RUN_NODES, line).groupdict()
+ for metric in self.serializer.metric_registry:
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["node_name"] = nodes["node_name"]
+ labels["state"] = nodes["state"]
+ try:
+ labels["thread_name"] = thread["thread_name"]
+ labels["thread_id"] = thread["thread_id"]
+ labels["thread_lcore"] = thread["thread_lcore"]
+ except UnboundLocalError:
+ labels["thread_name"] = "vpp_main"
+ labels["thread_id"] = "0"
+ labels["thread_lcore"] = "0"
+ item["labels"] = labels
+ item["value"] = nodes[metric]
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ def vppctl_show_node_counters_verbose(self, reply):
+ """
+ Parse the show node conuter output.
+
+ :param reply: VPP reply.
+ :type reply: str
+ """
+ for line in reply.splitlines():
+ if fullmatch(M_NODE_COUNTERS_THREAD, line):
+ thread = fullmatch(M_NODE_COUNTERS_THREAD, line).groupdict()
+ if fullmatch(M_NODE_COUNTERS, line):
+ nodes = fullmatch(M_NODE_COUNTERS, line).groupdict()
+ for metric in self.serializer.metric_registry_registry:
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["name"] = nodes["name"]
+ labels["reason"] = nodes["reason"]
+ labels["severity"] = nodes["severity"]
+ try:
+ labels["thread_name"] = thread["thread_name"]
+ labels["thread_id"] = thread["thread_id"]
+ except UnboundLocalError:
+ labels["thread_name"] = "vpp_main"
+ labels["thread_id"] = "0"
+ item["labels"] = labels
+ item["value"] = nodes["count"]
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ def vppctl_show_perfmon_statistics(self, reply):
+ """
+ Parse the perfmon output.
+
+ :param reply: VPP reply.
+ :type reply: str
+ """
+ def perfmon_threads(reply, regex_threads):
+ for line in reply.splitlines():
+ if fullmatch(regex_threads, line):
+ threads = fullmatch(regex_threads, line).groupdict()
+ for metric in self.serializer.metric_registry:
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["name"] = threads["thread_name"]
+ labels["id"] = threads["thread_id"]
+ item["labels"] = labels
+ item["value"] = threads[metric]
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ def perfmon_nodes(reply, regex_threads, regex_nodes):
+ for line in reply.splitlines():
+ if fullmatch(regex_threads, line):
+ thread = fullmatch(regex_threads, line).groupdict()
+ if fullmatch(regex_nodes, line):
+ node = fullmatch(regex_nodes, line).groupdict()
+ for metric in self.serializer.metric_registry:
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["node_name"] = node["node_name"]
+ labels["thread_name"] = thread["thread_name"]
+ labels["thread_id"] = thread["thread_id"]
+ item["labels"] = labels
+ item["value"] = node[metric]
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ def perfmon_system(reply, regex_line):
+ for line in reply.splitlines():
+ if fullmatch(regex_line, line):
+ name = fullmatch(regex_line, line).groupdict()
+ for metric in self.serializer.metric_registry:
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["name"] = name["name"]
+ item["labels"] = labels
+ item["value"] = name[metric]
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
+
+ reply = sub(r"\x1b[^m]*m", "", reply)
+
+ if fullmatch(M_PMB_CS_HEADER, reply.splitlines()[0]):
+ perfmon_threads(reply, M_PMB_CS)
+ if fullmatch(M_PMB_PF_HEADER, reply.splitlines()[0]):
+ perfmon_threads(reply, M_PMB_PF)
+ if fullmatch(M_PMB_IC_HEADER, reply.splitlines()[0]):
+ perfmon_nodes(reply, M_PMB_THREAD, M_PMB_IC_NODE)
+ if fullmatch(M_PMB_CM_HEADER, reply.splitlines()[0]):
+ perfmon_nodes(reply, M_PMB_THREAD, M_PMB_CM_NODE)
+ if fullmatch(M_PMB_LO_HEADER, reply.splitlines()[0]):
+ perfmon_nodes(reply, M_PMB_THREAD, M_PMB_LO_NODE)
+ if fullmatch(M_PMB_BM_HEADER, reply.splitlines()[0]):
+ perfmon_nodes(reply, M_PMB_THREAD, M_PMB_BM_NODE)
+ if fullmatch(M_PMB_MB_HEADER, reply.splitlines()[0]):
+ perfmon_system(reply, M_PMB_MB)
+
+ def vppctl_show_version(self, reply):
+ """
+ Parse the version output.
+
+ :param reply: VPP reply.
+ :type reply: str
+ """
+ for metric in self.serializer.metric_registry:
+ version = reply.split()[1]
+ item = dict()
+ labels = dict()
+ item["name"] = metric
+ labels["version"] = version
+ item["labels"] = labels
+ item["value"] = {}
+ self.serializer.serialize(
+ metric=metric, labels=labels, item=item
+ )
diff --git a/resources/tools/telemetry/constants.py b/resources/tools/telemetry/constants.py
new file mode 100644
index 0000000000..d5641ede2d
--- /dev/null
+++ b/resources/tools/telemetry/constants.py
@@ -0,0 +1,52 @@
+# Copyright (c) 2022 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Constants used in telemetry.
+
+"Constant" means a value that keeps its value since initialization. The value
+does not need to be hard coded here, but can be read from environment variables.
+"""
+
+
+class Constants:
+ """Constants used in telemetry.
+ 1-10: Telemetry errors
+ 11-50: VPP bundle error
+ 51-100: Linux bundle errors"""
+
+ # Failed when processing data
+ err_telemetry_process = 1
+
+ # Failed to read YAML file
+ err_telemetry_yaml = 2
+
+ # Error executing bundle
+ err_telemetry_bundle = 3
+
+ # Could not connect to VPP
+ err_vpp_connect = 11
+
+ # Could not disconnect from VPP
+ err_vpp_disconnect = 12
+
+ # Failed when executing command
+ err_vpp_execute = 13
+
+ # Could not attach BPF events
+ err_linux_attach = 51
+
+ # Could not detach BPF events
+ err_linux_detach = 52
+
+ # Could not successfuly run perf stat command
+ err_linux_perf_stat = 53
diff --git a/resources/tools/telemetry/executor.py b/resources/tools/telemetry/executor.py
index 75db4b6a40..4d335c187d 100644
--- a/resources/tools/telemetry/executor.py
+++ b/resources/tools/telemetry/executor.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -20,6 +20,7 @@ import sys
from .parser import Parser
from .serializer import Serializer
+from .constants import Constants
class Executor:
@@ -103,5 +104,5 @@ class ExecutorError(Exception):
"""
super().__init__()
self.message = message
- getLogger(__name__).error(message)
- sys.exit(1)
+ getLogger("console_stderr").error(message)
+ sys.exit(Constants.err_telemetry_bundle)
diff --git a/resources/tools/telemetry/metrics.py b/resources/tools/telemetry/metrics.py
index 281760183b..27fad89a5c 100644
--- a/resources/tools/telemetry/metrics.py
+++ b/resources/tools/telemetry/metrics.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -104,7 +104,7 @@ class Metric:
u"Sample", [u"name", u"labels", u"value", u"timestamp"]
)
- if not re.compile(r"^[a-zA-Z_:][a-zA-Z0-9_:]*$").match(name):
+ if not re.compile(r"^[a-zA-Z._:][a-zA-Z0-9._:]*$").match(name):
raise ValueError(f"Invalid metric name: {name}!")
if typ not in self.metric_types:
raise ValueError(f"Invalid metric type: {typ}!")
@@ -210,11 +210,11 @@ class MetricBase:
:rasies ValueError: If name does not conform with naming conventions.
"""
full_name = u""
- full_name += f"{namespace}_" if namespace else u""
- full_name += f"{subsystem}_" if subsystem else u""
+ full_name += f"{namespace}." if namespace else u""
+ full_name += f"{subsystem}." if subsystem else u""
full_name += name
- if not re.compile(r"^[a-zA-Z_:][a-zA-Z0-9_:]*$").match(full_name):
+ if not re.compile(r"^[a-zA-Z._:][a-zA-Z0-9._:]*$").match(full_name):
raise ValueError(
f"Invalid metric name: {full_name}!"
)
@@ -340,7 +340,7 @@ class MetricBase:
def samples(self):
"""
- Returns samples wheter an object is parent or child.
+ Returns samples whether an object is parent or child.
:returns: List of Metric objects with values.
:rtype: list
@@ -602,9 +602,9 @@ class Info(MetricBase):
"""
Set info to the given value.
- :param amount: Value to set.
- :type amount: int or float
- :raises ValueError: If lables are overlapping.
+ :param value: Value to set.
+ :type value: int or float
+ :raises ValueError: If labels are overlapping.
"""
if self._labelname_set.intersection(value.keys()):
raise ValueError(
diff --git a/resources/tools/telemetry/parser.py b/resources/tools/telemetry/parser.py
index c6cc167066..1570a4f047 100644
--- a/resources/tools/telemetry/parser.py
+++ b/resources/tools/telemetry/parser.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -18,6 +18,7 @@ from pathlib import Path
import sys
from yaml import safe_load, YAMLError
+from .constants import Constants
class Parser:
@@ -103,5 +104,5 @@ class ParserError(Exception):
"""
super().__init__()
self.message = message
- getLogger(__name__).error(self.message)
- sys.exit(1)
+ getLogger("console_stderr").error(self.message)
+ sys.exit(Constants.err_telemetry_yaml)
diff --git a/resources/tools/telemetry/serializer.py b/resources/tools/telemetry/serializer.py
index e8315c832d..e28454fc8b 100644
--- a/resources/tools/telemetry/serializer.py
+++ b/resources/tools/telemetry/serializer.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2021 Cisco and/or its affiliates.
+# Copyright (c) 2022 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
@@ -19,7 +19,7 @@ from logging import getLogger
class Serializer:
"""
- Executor class reponsible for executing configuration.
+ Executor class responsible for executing configuration.
"""
def __init__(self):
"""
@@ -94,6 +94,7 @@ class Serializer:
if line.labels:
llabel = []
for k, value in sorted(line.labels.items()):
+ value = str(value)
value = value.replace(u"\\", r"\\")
value = value.replace(u"\n", r"\n")
value = value.replace(u'"', r'\"')