if (initialized)
return true;
- if (!init_mgmt()) {
+ if (index == MGMT_INDEX_NONE && !init_mgmt()) {
l_error("Failed to initialize mesh management");
return false;
}
if (!storage_load_nodes(config_dir))
return false;
- l_debug("send read index_list");
- if (mgmt_send(mgmt_mesh, MGMT_OP_READ_INDEX_LIST,
- MGMT_INDEX_NONE, 0, NULL,
- read_index_list_cb, NULL, NULL) <= 0)
- return false;
-
+ if (index == MGMT_INDEX_NONE) {
+ /* Use MGMT to find a candidate controller */
+ l_debug("send read index_list");
+ if (mgmt_send(mgmt_mesh, MGMT_OP_READ_INDEX_LIST,
+ MGMT_INDEX_NONE, 0, NULL,
+ read_index_list_cb, NULL, NULL) <= 0)
+ return false;
+ } else {
+ /* Open specified controller without searching */
+ start_io(mesh.req_index);
+ return mesh.io != NULL;
+ }
return true;
}