xref: /freebsd/libexec/rc/rc.d/ppp (revision f99f0ee14e3af81c23150a6a340259ca8a33d01a)
10696600cSBjoern A. Zeeb#!/bin/sh
20696600cSBjoern A. Zeeb#
30696600cSBjoern A. Zeeb#
40696600cSBjoern A. Zeeb
50696600cSBjoern A. Zeeb# PROVIDE: ppp
60696600cSBjoern A. Zeeb# REQUIRE: netif
70696600cSBjoern A. Zeeb# KEYWORD: nojail
80696600cSBjoern A. Zeeb
90696600cSBjoern A. Zeeb. /etc/rc.subr
100696600cSBjoern A. Zeeb
110696600cSBjoern A. Zeebname="ppp"
120696600cSBjoern A. Zeebdesc="Point to Point Protocol"
130696600cSBjoern A. Zeebrcvar="ppp_enable"
140696600cSBjoern A. Zeebcommand="/usr/sbin/${name}"
150696600cSBjoern A. Zeebstart_cmd="ppp_start"
160696600cSBjoern A. Zeebstop_cmd="ppp_stop"
170696600cSBjoern A. Zeebstart_postcmd="ppp_poststart"
180696600cSBjoern A. Zeeb
190696600cSBjoern A. Zeebppp_start_profile()
200696600cSBjoern A. Zeeb{
210696600cSBjoern A. Zeeb	local _ppp_profile _ppp_mode _ppp_nat _ppp_unit
220696600cSBjoern A. Zeeb	local _ppp_profile_cleaned _punct _punct_c
230696600cSBjoern A. Zeeb
240696600cSBjoern A. Zeeb	_ppp_profile=$1
250696600cSBjoern A. Zeeb	_ppp_profile_cleaned=$1
260696600cSBjoern A. Zeeb	_punct=". - / +"
270696600cSBjoern A. Zeeb	for _punct_c in $_punct; do
280696600cSBjoern A. Zeeb		_ppp_profile_cleaned=`ltr ${_ppp_profile_cleaned} ${_punct_c} '_'`
290696600cSBjoern A. Zeeb	done
300696600cSBjoern A. Zeeb
310696600cSBjoern A. Zeeb	# Check for ppp profile mode override.
320696600cSBjoern A. Zeeb	#
330696600cSBjoern A. Zeeb	eval _ppp_mode=\$ppp_${_ppp_profile_cleaned}_mode
340696600cSBjoern A. Zeeb	if [ -z "$_ppp_mode" ]; then
350696600cSBjoern A. Zeeb		_ppp_mode=$ppp_mode
360696600cSBjoern A. Zeeb	fi
370696600cSBjoern A. Zeeb
380696600cSBjoern A. Zeeb	# Check for ppp profile nat override.
390696600cSBjoern A. Zeeb	#
400696600cSBjoern A. Zeeb	eval _ppp_nat=\$ppp_${_ppp_profile_cleaned}_nat
410696600cSBjoern A. Zeeb	if [ -z "$_ppp_nat" ]; then
420696600cSBjoern A. Zeeb		_ppp_nat=$ppp_nat
430696600cSBjoern A. Zeeb	fi
440696600cSBjoern A. Zeeb
450696600cSBjoern A. Zeeb	# Establish ppp mode.
460696600cSBjoern A. Zeeb	#
470696600cSBjoern A. Zeeb	if [ "${_ppp_mode}" != "ddial" -a "${_ppp_mode}" != "direct" \
480696600cSBjoern A. Zeeb		-a "${_ppp_mode}" != "dedicated" \
490696600cSBjoern A. Zeeb		-a "${_ppp_mode}" != "background" ]; then
500696600cSBjoern A. Zeeb		_ppp_mode="auto"
510696600cSBjoern A. Zeeb	fi
520696600cSBjoern A. Zeeb
530696600cSBjoern A. Zeeb	rc_flags="-quiet -${_ppp_mode}"
540696600cSBjoern A. Zeeb
550696600cSBjoern A. Zeeb	# Switch on NAT mode?
560696600cSBjoern A. Zeeb	#
570696600cSBjoern A. Zeeb	case ${_ppp_nat} in
580696600cSBjoern A. Zeeb	[Yy][Ee][Ss])
590696600cSBjoern A. Zeeb		rc_flags="$rc_flags -nat"
600696600cSBjoern A. Zeeb		;;
610696600cSBjoern A. Zeeb	esac
620696600cSBjoern A. Zeeb
630696600cSBjoern A. Zeeb	# Check for hard wired unit
640696600cSBjoern A. Zeeb	eval _ppp_unit=\$ppp_${_ppp_profile_cleaned}_unit
650696600cSBjoern A. Zeeb	if [ -n "${_ppp_unit}" ]; then
660696600cSBjoern A. Zeeb		_ppp_unit="-unit${_ppp_unit}"
670696600cSBjoern A. Zeeb	fi
680696600cSBjoern A. Zeeb	rc_flags="$rc_flags $_ppp_unit"
690696600cSBjoern A. Zeeb
700696600cSBjoern A. Zeeb	# Run!
710696600cSBjoern A. Zeeb	#
720696600cSBjoern A. Zeeb	su -m $ppp_user -c "$command ${rc_flags} ${_ppp_profile}"
730696600cSBjoern A. Zeeb}
740696600cSBjoern A. Zeeb
750696600cSBjoern A. Zeebppp_start()
760696600cSBjoern A. Zeeb{
770696600cSBjoern A. Zeeb	local _ppp_profile _p
780696600cSBjoern A. Zeeb
790696600cSBjoern A. Zeeb	_ppp_profile=$*
800696600cSBjoern A. Zeeb	if [ -z "${_ppp_profile}" ]; then
810696600cSBjoern A. Zeeb		_ppp_profile=$ppp_profile
820696600cSBjoern A. Zeeb	fi
830696600cSBjoern A. Zeeb
8419a6267dSJose Luis Duran	startmsg -n "Starting PPP profile:"
850696600cSBjoern A. Zeeb
860696600cSBjoern A. Zeeb	for _p in $_ppp_profile; do
8719a6267dSJose Luis Duran		startmsg -n " $_p"
880696600cSBjoern A. Zeeb		ppp_start_profile $_p
890696600cSBjoern A. Zeeb	done
900696600cSBjoern A. Zeeb
9119a6267dSJose Luis Duran	startmsg "."
920696600cSBjoern A. Zeeb}
930696600cSBjoern A. Zeeb
940696600cSBjoern A. Zeebppp_poststart()
950696600cSBjoern A. Zeeb{
960696600cSBjoern A. Zeeb	# Re-Sync ipfilter and pf so they pick up any new network interfaces
970696600cSBjoern A. Zeeb	#
980696600cSBjoern A. Zeeb	if [ -f /etc/rc.d/ipfilter ]; then
990696600cSBjoern A. Zeeb		/etc/rc.d/ipfilter quietresync
1000696600cSBjoern A. Zeeb	fi
1010696600cSBjoern A. Zeeb	if [ -f /etc/rc.d/pf ]; then
1020696600cSBjoern A. Zeeb		/etc/rc.d/pf quietresync
1030696600cSBjoern A. Zeeb	fi
1040696600cSBjoern A. Zeeb}
1050696600cSBjoern A. Zeeb
1060696600cSBjoern A. Zeebppp_stop_profile() {
1070696600cSBjoern A. Zeeb	local _ppp_profile
1080696600cSBjoern A. Zeeb
1090696600cSBjoern A. Zeeb	_ppp_profile=$1
1100696600cSBjoern A. Zeeb
1110696600cSBjoern A. Zeeb	/bin/pkill -f "^${command}.*[[:space:]]${_ppp_profile}\$" || \
1120696600cSBjoern A. Zeeb		echo -n "(not running)"
1130696600cSBjoern A. Zeeb}
1140696600cSBjoern A. Zeeb
1150696600cSBjoern A. Zeebppp_stop() {
1160696600cSBjoern A. Zeeb	local _ppp_profile _p
1170696600cSBjoern A. Zeeb
1180696600cSBjoern A. Zeeb	_ppp_profile=$*
1190696600cSBjoern A. Zeeb	if [ -z "${_ppp_profile}" ]; then
1200696600cSBjoern A. Zeeb		_ppp_profile=$ppp_profile
1210696600cSBjoern A. Zeeb	fi
1220696600cSBjoern A. Zeeb
1230696600cSBjoern A. Zeeb	echo -n "Stopping PPP profile:"
1240696600cSBjoern A. Zeeb
1250696600cSBjoern A. Zeeb	for _p in $_ppp_profile; do
1260696600cSBjoern A. Zeeb		echo -n " $_p"
1270696600cSBjoern A. Zeeb		ppp_stop_profile $_p
1280696600cSBjoern A. Zeeb	done
1290696600cSBjoern A. Zeeb
1300696600cSBjoern A. Zeeb	echo "."
1310696600cSBjoern A. Zeeb}
1320696600cSBjoern A. Zeeb
1330696600cSBjoern A. Zeebload_rc_config $name
134*f99f0ee1SAlexander Leidinger
135*f99f0ee1SAlexander Leidinger# doesn't make sense to run in a svcj: nojail keyword
136*f99f0ee1SAlexander Leidingerppp_svcj="NO"
137*f99f0ee1SAlexander Leidinger
1380696600cSBjoern A. Zeebrun_rc_command $*
139