From 8682aabf0f7698d80bfd9ca827229a88e196f605 Mon Sep 17 00:00:00 2001
From: Filip Matusiak <filip.matusiak@iopsys.eu>
Date: Fri, 16 Dec 2022 14:07:07 +0100
Subject: [PATCH] Track number of BTM requests sent
Signed-off-by: Filip Matusiak <filip.matusiak@iopsys.eu>
---
src/cntlr.c | 22 +++++++++++++++++++---
src/cntlr.h | 4 ++++
src/cntlr_map.c | 8 +++++---
3 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/cntlr.c b/src/cntlr.c
index eb4b840e..40929873 100644
--- a/src/cntlr.c
+++ b/src/cntlr.c
@@ -407,14 +407,24 @@ void cntlr_update_sta_steer_counters(struct controller *c,
a->answered = false;
a->auto_bssid = dst_bssid ? false : true;
- /* Update SteeringSummaryStats */
- /*TODO: split counter for opportunity & mandate */
- s->stats.btm_attempt_cnt++;
/* Record tsp for most recent steer attempt */
timestamp_update(&s->stats.last_attempt_tsp);
s->num_steer_attempts += 1;
}
+static void cntlr_btm_req_timer_cb(atimer_t *t)
+{
+ trace("%s:--->\n", __func__);
+
+ struct sta *s = container_of(t, struct sta, btm_req_timer);
+
+ if (s->pending_btm_resp_num > 0) {
+ s->failed_steer_attempts += s->pending_btm_resp_num;
+ s->stats.btm_failure_cnt += s->pending_btm_resp_num;
+ s->pending_btm_resp_num = 0;
+ }
+}
+
static int cntlr_steer_sta(struct controller *c, struct sta *s,
struct steer_target *to, uint32_t mode,
uint32_t reason)
@@ -460,6 +470,10 @@ static int cntlr_steer_sta(struct controller *c, struct sta *s,
1, (uint8_t (*)[6])s->macaddr,
1, (uint8_t (*)[6])to->bssid);
+ /* Expect btm-resp from STA forwarded to cntlr */
+ s->pending_btm_resp_num++;
+ uloop_timeout_set(&s->btm_req_timer, BTM_RESP_EXP_TIMEOUT * 1000);
+
break;
case STEER_MODE_UNDEFINED:
default:
@@ -615,6 +629,7 @@ static void cntlr_init_sta_steer_counters(struct sta *s)
//s->stats.btm_failure_cnt = 0;
//s->stats.btm_query_resp_cnt = 0;
//s->stats.last_attempt_tsp = 0;
+ s->pending_btm_resp_num = 0;
}
struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr)
@@ -635,6 +650,7 @@ struct sta *cntlr_add_sta(struct controller *c, uint8_t *macaddr)
memcpy(s->macaddr, macaddr, 6);
list_add(&s->list, &c->stalist);
s->bcn_metrics_timer.cb = cntlr_bcn_metrics_parse;
+ s->btm_req_timer.cb = cntlr_btm_req_timer_cb;
cntlr_init_sta_steer_counters(s);
return s;
diff --git a/src/cntlr.h b/src/cntlr.h
index b82db4fb..93c784a6 100644
--- a/src/cntlr.h
+++ b/src/cntlr.h
@@ -179,6 +179,7 @@ struct sta {
int bcn_report_wait_time; /* maximum time to wait for bcn response in seconds */
int failed_steer_attempts;
+ int pending_btm_resp_num;
uint8_t num_steer_attempts;
#define MAX_LOG_STEER_ATTEMPTS 10
@@ -186,6 +187,9 @@ struct sta {
struct steer_stats stats;
+#define BTM_RESP_EXP_TIMEOUT 5
+ atimer_t btm_req_timer;
+
struct list_head list;
};
diff --git a/src/cntlr_map.c b/src/cntlr_map.c
index 4f26d27b..a002943e 100644
--- a/src/cntlr_map.c
+++ b/src/cntlr_map.c
@@ -1955,12 +1955,14 @@ int handle_sta_steer_btm_report(void *cntlr, struct cmdu_buff *cmdu)
resp->status ? NULL : resp->target_bssid[0]);
if (!attempt)
- dbg("|%s:%d| could not find an attempt matching this btm report\n",
+ warn("|%s:%d| could not find an attempt matching this btm report\n",
__func__, __LINE__);
- else
+ else {
+ s->pending_btm_resp_num--;
attempt->answered = true;
+ }
- if (resp->status) {
+ if (resp->status != 0x00) { /* error code */
s->failed_steer_attempts++;
/* Update Steering Summary Stats */
s->stats.btm_failure_cnt++;
--
GitLab