/lib/network/ppp.sh fixes a problem with PPtP (and other PPP-based things) where PPtP + PPPoE will fail to work. This is because PPtP defaults to ppp0 and so does PPPoE, because /etc/init.d/ppp reinitializes the unit counter for each PPP-type connection (so you could have multiple PPtP over cable, for instance, but PPPoE + PPtP is a problem).

/etc/init.d/ppp automatically starts pptp session on boot., from #6720

SVN-Revision: 20221
This commit is contained in:
Travis Kemen 2010-03-14 21:42:56 +00:00
parent 3a13fb95ab
commit 1223494f1d
2 changed files with 71 additions and 9 deletions

View File

@ -1,15 +1,44 @@
scan_ppp() { scan_ppp() {
config_get ifname "$1" ifname config_get ifname "$1" ifname
pppdev="${pppdev:-0}" pppdev="${pppdev:-0}"
config_get unit "$1" unit config_get devunit "$1" unit
[ -z "$unit" ] && { {
unit="$pppdev" unit=
if [ "${ifname%%[0-9]*}" = ppp ]; then pppif=
unit="${ifname##ppp}" if [ ! -d /tmp/.ppp-counter ]; then
[ "$pppdev" -le "$unit" ] && pppdev="$(($unit + 1))" mkdir -p /tmp/.ppp-counter
else fi
pppdev="$(($pppdev + 1))" local maxunit
fi maxunit="$(cat /tmp/.ppp-counter/max-unit 2>/dev/null)"
if [ -z "$maxunit" ]; then
maxunit=-1
fi
local i
i=0
while [ $i -le $maxunit ]; do
local unitdev
unitdev="$(cat /tmp/.ppp-counter/ppp${i} 2>/dev/null)"
if [ "$unitdev" = "$1" ]; then
unit="$i"
pppif="ppp${i}"
break
fi
i="$(($i + 1))"
done
if [ -z "$unit" ] || [ -z "$pppif" ]; then
maxunit="$(($maxunit + 1))"
if [ -n "$devunit" ]; then
unit="$devunit"
elif [ "${ifname%%[0-9]*}" = ppp ]; then
unit="${ifname##ppp}"
else
unit="$maxunit"
fi
[ "$maxunit" -lt "$unit" ] && maxunit="$unit"
pppif="ppp${unit}"
echo "$1" >/tmp/.ppp-counter/$pppif 2>/dev/null
echo "$maxunit" >/tmp/.ppp-counter/max-unit 2>/dev/null
fi
config_set "$1" ifname "ppp$unit" config_set "$1" ifname "ppp$unit"
config_set "$1" unit "$unit" config_set "$1" unit "$unit"
} }

View File

@ -0,0 +1,33 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=41
STOP=30
updown_pptp_interface () {
config_get proto "$1" proto
if [ "$proto" = "pptp" ]; then
if$2 "$1"
fi
}
boot () {
start
}
start() {
config_load network
config_foreach updown_pptp_interface interface up
}
restart() {
config_load network
config_foreach updown_pptp_interface interface down
config_foreach updown_pptp_interface interface up
}
stop() {
config_load network
config_foreach updown_pptp_interface interface down
}