--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/script/init.d/ethercat Tue Feb 13 13:45:36 2007 +0000
@@ -0,0 +1,279 @@
+#!/bin/sh
+
+#------------------------------------------------------------------------------
+#
+# Init script for EtherCAT
+#
+# $Id$
+#
+# Copyright (C) 2006 Florian Pose, Ingenieurgemeinschaft IgH
+#
+# This file is part of the IgH EtherCAT Master.
+#
+# The IgH EtherCAT Master is free software; you can redistribute it
+# and/or modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2 of the
+# License, or (at your option) any later version.
+#
+# The IgH EtherCAT Master is distributed in the hope that it will be
+# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with the IgH EtherCAT Master; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# The right to use EtherCAT Technology is granted and comes free of
+# charge under condition of compatibility of product made by
+# Licensee. People intending to distribute/sell products based on the
+# code, have to sign an agreement to guarantee that products using
+# software based on IgH EtherCAT master stay compatible with the actual
+# EtherCAT specification (which are released themselves as an open
+# standard) as the (only) precondition to have the right to use EtherCAT
+# Technology, IP and trade marks.
+#
+#------------------------------------------------------------------------------
+
+### BEGIN INIT INFO
+# Provides: ethercat
+# Required-Start: $local_fs $syslog $network
+# Should-Start: $time ntp
+# Required-Stop: $local_fs $syslog $network
+# Should-Stop: $time ntp
+# Default-Start: 3 5
+# Default-Stop: 0 1 2 6
+# Short-Description: IgH EtherCAT master modules
+# Description:
+### END INIT INFO
+
+#------------------------------------------------------------------------------
+
+device="ecxml"
+
+IFCONFIG=ifconfig
+BRCTL=brctl
+ROUTE=route
+
+#------------------------------------------------------------------------------
+
+ETHERCAT_CONFIG=/etc/sysconfig/ethercat
+
+if [ ! -r $ETHERCAT_CONFIG ]; then
+ echo "$ETHERCAT_CONFIG not existing";
+ if [ "$1" = "stop" ]; then
+ exit 0
+ else
+ exit 6
+ fi
+fi
+
+. $ETHERCAT_CONFIG
+
+#------------------------------------------------------------------------------
+
+#
+# Function for setting up the EoE bridge
+#
+build_eoe_bridge()
+{
+ if [ -z "$EOE_BRIDGE" ]; then return; fi
+
+ EOEIF=`$IFCONFIG -a | grep -o -E "^eoe[0-9]+ "`
+
+ # add bridge, if it does not already exist
+ if ! $BRCTL show | grep -E -q "^$EOE_BRIDGE"; then
+ if ! $BRCTL addbr $EOE_BRIDGE; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ fi
+
+ # check if specified interfaces are bridged
+ for interf in $EOEIF $EOE_EXTRA_INTERFACES; do
+ # interface is already part of the bridge (FIXME->show $EOE_BRIDGE)
+ if $BRCTL show | grep -E -q $interf
+ then continue
+ fi
+ # clear IP address and open interface
+ if ! $IFCONFIG $interf 0.0.0.0 up; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ # add interface to the bridge
+ if ! $BRCTL addif $EOE_BRIDGE $interf; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ done
+
+ # configure IP on bridge
+ if [ -n "$EOE_IP_ADDRESS" -a -n "$EOE_IP_NETMASK" ]; then
+ if ! $IFCONFIG $EOE_BRIDGE $EOE_IP_ADDRESS \
+ netmask $EOE_IP_NETMASK; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ fi
+
+ # open bridge
+ if ! $IFCONFIG $EOE_BRIDGE up; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+
+ # install new default gateway
+ if [ -n "$EOE_GATEWAY" ]; then
+ while $ROUTE -n | grep -E -q "^0.0.0.0"; do
+ if ! $ROUTE del default; then
+ echo "Failed to remove route!" 1>&2
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ done
+ if ! $ROUTE add default gw $EOE_GATEWAY; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ fi
+}
+
+#------------------------------------------------------------------------------
+
+. /etc/rc.status
+rc_reset
+
+case "$1" in
+
+ start)
+ echo -n "Starting EtherCAT master "
+
+ if [ -z "$DEVICE_INDEX" ]; then
+ echo "ERROR: DEVICE_INDEX not set!"
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+
+ if [ -z "$EOE_INTERFACES" ]; then
+ # support legacy sysconfig files
+ if [ -n "$EOE_DEVICES" ]; then
+ EOE_INTERFACES=$EOE_DEVICES
+ else
+ EOE_INTERFACES=0
+ fi
+ fi
+
+ # unload conflicting modules at first
+ for mod in 8139too; do
+ if lsmod | grep "^$mod " > /dev/null; then
+ if ! rmmod $mod; then
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+ fi
+ done
+
+ # load master module
+ if ! modprobe ec_master ec_eoeif_count=$EOE_INTERFACES; then
+ modprobe 8139too
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+
+ # remove stale device node
+ rm -f /dev/${device}0
+
+ # get dynamic major number
+ major=$(awk "\$2==\"EtherCAT\" {print \$1}" /proc/devices)
+
+ # create character device
+ mknod /dev/${device}0 c $major 0
+
+ # load device module
+ if ! modprobe ec_8139too ec_device_index=$DEVICE_INDEX; then
+ rmmod ec_master
+ modprobe 8139too
+ /bin/false
+ rc_status -v
+ rc_exit
+ fi
+
+ # build EoE bridge
+ build_eoe_bridge
+
+ rc_status -v
+ ;;
+
+ stop)
+ echo -n "Shutting down EtherCAT master "
+
+ # unload modules
+ 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
+
+ # remove device node
+ rm -f /dev/${device}0
+
+ sleep 1
+
+ # reload previous modules
+ if ! modprobe 8139too; then
+ echo "Warning: Failed to restore 8139too module."
+ fi
+
+ rc_status -v
+ ;;
+
+ restart)
+ $0 stop || exit 1
+ sleep 1
+ $0 start
+ rc_status
+ ;;
+
+ status)
+ echo -n "Checking for EtherCAT "
+
+ lsmod | grep "^ec_master " > /dev/null
+ master_running=$?
+ lsmod | grep "^ec_8139too " > /dev/null
+ device_running=$?
+
+ # master module and device module loaded?
+ test $master_running -eq 0 -a $device_running -eq 0
+
+ rc_status -v
+ ;;
+
+ bridge)
+ echo -n "Building EoE bridge "
+ build_eoe_bridge
+ rc_status -v
+ ;;
+
+ *)
+ echo "USAGE: $0 {start|stop|restart|status|bridge}"
+ ;;
+
+esac
+
+rc_exit
+
+#------------------------------------------------------------------------------