ppp.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. scan_ppp() {
  2. config_get ifname "$1" ifname
  3. pppdev="${pppdev:-0}"
  4. config_get unit "$1" unit
  5. [ -z "$unit" ] && {
  6. config_set "$1" ifname "ppp$pppdev"
  7. config_set "$1" unit "$pppdev"
  8. pppdev="$(($pppdev + 1))"
  9. }
  10. }
  11. start_pppd() {
  12. local cfg="$1"; shift
  13. # make sure only one pppd process is started
  14. lock "/var/lock/ppp-${cfg}"
  15. local pid="$(head -n1 /var/run/ppp-${cfg}.pid 2>/dev/null)"
  16. [ -d "/proc/$pid" ] && grep pppd "/proc/$pid/cmdline" 2>/dev/null >/dev/null && {
  17. lock -u "/var/lock/ppp-${cfg}"
  18. return 0
  19. }
  20. # Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating
  21. # /dev/ppp fast enough to be used here
  22. [ -e /dev/ppp ] || mknod /dev/ppp c 108 0
  23. config_get device "$cfg" device
  24. config_get unit "$cfg" unit
  25. config_get username "$cfg" username
  26. config_get password "$cfg" password
  27. config_get keepalive "$cfg" keepalive
  28. config_get connect "$cfg" connect
  29. config_get disconnect "$cfg" disconnect
  30. config_get pppd_options "$cfg" pppd_options
  31. config_get_bool defaultroute "$cfg" defaultroute 1
  32. [ "$defaultroute" -eq 1 ] && defaultroute="defaultroute replacedefaultroute" || defaultroute=""
  33. interval="${keepalive##*[, ]}"
  34. [ "$interval" != "$keepalive" ] || interval=5
  35. config_get_bool peerdns "$cfg" peerdns 1
  36. [ "$peerdns" -eq 1 ] && peerdns="usepeerdns" || peerdns=""
  37. config_get demand "$cfg" demand
  38. [ -n "$demand" ] && echo "nameserver 1.1.1.1" > /tmp/resolv.conf.auto
  39. config_get_bool ipv6 "$cfg" ipv6 0
  40. [ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6=""
  41. /usr/sbin/pppd "$@" \
  42. ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \
  43. ${demand:+precompiled-active-filter /etc/ppp/filter demand idle }${demand:-persist} \
  44. $peerdns \
  45. $defaultroute \
  46. ${username:+user "$username" password "$password"} \
  47. unit "$unit" \
  48. linkname "$cfg" \
  49. ipparam "$cfg" \
  50. ${connect:+connect "$connect"} \
  51. ${disconnect:+disconnect "$disconnect"} \
  52. ${ipv6} \
  53. ${pppd_options}
  54. lock -u "/var/lock/ppp-${cfg}"
  55. }
  56. setup_interface_ppp() {
  57. local iface="$1"
  58. local config="$2"
  59. config_get device "$config" device
  60. config_get mtu "$cfg" mtu
  61. mtu=${mtu:-1492}
  62. start_pppd "$config" \
  63. mtu $mtu mru $mtu \
  64. "$device"
  65. }