Home | History | Annotate | Download | only in filter-tests
      1 #!/bin/sh
      2 ################################################################################
      3 ## Copyright (c) Oliver Hartkopp <oliver.hartkopp (at] volkswagen.de>, 2011        ##
      4 ## Copyright (c) International Business Machines  Corp., 2009                 ##
      5 ##                                                                            ##
      6 ## This program is free software;  you can redistribute it and#or modify      ##
      7 ## it under the terms of the GNU General Public License as published by       ##
      8 ## the Free Software Foundation; either version 2 of the License, or          ##
      9 ## (at your option) any later version.                                        ##
     10 ##                                                                            ##
     11 ## This program is distributed in the hope that it will be useful, but        ##
     12 ## WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY ##
     13 ## or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License   ##
     14 ## for more details.                                                          ##
     15 ##                                                                            ##
     16 ## You should have received a copy of the GNU General Public License          ##
     17 ## along with this program;  if not, write to the Free Software Foundation,   ##
     18 ## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA           ##
     19 ##                                                                            ##
     20 ################################################################################
     21 
     22 TCID="$1"
     23 TST_TOTAL=1
     24 export TST_COUNT
     25 
     26 . test.sh
     27 
     28 setup()
     29 {
     30 	tst_require_root
     31 
     32 	# load needed CAN networklayer modules
     33 	modprobe can
     34 	ret=$?
     35 	if [ $ret -ne 0 ]; then
     36 		tst_brkm TCONF "modprobe can failed: ret - $ret"
     37 	fi
     38 
     39 	modprobe can_raw
     40 	ret=$?
     41 	if [ $ret -ne 0 ]; then
     42 		tst_brkm TCONF "modprobe can_raw failed: ret - $ret"
     43 	fi
     44 
     45 	# ensure the vcan driver to perform the ECHO on driver level
     46 	modprobe -r vcan
     47 	ret=$?
     48 	if [ $ret -ne 0 ]; then
     49 		tst_brkm TCONF "modprobe -r vcan failed: ret - $ret"
     50 	fi
     51 
     52 	modprobe vcan echo=1
     53 	ret=$?
     54 	if [ $ret -ne 0 ]; then
     55 		tst_brkm TCONF "modprobe vcan echo=1 failed: ret - $ret"
     56 	fi
     57 
     58 	VCAN=vcan0
     59 
     60 	# create virtual CAN device
     61 	ip link add dev $VCAN type vcan
     62 	ret=$?
     63 	if [ $ret -ne 0 ]; then
     64 		tst_brkm TBROK
     65 			 "ip link add dev $VCAN type vcan failed: ret - $ret"
     66 	fi
     67 
     68 	ip link set dev $VCAN up
     69 	ret=$?
     70 	if [ $ret -ne 0 ]; then
     71 		tst_brkm TBROK "ip link set dev $VCAN up failed: ret - $ret"
     72 	fi
     73 
     74 	# check precondition for CAN frame flow test
     75 	HAS_ECHO=`ip link show $VCAN | grep -c ECHO`
     76 	if [ $HAS_ECHO -ne 1 ]; then
     77 		tst_brkm TBROK "ECHO is not 1"
     78 	fi
     79 }
     80 
     81 cleanup()
     82 {
     83 	ip link set dev $VCAN down
     84 	ip link del dev $VCAN
     85 	modprobe -r vcan
     86 	modprobe -r can_raw
     87 	modprobe -r can
     88 }
     89 
     90 if [ $# -ne 1 ]; then
     91 	tst_brkm TBROK "Usage: $0 [can_filter | can_rcv_own_msgs]"
     92 fi
     93 
     94 setup
     95 TST_CLEANUP=cleanup
     96 
     97 "$1" "$VCAN"
     98 ret=$?
     99 case "$ret" in
    100 0)	tst_resm TPASS "Test $1 PASS";;
    101 1)	tst_resm TFAIL "Test $1 FAIL";;
    102 32)	tst_resm TCONF "$1 is not appropriate for configuration flag";;
    103 *)	tst_resm TBROK "Invalid resm type $ret";;
    104 esac
    105 
    106 tst_exit
    107