Skip to content

Commit f4c8b79

Browse files
committed
BUGFIX libyang changes
1 parent 04e060e commit f4c8b79

File tree

3 files changed

+38
-26
lines changed

3 files changed

+38
-26
lines changed

src/session_client.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ nc_ctx_fill_yl(struct nc_session *session, ly_module_imp_clb user_clb, void *use
627627
goto cleanup;
628628
}
629629

630-
modules = lyd_find_xpath(data_rpl->data, "/ietf-yang-library:modules-state/module");
630+
modules = lyd_find_path(data_rpl->data, "/ietf-yang-library:modules-state/module");
631631
if (!modules || !modules->number) {
632632
ERR("No yang-library modules information for session %u.", session->id);
633633
goto cleanup;

src/session_server.c

Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,6 @@ nc_clb_default_get_schema(struct lyd_node *rpc, struct nc_session *UNUSED(sessio
351351
const struct lys_module *module;
352352
struct nc_server_error *err;
353353
struct lyd_node *child, *data = NULL;
354-
const struct lys_node *sdata = NULL;
355354

356355
LY_TREE_FOR(rpc->child, child) {
357356
if (!strcmp(child->schema->name, "identifier")) {
@@ -399,13 +398,6 @@ nc_clb_default_get_schema(struct lyd_node *rpc, struct nc_session *UNUSED(sessio
399398
return NULL;
400399
}
401400

402-
sdata = ly_ctx_get_node(server_opts.ctx, NULL, "/ietf-netconf-monitoring:get-schema/output/data");
403-
if (!sdata) {
404-
ERRINT;
405-
free(model_data);
406-
return NULL;
407-
}
408-
409401
data = lyd_new_path(NULL, server_opts.ctx, "/ietf-netconf-monitoring:get-schema/data", model_data,
410402
LYD_ANYDATA_STRING, LYD_PATH_OPT_OUTPUT);
411403
if (!data || lyd_validate(&data, LYD_OPT_RPCREPLY, NULL)) {
@@ -427,7 +419,8 @@ nc_clb_default_close_session(struct lyd_node *UNUSED(rpc), struct nc_session *se
427419
API int
428420
nc_server_init(struct ly_ctx *ctx)
429421
{
430-
const struct lys_node *rpc;
422+
struct ly_set *set;
423+
const struct lys_module *mod;
431424

432425
if (!ctx) {
433426
ERRARG("ctx");
@@ -437,15 +430,23 @@ nc_server_init(struct ly_ctx *ctx)
437430
nc_init();
438431

439432
/* set default <get-schema> callback if not specified */
440-
rpc = ly_ctx_get_node(ctx, NULL, "/ietf-netconf-monitoring:get-schema");
441-
if (rpc && !rpc->priv) {
442-
lys_set_private(rpc, nc_clb_default_get_schema);
433+
mod = ly_ctx_get_module(ctx, "ietf-netconf-monitoring", NULL);
434+
if (mod) {
435+
set = lys_find_path(mod, NULL, "/get-schema");
436+
if (!set->set.s[0]->priv) {
437+
lys_set_private(set->set.s[0], nc_clb_default_get_schema);
438+
}
439+
ly_set_free(set);
443440
}
444441

445442
/* set default <close-session> callback if not specififed */
446-
rpc = ly_ctx_get_node(ctx, NULL, "/ietf-netconf:close-session");
447-
if (rpc && !rpc->priv) {
448-
lys_set_private(rpc, nc_clb_default_close_session);
443+
mod = ly_ctx_get_module(ctx, "ietf-netconf", NULL);
444+
if (mod) {
445+
set = lys_find_path(mod, NULL, "/close-session");
446+
if (!set->set.s[0]->priv) {
447+
lys_set_private(set->set.s[0], nc_clb_default_close_session);
448+
}
449+
ly_set_free(set);
449450
}
450451

451452
server_opts.ctx = ctx;
@@ -1324,7 +1325,8 @@ nc_ps_poll(struct nc_pollsession *ps, int timeout, struct nc_session **session)
13241325
ret = NC_PSPOLL_ERROR;
13251326
} else if (r == 1) {
13261327
/* no one else is currently working with the session, so we can, otherwise skip it */
1327-
if (ps->sessions[i].state == NC_PS_STATE_NONE) {
1328+
switch (ps->sessions[i].state) {
1329+
case NC_PS_STATE_NONE:
13281330
if (cur_session->status == NC_STATUS_RUNNING) {
13291331
/* session is fine, work with it */
13301332
ps->sessions[i].state = NC_PS_STATE_BUSY;
@@ -1358,9 +1360,16 @@ nc_ps_poll(struct nc_pollsession *ps, int timeout, struct nc_session **session)
13581360
}
13591361
ps->sessions[i].state = NC_PS_STATE_INVALID;
13601362
}
1361-
} else if (ps->sessions[i].state == NC_PS_STATE_BUSY) {
1363+
break;
1364+
case NC_PS_STATE_BUSY:
13621365
/* it definitely should not be busy because we have the lock */
13631366
ERRINT;
1367+
ret = NC_PSPOLL_ERROR;
1368+
break;
1369+
case NC_PS_STATE_INVALID:
1370+
/* skip this session */
1371+
ret = NC_PSPOLL_TIMEOUT;
1372+
break;
13641373
}
13651374

13661375
/* keep the session locked only in this one case */

tests/test_fd_comm.c

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,8 @@ main(void)
324324
{
325325
int ret;
326326
const struct lys_module *module;
327-
const struct lys_node *node;
327+
struct ly_set *set;
328+
uint16_t i;
328329

329330
/* create ctx */
330331
ctx = ly_ctx_new(TESTS_DIR"../schemas");
@@ -338,13 +339,15 @@ main(void)
338339
assert_non_null(module);
339340

340341
/* set RPC callbacks */
341-
node = ly_ctx_get_node(module->ctx, NULL, "/ietf-netconf:get");
342-
assert_non_null(node);
343-
lys_set_private(node, my_get_rpc_clb);
344-
345-
node = ly_ctx_get_node(module->ctx, NULL, "/ietf-netconf:get-config");
346-
assert_non_null(node);
347-
lys_set_private(node, my_getconfig_rpc_clb);
342+
set = lys_find_path(module, NULL, "/*");
343+
for (i = 0; i < set->number; ++i) {
344+
if (!strcmp(set->set.s[i]->name, "get")) {
345+
lys_set_private(set->set.s[i], my_get_rpc_clb);
346+
} else if (!strcmp(set->set.s[i]->name, "get-config")) {
347+
lys_set_private(set->set.s[i], my_getconfig_rpc_clb);
348+
}
349+
}
350+
ly_set_free(set);
348351

349352
nc_server_init(ctx);
350353

0 commit comments

Comments
 (0)