# Contributed by Robbie Smith # Based on Thomas Bächler’s pppoe script # Also see for more information. : ${PPPD:=pppd} : ${InterfaceRoot=dev/} quote_word() { set -- "${@//\\/\\\\}" printf '"%s"\n' "${@//\"/\\\"}" } 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" chat="$STATE_DIR/mobile_ppp.${Interface}.${Profile}/modem.chat" echo "linkname $(quote_word "${Profile}")" > "${cfg}" chmod 600 "${cfg}" cat >> "${cfg}" << EOF ${Interface} 921600 lock crtscts 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 # Now that we’ve got the ppp configuration set up, write the chat script cat >> "${chat}" << EOF ECHO ON ABORT 'BUSY' ABORT 'NO CARRIER' ABORT 'VOICE' ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'DELAYED' ABORT '\nRINGING\r\n\r\nRINGING\r' REPORT CONNECT TIMEOUT 6 '' 'ATQ0' 'OK-AT-OK' 'ATZ' TIMEOUT 3 'OK' 'AT+CFUN=1' ${PinStr} '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' '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." 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" if [[ -e $pidfile ]]; then read pid < "$pidfile" [[ "$pid" ]] && kill "$pid" fi rm "${cfg}" "${chat}" rmdir "$STATE_DIR/mobile_ppp.${Interface}.${Profile}/" } # vim: ft=sh ts=4 et sw=4: