summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rcscripts/net.modules.d/ipppd')
-rw-r--r--lib/rcscripts/net.modules.d/ipppd103
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