summaryrefslogtreecommitdiffstats
path: root/src/lib/connections/mobile_ppp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/connections/mobile_ppp')
-rw-r--r--src/lib/connections/mobile_ppp118
1 files changed, 36 insertions, 82 deletions
diff --git a/src/lib/connections/mobile_ppp b/src/lib/connections/mobile_ppp
index b966390..5006c6c 100644
--- a/src/lib/connections/mobile_ppp
+++ b/src/lib/connections/mobile_ppp
@@ -11,18 +11,14 @@ quote_word() {
}
mobile_ppp_up() {
- local cfg
- local chat
-
- mkdir -p "$STATE_DIR/mobile_ppp.${Interface}.${Profile}/"
- chmod 700 "$STATE_DIR/mobile_ppp.${Interface}.${Profile}/"
- cfg="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/options"
+ local options chat
+ options="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/options"
chat="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/modem.chat"
- echo "linkname $(quote_word "${Profile}")" > "${cfg}"
- chmod 600 "${cfg}"
- cat >> "${cfg}" << EOF
-${Interface}
+ mkdir -p "$(dirname "$options")"
+ cat >> "$options" << EOF
+linkname $(quote_word "$Profile")
+$(quote_word "$Interface")
921600
lock
crtscts
@@ -30,61 +26,19 @@ modem
passive
novj
holdoff 10
-maxfail ${MaxFail:-5}
-EOF
-
- # Debug pppd output separately from netctl
- if is_yes "${PPPDebug:-yes}"; then
- echo "debug" >> "${cfg}"
- fi
-
- # Sets up route
- if is_yes "${DefaultRoute:-yes}"; then
- echo "defaultroute" >> "${cfg}"
- else
- echo "nodefaultroute" >> "${cfg}"
- fi
- if is_yes "${UsePeerDNS:-yes}"; then
- echo "usepeerdns" >> "${cfg}"
- fi
- # Writes username and password
- echo "noauth" >> "${cfg}"
- echo "hide-password" >> ${cfg}
- [[ -n ${User} ]] && echo "user $(quote_word "${User}")" >> "${cfg}"
- [[ -n ${Password} ]] && echo "password $(quote_word "${Password}")" >> "${cfg}"
-
- #echo "'OK' @/etc/ppp/chatscripts/pin" >> "${chat}"
- if [ -n "${Pin}" ]; then
- PinStr="'OK' 'AT+CPIN=\"${Pin}\"'"
- else
- PinStr="'OK' 'AT'"
- fi
- report_debug echo $PinStr
-
- # Mode can be one of 3Gpref, 3Gonly, GPRSpref, GPRSonly, None
- # Only works for Huawei modems
- #echo "'OK' @/etc/ppp/chatscripts/mode" >> "${chat}"
- case "${Mode}" in
- 3Gonly)
- ModeStr="'OK' 'AT\^SYSCFG=14,2,3fffffff,0,1'"
- ;;
- 3Gpref)
- ModeStr="'OK' 'AT\^SYSCFG=2,2,3fffffff,0,1'"
- ;;
- GPRSonly)
- ModeStr="'OK' 'AT\^SYSCFG=13,1,3fffffff,0,0'"
- ;;
- GPRSpref)
- ModeStr="'OK' 'AT\^SYSCFG=2,1,3fffffff,0,0'"
- ;;
- *)
- ModeStr="'OK' 'AT'"
- ;;
- esac
+noauth
+$(is_yes "${DefaultRoute:-yes}" || printf no)defaultroute
+maxfail $(quote_word "${MaxFail:-5}")
+$(is_yes "${UsePeerDNS:-yes}" && printf usepeerdns)
+hide-password
+${User:+user $(quote_word "$User")}
+${Password:+password $(quote_word "$Password")}
+connect $(quote_word "/usr/sbin/chat -v -t15 -f $(quote_word "$chat")")
+${OptionsFile:+file $(quote_word "$OptionsFile")}
+EOF
- # Now that we’ve got the ppp configuration set up, write the chat script
- cat >> "${chat}" << EOF
+ cat >> "$chat" << EOF
ECHO ON
ABORT 'BUSY'
ABORT 'NO CARRIER'
@@ -100,40 +54,40 @@ TIMEOUT 6
'OK-AT-OK' 'ATZ'
TIMEOUT 3
'OK' 'AT+CFUN=1'
-${PinStr}
+'OK' 'AT${Pin:++CPIN=$(quote_word "$Pin")}'
'OK\d-AT-OK' 'ATI'
'OK' 'ATZ'
'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
-${ModeStr}
-'OK-AT-OK' 'AT+CGDCONT=1,"IP","${AccessPointName}"'
+'OK' 'AT$(case $Mode in
+ 3Gonly) printf "\^SYSCFG=14,2,3fffffff,0,1";;
+ 3Gpref) printf "\^SYSCFG=2,2,3fffffff,0,1";;
+ GPRSonly) printf "\^SYSCFG=13,1,3fffffff,0,0";;
+ GPRSpref) printf "\^SYSCFG=2,1,3fffffff,0,0";;
+esac)'
+'OK-AT-OK' 'AT+CGDCONT=1,"IP",$(quote_word "$AccessPointName")'
'OK' 'ATDT*99#'
TIMEOUT 30
CONNECT ''
EOF
- # Add the chat script line to the configuration
- echo "connect \"/usr/sbin/chat -v -t15 -f ${chat}\"" >> "${cfg}"
-
- if ! $PPPD file "${cfg}"; then
- rmdir "$STATE_DIR/mobile_ppp.${Interface}.${Profile}/"
- report_error "Couldn't make pppd connection."
+ if ! $PPPD file "$options"; then
+ rm "$options" "$chat"
+ rmdir "$(dirname "$options")"
+ report_error "Could not establish a ppp connection for profile '$Profile'."
return 1
fi
}
mobile_ppp_down() {
- local cfg chat pidfile pid
- cfg="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/options"
- chat="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/modem.chat"
- pidfile="/var/run/ppp-${Profile}.pid"
+ local options chat pidfile
+ options="$STATE_DIR/mobile_ppp.$Interface.$Profile/options"
+ chat="$STATE_DIR/mobile_ppp.$Interface.$Profile/modem.chat"
+ pidfile="/var/run/ppp-$Profile.pid"
- if [[ -e $pidfile ]]; then
- read pid < "$pidfile"
- [[ "$pid" ]] && kill "$pid"
- fi
+ [[ -r $pidfile ]] && kill "$(< "$pidfile")"
- rm "${cfg}" "${chat}"
- rmdir "$STATE_DIR/mobile_ppp.${Interface}.${Profile}/"
+ rm "$options" "$chat"
+ rmdir "$(dirname "$options")"
}