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);