+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -p) OPT_PLOT_ONLY=1; shift;;
+ esac
+done
+
set -x
set -e
rmmod_can() {
modprobe -r lincan
+ modprobe -r kvaser_pci
+ modprobe -r vcan
}
-load_lincan_hw() {
+prepare_lincan_hw() {
rmmod_can
modprobe -C /dev/null lincan hw=pcican-q io=1 baudrate=1000,1000,1000,1000 processlocal=0
+ CAN0=/dev/can0
+ CAN1=/dev/can1
+ DRIVER=lincan
sleep 0.1
}
-load_lincan_virtual() {
+prepare_lincan_virtual() {
rmmod_can
modprobe -C /dev/null lincan hw=virtual io=0 baudrate=0
+ CAN0=/dev/can0
+ DRIVER=lincan-virtual
sleep 0.1
}
-load_socketcan() {
+prepare_socketcan_hw() {
+ rmmod_can
+ modprobe kvaser_pci
+ echo 1000000 > /sys/class/net/can0/can_bittiming/bitrate
+ ip link set up dev can0
+ echo 1000000 > /sys/class/net/can1/can_bittiming/bitrate
+ ip link set up dev can1
+ echo 1000000 > /sys/class/net/can2/can_bittiming/bitrate
+ ip link set up dev can2
+ echo 1000000 > /sys/class/net/can3/can_bittiming/bitrate
+ ip link set up dev can3
+ CAN0=socketcan:can0
+ CAN1=socketcan:can1
+ DRIVER=socketcan
+}
+
+prepare_socketcan_virtual() {
rmmod_can
+ modprobe vcan
+ ip link add dev vcan0 type vcan
+ ip link set up dev vcan0
+ CAN0=socketcan:vcan0
+ DRIVER=socketcan-virtual
}
+
+run_tests() {
+ [ "$OPT_PLOT_ONLY" -eq 1 ] && return
+
+ tests=${TESTS:-lincan_hw socketcan_hw}
+ for i in $tests; do
+ prepare_$i
+ t
+ done
+}
+
+plot() {
+ if [ -n "$PLOT_CMD" ]; then
+ echo "set terminal postscript color eps enhanced;
+ set output '`basename $0 .sh`.eps'; $PLOT_CMD" | gnuplot
+ echo "set terminal x11 enhanced; $PLOT_CMD" | gnuplot -persist
+ fi
+}
+
+trap 'run_tests && plot' EXIT
. lib.sh
-load_lincan_hw
+t() {
+ PID_S=`vca_canping -s 1 -b -r -d $CAN1`
+ vca_canping -m 1 -r -v -g $DRIVER -t 1 -d $CAN0 -w 5 -c 1000
+ kill $PID_S
+}
-PID_S=`vca_canping -s 1 -b -r -d /dev/can1`
+PLOT_CMD='
+set logscale y
+set grid
+set title "Round-trip time measurement (`uname -r`)"
+set xlabel "Time [{/Symbol m}s]"
+set ylabel "Latency profile [messages]"
+plot [0:] "socketcan-1000.dat" with lp title "Socketcan",\
+ "lincan-1000.dat" with lp title "Lincan"
+'
-vca_canping -m 1 -r -v -t 1 -d /dev/can0 -w 5 -c 1000
-
-kill $PID_S
-#killall -9 vca_canping
--- /dev/null
+#!/bin/sh
+
+. lib.sh
+
+t() {
+ PID_S=`vca_canping -s 1 -b -r -d $CAN0`
+ vca_canping -m 1 -r -v -g $DRIVER -t 1 -d $CAN0 -w 1 -c 10000
+ kill $PID_S
+}
+
+TESTS="lincan_virtual socketcan_virtual"
+
+PLOT_CMD='
+set logscale y
+set grid
+set title "Round-trip time measurement - virtual CAN (`uname -r`)"
+set xlabel "Time [{/Symbol m}s]"
+set ylabel "Latency profile [messages]"
+plot [0:] "socketcan-virtual-1000.dat" with lp title "Socketcan",\
+ "lincan-virtual-1000.dat" with lp title "Lincan"
+'
+