+#!/bin/bash
+
+# ----- Initialize CAN devices -----
+. vcaninit.sh 1000
+
+
+# ----- Configure ftrace -----
+mount -t debugfs nodev /sys/kernel/debug
+FTRDIR=/sys/kernel/debug/tracing
+sysctl kernel.ftrace_enabled=1
+echo "function_graph" > ${FTRDIR}/current_tracer
+sleep 1
+echo "can_send" > ${FTRDIR}/set_ftrace_filter
+echo 1 > ${FTRDIR}/tracing_on
+
+
+# ----- Run benchmarks -----
+DESTDIR=ftrace
+GAP=1
+OCCOUNT=5000
+DATA=i
+LENGTH=8
+FRMTYPE=""
+DEV="vcan0"
+
+echo "Benchmarking ..."
+
+for X in "sff" "eff";
+do
+ if [ ${X} == "eff" ]; then
+ FRMTYPE="-e"
+ else
+ FRMTYPE=""
+ fi
+
+ # Default (pfifo qdisc)
+ echo "[pfifo]"
+ . setcanfltr.sh del ${DEV}
+ echo > ${FTRDIR}/trace
+ cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_pfifo1.txt
+
+ echo > ${FTRDIR}/trace
+ cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_pfifo2.txt
+
+
+ # With PRIO qdisc; all traffic is classified into first class
+ echo "[prio]"
+ echo > ${FTRDIR}/trace
+ . setcanfltr.sh del ${DEV}
+ . setcanfltr.sh prio ${DEV}
+ cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio1.txt
+
+ # With PRIO qdisc; most of the traffic goes to "default" class
+ echo > ${FTRDIR}/trace
+ cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio1b.txt
+
+
+ # With PRIO qdisc; There is maximum rules for each (except the last) class
+ echo "[prio2]"
+ echo > ${FTRDIR}/trace
+ . setcanfltr.sh del ${DEV}
+
+ if [ ${X} == "eff" ]; then
+ . setcanfltr.sh prio2eff ${DEV}
+ else
+ . setcanfltr.sh prio2sff ${DEV}
+ fi
+
+ cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_prio2.txt
+
+
+ # With HTB qdisc
+ echo "[htb]"
+ echo > ${FTRDIR}/trace
+ . setcanfltr.sh del ${DEV}
+ . setcanfltr.sh htb ${DEV}
+ cangen ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_htb1.txt
+
+ echo > ${FTRDIR}/trace
+ cangen ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_htb2.txt
+
+ # With SFQ qdisc
+ echo "[sfq]"
+ echo > ${FTRDIR}/trace
+ . setcanfltr.sh del ${DEV}
+ . setcanfltr.sh sfq ${DEV}
+ cangen -b 18432 ${FRMTYPE} ${DEV} -I 123 -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_sfq.txt
+
+ echo > ${FTRDIR}/trace
+ cangen -b 18432 ${FRMTYPE} ${DEV} -I i -L ${LENGTH} -D ${DATA} -g ${GAP} -n ${COUNT}
+ cp ${FTRDIR}/trace ${DESTDIR}/ftrace_${X}_sfq2.txt
+
+done
+
+
+# ----- Disable tracing -----
+echo 0 > ${FTRDIR}/tracing_on
+exit 0
+