Skip to content

RDKBWIFI-278: CACR add multi-STA support and received subdoc from UWM#1222

Open
sundram0711 wants to merge 1 commit into
rdkcentral:developfrom
sundram0711:easymesh-refactor_client_assoc_multiSTA_new
Open

RDKBWIFI-278: CACR add multi-STA support and received subdoc from UWM#1222
sundram0711 wants to merge 1 commit into
rdkcentral:developfrom
sundram0711:easymesh-refactor_client_assoc_multiSTA_new

Conversation

@sundram0711

Copy link
Copy Markdown
Contributor
  • Refactored implementation to support multiple STA entries per message (spec compliant)
  • Changed the struct to json format to carry cacr information from UWM to OneWifi.

Copilot AI review requested due to automatic review settings June 23, 2026 08:09
@sundram0711 sundram0711 requested a review from a team as a code owner June 23, 2026 08:09
@github-actions github-actions Bot added the community contribution Contributions from community. label Jun 23, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the EasyMesh Client Association Control Request (CACR) handling to accept a JSON sub-document from UWM and to apply the request to multiple STAs per message, rather than a single STA.

Changes:

  • Switched CACR payload handling from a binary struct (client_assoc_ctrl_req_t) to a JSON subdoc parser (parse_client_assoc_ctrl_json()).
  • Added multi-STA processing loop for StaMacList and per-STA ACL timer scheduling/cancellation tracking.
  • Extended kick_details_t to carry a scheduler timer ID for cancel support.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 6 comments.

File Description
source/core/wifi_ctrl.h Extends kick_details_t with a timer_id field to track scheduled ACL removal timers.
source/apps/em/wifi_em.c Implements JSON parsing for CACR, multi-STA handling, and pending timer tracking/cancellation.
include/wifi_base.h Removes the old binary CACR request struct (client_assoc_ctrl_req_t) now replaced by JSON payloads.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread source/apps/em/wifi_em.c Outdated
Comment thread source/apps/em/wifi_em.c Outdated
Comment thread source/apps/em/wifi_em.c
Comment on lines +3257 to +3267
/* un-block; cancel any pending timer for this STA */
/* Look for and cancel any pending block timer for this STA */
kick_details_t *pending = find_and_remove_pending_block(vap_index, sta_mac_list[i]);
if (pending) {
wifi_util_dbg_print(WIFI_CTRL, "%s:%d Cancelling pending block timer for STA %s on vap %d\n",
__func__, __LINE__, sta_mac_list[i], vap_index);
if (scheduler_cancel_timer_task(ctrl->sched, pending->timer_id) != 0) {
wifi_util_error_print(WIFI_CTRL, "%s:%d Failed to cancel timer %d for STA %s on vap %d\n",
__func__, __LINE__, pending->timer_id, sta_mac_list[i], vap_index);
}
}
Comment thread source/apps/em/wifi_em.c
Comment thread source/apps/em/wifi_em.c
Comment thread source/apps/em/wifi_em.c
- Refactored implementation to support multiple STA entries per message (spec compliant)
- Changed the struct to json format to carry cacr information from UWM to OneWifi.

Signed-off-by: Sundram Patel <sundram.p@tataelxsi.co.in>
@sundram0711 sundram0711 force-pushed the easymesh-refactor_client_assoc_multiSTA_new branch from c4a31aa to 4a907f6 Compare June 23, 2026 09:28
@sundram0711 sundram0711 requested a review from Copilot June 23, 2026 09:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

Comments suppressed due to low confidence (1)

source/apps/em/wifi_em.c:3290

  • The error cleanup: path only frees kick_details, but when kick_details->kick_list has been allocated (e.g., strdup() succeeded) this leaks memory. Free kick_details->kick_list first (it is safe to free(NULL)).
cleanup:
    if (kick_details) {
        free(kick_details);
    }

Comment thread source/apps/em/wifi_em.c
Comment on lines +3014 to +3018
if (ether_aton_r(bssid_obj->valuestring, (struct ether_addr *)bssid) == NULL) {
wifi_util_error_print(WIFI_CTRL, "%s:%d Failed to parse BSSID: %s\n", __func__, __LINE__, bssid_obj->valuestring);
cJSON_Delete(root);
return bus_error_invalid_input;
}
Comment thread source/apps/em/wifi_em.c
Comment on lines +2924 to +2948
// Helper function to remove a pending block by pointer (when timer fires)
static void remove_pending_block(kick_details_t *kick_details)
{
pthread_mutex_lock(&pending_blocks_lock);

pending_block_node_t *current = pending_blocks_head;
pending_block_node_t *prev = NULL;

while (current) {
if (current->kick_details == kick_details) {
// Found a match, remove from list
if (prev) {
prev->next = current->next;
} else {
pending_blocks_head = current->next;
}
free(current);
pthread_mutex_unlock(&pending_blocks_lock);
return;
}
prev = current;
current = current->next;
}
pthread_mutex_unlock(&pending_blocks_lock);
}
Comment thread source/apps/em/wifi_em.c
Comment on lines 2956 to 2960
kick_details_t *d = (kick_details_t *)arg;
wifi_util_dbg_print(WIFI_CTRL, "%s:%d Callback Del ACL, vap_index:%d, MAC: %s\n",
__func__, __LINE__, d->vap_index,
d->kick_list ? d->kick_list : "NULL");

Comment thread source/apps/em/wifi_em.c
Comment on lines +3259 to +3269
/* un-block; cancel any pending timer for this STA */
/* Look for and cancel any pending block timer for this STA */
kick_details_t *pending = find_and_remove_pending_block(vap_index, sta_mac_list[i]);
if (pending) {
wifi_util_dbg_print(WIFI_CTRL, "%s:%d Cancelling pending block timer for STA %s on vap %d\n",
__func__, __LINE__, sta_mac_list[i], vap_index);
if (scheduler_cancel_timer_task(ctrl->sched, pending->timer_id) != 0) {
wifi_util_error_print(WIFI_CTRL, "%s:%d Failed to cancel timer %d for STA %s on vap %d\n",
__func__, __LINE__, pending->timer_id, sta_mac_list[i], vap_index);
}
}
Comment thread source/apps/em/wifi_em.c
Comment on lines +3450 to +3452
// Destroy pending blocks list mutex
pthread_mutex_destroy(&pending_blocks_lock);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

community contribution Contributions from community.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants