diff --git a/src/cntlr.c b/src/cntlr.c index a40bdec4a93ebfd9a56df1b9b128415b1e919680..7297fa1a3e8990554cefa124d14b6788bbcf0586 100644 --- a/src/cntlr.c +++ b/src/cntlr.c @@ -1072,6 +1072,8 @@ struct netif_radio *cntlr_node_add_radio(struct controller *c, struct node *n, allmac_insert(&c->mac_table, radio, MAC_ENTRY_RADIO, (void *)r); + cntrl_send_channel_selection(c, n->alid, radio, 0, 0, 0); + return r; } diff --git a/src/cntlr_cmdu.c b/src/cntlr_cmdu.c index 0731b2db3a57d4ac07fd245247351b1678c90c25..f96e3a4a1ced96b4478b11eef0f94af23d3e74e8 100644 --- a/src/cntlr_cmdu.c +++ b/src/cntlr_cmdu.c @@ -796,7 +796,7 @@ int cntrl_send_channel_selection(struct controller *c, uint8_t *agent, uint8_t * return -1; memcpy(cmdu->origin, agent, 6); - if (cntlr_gen_channel_pref(c, cmdu, radio, opclass, ARRAY_SIZE(chanlist), chanlist, pref)) { + if (cntlr_gen_channel_pref(c, cmdu, radio, opclass, channel ? ARRAY_SIZE(chanlist) : 0, chanlist, pref)) { cmdu_free(cmdu); return -1; } diff --git a/src/cntlr_tlv.c b/src/cntlr_tlv.c index a5a7eeab01eb77668407d9b7c79ec20b1a98fb09..27130e17efb4285dc78725842f7054e5b91885ae 100644 --- a/src/cntlr_tlv.c +++ b/src/cntlr_tlv.c @@ -1501,7 +1501,7 @@ int cntlr_gen_channel_pref(struct controller *c, struct cmdu_buff *frm, if (!radio->radio_el) return -1; - if (!radio->radio_el->supp_opclass.num_opclass) + if (!radio->radio_el->supp_opclass.num_opclass && channel_nr) return -1; /* Build opclass we would like to send */ @@ -1518,6 +1518,10 @@ int cntlr_gen_channel_pref(struct controller *c, struct cmdu_buff *frm, if (!t) return -1; + /* Prefer all supported - don't include any opclass */ + if (!channel_nr) + opclass.num_opclass = 0; + t->type = MAP_TLV_CHANNEL_PREFERENCE; memcpy(&t->data[offset], radio_id, 6); /* radio id */