diff --git a/src/agent.c b/src/agent.c index dfff3af9eb53f5363c714e8545fd43705fdf5a0e..6a161092cece21e2710f95e80ba9abced9fa3e41 100644 --- a/src/agent.c +++ b/src/agent.c @@ -5761,6 +5761,7 @@ struct wifi_radio_element *agent_add_radio(struct agent *a, char *name) timer_init(&re->bk.steer_timeout, bsta_steer_cb); timer_init(&re->unassoc_sta_meas_timer, agent_unassoc_sta_meas_timer_cb); + return re; } @@ -5790,6 +5791,11 @@ static int init_wifi_radios(struct agent *a) dbg("%s: getting radio:%s status\n", __func__, re->name); ret = ubus_call_object(a, r_wobj, "status", parse_radio, re); + if (!ret && !re->autconfig.sha256[0]) + if (autoconfig_read_hash_from_file(re->macaddr, re->autconfig.sha256)) + dbg("%s: Autoconfig SHA256 for radio %s is unset\n", + __func__, re->name); + /* Get fresh opclass preferences after scan */ wifi_radio_update_opclass_preferences(a, re, 1); agent_set_post_scan_action_pref(a, re, true); diff --git a/src/agent_map.c b/src/agent_map.c index 2daa91c85da5c53f2b60bd411f716f3f7412a5ae..0b488a961fc9c1c6d605c562f20451b0bc61a3cf 100644 --- a/src/agent_map.c +++ b/src/agent_map.c @@ -2425,6 +2425,7 @@ int handle_ap_autoconfig_wsc(void *agent, struct cmdu_buff *rx_cmdu, return -1; dbg("|%s:%d| found radio = %s\n", __func__, __LINE__, radio->name); + if (!autoconfig_has_wsc_changed(&radio->autconfig, tv, AP_AUTOCONFIGURATION_WSC_M2_NUM_OF_TLV_TYPES, new_sha256)) { diff --git a/src/autoconfig.c b/src/autoconfig.c index 4709d767fcadc43aea6c82558a736a4011ba20e7..3f3bc0d463a8ee1489b1aaa24c7e36cddfd84dbe 100644 --- a/src/autoconfig.c +++ b/src/autoconfig.c @@ -151,7 +151,8 @@ bool autoconfig_has_wsc_changed(struct wsc_data *data, data->sha256[4], data->sha256[5]); agnt_dbg(LOG_APCFG, "%s: new SHA256: %02x%02x%02x%02x%02x%02x...\n", __func__, - new_sha256[0], new_sha256[1], new_sha256[2], new_sha256[3], + new_sha256[0], new_sha256[1], + new_sha256[2], new_sha256[3], new_sha256[4], new_sha256[5]); memcpy(sha256_out, new_sha256, SHA256_LENGTH); @@ -160,6 +161,7 @@ bool autoconfig_has_wsc_changed(struct wsc_data *data, error_cleanup: EVP_MD_CTX_free(ctx); + return ret; } @@ -350,7 +352,6 @@ int autoconfig_read_hash_from_file(uint8_t *macaddr, uint8_t *sha256_out) uint8_t radio_mac[6] = {0}; char *sh256_str; int blen; - //char * data; blobmsg_parse(radio_attr, ARRAY_SIZE(radio_attr), tb1, blobmsg_data(b), blob_len(b)); if (!tb1[0] || !tb1[1]) @@ -382,6 +383,12 @@ int autoconfig_read_hash_from_file(uint8_t *macaddr, uint8_t *sha256_out) strtob(sh256_str, blen, sha256_out); } + dbg("%s: Read autoconfig SHA256 for radio " MACFMT ": %02x%02x%02x%02x%02x%02x...\n", + __func__, MAC2STR(macaddr), + sha256_out[0], sha256_out[1], + sha256_out[2], sha256_out[3], + sha256_out[4], sha256_out[5]); + out: blob_buf_free(&radios); diff --git a/src/autoconfig.h b/src/autoconfig.h index 026d5278d3d24c51d576f3536b37b22c5646aab5..a46467d9b604736ed60a4a7975beec71dfe1cf11 100644 --- a/src/autoconfig.h +++ b/src/autoconfig.h @@ -24,7 +24,7 @@ struct wsc_data { void autoconfig_clean_wsc_hash(struct wsc_data *wsc); void autoconfig_update_wsc_hash(struct wsc_data *data, uint8_t *new_sha256); -bool autoconfig_has_wsc_changed(struct wsc_data *wsc, +bool autoconfig_has_wsc_changed(struct wsc_data *data, struct tlv *tlvs[][TLV_MAXNUM], size_t tlvs_size, uint8_t *sha256_out);