Skip to content

feat: per-client bandwidth limiting with daily quota rollover - #256

Open
HakimiDev wants to merge 4 commits into
martin-ger:masterfrom
HakimiDev:feature/bandwidth-manager-and-rollover
Open

feat: per-client bandwidth limiting with daily quota rollover#256
HakimiDev wants to merge 4 commits into
martin-ger:masterfrom
HakimiDev:feature/bandwidth-manager-and-rollover

Conversation

@HakimiDev

Copy link
Copy Markdown

Adds per-client bandwidth management to the ESP32 NAT Router.

Changes

  • Token-bucket rate limiting per client (upload/download)
  • Daily usage tracking with automatic midnight reset (SNTP)
  • Daily data cap with automatic blocking when exceeded
  • Unused quota rolls over to next day (capped at 1x daily cap)
  • NVS persistence for limits and usage across reboots
  • Web UI: bandwidth limits form and usage table on /mappings
  • CLI commands: set_bw, show_bw, clear_bw
  • Background task for daily reset and periodic NVS flush
  • Integration into AP netif hot path (IRAM-safe, non-blocking)
  • Max 8 concurrent clients, ~120 bytes per entry

New ESP-IDF component implementing:
- Token-bucket rate limiting per client (upload/download)
- Daily usage tracking with automatic midnight reset via SNTP
- Daily data cap with automatic blocking when exceeded
- Unused quota rolls over to next day (capped at 1x daily cap)
- NVS persistence for limits and accumulated usage
- Background FreeRTOS task for daily reset and periodic NVS flush
- Thread-safe: non-blocking mutex in hot path (1-tick timeout)
- Max 8 concurrent clients tracked simultaneously

Signed-off-by: HakimiDev <hakimideveloper@gmail.com>
- bw_check_upload() in ap_netif_input_hook (client -> Internet)
- bw_check_download() in ap_netif_linkoutput_hook (Internet -> client)
- bw_init() called on WIFI_EVENT_AP_START
- Non-blocking: allows packet through if mutex unavailable

Signed-off-by: HakimiDev <hakimideveloper@gmail.com>
- set_bw: set per-client upload/download rate limits and daily cap
- show_bw: display all configured limits and current usage
- clear_bw: remove all bandwidth entries

Signed-off-by: HakimiDev <hakimideveloper@gmail.com>
- Bandwidth limits form on /mappings (set/remove per-client limits)
- Usage table showing: MAC, upload/download limits, daily cap,
  rollover quota, actual usage, and blocked/active status
- Rollover column displays carried-over unused quota

Signed-off-by: HakimiDev <hakimideveloper@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant