02-dhcp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/bin/sh
  2. # DHCP hotplug script - triggers on DHCP events
  3. # Install to /etc/hotplug.d/dhcp/
  4. #
  5. # Event names match package/src/client2server-unified.lua:
  6. # dhcp_lease_new / dhcp_lease_expire
  7. # Source UCI config (set by /etc/init.d/client2server)
  8. SERVER_URL="${SERVER_URL:-}"
  9. ROUTER_ID="${ROUTER_ID:-}"
  10. TOKEN="${TOKEN:-}"
  11. if [ -z "$SERVER_URL" ] || [ -z "$ROUTER_ID" ]; then
  12. # Fall back to UCI directly (when called outside init.d context)
  13. SERVER_URL=$(uci get client2server.server.url 2>/dev/null)
  14. ROUTER_ID=$(uci get client2server.router.id 2>/dev/null)
  15. TOKEN=$(uci get client2server.server.token 2>/dev/null)
  16. fi
  17. # Final fallback (sane default)
  18. SERVER_URL="${SERVER_URL:-http://127.0.0.1:3843}"
  19. ROUTER_ID="${ROUTER_ID:-$(cat /proc/sys/kernel/hostname 2>/dev/null || echo unknown)}"
  20. log() {
  21. logger -t client2server-hotplug -p user.info "$1"
  22. }
  23. send_event() {
  24. local event_type="$1"
  25. local data="$2"
  26. json="{\"router_id\":\"$ROUTER_ID\",\"event\":\"$event_type\",\"data\":$data}"
  27. if [ -n "$TOKEN" ]; then
  28. curl -s -m 3 -X POST "$SERVER_URL/api/events" \
  29. -H "Content-Type: application/json" \
  30. -H "Authorization: Bearer $TOKEN" \
  31. -d "$json" >/dev/null 2>&1
  32. else
  33. curl -s -m 3 -X POST "$SERVER_URL/api/events" \
  34. -H "Content-Type: application/json" \
  35. -d "$json" >/dev/null 2>&1
  36. fi
  37. log "Sent: $event_type"
  38. }
  39. # Handle DHCP events
  40. # add - new lease (or renew with new IP)
  41. # del - lease released
  42. # remove - same as del, alias used by some builds
  43. case "$ACTION" in
  44. add|update|old)
  45. if [ -n "$MAC" ] && [ -n "$IP" ]; then
  46. log "DHCP LEASE NEW: $MAC -> $IP ($HOSTNAME)"
  47. send_event "dhcp_lease_new" "{\"mac\":\"$MAC\",\"ip\":\"$IP\",\"hostname\":\"$HOSTNAME\"}"
  48. fi
  49. ;;
  50. del|remove)
  51. if [ -n "$MAC" ] && [ -n "$IP" ]; then
  52. log "DHCP LEASE EXPIRE: $MAC -> $IP"
  53. send_event "dhcp_lease_expire" "{\"mac\":\"$MAC\",\"old_ip\":\"$IP\"}"
  54. fi
  55. ;;
  56. esac