ppp.sh 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. stop_interface_ppp() {
  2. local cfg="$1"
  3. local proto
  4. config_get proto "$cfg" proto
  5. local link="$proto-$cfg"
  6. service_kill pppd "/var/run/ppp-${link}.pid"
  7. remove_dns "$cfg"
  8. local lock="/var/lock/ppp-$link"
  9. [ -f "$lock" ] && lock -u "$lock"
  10. }
  11. start_pppd() {
  12. local cfg="$1"; shift
  13. local proto
  14. config_get proto "$cfg" proto
  15. # unique link identifier
  16. local link="${proto:-ppp}-$cfg"
  17. # make sure only one pppd process is started
  18. lock "/var/lock/ppp-${link}"
  19. local pid="$(head -n1 /var/run/ppp-${link}.pid 2>/dev/null)"
  20. [ -d "/proc/$pid" ] && grep pppd "/proc/$pid/cmdline" 2>/dev/null >/dev/null && {
  21. lock -u "/var/lock/ppp-${link}"
  22. return 0
  23. }
  24. # Workaround: sometimes hotplug2 doesn't deliver the hotplug event for creating
  25. # /dev/ppp fast enough to be used here
  26. [ -e /dev/ppp ] || mknod /dev/ppp c 108 0
  27. local device
  28. config_get device "$cfg" device
  29. local username
  30. config_get username "$cfg" username
  31. local password
  32. config_get password "$cfg" password
  33. local keepalive
  34. config_get keepalive "$cfg" keepalive
  35. local connect
  36. config_get connect "$cfg" connect
  37. local disconnect
  38. config_get disconnect "$cfg" disconnect
  39. local pppd_options
  40. config_get pppd_options "$cfg" pppd_options
  41. local defaultroute
  42. config_get_bool defaultroute "$cfg" defaultroute 1
  43. [ "$defaultroute" -eq 1 ] && \
  44. defaultroute="defaultroute replacedefaultroute" || defaultroute="nodefaultroute"
  45. local interval="${keepalive##*[, ]}"
  46. [ "$interval" != "$keepalive" ] || interval=5
  47. local dns
  48. config_get dns "$config" dns
  49. local has_dns=0
  50. local peer_default=1
  51. [ -n "$dns" ] && {
  52. has_dns=1
  53. peer_default=0
  54. }
  55. local peerdns
  56. config_get_bool peerdns "$cfg" peerdns $peer_default
  57. [ "$peerdns" -eq 1 ] && {
  58. peerdns="usepeerdns"
  59. } || {
  60. peerdns=""
  61. add_dns "$cfg" $dns
  62. }
  63. local demand
  64. config_get demand "$cfg" demand 0
  65. local demandargs
  66. [ "$demand" -gt 0 ] && {
  67. demandargs="precompiled-active-filter /etc/ppp/filter demand idle $demand"
  68. [ "$has_dns" -eq 0 ] && add_dns "$cfg" 1.1.1.1
  69. } || {
  70. demandargs="persist"
  71. }
  72. local ipv6
  73. config_get_bool ipv6 "$cfg" ipv6 0
  74. [ "$ipv6" -eq 1 ] && ipv6="+ipv6" || ipv6=""
  75. start-stop-daemon -S -b -x /usr/sbin/pppd -m -p /var/run/ppp-$link.pid -- "$@" \
  76. ${keepalive:+lcp-echo-interval $interval lcp-echo-failure ${keepalive%%[, ]*}} \
  77. $demandargs \
  78. $peerdns \
  79. $defaultroute \
  80. ${username:+user "$username" password "$password"} \
  81. ipparam "$cfg" \
  82. ifname "$link" \
  83. ${connect:+connect "$connect"} \
  84. ${disconnect:+disconnect "$disconnect"} \
  85. ${ipv6} \
  86. ${pppd_options} \
  87. nodetach
  88. lock -u "/var/lock/ppp-${link}"
  89. }
  90. setup_interface_ppp() {
  91. local iface="$1"
  92. local config="$2"
  93. local device
  94. config_get device "$config" device
  95. local mtu
  96. config_get mtu "$config" mtu
  97. mtu=${mtu:-1492}
  98. start_pppd "$config" \
  99. mtu $mtu mru $mtu \
  100. "$device"
  101. }