mirror of
https://github.com/opnsense/src.git
synced 2026-02-14 00:04:14 -05:00
assignments to the literal values it would have returned.
The concept of set_rcvar() was nice in theory, but the forks
it creates are a drag on the startup process, which is especially
noticeable on slower systems, such as embedded ones.
During the discussion on freebsd-rc@ a preference was expressed for
using ${name}_enable instead of the literal values. However the
code portability concept doesn't really apply since there are so
many other places where the literal name has to be searched for
and replaced. Also, using the literal value is also a tiny bit
faster than dereferencing the variables, and every little bit helps.
134 lines
2.2 KiB
Bash
Executable file
134 lines
2.2 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# $FreeBSD$
|
|
#
|
|
|
|
# PROVIDE: ppp
|
|
# REQUIRE: netif
|
|
# KEYWORD: nojail
|
|
|
|
. /etc/rc.subr
|
|
|
|
name="ppp"
|
|
rcvar="ppp_enable"
|
|
command="/usr/sbin/${name}"
|
|
start_cmd="ppp_start"
|
|
stop_cmd="ppp_stop"
|
|
start_postcmd="ppp_poststart"
|
|
|
|
ppp_start_profile()
|
|
{
|
|
local _ppp_profile _ppp_mode _ppp_nat _ppp_unit
|
|
local _ppp_profile_cleaned _punct _punct_c
|
|
|
|
_ppp_profile=$1
|
|
_ppp_profile_cleaned=$1
|
|
_punct=". - / +"
|
|
for _punct_c in $_punct; do
|
|
_ppp_profile_cleaned=`ltr ${_ppp_profile_cleaned} ${_punct_c} '_'`
|
|
done
|
|
|
|
# Check for ppp profile mode override.
|
|
#
|
|
eval _ppp_mode=\$ppp_${_ppp_profile_cleaned}_mode
|
|
if [ -z "$_ppp_mode" ]; then
|
|
_ppp_mode=$ppp_mode
|
|
fi
|
|
|
|
# Check for ppp profile nat override.
|
|
#
|
|
eval _ppp_nat=\$ppp_${_ppp_profile_cleaned}_nat
|
|
if [ -z "$_ppp_nat" ]; then
|
|
_ppp_nat=$ppp_nat
|
|
fi
|
|
|
|
# Establish ppp mode.
|
|
#
|
|
if [ "${_ppp_mode}" != "ddial" -a "${_ppp_mode}" != "direct" \
|
|
-a "${_ppp_mode}" != "dedicated" \
|
|
-a "${_ppp_mode}" != "background" ]; then
|
|
_ppp_mode="auto"
|
|
fi
|
|
|
|
rc_flags="-quiet -${_ppp_mode}"
|
|
|
|
# Switch on NAT mode?
|
|
#
|
|
case ${_ppp_nat} in
|
|
[Yy][Ee][Ss])
|
|
rc_flags="$rc_flags -nat"
|
|
;;
|
|
esac
|
|
|
|
# Check for hard wired unit
|
|
eval _ppp_unit=\$ppp_${_ppp_profile_cleaned}_unit
|
|
if [ -n "${_ppp_unit}" ]; then
|
|
_ppp_unit="-unit${_ppp_unit}"
|
|
fi
|
|
rc_flags="$rc_flags $_ppp_unit"
|
|
|
|
# Run!
|
|
#
|
|
su -m $ppp_user -c "$command ${rc_flags} ${_ppp_profile}"
|
|
}
|
|
|
|
ppp_start()
|
|
{
|
|
local _ppp_profile _p
|
|
|
|
_ppp_profile=$*
|
|
if [ -z "${_ppp_profile}" ]; then
|
|
_ppp_profile=$ppp_profile
|
|
fi
|
|
|
|
echo -n "Starting PPP profile:"
|
|
|
|
for _p in $_ppp_profile; do
|
|
echo -n " $_p"
|
|
ppp_start_profile $_p
|
|
done
|
|
|
|
echo "."
|
|
}
|
|
|
|
ppp_poststart()
|
|
{
|
|
# Re-Sync ipfilter and pf so they pick up any new network interfaces
|
|
#
|
|
if [ -f /etc/rc.d/ipfilter ]; then
|
|
/etc/rc.d/ipfilter quietresync
|
|
fi
|
|
if [ -f /etc/rc.d/pf ]; then
|
|
/etc/rc.d/pf quietresync
|
|
fi
|
|
}
|
|
|
|
ppp_stop_profile() {
|
|
local _ppp_profile
|
|
|
|
_ppp_profile=$1
|
|
|
|
/bin/pkill -f "^${command}.*[[:space:]]${_ppp_profile}\$" || \
|
|
echo -n "(not running)"
|
|
}
|
|
|
|
ppp_stop() {
|
|
local _ppp_profile _p
|
|
|
|
_ppp_profile=$*
|
|
if [ -z "${_ppp_profile}" ]; then
|
|
_ppp_profile=$ppp_profile
|
|
fi
|
|
|
|
echo -n "Stopping PPP profile:"
|
|
|
|
for _p in $_ppp_profile; do
|
|
echo -n " $_p"
|
|
ppp_stop_profile $_p
|
|
done
|
|
|
|
echo "."
|
|
}
|
|
|
|
load_rc_config $name
|
|
run_rc_command $*
|