# HG changeset patch # User Florian Pose # Date 1147863134 0 # Node ID f288d557854c26ca1f5af3a2d0b027cd37939746 # Parent 1161d9e7a9594512485f8f12c1a5f69ac5e90f77 Better RC script. diff -r 1161d9e7a959 -r f288d557854c ethercat.sh --- a/ethercat.sh Wed May 17 09:28:43 2006 +0000 +++ b/ethercat.sh Wed May 17 10:52:14 2006 +0000 @@ -25,74 +25,110 @@ # #------------------------------------------------------------------------------ -CONFIGFILE=/etc/sysconfig/ethercat +### BEGIN INIT INFO +# Provides: EtherCAT +# Required-Start: +# Should-Start: +# Required-Stop: +# Should-Stop: +# Default-Start: 3 5 +# Default-Stop: 0 1 2 6 +# Short-Description: EtherCAT master driver and network device +# Description: +### END INIT INFO #------------------------------------------------------------------------------ -print_usage() -{ - echo "Usage: $0 { start | stop | restart }" -} +ETHERCAT_CONFIG=/etc/sysconfig/ethercat -unload_module() -{ - if lsmod | grep ^$1 > /dev/null; then - echo " unloading module \"$1\"..." - rmmod $1 || exit 1 - fi -} +test -r $ETHERCAT_CONFIG || { echo "$ETHERCAT_CONFIG not existing"; + if [ "$1" = "stop" ]; then exit 0; + else exit 6; fi; } + +. $ETHERCAT_CONFIG #------------------------------------------------------------------------------ -# Get parameters -if [ $# -eq 0 ]; then - print_usage - exit 1 -fi +# Shell functions sourced from /etc/rc.status: +# rc_check check and set local and overall rc status +# rc_status check and set local and overall rc status +# rc_status -v be verbose in local rc status and clear it afterwards +# rc_status -v -r ditto and clear both the local and overall rc status +# rc_status -s display "skipped" and exit with status 3 +# rc_status -u display "unused" and exit with status 3 +# rc_failed set local and overall rc status to failed +# rc_failed set local and overall rc status to +# rc_reset clear both the local and overall rc status +# rc_exit exit appropriate to overall rc status +# rc_active checks whether a service is activated by symlinks +. /etc/rc.status -ACTION=$1 +# Reset status of this service +rc_reset -# Load configuration from sysconfig +# Return values acc. to LSB for all commands but status: +# 0 - success +# 1 - generic or unspecified error +# 2 - invalid or excess argument(s) +# 3 - unimplemented feature (e.g. "reload") +# 4 - user had insufficient privileges +# 5 - program is not installed +# 6 - program is not configured +# 7 - program is not running +# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl) +# +# Note that starting an already running service, stopping +# or restarting a not-running service as well as the restart +# with force-reload (in case signaling is not supported) are +# considered a success. -if [ -f $CONFIGFILE ]; then - . $CONFIGFILE -else - echo "ERROR: Configuration file \"$CONFIGFILE\" not found!" - exit 1 -fi +case "$1" in + start) + echo -n "Starting EtherCAT master... " -case $ACTION in - start | restart) - echo "Starting EtherCAT master..." + # remove incompatible modules + for mod in 8139too 8139cp; do + if lsmod | grep "^$mod " > /dev/null; then + if ! rmmod $mod; then + /bin/false + rc_status -v + rc_exit + fi; + fi; + done - # remove modules - unload_module 8139too - unload_module 8139cp - unload_module ec_8139too - unload_module ec_master + modprobe ec_8139too ec_device_index=$DEVICEINDEX - echo " loading master modules..." - if ! modprobe ec_8139too ec_device_index=$DEVICEINDEX; then - echo "ERROR: Failed to load module!" - exit 1 - fi + rc_status -v ;; stop) - echo "Stopping EtherCAT master..." - unload_module ec_8139too - unload_module ec_master + echo -n "Shutting down EtherCAT master... " + + for mod in ec_8139too ec_master; do + if lsmod | grep "^$mod " > /dev/null; then + if ! rmmod $mod; then + /bin/false + rc_status -v + rc_exit + fi; + fi; + done + if ! modprobe 8139too; then echo "Warning: Failed to restore 8139too module." fi + + rc_status -v ;; - *) - print_usage - exit 1 + restart) + $0 stop + $0 start + + rc_status + ;; esac - -echo "done." -exit 0 +rc_exit #------------------------------------------------------------------------------