relay.init 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #!/bin/sh /etc/rc.common
  2. # Copyright (c) 2011-2012 OpenWrt.org
  3. START=80
  4. resolve_ifname() {
  5. grep -qs "^ *$1:" /proc/net/dev && {
  6. append args "-I $1"
  7. append ifaces "$1"
  8. }
  9. }
  10. resolve_network() {
  11. local ifn
  12. fixup_interface "$1"
  13. config_get ifn "$1" ifname
  14. [ -z "$ifn" ] && return 1
  15. resolve_ifname "$ifn"
  16. }
  17. start_relay() {
  18. local cfg="$1"
  19. local args=""
  20. local ifaces=""
  21. config_get proto "$cfg" proto
  22. [[ "$proto" == relay ]] || return 0
  23. SERVICE_DAEMONIZE=1
  24. SERVICE_WRITE_PID=1
  25. SERVICE_PID_FILE="/var/run/relay-$cfg.pid"
  26. [ -f "$SERVICE_PID_FILE" ] && {
  27. if grep -q relayd "/proc/$(cat $SERVICE_PID_FILE)/cmdline"; then
  28. return 0
  29. else
  30. rm -f "$SERVICE_PID_FILE"
  31. fi
  32. }
  33. local net networks
  34. config_get networks "$cfg" network
  35. for net in $networks; do
  36. resolve_network "$net" || {
  37. return 1
  38. }
  39. done
  40. local ifn ifnames
  41. config_get ifnames "$cfg" ifname
  42. for ifn in $ifnames; do
  43. resolve_ifname "$ifn"
  44. done
  45. local ipaddr
  46. config_get ipaddr "$cfg" ipaddr
  47. [ -n "$ipaddr" ] && append args "-L $ipaddr"
  48. local gateway
  49. config_get gateway "$cfg" gateway
  50. [ -n "$gateway" ] && append args "-G $gateway"
  51. local expiry # = 30
  52. config_get expiry "$cfg" expiry
  53. [ -n "$expiry" ] && append args "-t $expiry"
  54. local retry # = 5
  55. config_get retry "$cfg" retry
  56. [ -n "$retry" ] && append args "-p $retry"
  57. local table # = 16800
  58. config_get table "$cfg" table
  59. [ -n "$table" ] && append args "-T $table"
  60. local fwd_bcast # = 1
  61. config_get_bool fwd_bcast "$cfg" forward_bcast 1
  62. [ $fwd_bcast -eq 1 ] && append args "-B"
  63. local fwd_dhcp # = 1
  64. config_get_bool fwd_dhcp "$cfg" forward_dhcp 1
  65. [ $fwd_dhcp -eq 1 ] && append args "-D"
  66. service_start /usr/sbin/relayd $args
  67. }
  68. stop() {
  69. for pid in /var/run/relay-*.pid; do
  70. SERVICE_PID_FILE="$pid"
  71. service_stop /usr/sbin/relayd
  72. rm -f "$SERVICE_PID_FILE"
  73. done
  74. }
  75. start() {
  76. include /lib/network
  77. config_load network
  78. config_foreach start_relay interface
  79. }