]> rtime.felk.cvut.cz Git - socketcan-devel.git/blob - etc/can_if
Add modifiers for sampling-point and sjw to can_if start/stop script.
[socketcan-devel.git] / etc / can_if
1 #!/bin/sh
2
3 ### BEGIN INIT INFO
4 # Provides:           can_if
5 # Required-Start:     $local_fs $syslog mountkernfs
6 # Required-Stop:      $local_fs $syslog mountkernfs
7 # Default-Start:      2 3 4 5
8 # Default-Stop:       0 1 6
9 # Short-Description:  Starts the configured CAN-Interfaces and creates virtual CAN Interfaces on the system.
10 ### END INIT INFO
11
12 #
13 # $Id$
14 #
15 # Simple script to start CAN and VCAN interfaces with netlink configuration
16 #
17 # Copyright (c) 2009 Volkswagen Group Electronic Research
18 #
19
20 # Exit if 'ip' from the iproute2 package is not installed
21 test -x /sbin/ip || exit 0
22
23 # On some systems the automatic module loading via
24 # /etc/modules.conf is quite slow. To ensure the immediately 
25 # availability of specific modules you can define critical
26 # modules in the PROBE variable. E.g. PROBE="can-tp20"
27
28 # Exit if modprobe is not installed
29 test -x /sbin/modprobe || exit 0
30
31 # The syntax for the CAN devices is: devname[@bitrate][,restart-ms]
32 # example CAN_IF="can0 can1@500000 can2@500000,200 can3,500"
33 CAN_IF=""
34
35 # To modify the sampling-point and SJW settings for the in-kernel bittiming
36 # calculation. "0" => set default values (CAN CIA sampling-point / sjw=1)
37 SAMPOINT="0" # example for 84% : SAMPOINT=".840"
38 SJW="0"      # example for max. sjw : SJW="4"
39
40 VCAN_IF="vcan0 vcan1 vcan2 vcan3"
41 PROBE="vcan"
42
43 case "$1" in
44         start|force-reload)
45         if [ -n "$PROBE" ] ; then
46                 echo -n "Extra probing CAN modules:"
47                 for MODULE in $PROBE; do
48                         echo -n " "$MODULE
49                         /sbin/modprobe -q $MODULE
50                 done
51                 echo "."
52         fi
53         if [ -n "$CAN_IF" ] ; then
54                 echo -n "Enabling CAN interfaces:"
55                 for IF in $CAN_IF; do
56                         echo -n " "$IF
57                         DEVICE=${IF%@*}
58                         DEVICE=${DEVICE%,*}
59                         HASBTR=`echo $IF | grep "@"`
60                         if [ -n "$HASBTR" ]; then
61                                 BITRATE=${IF#*@}
62                                 BITRATE=${BITRATE%,*}
63                                 /sbin/ip link set $DEVICE type can bitrate $BITRATE sample-point $SAMPOINT sjw $SJW
64                         fi
65                         HASMS=`echo $IF | grep ","` 
66                         if [ -n "$HASMS" ]; then
67                                 RESTARTMS=${IF#*,}
68                                 /sbin/ip link set $DEVICE type can restart-ms $RESTARTMS
69                         fi
70                         /sbin/ip link set $DEVICE up
71                 done
72                 echo "."
73         fi
74         if [ -n "$VCAN_IF" ] ; then
75                 echo -n "Creating and enabling virtual CAN interfaces:"
76                 for IF in $VCAN_IF; do
77                         echo -n " "$IF
78                         /sbin/ip link add name $IF type vcan
79                         /sbin/ip link set $IF up
80                 done
81                 echo "."
82         fi
83         ;;
84         restart|reload)
85         if [ -n "$CAN_IF" ] ; then
86                 echo -n "Restarting CAN interfaces:"
87                 for IF in $CAN_IF; do
88                         DEVICE=${IF%@*}
89                         DEVICE=${DEVICE%,*}
90                         echo -n " "$DEVICE
91                         /sbin/ip link set $DEVICE down
92                         /sbin/ip link set $DEVICE up
93                 done
94                 echo "."
95         fi
96         if [ -n "$VCAN_IF" ] ; then
97                 echo -n "Restarting virtual CAN interfaces:"
98                 for IF in $VCAN_IF; do
99                         echo -n " "$IF
100                         /sbin/ip link set $IF down
101                         /sbin/ip link set $IF up
102                 done
103                 echo "."
104         fi
105         ;;
106         stop)
107         if [ -n "$CAN_IF" ] ; then
108                 echo -n "Shutting down CAN interfaces:"
109                 for IF in $CAN_IF; do
110                         DEVICE=${IF%@*}
111                         DEVICE=${DEVICE%,*}
112                         echo -n " "$DEVICE
113                         /sbin/ip link set $DEVICE down
114                 done
115                 echo "."
116         fi
117         if [ -n "$VCAN_IF" ] ; then
118                 echo -n "Shutting down and removing virtual CAN interfaces:"
119                 for IF in $VCAN_IF; do
120                         echo -n " "$IF
121                         /sbin/ip link set $IF down
122                         /sbin/ip link del $IF
123                 done
124                 echo "."
125         fi
126         ;;
127         *)
128         echo "Usage: /etc/init.d/can_if {start|stop|restart|reload|force-reload}"
129         exit 1
130 esac
131
132 exit 0