diff --git a/src/core/cntlr.c b/src/core/cntlr.c index 8abe2db3cd5c18fbd2fa44ded1439ee268da865d..ff7519e67e5497d07fc0a87f7808f2921f8c2d6e 100644 --- a/src/core/cntlr.c +++ b/src/core/cntlr.c @@ -1999,7 +1999,7 @@ static void cntlr_signal_periodic_run(struct uloop_timeout *t) uint8_t origin[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x13}; trace("Config changed, triggering renew!\n"); - cmdu = cntlr_gen_ap_autoconfig_renew(c, origin, c->cfg.al_bridge, c->almac); + cmdu = cntlr_gen_ap_autoconfig_renew(c, origin); if (cmdu) { send_cmdu(c, cmdu); cmdu_free(cmdu); @@ -2221,11 +2221,15 @@ static void mapclient_subscribe_for_cmdus(struct controller *c) trace("<----------------------------------- %s\n", __func__); - ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &map_id); - if (ret) { - trace("plugin '%s' lookup failed. %s\n", - map_plugin, ubus_strerror(ret)); - return; + for (;;) { + int ret; + + ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &map_id); + if (!ret) + break; + + trace("i1905.map not up yet, sleeping for 2s!\n"); + sleep(2); } c->map_oid = map_id; @@ -2293,7 +2297,7 @@ int start_controller(void) for (;;) { int ret; - ret = ubus_lookup_id(c->ubus_ctx, map_plugin, &ieee1905_obj); + ret = ubus_lookup_id(c->ubus_ctx, "i1905", &ieee1905_obj); if (!ret) break; diff --git a/src/core/cntlr_cmdu_generator.c b/src/core/cntlr_cmdu_generator.c index fcbe352c16f370162d6726c40013cce3d75feacb..d08ad8db8227692b1621b5a83af65f2026b22346 100644 --- a/src/core/cntlr_cmdu_generator.c +++ b/src/core/cntlr_cmdu_generator.c @@ -83,12 +83,12 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c, if (ret) goto out; - ret = cntlr_gen_al_mac(c, c->almac); + ret = cntlr_gen_al_mac(c, resp, c->almac); if (ret) goto out; /* Hard-code dummy 5GHz, ignored by agent according to spec */ - ret = cntlr_gen_supported_freq_band(c, IEEE80211_FREQUENCY_BAND_5_GHZ); + ret = cntlr_gen_supported_freq_band(c, resp, IEEE80211_FREQUENCY_BAND_5_GHZ); if (ret) goto out; @@ -96,7 +96,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c, memcpy(resp->origin, dst, 6); return resp; out: - cmdu_free(resp;) + cmdu_free(resp); return NULL; } @@ -526,7 +526,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_response(struct controller *c, resp = cmdu_alloc_simple(CMDU_TYPE_AP_AUTOCONFIGURATION_RESPONSE, &mid); if (!resp) { trace("%s: -ENOMEM\n", __func__); - return -1; + return NULL; } ret = cntlr_gen_supp_role(c, resp, IEEE80211_ROLE_REGISTRAR); @@ -571,7 +571,7 @@ struct cmdu_buff *cntlr_gen_ap_autoconfig_wsc(struct controller *c, resp = cmdu_alloc_frame(3000); if (!resp) { trace("%s: -ENOMEM\n", __func__); - return -1; + return NULL; } cmdu_set_type(resp, CMDU_TYPE_AP_AUTOCONFIGURATION_WSC); diff --git a/src/core/cntlr_cmdu_generator.h b/src/core/cntlr_cmdu_generator.h index ada19b79a154600ee0f8fa1add538dcb96e682a6..02bb976502c2eb798072ac8a838dc915a65763b4 100644 --- a/src/core/cntlr_cmdu_generator.h +++ b/src/core/cntlr_cmdu_generator.h @@ -11,7 +11,7 @@ #define CNTLR_CMDU_GEN_H struct cmdu_buff *cntlr_gen_ap_autoconfig_renew(struct controller *c, - uint8_t *origin, char *intf_name, uint8_t *almac); + uint8_t *dst); struct cmdu_buff *cntlr_gen_ap_capability_query(struct controller *c, uint8_t *origin, char *intf_name); struct cmdu_buff *cntlr_gen_client_capability_query(struct controller *c, diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c index 403aa8cb63dbd04ab15871d5aab52a3b4ee004a7..76860a519e012112bbc6e3642a5a1430957dfb4e 100644 --- a/src/core/cntlr_tlv_generator.c +++ b/src/core/cntlr_tlv_generator.c @@ -138,7 +138,7 @@ int cntlr_gen_8021q_settings(struct controller *c, struct cmdu_buff *frm, } int cntlr_gen_traffic_sep_policy(struct controller *c, struct cmdu_buff *frm, - uint8_t *band) + uint8_t band) { struct tlv *t; struct tlv_traffic_sep_policy *data; @@ -392,19 +392,30 @@ struct tlv_ch_scan_rep_policy *cntlr_gen_ch_scan_rep_policy( // return p; } -struct tlv_al_mac *cntlr_gen_al_mac(struct controller *c, uint8_t *hwaddr) +int cntlr_gen_al_mac(struct controller *c, struct cmdu_buff *frm, + uint8_t *hwaddr) { - return NULL; -// struct tlv_al_mac *p; -// -// p = calloc(1, sizeof(struct tlv_al_mac)); -// if (!p) -// return NULL; -// -// p->tlv_type = TLV_TYPE_AL_MAC_ADDRESS_TYPE; -// memcpy(p->al_mac_address, hwaddr, 6); -// -// return p; + struct tlv *t; + struct tlv_aladdr *data; + + t = cmdu_reserve_tlv(frm, 256); + if (!t) + return -1; + + t->type = TLV_TYPE_AL_MAC_ADDRESS_TYPE; + t->len = 6; + + dbg("hwaddr " MACFMT "\n", MAC2STR(hwaddr)); + + data = (struct tlv_aladdr *) t->data; + memcpy(data->macaddr, hwaddr, 6); + + if (cmdu_put_tlv(frm, t)) { + dbg("%s: error: cmdu_put_tlv()\n", __func__); + return -1; + } + + return 0; } struct tlv_unsuccess_assoc_policy *cntlr_gen_unsuccess_assoc_policy( diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h index 49acc3cce1924e3e1b9707a45224e90160f82e81..821e90a862fdeeb71e532d43bbfc2c274e879698 100644 --- a/src/core/cntlr_tlv_generator.h +++ b/src/core/cntlr_tlv_generator.h @@ -14,7 +14,7 @@ uint8_t *extract_tlv_by_type(struct cmdu_buff *cmdu, uint8_t tlv_type); int cntlr_gen_8021q_settings(struct controller *c, struct cmdu_buff *frm, struct agent_policy *a); int cntlr_gen_traffic_sep_policy(struct controller *c, struct cmdu_buff *frm, - uint8_t *band); + uint8_t band); int cntlr_gen_wsc(struct controller *c, struct cmdu_buff *frm, struct iface_credential *iface_cred, uint8_t *msg, uint16_t msglen, uint8_t band); @@ -40,7 +40,8 @@ struct tlv_unsuccess_assoc_policy *cntlr_gen_unsuccess_assoc_policy( struct tlv_backhaul_bss_config *cntlr_gen_backhaul_bss_config( struct controller *c, struct agent_policy *a, struct cmdu_buff *cmdu, const uint8_t *bssid); -struct tlv_al_mac *cntlr_gen_al_mac(struct controller *c, uint8_t *hwaddr); +int cntlr_gen_al_mac(struct controller *c, struct cmdu_buff *frm, + uint8_t *hwaddr); int cntlr_gen_supported_freq_band(struct controller *c, struct cmdu_buff *frm, uint8_t freq_band); struct tlv_supported_role *cntlr_gen_supported_role(struct controller *c, diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c index 641d08ba6dac65e0cb970538a3d0080de8c1ae92..18d5c754dc6b1292e55f387dd70e16d24e88ce7a 100644 --- a/src/core/cntlr_ubus.c +++ b/src/core/cntlr_ubus.c @@ -1024,7 +1024,7 @@ static int cntlr_reconfig_ap(struct ubus_context *ctx, struct ubus_object *obj, return UBUS_STATUS_UNKNOWN_ERROR; send_cmdu(c, cmdu); - map_free_cmdu(cmdu); + cmdu_free(cmdu); return UBUS_STATUS_OK; }