diff options
Diffstat (limited to 'lib/rcscripts/net.modules.d/ipppd')
-rw-r--r-- | lib/rcscripts/net.modules.d/ipppd | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/lib/rcscripts/net.modules.d/ipppd b/lib/rcscripts/net.modules.d/ipppd new file mode 100644 index 0000000..8f5fc37 --- /dev/null +++ b/lib/rcscripts/net.modules.d/ipppd @@ -0,0 +1,103 @@ +#!/bin/bash +# Copyright (c) 2004-2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +# Contributed by Roy Marples (uberlord@gentoo.org) + +# char* ipppd_provides(void) +# +# Returns a string to change module definition for starting up +ipppd_provides() { + echo "isdn" +} + +# void ipppd_depend(void) +# +# Sets up the dependancies for the module +ipppd_depend() { + after macnet + before interface +} + +# bool ipppd_check_installed(void) +# +# Returns 1 if isnd4k-utils is installed, otherwise 0 +ipppd_check_installed() { + [[ -x /usr/sbin/ipppd ]] && return 0 + ${1:-false} && eerror "For ISDN (ipppd) support, emerge net-dialup/isdn4k-utils" + return 1 +} + +# bool ipppd_check_depends(void) +# +# Checks to see if we have the needed functions +ipppd_check_depends() { + local f + + for f in interface_exists interface_type clean_pidfile; do + [[ $( type -t "${f}" ) == "function" ]] && continue + eerror "ipppd: missing required function ${f}\n" + return 1 + done + + return 0 +} + +# bool ipppd_start(char *iface) +# +# Start isdn on an interface +# +# Returns 0 (true) when successful, non-zero otherwise +ipppd_pre_start() { + local iface="$1" opts itype=$( interface_type "$1" ) + local pidfile="/var/run/ipppd-${iface}.pid" + + # Check that we are a valid isdn interface + [[ ${itype} != "ippp" && ${itype} != "isdn" ]] && return 0 + + # Check that the interface exists + interface_exists "${iface}" true || return 1 + + if ! clean_pidfile "${pidfile}" ; then + ewarn "ipppd is already running on ${iface}" + eend 0 + return 0 + fi + + local ifvar=$( bash_variable "${iface}" ) + # Might or might not be set in conf.d/net + eval opts=\"\$\{ipppd_${ifvar}\}\" + + einfo "Starting ipppd for ${iface}" + /usr/sbin/ipppd "${opts}" pidfile "${pidfile}" \ + file "/etc/ppp/options.${iface}" >/dev/null + eend $? || return $? + + return 0 +} + +# bool ipppd_stop(char *iface) +# +# Stop isdn on an interface +# Returns 0 (true) when successful, non-zero otherwise +ipppd_stop() { + local iface="$1" pidfile="/var/run/ipppd-$1.pid" + + ipppd_check_installed || return 0 + [[ ! -f ${pidfile} ]] && return 0 + + clean_pidfile "${pidfile}" && return 0 + local pid=$( < "${pidfile}" ) r=0 + + einfo "Stopping ipppd for ${iface}" + kill -s TERM "${pid}" + if ! process_finished "${pid}" ipppd 10 ; then + kill -s KILL "${pid}" + process_finished "${pid}" ipppd 10 || r=1 + fi + + eend ${r} + return ${r} +} + +# vim:ts=4 |