relay.init 2.0 KB

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