From cfc8a8b65d7d214a9c54da5609f1fa7caad32fc2 Mon Sep 17 00:00:00 2001 From: Janusz Dziedzic <janusz.dziedzic@iopsys.eu> Date: Fri, 15 Sep 2023 12:54:51 +0200 Subject: [PATCH] send CSR (all prefered) when adding radio --- src/cntlr.c | 2 ++ src/cntlr_cmdu.c | 2 +- src/cntlr_tlv.c | 6 +++++- src/cntlr_ubus_dbg.c | 21 +++++++++++++++++++++ 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/cntlr.c b/src/cntlr.c index a40bdec4..7297fa1a 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 0731b2db..f96e3a4a 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 a5a7eeab..27130e17 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 */ diff --git a/src/cntlr_ubus_dbg.c b/src/cntlr_ubus_dbg.c index f32e2ef3..1195700b 100644 --- a/src/cntlr_ubus_dbg.c +++ b/src/cntlr_ubus_dbg.c @@ -198,6 +198,26 @@ cntrl_dbg_get_cur_opclass_by_bssid(struct controller *c, const unsigned char *bs return NULL; } +static int cntrl_dbg_csr(struct ubus_context *ctx, + struct ubus_object *obj, + struct ubus_request_data *req, + const char *method, struct blob_attr *msg) +{ + struct controller *c = container_of(obj, struct controller, obj_dbg); + struct node *node = NULL; + + list_for_each_entry(node, &c->nodelist, list) { + struct netif_radio *r = NULL; + + list_for_each_entry(r, &node->radiolist, list) { + cntrl_send_channel_selection(c, node->alid, r->radio_el->macaddr, 0, 0, 0); + } + } + + + return UBUS_STATUS_OK; +} + static int cntrl_dbg_bh_topology_dump(struct ubus_context *ctx, struct ubus_object *obj, struct ubus_request_data *req, @@ -348,6 +368,7 @@ int cntlr_publish_dbg_object(struct controller *c, const char *objname) UBUS_METHOD("clear_steer_summary", cntlr_dbg_clear_steer_summary, clr_steer_summary_params), UBUS_METHOD_NOARG("bh_topology_dump", cntrl_dbg_bh_topology_dump), + UBUS_METHOD_NOARG("csr", cntrl_dbg_csr), #if (EASYMESH_VERSION > 2) UBUS_METHOD_NOARG("list_uris", cntlr_dbg_list_uris), #endif -- GitLab