Skip to content
Snippets Groups Projects
Commit f6347b49 authored by Jakob Olsson's avatar Jakob Olsson
Browse files

[WIP]: map-controller: autoconfig renew

parent c3237d42
No related branches found
No related tags found
No related merge requests found
......@@ -66,58 +66,38 @@ static void cmdu_defaults(struct controller *c, struct cmdu_buff *cmdu,
}
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 *resp;
struct tlv *t;
int ret;
uint16_t mid = 0;
resp = cmdu_alloc_simple(CMDU_TYPE_AP_AUTOCONFIGURATION_RENEW, &mid);
if (!resp) {
trace("%s: -ENOMEM\n", __func__);
return -1;
}
ret = cntlr_gen_supp_role(c, resp, IEEE80211_ROLE_REGISTRAR);
if (ret)
goto out;
ret = cntlr_gen_al_mac(c, 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);
if (ret)
goto out;
cmdu_put_eom(resp);
memcpy(resp->origin, dst, 6);
return resp;
out:
cmdu_free(resp;)
return NULL;
// struct cmdu_cstruct *cmdu;
// struct tlv_al_mac *p;
// struct tlv_supported_freq_band *p1;
// struct tlv_supported_role *p2;
// int tlv_index = 0;
//
// cmdu = (struct cmdu_cstruct *)calloc(1, sizeof(struct cmdu_cstruct));
// if (!cmdu) {
// trace("failed to malloc cmdu\n");
// return NULL;
// }
//
// cmdu_defaults(c, cmdu, origin, intf_name,
// CMDU_TYPE_AP_AUTOCONFIGURATION_RENEW);
//
// p = cntlr_gen_al_mac(c, almac);
// if (!p)
// goto fail_cmdu;
// cmdu->num_tlvs++;
//
// /* Hard-code dummy 5GHz, ignored by agent according to spec */
// p1 = cntlr_gen_supported_freq_band(c, 0x01);
// if (!p1)
// goto fail_p;
// cmdu->num_tlvs++;
//
// /* Hard-code dummy registrar role, only valid value */
// p2 = cntlr_gen_supported_role(c, 0x00);
// if (!p2)
// goto fail_p1;
// cmdu->num_tlvs++;
//
// cmdu->tlvs = (uint8_t **)calloc(cmdu->num_tlvs, sizeof(uint8_t *));
// if (!cmdu->tlvs)
// goto fail_p2;
// cmdu->tlvs[tlv_index++] = (uint8_t *)p;
// cmdu->tlvs[tlv_index++] = (uint8_t *)p1;
// cmdu->tlvs[tlv_index++] = (uint8_t *)p2;
//
// return cmdu;
//fail_p2:
// map_free_tlv_cstruct((uint8_t *) p2);
//fail_p1:
// map_free_tlv_cstruct((uint8_t *) p1);
//fail_p:
// map_free_tlv_cstruct((uint8_t *) p);
//fail_cmdu:
// map_free_cmdu(cmdu);
// return NULL;
}
struct cmdu_buff *cntlr_gen_ap_capability_query(struct controller *c,
......
......@@ -112,15 +112,11 @@ static const struct blobmsg_policy config_policy_params[__CFG_POLICY_MAX] = {
enum {
RECFG_POLICY_AGENT,
RECFG_POLICY_ALMAC,
RECFG_POLICY_EGRESS,
__RECFG_POLICY_MAX,
};
static const struct blobmsg_policy reconfig_policy_params[__RECFG_POLICY_MAX] = {
[RECFG_POLICY_AGENT] = { .name = "agent", .type = BLOBMSG_TYPE_STRING },
[RECFG_POLICY_ALMAC] = { .name = "almac", .type = BLOBMSG_TYPE_STRING },
[RECFG_POLICY_EGRESS] = { .name = "egress", .type = BLOBMSG_TYPE_STRING }
[RECFG_POLICY_AGENT] = { .name = "agent", .type = BLOBMSG_TYPE_STRING }
};
enum {
......@@ -1000,49 +996,36 @@ static int cntlr_reconfig_ap(struct ubus_context *ctx, struct ubus_object *obj,
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
{
return 0;
// struct controller *c = container_of(obj, struct controller, obj);
// struct blob_attr *tb[__RECFG_POLICY_MAX];
// char almac[18] = {0}, egress[16] = {0};
// uint8_t hwaddr[6] = {0}, alhwaddr[6] = {0};
// struct cmdu_cstruct *cmdu;
// int i, tlv_index = 0;
//
// blobmsg_parse(reconfig_policy_params, __RECFG_POLICY_MAX, tb,
// blob_data(msg), blob_len(msg));
//
// if (!tb[RECFG_POLICY_ALMAC]) {
// fprintf(stderr, "Provide ALMAC address in format 11:22:33...\n");
// return UBUS_STATUS_INVALID_ARGUMENT;
// }
//
// if (tb[RECFG_POLICY_AGENT]) {
// char agent[18] = {0};
//
// strncpy(agent, blobmsg_data(tb[RECFG_POLICY_AGENT]),
// sizeof(agent) - 1);
// if (!hwaddr_aton(agent, hwaddr))
// return UBUS_STATUS_UNKNOWN_ERROR;
// }
//
// if (tb[RECFG_POLICY_EGRESS])
// strncpy(egress, blobmsg_data(tb[RECFG_POLICY_EGRESS]),
// sizeof(egress) - 1);
// else
// strncpy(egress, c->cfg.al_bridge, sizeof(egress) - 1);
//
// strncpy(almac, blobmsg_data(tb[RECFG_POLICY_ALMAC]),
// sizeof(almac) - 1);
// if (!hwaddr_aton(almac, alhwaddr))
// return UBUS_STATUS_UNKNOWN_ERROR;
//
// cmdu = cntlr_gen_ap_autoconfig_renew(c, alhwaddr, egress, alhwaddr);
// if (!cmdu)
// return UBUS_STATUS_UNKNOWN_ERROR;
//
// send_cmdu(c, cmdu);
// map_free_cmdu(cmdu);
// return UBUS_STATUS_OK;
struct controller *c = container_of(obj, struct controller, obj);
struct blob_attr *tb[__RECFG_POLICY_MAX];
char almac[18] = {0};
char agent[18] = {0};
uint8_t hwaddr[6] = {0}, alhwaddr[6] = {0};
struct cmdu_cstruct *cmdu;
int i, tlv_index = 0;
blobmsg_parse(reconfig_policy_params, __RECFG_POLICY_MAX, tb,
blob_data(msg), blob_len(msg));
if (!tb[RECFG_POLICY_AGENT]) {
fprintf(stderr, "Provide ALMAC address in format 11:22:33...\n");
return UBUS_STATUS_INVALID_ARGUMENT;
}
strncpy(agent, blobmsg_data(tb[RECFG_POLICY_AGENT]),
sizeof(agent) - 1);
if (!hwaddr_aton(agent, hwaddr))
return UBUS_STATUS_UNKNOWN_ERROR;
cmdu = cntlr_gen_ap_autoconfig_renew(c, hwaddr);
if (!cmdu)
return UBUS_STATUS_UNKNOWN_ERROR;
send_cmdu(c, cmdu);
map_free_cmdu(cmdu);
return UBUS_STATUS_OK;
}
static struct netif_radio *cntlr_radio_to_bssid(struct controller *c, const char *radio)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment