ppp revision 177649
1#!/bin/sh
2#
3# $FreeBSD: head/etc/rc.d/ppp 177649 2008-03-26 21:54:48Z brooks $
4#
5
6# PROVIDE: ppp
7# REQUIRE: netif isdnd
8# KEYWORD: nojail
9
10. /etc/rc.subr
11
12name="ppp"
13rcvar=`set_rcvar`
14command="/usr/sbin/${name}"
15start_cmd="ppp_start"
16stop_cmd="ppp_stop"
17start_postcmd="ppp_poststart"
18
19ppp_start_profile()
20{
21	local _ppp_profile _ppp_mode _ppp_nat
22
23	_ppp_profile=$1
24	_ppp_profile_cleaned=$1
25	_punct=". - / +"
26	for _punct_c in $_punct; do
27		_ppp_profile_cleaned=`ltr ${_ppp_profile_cleaned} ${_punct_c} '_'`
28	done
29
30	# Check for ppp profile mode override.
31	#
32	eval _ppp_mode=\$ppp_${_ppp_profile_cleaned}_mode
33	if [ -z "$_ppp_mode" ]; then
34		_ppp_mode=$ppp_mode
35	fi
36
37	# Check for ppp profile nat override.
38	#
39	eval _ppp_nat=\$ppp_${_ppp_profile_cleaned}_nat
40	if [ -z "$_ppp_nat" ]; then
41		_ppp_nat=$ppp_nat
42	fi
43
44	# Establish ppp mode.
45	#
46	if [ "${_ppp_mode}" != "ddial" -a "${_ppp_mode}" != "direct" \
47		-a "${_ppp_mode}" != "dedicated" \
48		-a "${_ppp_mode}" != "background" ]; then
49		_ppp_mode="auto"
50	fi
51
52	rc_flags="-quiet -${_ppp_mode}"
53
54	# Switch on NAT mode?
55	#
56	case ${_ppp_nat} in
57	[Yy][Ee][Ss])
58		rc_flags="$rc_flags -nat"
59		;;
60	esac
61
62	# Run!
63	#
64	su -m $ppp_user -c "$command ${rc_flags} ${_ppp_profile}"
65}
66
67ppp_start()
68{
69	local _ppp_profile _p
70
71	_ppp_profile=$*
72	if [ -z "${_ppp_profile}" ]; then
73		_ppp_profile=$ppp_profile
74	fi
75
76	echo -n "Starting PPP profile:"
77
78	for _p in $_ppp_profile; do
79		echo -n " $_p"
80		ppp_start_profile $_p
81	done
82
83	echo "."
84}
85
86ppp_poststart()
87{
88	# Re-Sync ipfilter and pf so they pick up any new network interfaces
89	#
90	/etc/rc.d/ipfilter quietresync
91	/etc/rc.d/pf quietresync
92}
93
94ppp_stop_profile() {
95	local _ppp_profile
96
97	_ppp_profile=$1
98
99	/bin/pkill -f "^${command}.*[[:space:]]${_ppp_profile}\$" || \
100		echo -n "(not running)"
101}
102
103ppp_stop() {
104	local _ppp_profile _p
105
106	_ppp_profile=$*
107	if [ -z "${_ppp_profile}" ]; then
108		_ppp_profile=$ppp_profile
109	fi
110
111	echo -n "Stopping PPP profile:"
112
113	for _p in $_ppp_profile; do
114		echo -n " $_p"
115		ppp_stop_profile $_p
116	done
117
118	echo "."
119}
120
121load_rc_config $name
122run_rc_command $*
123