extern void nb_oper_init(struct event_loop *loop);
extern void nb_oper_terminate(void);
+extern bool nb_oper_is_yang_lib_query(const char *xpath);
#ifdef __cplusplus
}
return __walk(ys, false);
}
+bool nb_oper_is_yang_lib_query(const char *xpath)
+{
+ const char *libstr = "/ietf-yang-library:";
+ const unsigned long liblen = strlen(libstr);
+
+ if (strncmp(libstr, xpath, liblen))
+ return false;
+
+ return strlen(xpath) > liblen;
+}
void *nb_oper_walk(const char *xpath, struct yang_translator *translator,
uint32_t flags, bool should_batch, nb_oper_data_cb cb,
/* Initialize MGMTD Transaction module */
mgmt_txn_init(mm, mm->master);
+ /* Add yang-library module */
+ yang_module_load("ietf-yang-library", NULL);
+
/* Initialize the MGMTD Frontend Adapter Module */
mgmt_fe_adapter_init(mm->master);
goto done;
}
+ /* Check for yang-library shortcut */
+ if (nb_oper_is_yang_lib_query(msg->xpath)) {
+ struct lyd_node *ylib = NULL;
+ LY_ERR err;
+
+ err = ly_ctx_get_yanglib_data(ly_native_ctx, &ylib, "%u",
+ ly_ctx_get_change_count(
+ ly_native_ctx));
+ if (err) {
+ fe_adapter_send_error(session, req_id, false, err,
+ "Error getting yang-library data, session-id: %" PRIu64
+ " error: %s",
+ session->session_id,
+ ly_last_errmsg());
+ } else {
+ yang_lyd_trim_xpath(&ylib, msg->xpath);
+ (void)fe_adapter_send_tree_data(session, req_id, false,
+ msg->result_type,
+ wd_options, ylib, 0);
+ }
+ if (ylib)
+ lyd_free_all(ylib);
+ goto done;
+ }
+
switch (msg->datastore) {
case MGMT_MSG_DATASTORE_CANDIDATE:
ds_id = MGMTD_DS_CANDIDATE;