summaryrefslogtreecommitdiff
path: root/net/clip.sh
diff options
context:
space:
mode:
Diffstat (limited to 'net/clip.sh')
-rw-r--r--net/clip.sh221
1 files changed, 0 insertions, 221 deletions
diff --git a/net/clip.sh b/net/clip.sh
deleted file mode 100644
index 2fc290f..0000000
--- a/net/clip.sh
+++ /dev/null
@@ -1,221 +0,0 @@
-# Copyright (c) 2005-2007 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-clip_depend()
-{
- program /usr/sbin/atmsigd
- before interface
-}
-
-_config_vars="$_config_vars clip"
-
-# This starts a service. Albeit atmsigd, ilmid and atmarpd do allow for back-
-# grounding through the -b option, its usage causes them to be sensible to
-# SIGHUP, which is sent to all daemons when console detaches right after
-# startup. This is probably due to the fact that these programs don't detach
-# themself from the controlling terminal when backgrounding... The only way I
-# see to overcame this is to use the --background option in start-stop-daemon,
-# which is reported as a "last resort" method, but it acts correctly about this.
-atmclip_svc_start()
-{
- ebegin "Starting $2 Daemon ($1)"
- start-stop-daemon --start \
- --background \
- --make-pidfile --pidfile "/var/run/$1.pid" \
- --exec "/usr/sbin/$1" -- -l syslog
- eend $?
-}
-
-atmclip_svcs_start()
-{
- einfo "First CLIP instance: starting ATM CLIP daemons"
- eindent
-
- if yesno ${clip_full:-yes}; then
- atmclip_svc_start atmsigd "Signaling" && \
- atmclip_svc_start ilmid "Integrated Local Management Interface" && \
- atmclip_svc_start atmarpd "Address Resolution Protocol"
- else
- atmclip_svc_start atmarpd "Address Resolution Protocol"
- fi
-
- local r=$?
-
- eoutdent
- return ${r}
-}
-
-atmclip_svc_stop()
-{
- ebegin "Stopping $2 Daemon ($1)"
- start-stop-daemon --stop --quiet \
- --pidfile "/var/run/$1.pid" \
- --exec "/usr/sbin/$1"
- eend $?
-}
-
-atmclip_svcs_stop()
-{
- einfo "Last CLIP instance: stopping ATM CLIP daemons"
- eindent
-
- # Heartake operation!
- sync
-
- atmclip_svc_stop atmarpd "Address Resolution Protocol"
- if yesno ${clip_full:-yes}; then
- atmclip_svc_stop ilmid "Integrated Local Management Interface"
- atmclip_svc_stop atmsigd "Signaling"
- fi
-
- eoutdent
-}
-
-are_atmclip_svcs_running()
-{
-
- start-stop-daemon --quiet --test --stop --pidfile /var/run/atmarpd.pid || return 1
-
- if yesno ${clip_full:-yes}; then
- start-stop-daemon --quiet --test --stop --pidfile /var/run/ilmid.pid || return 1
- start-stop-daemon --quiet --test --stop --pidfile /var/run/atmsigd.pid || return 1
- fi
-
- return 0
-}
-
-clip_pre_start()
-{
- local clip=
- eval clip=\$clip_${IFVAR}
- [ -z "${clip}" ] && return 0
-
- if [ ! -r /proc/net/atm/arp ]; then
- modprobe clip && sleep 2
- if [ ! -r /proc/net/atm/arp ]; then
- eerror "You need first to enable kernel support for ATM CLIP"
- return 1
- fi
- fi
-
- local started_here=
- if ! are_atmclip_svcs_running; then
- atmclip_svcs_start || return 1
- started_here=1
- fi
-
- if ! _exists; then
- ebegin "Creating CLIP interface ${IFACE}"
- atmarp -c "${IFACE}"
- if ! eend $?; then
- [ -z "${started_here}" ] && atmclip_svcs_stop
- return 1
- fi
- fi
-
- return 0
-}
-
-clip_post_start()
-{
- local clip="$(_get_array "clip_${IFVAR}")"
- [ -z "${clip}" ] && return 0
-
- are_atmclip_svcs_running || return 1
-
- # The atm tools (atmarpd?) are silly enough that they would not work with
- # iproute2 interface setup as opposed to the ifconfig one.
- # The workaround is to temporarily toggle the interface state from up
- # to down and then up again, without touching its address. This (should)
- # work with both iproute2 and ifconfig.
- _down
- _up
-
- # Now the real thing: create a PVC with our peer(s).
- # There are cases in which the ATM interface is not yet
- # ready to establish new VCCs. In that cases, atmarp would
- # fail. Here we allow 10 retries to happen every 2 seconds before
- # reporting problems. Also, when no defined VC can be established,
- # we stop the ATM daemons.
- local has_failures= i=
- for i in ${clip}; do
- local IFS=","
- set -- ${i}
- unset IFS
- local peerip="$1"; shift
- local ifvpivci="$1"; shift
- ebegin "Creating PVC ${ifvpivci} for peer ${peerip}"
-
- local nleftretries=10 emsg= ecode=
- while [ ${nleftretries} -gt 0 ]; do
- : $(( nleftretries -= 1 ))
- emsg="$(atmarp -s "${peerip}" "${ifvpivci}" "$@" 2>&1)"
- ecode=$? && break
- sleep 2
- done
-
- if ! eend ${ecode}; then
- eerror "Creation failed for PVC ${ifvpivci}: ${emsg}"
- has_failures=1
- fi
- done
-
- if [ -n "${has_failures}" ]; then
- clip_pre_stop "${iface}"
- clip_post_stop "${iface}"
- return 1
- else
- return 0
- fi
-}
-
-clip_pre_stop()
-{
- are_atmclip_svcs_running || return 0
-
- # We remove all the PVCs which may have been created by
- # clip_post_start for this interface. This shouldn't be
- # needed by the ATM stack, but sometimes I got a panic
- # killing CLIP daemons without previously vacuuming
- # every active CLIP PVCs.
- # The linux 2.6's ATM stack is really a mess...
- local itf= t= encp= idle= ipaddr= left=
- einfo "Removing PVCs on this interface"
- eindent
- {
- read left && \
- while read itf t encp idle ipaddr left; do
- if [ "${itf}" = "${IFACE}" ]; then
- ebegin "Removing PVC to ${ipaddr}"
- atmarp -d "${ipaddr}"
- eend $?
- fi
- done
- } < /proc/net/atm/arp
- eoutdent
-}
-
-# Here we should teorically delete the interface previously created in the
-# clip_pre_start function, but there is no way to "undo" an interface creation.
-# We can just leave the interface down. "ifconfig -a" will still list it...
-# Also, here we can stop the ATM CLIP daemons if there is no other CLIP PVC
-# outstanding. We check this condition by inspecting the /proc/net/atm/arp file.
-clip_post_stop()
-{
- are_atmclip_svcs_running || return 0
-
- local itf= left= hasothers=
- {
- read left && \
- while read itf left; do
- if [ "${itf}" != "${IFACE}" ]; then
- hasothers=1
- break
- fi
- done
- } < /proc/net/atm/arp
-
- if [ -z "${hasothers}" ]; then
- atmclip_svcs_stop || return 1
- fi
-}