diff --git a/src/core/cntlr_map.c b/src/core/cntlr_map.c index d753e5cce4ebb053abd9c736574899fb9b80dece..9feb715e583dd5259f6b21ac42b4ccd260d56d56 100644 --- a/src/core/cntlr_map.c +++ b/src/core/cntlr_map.c @@ -143,6 +143,7 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu) { trace("%s: --->\n", __func__); struct controller *c = (struct controller *) cntlr; + struct agent_policy *a, *found = NULL; struct tlv_default_8021q_settings *p; struct tlv_traffic_sep_policy *p1; struct tlv_ap_radio_identifier *p2; @@ -154,7 +155,7 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu) cmdu = (struct cmdu_cstruct *)calloc(1, sizeof(struct cmdu_cstruct)); if (!cmdu) { fprintf(stderr, "failed to malloc cmdu\n"); - return UBUS_STATUS_UNKNOWN_ERROR; + return -1; } memcpy(cmdu->origin, rec_cmdu->origin, 6); @@ -163,7 +164,17 @@ int handle_ap_autoconfig_wsc(void *cntlr, struct cmdu_cstruct *rec_cmdu) strncpy(cmdu->intf_name, rec_cmdu->intf_name, sizeof(cmdu->intf_name) - 1); - p = cntlr_gen_8021q_settings(c, cmdu, rec_cmdu); + list_for_each_entry(a, &c->cfg.policylist, list) { + if (!memcmp(rec_cmdu->origin, a->agent_id, 6)) { + found = a; + break; + } + } + + if (!found) + return -1; + + p = cntlr_gen_8021q_settings(c, a); if (!p) goto fail_cmdu; cmdu->num_tlvs++; diff --git a/src/core/cntlr_tlv_generator.c b/src/core/cntlr_tlv_generator.c index f5a9f9f64c8f5e67b70f4af9dd80f2694c6f347e..2c8b11c5676caf6bc4b1e027c6940b9c8751b0cc 100644 --- a/src/core/cntlr_tlv_generator.c +++ b/src/core/cntlr_tlv_generator.c @@ -59,20 +59,9 @@ uint8_t *extract_tlv_by_type(struct cmdu_cstruct *cmdu, uint8_t tlv_type) } struct tlv_default_8021q_settings *cntlr_gen_8021q_settings(struct controller *c, - struct cmdu_cstruct *cmdu, struct cmdu_cstruct *rec_cmdu) + struct agent_policy *a) { struct tlv_default_8021q_settings *p; - struct agent_policy *a, *found = NULL; - - list_for_each_entry(a, &c->cfg.policylist, list) { - if (!memcmp(rec_cmdu->origin, a->agent_id, 6)) { - found = a; - break; - } - } - - if (!found) - return NULL; p = (struct tlv_default_8021q_settings *) calloc(1, sizeof(*p)); if (!p) diff --git a/src/core/cntlr_tlv_generator.h b/src/core/cntlr_tlv_generator.h index 042fc98842c84db4fe2a9854e1acf7541f854ecc..d409c49100525f51d4ded99e75125654dd011ab0 100644 --- a/src/core/cntlr_tlv_generator.h +++ b/src/core/cntlr_tlv_generator.h @@ -11,7 +11,7 @@ #define CNTLR_TLV_GEN_H struct tlv_default_8021q_settings *cntlr_gen_8021q_settings(struct controller *c, - struct cmdu_cstruct *cmdu, struct cmdu_cstruct *rec_cmdu); + struct agent_policy *a); struct tlv_traffic_sep_policy *cntlr_gen_traffic_sep_policy(struct controller *c, struct cmdu_cstruct *cmdu); struct tlv_wsc *cntlr_gen_wsc(struct controller *c, diff --git a/src/core/cntlr_ubus.c b/src/core/cntlr_ubus.c index 1f98a939521f7a02555a32ad111f4c9704273d00..87a378d5238c93983e9bda710755dc60eb16f0ee 100644 --- a/src/core/cntlr_ubus.c +++ b/src/core/cntlr_ubus.c @@ -911,9 +911,9 @@ static int cntlr_ap_policy_config(struct ubus_context *ctx, struct ubus_object * cmdu_data->tlvs[tlv_index++] = (uint8_t *)p2; - /* Default 802.1Q setting TLV */ // #ifdef PROFILE2 - p3 = cntlr_gen_8021q_settings(c, NULL, cmdu_data); + /* Default 802.1Q setting TLV */ + p3 = cntlr_gen_8021q_settings(c, found); if (!p3) goto fail_cmdu;