Fix typo in run_report
[csit.git] / resources / tools / report_gen / run_report.sh
1 #!/bin/bash
2
3 set -x
4
5 WORKING_DIR='_tmp'
6 BUILD_DIR='_build'
7 SOURCE_DIR='../../../docs/report'
8 DTR_SOURCE_DIR="${SOURCE_DIR}/detailed_test_results"
9 DTR_PERF_SOURCE_DIR=${DTR_SOURCE_DIR}/vpp_performance_results
10 DTR_TESTPMD_SOURCE_DIR=${DTR_SOURCE_DIR}/testpmd_performance_results
11 DTR_FUNC_SOURCE_DIR=${DTR_SOURCE_DIR}/vpp_functional_results
12 DTR_HONEYCOMB_SOURCE_DIR=${DTR_SOURCE_DIR}/honeycomb_functional_results
13 STATIC_DIR="${BUILD_DIR}/_static"
14 STATIC_DIR_VPP="${STATIC_DIR}/vpp"
15 STATIC_DIR_TESTPMD="${STATIC_DIR}/testpmd"
16 STATIC_DIR_ARCH="${STATIC_DIR}/archive"
17 CSS_PATCH_FILE="${STATIC_DIR}/theme_overrides.css"
18 JEN_URL='https://jenkins.fd.io/view/csit/job'
19
20 sudo apt-get -y update
21 sudo apt-get -y install libxml2 libxml2-dev libxslt-dev build-essential \
22     zlib1g-dev unzip
23
24 # Clean-up when finished:
25 trap 'rm -rf ${WORKING_DIR}; exit' EXIT
26 trap 'rm -rf ${WORKING_DIR}; exit' ERR
27
28 # Remove the old build:
29 rm -rf ${BUILD_DIR} || true
30 rm -rf ${WORKING_DIR} || true
31
32 # Create working directories
33 mkdir ${BUILD_DIR}
34
35 # Create virtual environment:
36 virtualenv ${WORKING_DIR}/env
37 . ${WORKING_DIR}/env/bin/activate
38
39 # Install Sphinx:
40 pip install -r requirements.txt
41
42 export PYTHONPATH=`pwd`
43
44 # Download raw outputs for plots
45 echo Downloading raw outputs for plots ...
46 mkdir -p ${STATIC_DIR_VPP}
47 mkdir -p ${STATIC_DIR_TESTPMD}
48 mkdir -p ${STATIC_DIR_ARCH}
49
50 ### VPP PERFORMANCE SOURCE DATA
51
52 JEN_FILE_PERF='output_perf_data.xml'
53 JEN_JOB='csit-vpp-perf-1704-all'
54 JEN_BUILD=(1)
55
56 for i in "${JEN_BUILD[@]}"; do
57     curl -fs ${JEN_URL}/${JEN_JOB}/${i}/artifact/${JEN_FILE_PERF} \
58         -o ${STATIC_DIR_VPP}/${JEN_JOB}-${i}.xml
59     curl -fs ${JEN_URL}/${JEN_JOB}/${i}/artifact/\*zip\*/archive.zip \
60         -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${i}.zip
61 done
62
63 # DELETE ME
64 #cp ./${JEN_JOB}-${JEN_BUILD[-1]}.zip ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD[-1]}.zip
65
66 unzip -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD[-1]}.zip -d ${WORKING_DIR}/
67 # L2 Ethernet Switching
68 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
69     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_l2.rst \
70     --formatting rst --start 3 --level 2 \
71     --regex ".+(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndr" \
72     --title "L2 Ethernet Switching"
73 # IPv4 Routed-Forwarding
74 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
75     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_ipv4.rst \
76     --formatting rst --start 3 --level 2 \
77     --regex ".+ethip4-ip4[a-z0-9]+-[a-z-]*ndr" \
78     --title "IPv4 Routed-Forwarding"
79 # IPv6 Routed-Forwarding
80 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
81     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_ipv6.rst \
82     --formatting rst --start 3 --level 2 \
83     --regex ".+ethip6-ip6[a-z0-9]+-[a-z-]*ndr" \
84     --title "IPv6 Routed-Forwarding"
85 # IPv4 Overlay Tunnels
86 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
87     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_ipv4o.rst \
88     --formatting rst --start 3 --level 2 \
89     --regex ".+ethip4[a-z0-9]+-[a-z0-9]*-ndr" \
90     --title "IPv4 Overlay Tunnels"
91 # IPv6 Overlay Tunnels
92 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
93     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_ipv6o.rst \
94     --formatting rst --start 3 --level 2 \
95     --regex ".+ethip6[a-z0-9]+-[a-z0-9]*-ndr" \
96     --title "IPv6 Overlay Tunnels"
97 # VM Vhost Connections
98 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
99     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_vhost.rst \
100     --formatting rst --start 3 --level 2 \
101     --regex ".+vhost.*" \
102     --title "VM Vhost Connections"
103 # Crypto in hardware: IP4FWD, IP6FWD
104 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
105     --output ${DTR_PERF_SOURCE_DIR}/vpp_performance_results_ipsec.rst \
106     --formatting rst --start 3 --level 2 \
107     --regex ".+ipsec.*" \
108     --title "Crypto in hardware: IP4FWD, IP6FWD"
109 sed -i -e "s@###JOB###@${JEN_JOB}\/${JEN_BUILD[-1]}@g" \
110     ${DTR_PERF_SOURCE_DIR}/index.rst
111 sed -i -e "s@###LINK###@${JEN_URL}\/${JEN_JOB}\/${JEN_BUILD[-1]}@g" \
112     ${DTR_PERF_SOURCE_DIR}/index.rst
113 rm -f ${DTR_PERF_SOURCE_DIR}/*.json
114
115 ### DPDK PERFORMANCE SOURCE DATA
116
117 JEN_JOB='csit-dpdk-perf-1704-all'
118 JEN_BUILD=(1)
119
120 for i in "${JEN_BUILD[@]}"; do
121     curl -fs ${JEN_URL}/${JEN_JOB}/${i}/artifact/${JEN_FILE_PERF} \
122         -o ${STATIC_DIR_TESTPMD}/${JEN_JOB}-${i}.xml
123     curl -fs ${JEN_URL}/${JEN_JOB}/${i}/artifact/\*zip\*/archive.zip \
124        -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${i}.zip
125 done
126
127 # DELETE ME
128 #cp ./${JEN_JOB}-${JEN_BUILD[-1]}.zip ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD[-1]}.zip
129
130 unzip -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD[-1]}.zip -d ${WORKING_DIR}/
131 # Testpmd Performance Results
132 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
133     --output ${DTR_TESTPMD_SOURCE_DIR}/testpmd_performance_results.rst \
134     --formatting rst --start 3 --level 2
135 sed -i -e "s@###JOB###@${JEN_JOB}\/${JEN_BUILD[-1]}@g" \
136     ${DTR_TESTPMD_SOURCE_DIR}/index.rst
137 sed -i -e "s@###LINK###@${JEN_URL}\/${JEN_JOB}\/${JEN_BUILD[-1]}@g" \
138     ${DTR_TESTPMD_SOURCE_DIR}/index.rst
139 rm -f ${DTR_TESTPMD_SOURCE_DIR}/*.json
140
141 ### FUNCTIONAL SOURCE DATA
142
143 JEN_JOB='csit-vpp-functional-1704-ubuntu1604-virl'
144 JEN_BUILD=12
145
146 curl -fs ${JEN_URL}/${JEN_JOB}/${JEN_BUILD}/artifact/\*zip\*/archive.zip \
147     -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip
148
149 # DELETE ME
150 #cp ./${JEN_JOB}-${JEN_BUILD}.zip ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip
151
152 unzip -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip -d ${WORKING_DIR}/
153 # Cop Address Security
154 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
155     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_cop.rst \
156     --formatting rst --start 4 --level 2 \
157     --regex ".+cop.*" \
158     --title "Cop Address Security"
159 # DHCP Client and proxy
160 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
161     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_dhcp.rst \
162     --formatting rst --start 4 --level 2 \
163     --regex ".+dhcp.*" \
164     --title "DHCP - Client and Proxy"
165 # GRE Overlay Tunnels
166 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
167     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_gre.rst \
168     --formatting rst --start 4 --level 2 \
169     --regex ".+ethip4gre.*" \
170     --title "GRE Overlay Tunnels"
171 # iACL Security
172 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
173     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_iacl.rst \
174     --formatting rst --start 4 --level 2 \
175     --regex ".+iacl.*" \
176     --title "iACL Security"
177 # IPSec - Tunnels and Transport
178 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
179     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_ipsec.rst \
180     --formatting rst --start 4 --level 2 \
181     --regex ".+ipsec(tnl|tpt)+-.*" \
182     --title "IPSec - Tunnels and Transport"
183 # IPv4 Routed-Forwarding
184 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
185     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_ipv4.rst \
186     --formatting rst --start 4 --level 2 \
187     --regex ".+ethip4-ip4base-(func|ip4ecmp\-func|ip4proxyarp\-func|ip4arp\-func)+" \
188     --title "IPv4 Routed-Forwarding"
189 # IPv6 Routed-Forwarding
190 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
191     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_ipv6.rst \
192     --formatting rst --start 4 --level 2 \
193     --regex ".+ethip6-ip6base-(func|ip6ecmp\-func|ip6ra\-func)+" \
194     --title "IPv6 Routed-Forwarding"
195 # L2BD Ethernet Switching
196 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
197     --output ${DTR_SOURCE_DIR}/vpp_functional_results/vpp_functional_results_l2bd.rst \
198     --formatting rst --start 4 --level 2 \
199     --regex ".+eth-l2bdbasemac(lrn|stc)+-(func|eth\-2vhost|l2shg\-func).*" \
200     --title "L2BD Ethernet Switching"
201 # L2XC Ethernet Switching
202 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
203     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_l2xc.rst \
204     --formatting rst --start 4 --level 2 \
205     --regex ".+eth-l2xcbase-(eth|func).*" \
206     --title "L2XC Ethernet Switching"
207 # LISP Overlay Tunnels
208 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
209     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_lisp.rst \
210     --formatting rst --start 4 --level 2 \
211     --regex ".+lisp.*" \
212     --title "LISP Overlay Tunnels"
213 # QoS Policer Metering
214 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
215     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_policer.rst \
216     --formatting rst --start 4 --level 2 \
217     --regex ".+ipolicemark.*" \
218     --title "QoS Policer Metering"
219 # RPF Source Security
220 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
221     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_rpf.rst \
222     --formatting rst --start 4 --level 2 \
223     --regex ".+rpf.*" \
224     --title "RPF Source Security"
225 # Softwire Tunnels
226 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
227     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_softwire.rst \
228     --formatting rst --start 4 --level 2 \
229     --regex ".+swire.*" \
230     --title "Softwire Tunnels"
231 # Tap Interface
232 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
233     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_tap.rst \
234     --formatting rst --start 4 --level 2 \
235     --regex ".+tap.*" \
236     --title "Tap Interface"
237 # Telemetry - IPFIX and SPAN
238 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
239     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_telemetry.rst \
240     --formatting rst --start 4 --level 2 \
241     --regex ".+(ipfix|spanrx).*" \
242     --title "Telemetry - IPFIX and SPAN"
243 # VLAN Tag Translation
244 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
245     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_vlan.rst \
246     --formatting rst --start 4 --level 2 \
247     --regex ".+(dot1q\-|dot1ad\-).*" \
248     --title "VLAN Tag Translation"
249 # VRF Routed-Forwarding
250 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
251     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_vrf.rst \
252     --formatting rst --start 4 --level 2 \
253     --regex ".+ethip(4|6)+-ip(4|6)+basevrf.*" \
254     --title "VRF Routed-Forwarding"
255 # VXLAN Overlay Tunnels
256 python run_robot_data.py -i ${WORKING_DIR}/archive/output.xml \
257     --output ${DTR_FUNC_SOURCE_DIR}/vpp_functional_results_vxlan.rst \
258     --formatting rst --start 4 --level 2 \
259     --regex ".+(ip4vxlan|ip6vxlan).*" \
260     --title "VXLAN Overlay Tunnels"
261 sed -i -e "s@###JOB###@${JEN_JOB}\/${JEN_BUILD}@g" \
262     ${DTR_FUNC_SOURCE_DIR}/index.rst
263 sed -i -e "s@###LINK###@${JEN_URL}\/${JEN_JOB}\/${JEN_BUILD}@g" \
264     ${DTR_FUNC_SOURCE_DIR}/index.rst
265 rm -f ${DTR_FUNC_SOURCE_DIR}/*.json
266
267 ### HONEYCOMB SOURCE DATA
268
269 JEN_URL='https://jenkins.fd.io/view/hc2vpp/job'
270 JEN_JOB='hc2vpp-csit-integration-1704-ubuntu1604'
271 JEN_BUILD=27
272
273 curl -fs ${JEN_URL}/${JEN_JOB}/${JEN_BUILD}/artifact/\*zip\*/archive.zip \
274     -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip
275
276 # DELETE ME
277 #cp ./${JEN_JOB}-${JEN_BUILD}.zip ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip
278
279 unzip -o ${STATIC_DIR_ARCH}/${JEN_JOB}-${JEN_BUILD}.zip -d ${WORKING_DIR}/
280 python run_robot_data.py -i ${WORKING_DIR}/archive/csit/output.xml \
281     --output ${DTR_HONEYCOMB_SOURCE_DIR}/honeycomb_functional_results.rst \
282     --formatting rst --start 3 --level 2
283 sed -i -e "s@###JOB###@${JEN_JOB}\/${JEN_BUILD}@g" \
284     ${DTR_HONEYCOMB_SOURCE_DIR}/index.rst
285 sed -i -e "s@###LINK###@${JEN_URL}\/${JEN_JOB}\/${JEN_BUILD}@g" \
286     ${DTR_HONEYCOMB_SOURCE_DIR}/index.rst
287 rm -f ${DTR_HONEYCOMB_SOURCE_DIR}/*.json
288
289 # Generate the documentation:
290
291 DATE=$(date -u '+%d-%b-%Y')
292
293 sphinx-build -v -c . -a -b html -E \
294     -D release=$1 -D version="$1 report - $DATE" \
295     ${SOURCE_DIR} ${BUILD_DIR}/
296
297 # Patch the CSS for tables layout
298 cat - > ${CSS_PATCH_FILE} <<"_EOF"
299 /* override table width restrictions */
300 @media screen and (min-width: 767px) {
301     .wy-table-responsive table td, .wy-table-responsive table th {
302         white-space: normal !important;
303     }
304
305     .wy-table-responsive {
306         font-size: small;
307         margin-bottom: 24px;
308         max-width: 100%;
309         overflow: visible !important;
310     }
311 }
312 _EOF
313
314 # Plot packets per second
315
316 python run_plot.py --input ${STATIC_DIR_VPP} \
317     --output ${STATIC_DIR_VPP}/64B-1t1c-l2-ndrdisc \
318     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
319     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
320 python run_plot.py --input ${STATIC_DIR_VPP} \
321     --output ${STATIC_DIR_VPP}/64B-2t2c-l2-ndrdisc \
322     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
323     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
324
325 python run_plot.py --input ${STATIC_DIR_VPP} \
326     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-ip4-ndrdisc \
327     --title "64B-1t1c-ethip4-ip4[a-z0-9]+-[a-z-]*ndrdisc" \
328     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]'
329 python run_plot.py --input ${STATIC_DIR_VPP} \
330     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-ip4-ndrdisc \
331     --title "64B-2t2c-ethip4-ip4[a-z0-9]+-[a-z-]*ndrdisc" \
332     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]'
333
334 python run_plot.py --input ${STATIC_DIR_VPP} \
335     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-ip6-ndrdisc \
336     --title "78B-1t1c-ethip6-ip6[a-z0-9]+-[a-z-]*ndrdisc" \
337     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]'
338 python run_plot.py --input ${STATIC_DIR_VPP} \
339     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-ip6-ndrdisc \
340     --title "78B-2t2c-ethip6-ip6[a-z0-9]+-[a-z-]*ndrdisc" \
341     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]'
342
343 python run_plot.py --input ${STATIC_DIR_VPP} \
344     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-ndrdisc \
345     --title "64B-1t1c-ethip4[a-z0-9]+-[a-z0-9]*-ndrdisc" \
346     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
347 python run_plot.py --input ${STATIC_DIR_VPP} \
348     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-ndrdisc \
349     --title "64B-2t2c-ethip4[a-z0-9]+-[a-z0-9]*-ndrdisc" \
350     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
351
352 python run_plot.py --input ${STATIC_DIR_VPP} \
353     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-ndrdisc \
354     --title "78B-1t1c-ethip6[a-z0-9]+-[a-z0-9]*-ndrdisc" \
355     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
356 python run_plot.py --input ${STATIC_DIR_VPP} \
357     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-ndrdisc \
358     --title "78B-2t2c-ethip6[a-z0-9]+-[a-z0-9]*-ndrdisc" \
359     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
360
361 python run_plot.py --input ${STATIC_DIR_VPP} \
362     --output ${STATIC_DIR_VPP}/64B-1t1c-vhost-ndrdisc \
363     --title "64B-1t1c-.*vhost.*-ndrdisc" \
364     --xpath '//*[@framesize="64B" and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"VHOST")]'
365 python run_plot.py --input ${STATIC_DIR_VPP} \
366     --output ${STATIC_DIR_VPP}/64B-2t2c-vhost-ndrdisc \
367     --title "64B-2t2c-.*vhost.*-ndrdisc" \
368     --xpath '//*[@framesize="64B" and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"VHOST")]'
369
370 python run_plot.py --input ${STATIC_DIR_VPP} \
371     --output ${STATIC_DIR_VPP}/64B-1t1c-ipsechw-ndrdisc \
372     --title "64B-1t1c-.*ipsec.*-ndrdisc" \
373     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "NDRDISC") and contains(@tags, "1T1C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]'
374 python run_plot.py --input ${STATIC_DIR_VPP} \
375     --output ${STATIC_DIR_VPP}/64B-2t2c-ipsechw-ndrdisc \
376     --title "64B-2t2c-.*ipsec.*-ndrdisc" \
377     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "NDRDISC") and contains(@tags, "2T2C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]'
378
379 python run_plot.py --input ${STATIC_DIR_VPP} \
380     --output ${STATIC_DIR_VPP}/64B-1t1c-l2-pdrdisc \
381     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-pdrdisc" \
382     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
383 python run_plot.py --input ${STATIC_DIR_VPP} \
384     --output ${STATIC_DIR_VPP}/64B-2t2c-l2-pdrdisc \
385     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-pdrdisc" \
386     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
387
388 python run_plot.py --input ${STATIC_DIR_VPP} \
389     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-ip4-pdrdisc \
390     --title "64B-1t1c-ethip4-ip4[a-z0-9]+-[a-z-]*pdrdisc" \
391     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]'
392 python run_plot.py --input ${STATIC_DIR_VPP} \
393     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-ip4-pdrdisc \
394     --title "64B-2t2c-ethip4-ip4[a-z0-9]+-[a-z-]*pdrdisc" \
395     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]'
396
397 python run_plot.py --input ${STATIC_DIR_VPP} \
398     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-ip6-pdrdisc \
399     --title "78B-1t1c-ethip6-ip6[a-z0-9]+-[a-z-]*pdrdisc" \
400     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]'
401 python run_plot.py --input ${STATIC_DIR_VPP} \
402     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-ip6-pdrdisc \
403     --title "78B-2t2c-ethip6-ip6[a-z0-9]+-[a-z-]*pdrdisc" \
404     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]'
405
406 python run_plot.py --input ${STATIC_DIR_VPP} \
407     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-pdrdisc \
408     --title "64B-1t1c-ethip4[a-z0-9]+-[a-z0-9]*-pdrdisc" \
409     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
410 python run_plot.py --input ${STATIC_DIR_VPP} \
411     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-pdrdisc \
412     --title "64B-2t2c-ethip4[a-z0-9]+-[a-z0-9]*-pdrdisc" \
413     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
414
415 python run_plot.py --input ${STATIC_DIR_VPP} \
416     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-pdrdisc \
417     --title "78B-1t1c-ethip6[a-z0-9]+-[a-z0-9]*-pdrdisc" \
418     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
419 python run_plot.py --input ${STATIC_DIR_VPP} \
420     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-pdrdisc \
421     --title "78B-2t2c-ethip6[a-z0-9]+-[a-z0-9]*-pdrdisc" \
422     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]'
423
424 python run_plot.py --input ${STATIC_DIR_VPP} \
425     --output ${STATIC_DIR_VPP}/64B-1t1c-vhost-pdrdisc \
426     --title "64B-1t1c-.*vhost.*-pdrdisc" \
427     --xpath '//*[@framesize="64B" and contains(@tags,"PDRDISC") and contains(@tags,"1T1C") and not(contains(@tags,"NDRDISC")) and contains(@tags,"VHOST")]'
428 python run_plot.py --input ${STATIC_DIR_VPP} \
429     --output ${STATIC_DIR_VPP}/64B-2t2c-vhost-pdrdisc \
430     --title "64B-2t2c-.*vhost.*-pdrdisc" \
431     --xpath '//*[@framesize="64B" and contains(@tags,"PDRDISC") and contains(@tags,"2T2C") and not(contains(@tags,"NDRDISC")) and contains(@tags,"VHOST")]'
432
433 python run_plot.py --input ${STATIC_DIR_VPP} \
434     --output ${STATIC_DIR_VPP}/64B-1t1c-ipsechw-pdrdisc \
435     --title "64B-1t1c-.*ipsec.*-pdrdisc" \
436     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags, "1T1C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]'
437 python run_plot.py --input ${STATIC_DIR_VPP} \
438     --output ${STATIC_DIR_VPP}/64B-2t2c-ipsechw-pdrdisc \
439     --title "64B-2t2c-.*ipsec.*-pdrdisc" \
440     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags, "2T2C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]'
441
442 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
443     --output ${STATIC_DIR_TESTPMD}/64B-1t1c-l2-ndrdisc \
444     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
445     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
446 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
447     --output ${STATIC_DIR_TESTPMD}/64B-2t2c-l2-ndrdisc \
448     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
449     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
450
451 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
452     --output ${STATIC_DIR_TESTPMD}/64B-1t1c-l2-pdrdisc \
453     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-pdrdisc" \
454     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
455 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
456     --output ${STATIC_DIR_TESTPMD}/64B-2t2c-l2-pdrdisc \
457     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-pdrdisc" \
458     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"PDRDISC") and not(contains(@tags,"NDRDISC")) and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]'
459
460 # Plot latency
461
462 python run_plot.py --input ${STATIC_DIR_VPP} \
463     --output ${STATIC_DIR_VPP}/64B-1t1c-l2-ndrdisc-lat50 \
464     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
465     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]' --latency lat_50
466 python run_plot.py --input ${STATIC_DIR_VPP} \
467     --output ${STATIC_DIR_VPP}/64B-2t2c-l2-ndrdisc-lat50 \
468     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
469     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]' --latency lat_50
470
471 python run_plot.py --input ${STATIC_DIR_VPP} \
472     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-ip4-ndrdisc-lat50 \
473     --title "64B-1t1c-ethip4-ip4[a-z0-9]+-[a-z-]*ndrdisc" \
474     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]' --latency lat_50
475 python run_plot.py --input ${STATIC_DIR_VPP} \
476     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-ip4-ndrdisc-lat50 \
477     --title "64B-2t2c-ethip4-ip4[a-z0-9]+-[a-z-]*ndrdisc" \
478     --xpath '//*[@framesize="64B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"IP4FWD") and not(contains(@tags,"VHOST"))]' --latency lat_50
479
480 python run_plot.py --input ${STATIC_DIR_VPP} \
481     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-ip6-ndrdisc-lat50 \
482     --title "78B-1t1c-ethip6-ip6[a-z0-9]+-[a-z-]*ndrdisc" \
483     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]' --latency lat_50
484 python run_plot.py --input ${STATIC_DIR_VPP} \
485     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-ip6-ndrdisc-lat50 \
486     --title "78B-2t2c-ethip6-ip6[a-z0-9]+-[a-z-]*ndrdisc" \
487     --xpath '//*[@framesize="78B" and (contains(@tags,"BASE") or contains(@tags,"SCALE") or contains(@tags,"FEATURE")) and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"IP6FWD") and not(contains(@tags,"VHOST"))]' --latency lat_50
488
489 python run_plot.py --input ${STATIC_DIR_VPP} \
490     --output ${STATIC_DIR_VPP}/64B-1t1c-ethip4-ndrdisc-lat50 \
491     --title "64B-1t1c-ethip4[a-z0-9]+-[a-z0-9]*-ndrdisc" \
492     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]' --latency lat_50
493 python run_plot.py --input ${STATIC_DIR_VPP} \
494     --output ${STATIC_DIR_VPP}/64B-2t2c-ethip4-ndrdisc-lat50 \
495     --title "64B-2t2c-ethip4[a-z0-9]+-[a-z0-9]*-ndrdisc" \
496     --xpath '//*[@framesize="64B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]' --latency lat_50
497
498 python run_plot.py --input ${STATIC_DIR_VPP} \
499     --output ${STATIC_DIR_VPP}/78B-1t1c-ethip6-ndrdisc-lat50 \
500     --title "78B-1t1c-ethip6[a-z0-9]+-[a-z0-9]*-ndrdisc" \
501     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]' --latency lat_50
502 python run_plot.py --input ${STATIC_DIR_VPP} \
503     --output ${STATIC_DIR_VPP}/78B-2t2c-ethip6-ndrdisc-lat50 \
504     --title "78B-2t2c-ethip6[a-z0-9]+-[a-z0-9]*-ndrdisc" \
505     --xpath '//*[@framesize="78B" and contains(@tags,"ENCAP") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"VXLAN") or contains(@tags,"VXLANGPE") or contains(@tags,"LISP") or contains(@tags,"LISPGPE") or contains(@tags,"GRE")) and not(contains(@tags,"VHOST"))]' --latency lat_50
506
507 python run_plot.py --input ${STATIC_DIR_VPP} \
508     --output ${STATIC_DIR_VPP}/64B-1t1c-vhost-ndrdisc-lat50 \
509     --title "64B-1t1c-.*vhost.*-ndrdisc" \
510     --xpath '//*[@framesize="64B" and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and contains(@tags,"VHOST")]' --latency lat_50
511 python run_plot.py --input ${STATIC_DIR_VPP} \
512     --output ${STATIC_DIR_VPP}/64B-2t2c-vhost-ndrdisc-lat50 \
513     --title "64B-2t2c-.*vhost.*-ndrdisc" \
514     --xpath '//*[@framesize="64B" and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and contains(@tags,"VHOST")]' --latency lat_50
515
516 python run_plot.py --input ${STATIC_DIR_VPP} \
517     --output ${STATIC_DIR_VPP}/64B-1t1c-ipsechw-ndrdisc-lat50 \
518     --title "64B-1t1c-.*ipsec.*-ndrdisc" \
519     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "NDRDISC") and contains(@tags, "1T1C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]' --latency lat_50
520 python run_plot.py --input ${STATIC_DIR_VPP} \
521     --output ${STATIC_DIR_VPP}/64B-2t2c-ipsechw-ndrdisc-lat50 \
522     --title "64B-2t2c-.*ipsec.*-ndrdisc" \
523     --xpath '//*[@framesize="64B" and not(contains(@tags, "VHOST")) and contains(@tags, "IP4FWD") and contains(@tags, "NDRDISC") and contains(@tags, "2T2C") and contains(@tags, "IPSECHW") and (contains(@tags, "IPSECTRAN") or contains(@tags, "IPSECTUN"))]' --latency lat_50
524
525 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
526     --output ${STATIC_DIR_TESTPMD}/64B-1t1c-l2-ndrdisc-lat50 \
527     --title "64B-1t1c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
528     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"1T1C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]' --latency lat_50
529 python run_plot.py --input ${STATIC_DIR_TESTPMD} \
530     --output ${STATIC_DIR_TESTPMD}/64B-2t2c-l2-ndrdisc-lat50 \
531     --title "64B-2t2c-(eth|dot1q|dot1ad)-(l2xcbase|l2bdbasemaclrn)-ndrdisc" \
532     --xpath '//*[@framesize="64B" and contains(@tags,"BASE") and contains(@tags,"NDRDISC") and contains(@tags,"2T2C") and (contains(@tags,"L2BDMACSTAT") or contains(@tags,"L2BDMACLRN") or contains(@tags,"L2XCFWD")) and not(contains(@tags,"VHOST"))]' --latency lat_50
533
534 # Create archive
535 echo Creating csit.report.tar.gz ...
536 tar -czvf ./csit.report.tar.gz ${BUILD_DIR}