diff --git a/src/agent.c b/src/agent.c
index d414b5b593c6a244ec42299725df83e3b593fa98..fc2e12c82ee3a52598049878651726b45dbe2b35 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -4477,14 +4477,16 @@ void parse_scanresults(struct ubus_request *req, int type, struct blob_attr *msg
static void _enumerate_wifi_objects(struct ubus_request *req, int type,
struct blob_attr *msg)
{
-
trace("%s: --->\n", __func__);
-
+ struct radio_apcfg_state {
+ char name[16];
+ enum autocfg_state state;
+ } apcfg_state[WIFI_DEVICE_MAX_NUM] = {0};
struct agent *a = (struct agent *)req->priv;
struct json_object *json_msg;
struct json_object *radio_array;
char *json_str;
- int i, j, k, len;
+ int i, j, k, len, prev_len = 0;
json_str = blobmsg_format_json(msg, true);
if (!json_str)
@@ -4504,6 +4506,14 @@ static void _enumerate_wifi_objects(struct ubus_request *req, int type,
trace("%s: num_radios(len) = %d\n", __func__, len);
if (len) {
+ /* store current radio apcfg states */
+ for (i = 0; i < a->num_radios; i++) {
+ strncpy(apcfg_state[i].name, a->radios[i].name,
+ IFNAMSIZ - 1);
+ apcfg_state[i].state = a->radios[i].state;
+ }
+ prev_len = a->num_radios;
+ /* clears radio apcfg states */
agent_free_radios(a);
clear_fhlist(a);
a->num_radios = len;
@@ -4527,6 +4537,14 @@ static void _enumerate_wifi_objects(struct ubus_request *req, int type,
strncpy(a->ifs[i].radio, radio_name, 15);
strncpy(a->radios[i].name, radio_name, 15);
+ for (j = 0; j < prev_len; j++) {
+ /* write back apcfg state if any */
+ if (!strncmp(apcfg_state[j].name, a->radios[i].name,
+ IFNAMSIZ - 1)) {
+ a->radios[i].state = apcfg_state[j].state;
+ }
+ }
+
list_for_each_entry(r_cfg, &a->cfg.radiolist, list) {
if (strncmp(r_cfg->name, a->radios[i].name, 15))
continue;
@@ -6011,6 +6029,7 @@ int wifiagent_get_status(struct ubus_context *ctx,
blobmsg_add_u32(&bb, "channel", re->current_channel);
blobmsg_add_u32(&bb, "bandwidth", re->current_bandwidth);
blobmsg_add_u32(&bb, "opclass", re->current_opclass);
+ blobmsg_add_u32(&bb, "autocfg_state", re->state);
blobmsg_close_table(&bb, t);
}
blobmsg_close_array(&bb, a);