From ab3086c6bcea9eaa4f3d155fdb593e6336d5fd17 Mon Sep 17 00:00:00 2001 From: Filip Matusiak <filip.matusiak@iopsys.eu> Date: Wed, 23 Apr 2025 09:37:16 +0200 Subject: [PATCH] assoc ctrl: Remove outdated entries from file --- src/assoc_ctrl.c | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/assoc_ctrl.c b/src/assoc_ctrl.c index 54ec5aef4..a2809ec27 100644 --- a/src/assoc_ctrl.c +++ b/src/assoc_ctrl.c @@ -250,7 +250,7 @@ struct rsta { uint16_t validity; }; -int assoc_ctrl_read_restrictions(struct agent *a, uint8_t *bssid, +static int assoc_ctrl_read_restrictions(struct agent *a, uint8_t *bssid, struct rsta *fr, int *num_fr) { struct blob_buf bssids = { 0 }; @@ -331,7 +331,6 @@ int assoc_ctrl_read_restrictions(struct agent *a, uint8_t *bssid, fr[*num_fr].validity = 0; } else { fr[*num_fr].validity = duration - elapsed; - /* TODO: remove outdated entry from file */ } (*num_fr)++; @@ -344,6 +343,30 @@ out: return ret; } +static void assoc_ctrl_rem_neg_validity(struct agent *a, uint8_t *bssid, + struct rsta *fr, int *num_fr) +{ + int i; + + for (i = 0; i < *num_fr; i++) { + if (fr[i].validity < 0) { + int j; + + /* remove from file */ + assoc_ctrl_update_restrict_file(bssid, fr[i].macaddr, + 0, ASSOC_CTRL_UNBLOCK); + /* remove fr[i] from fr */ + for (j = i; j < *num_fr - 1; j++) + memcpy(&fr[j], &fr[j + 1], sizeof(struct rsta)); + memset(&fr[*num_fr - 1], 0, sizeof(struct rsta)); + /* decrease num_fr */ + (*num_fr)--; + /* decrease i */ + i--; + } + } +} + static void agent_disconnect_stas(struct agent *a, int num_sta, uint8_t sta_macs[][6], struct netif_ap *ap) { @@ -576,11 +599,14 @@ int assoc_ctrl_sync_from_file(struct agent *a, struct netif_ap *ap) struct restrict_sta_entry *s = NULL; int ret = 0; - /* Read STA restrictions from file list */ + /* Read STA restrictions from file */ ret = assoc_ctrl_read_restrictions(a, ap->bssid, fr, &num_fr); if (ret) return ret; + /* Remove all outdated entries from file */ + assoc_ctrl_rem_neg_validity(a, ap->bssid, fr, &num_fr); + /* 1. Add/Update STAs: file list -> runtime list */ if (num_fr > 0) ret |= assoc_ctrl_add_sta(a, ap, num_fr, fr, false); -- GitLab