client2server 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. STATE_DIR="/var/run/${NAME}"
  10. PIDFILE="${STATE_DIR}/pid"
  11. ENV_FILE="${STATE_DIR}/env"
  12. start() {
  13. logger -t "$NAME" -p user.info "Starting $NAME..."
  14. # Check config
  15. if [ ! -f /etc/config/client2server ]; then
  16. logger -t "$NAME" -p user.err "Config not found"
  17. exit 1
  18. fi
  19. # Ensure state dir exists (shared with hotplug scripts)
  20. mkdir -p "$STATE_DIR"
  21. chmod 0755 "$STATE_DIR"
  22. # Check if enabled
  23. local enabled
  24. enabled=$(uci get client2server.general.enabled 2>/dev/null)
  25. if [ "$enabled" = "0" ]; then
  26. logger -t "$NAME" -p user.info "Disabled in config"
  27. exit 0
  28. fi
  29. # Read UCI into environment file (so hotplug scripts can inherit it)
  30. local server_url token router_id
  31. server_url=$(uci get client2server.server.url 2>/dev/null)
  32. token=$(uci get client2server.server.token 2>/dev/null)
  33. router_id=$(uci get client2server.router.id 2>/dev/null)
  34. if [ -z "$router_id" ]; then
  35. router_id=$(cat /proc/sys/kernel/hostname 2>/dev/null || echo unknown)
  36. fi
  37. cat > "$ENV_FILE" <<EOF
  38. SERVER_URL='${server_url}'
  39. TOKEN='${token}'
  40. ROUTER_ID='${router_id}'
  41. EOF
  42. chmod 0640 "$ENV_FILE"
  43. # Make sure Lua script is executable
  44. chmod +x /usr/sbin/client2server-unified.lua 2>/dev/null
  45. # Start the Lua script with UCI env exported (and load env file for any
  46. # child processes that need it - e.g. hotplug scripts forked by netifd)
  47. logger -t "$NAME" -p user.info "router_id=$router_id url=$server_url"
  48. # shellcheck disable=SC1090
  49. set -a
  50. . "$ENV_FILE"
  51. set +a
  52. lua /usr/sbin/client2server-unified.lua &
  53. echo $! > $PIDFILE
  54. logger -t "$NAME" -p user.info "Started with PID $(cat $PIDFILE)"
  55. }
  56. stop() {
  57. if [ -f $PIDFILE ]; then
  58. local pid
  59. pid=$(cat $PIDFILE)
  60. kill -TERM "$pid" 2>/dev/null
  61. rm -f $PIDFILE
  62. fi
  63. rm -f "$ENV_FILE" 2>/dev/null
  64. # NOTE: keep STATE_DIR and buffer file across restarts so queued
  65. # events survive an agent restart. They live in /var/run (tmpfs),
  66. # so they will still be lost on reboot - which is acceptable since
  67. # the events are transient network events.
  68. logger -t "$NAME" -p user.info "Stopped"
  69. }
  70. reload() {
  71. stop
  72. sleep 1
  73. start
  74. }