client2server 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/bin/sh /etc/rc.common
  2. # Copyright (c) 2026 Luis Rosales - MIT License
  3. #
  4. # Starts the Lua event forwarder and exports UCI config to the environment
  5. # so that /etc/hotplug.d/{wireless,dhcp}/* scripts can read SERVER_URL, etc.
  6. START=95
  7. STOP=10
  8. NAME=client2server
  9. PIDFILE="/var/run/${NAME}.pid"
  10. ENV_FILE="/var/run/${NAME}.env"
  11. start() {
  12. logger -t "$NAME" -p user.info "Starting $NAME..."
  13. # Check config
  14. if [ ! -f /etc/config/client2server ]; then
  15. logger -t "$NAME" -p user.err "Config not found"
  16. exit 1
  17. fi
  18. # Check if enabled
  19. local enabled
  20. enabled=$(uci get client2server.general.enabled 2>/dev/null)
  21. if [ "$enabled" = "0" ]; then
  22. logger -t "$NAME" -p user.info "Disabled in config"
  23. exit 0
  24. fi
  25. # Read UCI into environment file (so hotplug scripts can inherit it)
  26. local server_url token router_id
  27. server_url=$(uci get client2server.server.url 2>/dev/null)
  28. token=$(uci get client2server.server.token 2>/dev/null)
  29. router_id=$(uci get client2server.router.id 2>/dev/null)
  30. if [ -z "$router_id" ]; then
  31. router_id=$(cat /proc/sys/kernel/hostname 2>/dev/null || echo unknown)
  32. fi
  33. cat > "$ENV_FILE" <<EOF
  34. SERVER_URL='${server_url}'
  35. TOKEN='${token}'
  36. ROUTER_ID='${router_id}'
  37. EOF
  38. chmod 0640 "$ENV_FILE"
  39. # Make sure Lua script is executable
  40. chmod +x /usr/sbin/client2server-unified.lua 2>/dev/null
  41. # Start the Lua script with UCI env exported (and load env file for any
  42. # child processes that need it - e.g. hotplug scripts forked by netifd)
  43. logger -t "$NAME" -p user.info "router_id=$router_id url=$server_url"
  44. # shellcheck disable=SC1090
  45. set -a
  46. . "$ENV_FILE"
  47. set +a
  48. lua /usr/sbin/client2server-unified.lua &
  49. echo $! > $PIDFILE
  50. logger -t "$NAME" -p user.info "Started with PID $(cat $PIDFILE)"
  51. }
  52. stop() {
  53. if [ -f $PIDFILE ]; then
  54. local pid
  55. pid=$(cat $PIDFILE)
  56. kill -TERM "$pid" 2>/dev/null
  57. rm -f $PIDFILE
  58. fi
  59. rm -f "$ENV_FILE" 2>/dev/null
  60. logger -t "$NAME" -p user.info "Stopped"
  61. }
  62. reload() {
  63. stop
  64. sleep 1
  65. start
  66. }