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