| datastore.h | | datastore.h | |
| /** | | /** | |
| * \file datastore.h | | * \file datastore.h | |
| * \author Radek Krejci <rkrejci@cesnet.cz> | | * \author Radek Krejci <rkrejci@cesnet.cz> | |
| * \brief NETCONF datastore handling function prototypes and structures. | | * \brief NETCONF datastore handling function prototypes and structures. | |
| * | | * | |
|
| * Copyright (C) 2012 CESNET, z.s.p.o. | | * Copyright (c) 2012-2014 CESNET, z.s.p.o. | |
| * | | * | |
| * Redistribution and use in source and binary forms, with or without | | * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | | * modification, are permitted provided that the following conditions | |
| * are met: | | * are met: | |
| * 1. Redistributions of source code must retain the above copyright | | * 1. Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | | * notice, this list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright | | * 2. Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in | | * notice, this list of conditions and the following disclaimer in | |
| * the documentation and/or other materials provided with the | | * the documentation and/or other materials provided with the | |
| * distribution. | | * distribution. | |
| | | | |
| skipping to change at line 56 | | skipping to change at line 56 | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| extern "C" { | | extern "C" { | |
| #endif | | #endif | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Datastore implementation types provided by libnetconf | | * @brief Datastore implementation types provided by libnetconf | |
| */ | | */ | |
| typedef enum { | | typedef enum { | |
| NCDS_TYPE_EMPTY, /**< No datastore. For read-only devices. */ | | NCDS_TYPE_EMPTY, /**< No datastore. For read-only devices. */ | |
|
| NCDS_TYPE_FILE /**< Datastores implemented as files */ | | NCDS_TYPE_FILE, /**< Datastores implemented as files */ | |
| | | NCDS_TYPE_CUSTOM /**< User-defined datastore */ | |
| } NCDS_TYPE; | | } NCDS_TYPE; | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Datastore ID. | | * @brief Datastore ID. | |
| * | | * | |
| * Each datastore gets its ID after initialisation (ncds_init()). Only | | * Each datastore gets its ID after initialisation (ncds_init()). Only | |
| * initialised datastores can be used to access the configuration data. | | * initialised datastores can be used to access the configuration data. | |
| */ | | */ | |
| typedef int ncds_id; | | typedef int ncds_id; | |
| | | | |
| skipping to change at line 91 | | skipping to change at line 92 | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @def NCDS_RPC_NOT_APPLICABLE | | * @def NCDS_RPC_NOT_APPLICABLE | |
| * @brief Return value of ncds_apply_rpc() when the requested operation is | | * @brief Return value of ncds_apply_rpc() when the requested operation is | |
| * not applicable to the specified datastore. | | * not applicable to the specified datastore. | |
| */ | | */ | |
| extern char error_area; | | extern char error_area; | |
| #define NCDS_RPC_NOT_APPLICABLE ((void*)(&error_area)) | | #define NCDS_RPC_NOT_APPLICABLE ((void*)(&error_area)) | |
| | | | |
| /** | | /** | |
|
| | | * \page datastores Datastores Usage | |
| | | * | |
| | | * NETCONF defines usage of three datastores: running (mandatory), | |
| | | * startup (optional via :startup capability) and candidate (optional via | |
| | | * :candidate capability). libnetconf provides all these datastores. | |
| | | * | |
| | | * In addition to the described NETCONF point of view, libnetconf divides a | |
| | | ll | |
| | | * datastores (running, startup and candidate) into datastore parts connect | |
| | | ed | |
| | | * with a specific (basic) configuration data model. Each datastore part is | |
| | | * created by ncds_new() or ncds_new_transapi() function. According to the | |
| | | * specified datastore type, server should set up additional datastore sett | |
| | | ings | |
| | | * (see section \ref ds_settings). If some specific validation settings are | |
| | | needed, | |
| | | * ncds_set_validation() function can be used (more information about valid | |
| | | ation | |
| | | * can be found at a separated \ref validation "page". Finnaly, to activate | |
| | | * datastore and to get its unique identifier, ncds_init() function must be | |
| | | * called. | |
| | | * | |
| | | * If you want to use some data model that extends (by import or augment | |
| | | * statement) any of the used data models, functions ncds_add_model() or | |
| | | * ncds_add_models_path() can be used to specify location of the extension | |
| | | data | |
| | | * model(s). | |
| | | * | |
| | | * By default, all features defined in configuration data models are disabl | |
| | | ed. | |
| | | * To enable specific features or all features at once, you can use | |
| | | * ncds_feature_enable() and ncds_features_enableall() functions. | |
| | | * | |
| | | * To finish changes made to the datastores (adding augment data models, | |
| | | * enabling and disabling features, etc.), server must call ncds_consolidat | |
| | | e() | |
| | | * function. | |
| | | * | |
| | | * As a next step, device controlled by the server should be initialized. T | |
| | | his | |
| | | * should includes copying startup configuration data into the running | |
| | | * datastore (and applying them to the current device settings). | |
| | | * | |
| | | * \anchor ds_settings | |
| | | * ## Datastore Settings ## | |
| | | * | |
| | | * - Empty Datastore (*NCDS_TYPE_EMPTY*) | |
| | | * | |
| | | * There is no additional settings for this datastore type. | |
| | | * | |
| | | * - \ref fileds (*NCDS_TYPE_FILE*) | |
| | | * | |
| | | * ncds_file_set_path() to set file to store datastore content. | |
| | | * | |
| | | * - \ref customds (*NCDS_TYPE_CUSTOM*) | |
| | | * | |
| | | * This type of datastore implementation is provided by the server, not b | |
| | | y | |
| | | * libnetconf. | |
| | | * | |
| | | * ncds_custom_set_data() sets server specific functions implementing the | |
| | | * datastore. In this case, server is required to implement functions | |
| | | * from #ncds_custom_funcs structure. | |
| | | * | |
| | | */ | |
| | | | |
| | | /** | |
| | | * \page validation Data Validation | |
| | | * | |
| | | * [RFC6241]: http://tools.ietf.org/html/rfc6241 "RFC 6241" | |
| | | * | |
| | | * [RFC 6241][RFC6241] defines NETCONF :validate capability intended to all | |
| | | ow | |
| | | * validation of the configuration data. This capability specifies new oper | |
| | | ation | |
| | | * \<validate\> and adds \<test-option\> parameter to the \<edit-config\> | |
| | | * operation. | |
| | | * | |
| | | * On the client side, libnetconf allows to create \<validate\> RPC as well | |
| | | as | |
| | | * to specify \<test-option\> of \<edit-config\> RPC. | |
| | | * | |
| | | * On the server side, libnetconf performs data validation on \ref datastor | |
| | | es | |
| | | * "datastore parts" that provides validators. libnetconf use Relax NG sche | |
| | | ma | |
| | | * to validate syntax of the datastore content and Schematron to check sema | |
| | | ntics. | |
| | | * Validators are loaded as a standalone files generated by *lnctool(1)*, w | |
| | | hich | |
| | | * is part of libnetconf standard instalation. | |
| | | * | |
| | | * libnetconf automatically searches for the validators during ncds_new() a | |
| | | nd | |
| | | * ncds_new_transapi() calls. Validators are supposed to be placed in the s | |
| | | ame | |
| | | * directory as data model provided to the mentioned function as its model_ | |
| | | path | |
| | | * parameter. Alternatively, validators can be connected with the datastore | |
| | | * manually, using ncds_set_validation(). This function also allows to swit | |
| | | ch | |
| | | * off validation on a specific datastore part. | |
| | | * | |
| | | * ## lnctool(1) Usage ## | |
| | | * | |
| | | * Complete list of *lnctool(1)*'s options can be displayed using -h option | |
| | | : | |
| | | * | |
| | | * $ lnctool -h | |
| | | * | |
| | | * Based on a YANG data model, *lnctool(1)* generates all necessary files n | |
| | | eeded | |
| | | * by libnetconf. Basically, it generates YIN format of the data model requ | |
| | | ired | |
| | | * by ncds_new() and ncds_new_transapi() functions. If you use some extensi | |
| | | on | |
| | | * models via ncds_add_model() or ncds_add_models_path(), you have to speci | |
| | | fy | |
| | | * also these models as *lnctool(1)*'s \<augment models\> parameter. | |
| | | * | |
| | | * When used with -v option, *lnctool(1)* additionally generates Relax NG | |
| | | * schemas and Schematron XSL stylesheet for validation. Here is an example | |
| | | * for NACM data model (directory ./models/ contains *ietf-netconf-acm.yang | |
| | | * | |
| | | * and *ietf-yang-types.yang* models): | |
| | | * | |
| | | * $ lnctool -v -o ./nacm -p ../models/ ./models/ietf-netconf-acm.yang | |
| | | * ### Converting YANG to YIN | |
| | | * creating ./nacm/ietf-netconf-acm.yin | |
| | | * creating ./nacm/ietf-yang-types.yin | |
| | | * ### Done | |
| | | * ### Generating Relax NG schemas for validation | |
| | | * creating ./nacm/ietf-netconf-acm-data.rng | |
| | | * creating ./nacm/ietf-netconf-acm-gdefs.rng | |
| | | * ### Done | |
| | | * ### Generating Schematron Stylesheet | |
| | | * creating ./nacm/ietf-netconf-acm-schematron.xsl | |
| | | * ### Done | |
| | | * | |
| | | * Path to the output directory should be specified in the server source co | |
| | | de | |
| | | * to allow libnetconf to find imported data model (*ietf-yang-types.yin* i | |
| | | n | |
| | | * this case). | |
| | | * | |
| | | * \note Return value checks are skipped in this example for simplicity. Do | |
| | | not | |
| | | * copy-paste this example. Also note, that NACM is one of internal libnetc | |
| | | onf | |
| | | * datastores and it is not needed to add it manually by ncds_new(). This i | |
| | | s | |
| | | * JUST a simple (stupid) example. | |
| | | * | |
| | | * <p></p> | |
| | | * | |
| | | * ds = ncds_new(NCDS_TYPE_FILE, "./nacm/ietf-netconf-acm.yin", NULL); | |
| | | * ncds_file_set_path(ds, ds_path); | |
| | | * ncds_init(ds); | |
| | | * ncds_add_models_path("./models/"); | |
| | | * ncds_consolidate(); | |
| | | * | |
| | | * If the validators files are stored in the same directory as | |
| | | * a basic data model (*ietf-netconf-acm.yin* in this case), libnetconf | |
| | | * automatically loads them during ncds_new() or ncds_new_transapi() calls. | |
| | | If | |
| | | * you store the validators files somewhere else, ncds_set_validation() fun | |
| | | ction | |
| | | * can be used to specify their location: | |
| | | * | |
| | | * ncds_set_validation(ds, 1, "./nacm/ietf-netconf-acm-data.rng", "./na | |
| | | cm/ietf-netconf-acm-schematron.xsl"); | |
| | | * | |
| | | * If validators files are not found or validation is switched off (via | |
| | | * ncds_set_validation() with enable parameter set to 0), validation is not | |
| | | * performed on such datastore part. | |
| | | * | |
| | | */ | |
| | | | |
| | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Informational function to get basic information about configurati
on | | * @brief Informational function to get basic information about configurati
on | |
| * data model in the given file. | | * data model in the given file. | |
| * @param[in] path Path to the *.yin file with the configuration data model
in | | * @param[in] path Path to the *.yin file with the configuration data model
in | |
| * YIN format. | | * YIN format. | |
| * | | * | |
| * Caller is responsible to free returned strings and arrays of strings. If
a | | * Caller is responsible to free returned strings and arrays of strings. If
a | |
| * caller is not interested in a specific return value, NULL pointer can be | | * caller is not interested in a specific return value, NULL pointer can be | |
| * set as parameter and the value of such a parameter will not be returned. | | * set as parameter and the value of such a parameter will not be returned. | |
| * | | * | |
| | | | |
| skipping to change at line 118 | | skipping to change at line 263 | |
| * the data model | | * the data model | |
| * @return EXIT_SUCCESS or EXIT_FAILURE on error. | | * @return EXIT_SUCCESS or EXIT_FAILURE on error. | |
| * | | * | |
| */ | | */ | |
| int ncds_model_info(const char* path, char **name, char **version, char **n
amespace, char **prefix, char ***rpcs, char ***notifs); | | int ncds_model_info(const char* path, char **name, char **version, char **n
amespace, char **prefix, char ***rpcs, char ***notifs); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Create a new datastore structure of the specified implementation
type. | | * @brief Create a new datastore structure of the specified implementation
type. | |
| * @param[in] type Datastore implementation type for the new datastore stru
cture. | | * @param[in] type Datastore implementation type for the new datastore stru
cture. | |
|
| * @param[in] model_path Path to the YIN configuration data model. | | * @param[in] model_path Base name of the configuration data model files. | |
| | | * libnetconf expects model_path.yin as a data model, model_path.rng for | |
| | | * grammar and data types validation, model_path.dsrl for default values | |
| | | * validation and model_path.sch for semantic validation. | |
| * @param[in] get_state Pointer to a callback function that returns a seria
lized | | * @param[in] get_state Pointer to a callback function that returns a seria
lized | |
| * XML document containing the state configuration data of the device. The
parameters | | * XML document containing the state configuration data of the device. The
parameters | |
| * it receives are a serialized configuration data model in YIN format and
the current | | * it receives are a serialized configuration data model in YIN format and
the current | |
| * content of the running datastore. If NULL is set, \<get\> operation is | | * content of the running datastore. If NULL is set, \<get\> operation is | |
| * performed in the same way as \<get-config\>. | | * performed in the same way as \<get-config\>. | |
| * @return Prepared (not configured) datastore structure. To configure the | | * @return Prepared (not configured) datastore structure. To configure the | |
| * structure, caller must use the parameter setters of the specific datasto
re | | * structure, caller must use the parameter setters of the specific datasto
re | |
| * implementation type. Then, the datastore can be initiated (ncds_init())
and | | * implementation type. Then, the datastore can be initiated (ncds_init())
and | |
| * used to access the configuration data. | | * used to access the configuration data. | |
| */ | | */ | |
| struct ncds_ds* ncds_new(NCDS_TYPE type, const char* model_path, char* (*ge
t_state)(const char* model, const char* running, struct nc_err ** e)); | | struct ncds_ds* ncds_new(NCDS_TYPE type, const char* model_path, char* (*ge
t_state)(const char* model, const char* running, struct nc_err ** e)); | |
| | | | |
| /** | | /** | |
| * @ingroup transapi | | * @ingroup transapi | |
| * @brief Create new datastore structure with transaction API support | | * @brief Create new datastore structure with transaction API support | |
| * @param[in] type Datastore implementation type for the new datastore stru
cture. | | * @param[in] type Datastore implementation type for the new datastore stru
cture. | |
|
| * @param[in] model_path Path to the YIN configuration data model. | | * @param[in] model_path Base name of the configuration data model files. | |
| * @param[in] callbacks_path Path to shared library with callbacks and othe | | * libnetconf expects model_path.yin as a data model, model_path.rng for | |
| r functions for transaction API. | | * grammar and data types validation, model_path.dsrl for default values | |
| * | | * validation and model_path.sch for semantic validation. | |
| | | * @param[in] callbacks_path Path to shared library with callbacks and othe | |
| | | r | |
| | | * functions for transaction API. | |
| * @return Prepared (not configured) datastore structure. To configure the | | * @return Prepared (not configured) datastore structure. To configure the | |
| * structure, caller must use the parameter setters of the specific datasto
re | | * structure, caller must use the parameter setters of the specific datasto
re | |
| * implementation type. Then, the datastore can be initiated (ncds_init())
and | | * implementation type. Then, the datastore can be initiated (ncds_init())
and | |
| * used to access the configuration data. | | * used to access the configuration data. | |
| */ | | */ | |
| struct ncds_ds* ncds_new_transapi(NCDS_TYPE type, const char* model_path, c
onst char* callbacks_path); | | struct ncds_ds* ncds_new_transapi(NCDS_TYPE type, const char* model_path, c
onst char* callbacks_path); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
|
| | | * @brief Set validators (or disable validation) on the specified datastore | |
| | | * | |
| | | * @param[in] ds Datastore structure to be configured. | |
| | | * @param[in] enable 1 to enable validation on the datastore according to t | |
| | | he | |
| | | * following parameters, 0 to disable validation (following parameters will | |
| | | be | |
| | | * ignored as well as automatically or previously set validators). | |
| | | * @param[in] relaxng Path to the Relax NG schema for validation of the | |
| | | * datastore content syntax. To generate it, use the lnctool(1) script. NUL | |
| | | L | |
| | | * if syntactic validation is not required. | |
| | | * @param[in] schematron Path to the Schematron XSLT stylesheet for validat | |
| | | ion of | |
| | | * the datastore content semantics. To generate it, use the lnctool(1) scri | |
| | | pt. | |
| | | * NULL if semantic validation is not required. | |
| | | * @return EXIT_SUCCESS or EXIT_FAILURE | |
| | | */ | |
| | | int ncds_set_validation(struct ncds_ds* ds, int enable, const char* relaxng | |
| | | , const char* schematron); | |
| | | | |
| | | /** | |
| | | * @defgroup fileds File Datastore | |
| | | * @ingroup store | |
| | | * @brief Specific functions for NCDS_FILE_DS type of datastore implementat | |
| | | ion. | |
| | | */ | |
| | | | |
| | | /** | |
| | | * @ingroup fileds | |
| * @brief Assign the path of the datastore file into the datastore structur
e. | | * @brief Assign the path of the datastore file into the datastore structur
e. | |
| * | | * | |
| * Checks if the file exist and is accessible for reading and writing. | | * Checks if the file exist and is accessible for reading and writing. | |
| * If the file does not exist, it is created. The file is opened and the fi
le | | * If the file does not exist, it is created. The file is opened and the fi
le | |
| * descriptor is stored in the structure. | | * descriptor is stored in the structure. | |
| * | | * | |
| * @param[in] datastore Datastore structure to be configured. | | * @param[in] datastore Datastore structure to be configured. | |
| * @param[in] path File path to the file storing configuration datastores. | | * @param[in] path File path to the file storing configuration datastores. | |
| * @return | | * @return | |
| * - 0 on success | | * - 0 on success | |
| | | | |
| skipping to change at line 181 | | skipping to change at line 356 | |
| * @return Positive integer with the datastore ID on success, negative valu
e on | | * @return Positive integer with the datastore ID on success, negative valu
e on | |
| * error. | | * error. | |
| * - -1 Invalid datastore | | * - -1 Invalid datastore | |
| * - -2 Type-specific initialization failed | | * - -2 Type-specific initialization failed | |
| * - -3 Unsupported datastore type | | * - -3 Unsupported datastore type | |
| * - -4 Memory allocation problem | | * - -4 Memory allocation problem | |
| */ | | */ | |
| ncds_id ncds_init(struct ncds_ds* datastore); | | ncds_id ncds_init(struct ncds_ds* datastore); | |
| | | | |
| /** | | /** | |
|
| * @brief Initialize transAPI module(s) (if present) and copy startup confi | | * @brief Initialize transAPI module(s) (if present) and copy startup | |
| guration to running | | * configuration to running. | |
| * | | * | |
|
| * @param id Pointer to ncds_id of device to initialize, if NULL all found | | * @param id Pointer to ncds_id of device to initialize, if NULL all found | |
| transapi-capable devices will be initialized | | * transapi-capable devices will be initialized | |
| | | * @param cpblts Server's NETCONF capabilities. If NULL, default capabiliti | |
| | | es | |
| | | * from libnetconf are used. | |
| | | * @param force Force fresh configuration of device from STARTUP datastore. | |
| * | | * | |
| * @return EXIT_SUCCESS or EXIT_FAILURE | | * @return EXIT_SUCCESS or EXIT_FAILURE | |
| */ | | */ | |
|
| int ncds_device_init (ncds_id * id); | | int ncds_device_init (ncds_id * id, struct nc_cpblts* cpblts, int force); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Close the specified datastore and free all the resources. | | * @brief Close the specified datastore and free all the resources. | |
| * | | * | |
| * Equivalent function to ncds_free2(). | | * Equivalent function to ncds_free2(). | |
| * | | * | |
| * @param[in] datastore Datastore to be closed. | | * @param[in] datastore Datastore to be closed. | |
| */ | | */ | |
| void ncds_free(struct ncds_ds* datastore); | | void ncds_free(struct ncds_ds* datastore); | |
| | | | |
| skipping to change at line 248 | | skipping to change at line 428 | |
| * (ncds_id)(-1). The list is rewritten by any following call to | | * (ncds_id)(-1). The list is rewritten by any following call to | |
| * ncds_apply_rpc2all(). | | * ncds_apply_rpc2all(). | |
| * @return NULL in case of a non-NC_RPC_DATASTORE_* operation type or inval
id | | * @return NULL in case of a non-NC_RPC_DATASTORE_* operation type or inval
id | |
| * parameter session or rpc, else \<rpc-reply\> with \<ok\>, \<data\> or | | * parameter session or rpc, else \<rpc-reply\> with \<ok\>, \<data\> or | |
| * \<rpc-error\> according to the type and the result of the requested | | * \<rpc-error\> according to the type and the result of the requested | |
| * operation. When the requested operation is not applicable to any datasto
re | | * operation. When the requested operation is not applicable to any datasto
re | |
| * (e.g. the namespace does not match no of the controlled datstores), | | * (e.g. the namespace does not match no of the controlled datstores), | |
| * NCDS_RPC_NOT_APPLICABLE is returned. | | * NCDS_RPC_NOT_APPLICABLE is returned. | |
| * | | * | |
| */ | | */ | |
|
| nc_reply* ncds_apply_rpc2all(const struct nc_session* session, const nc_rpc
* rpc, ncds_id* ids[]); | | nc_reply* ncds_apply_rpc2all(struct nc_session* session, const nc_rpc* rpc,
ncds_id* ids[]); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Undo the last change performed on the specified datastore. | | * @brief Undo the last change performed on the specified datastore. | |
| * @param[in] id ID of the datastore where the rollback will be performed. | | * @param[in] id ID of the datastore where the rollback will be performed. | |
| * @return 0 on success, non-zero on error. | | * @return 0 on success, non-zero on error. | |
| */ | | */ | |
| int ncds_rollback(ncds_id id); | | int ncds_rollback(ncds_id id); | |
| | | | |
| /** | | /** | |
| | | | |
| skipping to change at line 342 | | skipping to change at line 522 | |
| * @param[in] feature Name of the feature to be disabled. | | * @param[in] feature Name of the feature to be disabled. | |
| * @return 0 on success, non-zero on error. | | * @return 0 on success, non-zero on error. | |
| */ | | */ | |
| int ncds_feature_disable(const char* module, const char* feature); | | int ncds_feature_disable(const char* module, const char* feature); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Enable usage of all features defined in the specified module. By | | * @brief Enable usage of all features defined in the specified module. By | |
| * default, all features are disabled. To enable only the specific feature(
s), | | * default, all features are disabled. To enable only the specific feature(
s), | |
| * use ncds_feature_enable(). | | * use ncds_feature_enable(). | |
|
| * @param[in] module Name of the module where the feature is defined. Modul
e | | * @param[in] module Name of the module where the features are defined. Mod
ule | |
| * must be accessible - added via ncds_add_model() or present in a director
y | | * must be accessible - added via ncds_add_model() or present in a director
y | |
| * specified via ncds_add_models_path() function. | | * specified via ncds_add_models_path() function. | |
| * @return 0 on success, non-zero on error. | | * @return 0 on success, non-zero on error. | |
| */ | | */ | |
| int ncds_features_enableall(const char* module); | | int ncds_features_enableall(const char* module); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Disable usage of all features defined in the specified module. By | | * @brief Disable usage of all features defined in the specified module. By | |
| * default, all features are disabled. To disable only the specific feature
(s), | | * default, all features are disabled. To disable only the specific feature
(s), | |
| * use ncds_feature_disable(). | | * use ncds_feature_disable(). | |
|
| * @param[in] module Name of the module where the feature is defined. Modul
e | | * @param[in] module Name of the module where the features are defined. Mod
ule | |
| * must be accessible - added via ncds_add_model() or present in a director
y | | * must be accessible - added via ncds_add_model() or present in a director
y | |
| * specified via ncds_add_models_path() function. | | * specified via ncds_add_models_path() function. | |
| * @return 0 on success, non-zero on error. | | * @return 0 on success, non-zero on error. | |
| */ | | */ | |
| int ncds_features_disableall(const char* module); | | int ncds_features_disableall(const char* module); | |
| | | | |
| /** | | /** | |
| * @ingroup store | | * @ingroup store | |
| * @brief Check if the feature of the specified module is currently enabled
or | | * @brief Check if the feature of the specified module is currently enabled
or | |
| * disabled. | | * disabled. | |
| | | | |
End of changes. 12 change blocks. |
| 15 lines changed or deleted | | 236 lines changed or added | |
|
| messages.h | | messages.h | |
| /** | | /** | |
| * \file messages.h | | * \file messages.h | |
| * \author Radek Krejci <rkrejci@cesnet.cz> | | * \author Radek Krejci <rkrejci@cesnet.cz> | |
| * \brief Functions to create NETCONF messages. | | * \brief Functions to create NETCONF messages. | |
| * | | * | |
|
| * Copyright (C) 2012 CESNET, z.s.p.o. | | * Copyright (c) 2012-2014 CESNET, z.s.p.o. | |
| * | | * | |
| * Redistribution and use in source and binary forms, with or without | | * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | | * modification, are permitted provided that the following conditions | |
| * are met: | | * are met: | |
| * 1. Redistributions of source code must retain the above copyright | | * 1. Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | | * notice, this list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright | | * 2. Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in | | * notice, this list of conditions and the following disclaimer in | |
| * the documentation and/or other materials provided with the | | * the documentation and/or other materials provided with the | |
| * distribution. | | * distribution. | |
| | | | |
| skipping to change at line 145 | | skipping to change at line 145 | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
| * @brief Get message-id of the given rpc. | | * @brief Get message-id of the given rpc. | |
| * @param[in] rpc rpc message. | | * @param[in] rpc rpc message. | |
| * @return message-id of the given rpc message. | | * @return message-id of the given rpc message. | |
| */ | | */ | |
| const nc_msgid nc_rpc_get_msgid(const nc_rpc *rpc); | | const nc_msgid nc_rpc_get_msgid(const nc_rpc *rpc); | |
| | | | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
|
| | | * @brief Get user's rpc operation namespace | |
| | | * @param rpc rpc message. | |
| | | * @return Namespace URI. | |
| | | */ | |
| | | char *nc_rpc_get_ns(const nc_rpc *rpc); | |
| | | | |
| | | /** | |
| | | * @ingroup rpc | |
| * @brief Get operation of the given rpc. | | * @brief Get operation of the given rpc. | |
| * @param[in] rpc rpc message. | | * @param[in] rpc rpc message. | |
| * @return Operation identification of the given rpc message. | | * @return Operation identification of the given rpc message. | |
| */ | | */ | |
| NC_OP nc_rpc_get_op(const nc_rpc *rpc); | | NC_OP nc_rpc_get_op(const nc_rpc *rpc); | |
| | | | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
| * @brief Get operation name of the given rpc. | | * @brief Get operation name of the given rpc. | |
| * @param[in] rpc rpc message. | | * @param[in] rpc rpc message. | |
| * @return Name of operation in the given rpc message. Caller | | * @return Name of operation in the given rpc message. Caller | |
| * is responsible for freeing the returned string with free(). | | * is responsible for freeing the returned string with free(). | |
| */ | | */ | |
| char * nc_rpc_get_op_name (const nc_rpc* rpc); | | char * nc_rpc_get_op_name (const nc_rpc* rpc); | |
| | | | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
|
| | | * @brief Get operation namespace of the given rpc. | |
| | | * @param[in] rpc rpc message. | |
| | | * @return Namespace of operation in the given rpc message. Caller | |
| | | * is responsible for freeing the returned string with free(). | |
| | | */ | |
| | | char * nc_rpc_get_op_namespace (const nc_rpc* rpc); | |
| | | | |
| | | /** | |
| | | * @ingroup rpc | |
| * @brief Get content of the operation specification from the given rpc. | | * @brief Get content of the operation specification from the given rpc. | |
| * @param[in] rpc rpc message. | | * @param[in] rpc rpc message. | |
| * @return String in XML form starting with the operation name element. Cal
ler | | * @return String in XML form starting with the operation name element. Cal
ler | |
| * is responsible for freeing the returned string with free(). | | * is responsible for freeing the returned string with free(). | |
| */ | | */ | |
| char* nc_rpc_get_op_content(const nc_rpc *rpc); | | char* nc_rpc_get_op_content(const nc_rpc *rpc); | |
| | | | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
| * @brief Get type of the rpc message. | | * @brief Get type of the rpc message. | |
| | | | |
| skipping to change at line 309 | | skipping to change at line 326 | |
| * @ingroup reply | | * @ingroup reply | |
| * @param[in] reply reply message to free. | | * @param[in] reply reply message to free. | |
| */ | | */ | |
| void nc_reply_free(nc_reply *reply); | | void nc_reply_free(nc_reply *reply); | |
| | | | |
| /** | | /** | |
| * @ingroup reply | | * @ingroup reply | |
| * @brief Create \<ok\> rpc-reply response. | | * @brief Create \<ok\> rpc-reply response. | |
| * @return Created \<rpc-reply\> message. | | * @return Created \<rpc-reply\> message. | |
| */ | | */ | |
|
| nc_reply *nc_reply_ok(); | | nc_reply *nc_reply_ok(void); | |
| | | | |
| /** | | /** | |
| * @ingroup reply | | * @ingroup reply | |
| * @brief Create rpc-reply response with \<data\> content. | | * @brief Create rpc-reply response with \<data\> content. | |
| * @param[in] data Serialized XML content of the \<data\> element for the | | * @param[in] data Serialized XML content of the \<data\> element for the | |
| * \<rpc-reply\> message being created. | | * \<rpc-reply\> message being created. | |
| * @return Created \<rpc-reply\> message. | | * @return Created \<rpc-reply\> message. | |
| */ | | */ | |
| nc_reply *nc_reply_data(const char* data); | | nc_reply *nc_reply_data(const char* data); | |
| | | | |
| | | | |
End of changes. 4 change blocks. |
| 2 lines changed or deleted | | 19 lines changed or added | |
|
| netconf.h | | netconf.h | |
| /** | | /** | |
| * \file netconf.h | | * \file netconf.h | |
| * \author Radek Krejci <rkrejci@cesnet.cz> | | * \author Radek Krejci <rkrejci@cesnet.cz> | |
| * \brief libnetconf's general public functions and structures definitions. | | * \brief libnetconf's general public functions and structures definitions. | |
| * | | * | |
|
| * Copyright (C) 2012 CESNET, z.s.p.o. | | * Copyright (c) 2012-2014 CESNET, z.s.p.o. | |
| * | | * | |
| * Redistribution and use in source and binary forms, with or without | | * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | | * modification, are permitted provided that the following conditions | |
| * are met: | | * are met: | |
| * 1. Redistributions of source code must retain the above copyright | | * 1. Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | | * notice, this list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright | | * 2. Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in | | * notice, this list of conditions and the following disclaimer in | |
| * the documentation and/or other materials provided with the | | * the documentation and/or other materials provided with the | |
| * distribution. | | * distribution. | |
| | | | |
| skipping to change at line 119 | | skipping to change at line 119 | |
| NC_SESSION_STATUS_ERROR = -1, /**< undefined status or the error ret
urn code */ | | NC_SESSION_STATUS_ERROR = -1, /**< undefined status or the error ret
urn code */ | |
| NC_SESSION_STATUS_STARTUP = 0, /**< session is setting up */ | | NC_SESSION_STATUS_STARTUP = 0, /**< session is setting up */ | |
| NC_SESSION_STATUS_WORKING = 1, /**< session is established and ready
to work */ | | NC_SESSION_STATUS_WORKING = 1, /**< session is established and ready
to work */ | |
| NC_SESSION_STATUS_CLOSING = 2, /**< session is being closed */ | | NC_SESSION_STATUS_CLOSING = 2, /**< session is being closed */ | |
| NC_SESSION_STATUS_CLOSED = 3, /**< session was closed and could not
be used for communication */ | | NC_SESSION_STATUS_CLOSED = 3, /**< session was closed and could not
be used for communication */ | |
| NC_SESSION_STATUS_DUMMY = 4 /**< session is DUMMY, only holds inform
ation, does not provide connection */ | | NC_SESSION_STATUS_DUMMY = 4 /**< session is DUMMY, only holds inform
ation, does not provide connection */ | |
| } NC_SESSION_STATUS; | | } NC_SESSION_STATUS; | |
| | | | |
| /** | | /** | |
| * @ingroup session | | * @ingroup session | |
|
| * @brief Enumeration of reasonf of the NETCONF session termination as defi
ned | | * @brief Enumeration of reasons of the NETCONF session termination as defi
ned | |
| * in RFC 6470. | | * in RFC 6470. | |
| */ | | */ | |
| typedef enum NC_SESSION_TERM_REASON { | | typedef enum NC_SESSION_TERM_REASON { | |
| NC_SESSION_TERM_CLOSED, /**< closed by client in a normal fashion */ | | NC_SESSION_TERM_CLOSED, /**< closed by client in a normal fashion */ | |
| NC_SESSION_TERM_KILLED, /**< session was terminated by \<kill-sessio
n\> operation */ | | NC_SESSION_TERM_KILLED, /**< session was terminated by \<kill-sessio
n\> operation */ | |
| NC_SESSION_TERM_DROPPED, /**< transport layer connection was unexpec
tedly closed */ | | NC_SESSION_TERM_DROPPED, /**< transport layer connection was unexpec
tedly closed */ | |
| NC_SESSION_TERM_TIMEOUT, /**< terminated because of inactivity */ | | NC_SESSION_TERM_TIMEOUT, /**< terminated because of inactivity */ | |
| NC_SESSION_TERM_BADHELLO, /**< \<hello\> message was invalid */ | | NC_SESSION_TERM_BADHELLO, /**< \<hello\> message was invalid */ | |
| NC_SESSION_TERM_OTHER /**< terminated for some other reason */ | | NC_SESSION_TERM_OTHER /**< terminated for some other reason */ | |
| } NC_SESSION_TERM_REASON; | | } NC_SESSION_TERM_REASON; | |
| | | | |
| skipping to change at line 373 | | skipping to change at line 373 | |
| } NC_VERB_LEVEL; | | } NC_VERB_LEVEL; | |
| | | | |
| /** | | /** | |
| * @brief Set libnetconf's verbosity level. | | * @brief Set libnetconf's verbosity level. | |
| * @param[in] level Enabled verbosity level (includes all the levels with h
igher priority). | | * @param[in] level Enabled verbosity level (includes all the levels with h
igher priority). | |
| * @ingroup genAPI | | * @ingroup genAPI | |
| */ | | */ | |
| void nc_verbosity(NC_VERB_LEVEL level); | | void nc_verbosity(NC_VERB_LEVEL level); | |
| | | | |
| /** | | /** | |
|
| | | * @brief Function for logging error messages. | |
| | | * @param[in] format printf's format string | |
| | | * @param[in] ... list of arguments specified in format | |
| | | * @ingroup genAPI | |
| | | */ | |
| | | void nc_verb_error(const char * format, ...); | |
| | | | |
| | | /** | |
| | | * @brief Function for logging warning messages. | |
| | | * @param[in] format printf's format string | |
| | | * @param[in] ... list of arguments specified in format | |
| | | * @ingroup genAPI | |
| | | */ | |
| | | void nc_verb_warning(const char * format, ...); | |
| | | | |
| | | /** | |
| | | * @brief Function for logging verbose messages. | |
| | | * @param[in] format printf's format string | |
| | | * @param[in] ... list of arguments specified in format | |
| | | * @ingroup genAPI | |
| | | */ | |
| | | void nc_verb_verbose(const char * format, ...); | |
| | | | |
| | | /** | |
| * @ingroup genAPI | | * @ingroup genAPI | |
| * @brief Initialize libnetconf for system-wide usage. This initialization
is | | * @brief Initialize libnetconf for system-wide usage. This initialization
is | |
| * shared across all the processes | | * shared across all the processes | |
| * @param[in] flags ORed flags for libnetconf initialization. Accepted valu
es | | * @param[in] flags ORed flags for libnetconf initialization. Accepted valu
es | |
| * include: | | * include: | |
| * - *NC_INIT_ALL* Enable all available subsystems | | * - *NC_INIT_ALL* Enable all available subsystems | |
| * - *NC_INIT_MONITORING* Enable ietf-netconf-monitoring module | | * - *NC_INIT_MONITORING* Enable ietf-netconf-monitoring module | |
| * - *NC_INIT_WD* Enable With-default capability | | * - *NC_INIT_WD* Enable With-default capability | |
| * - *NC_INIT_NOTIF* Enable Notification subsystem | | * - *NC_INIT_NOTIF* Enable Notification subsystem | |
| * - *NC_INIT_NACM* Enable NETCONF Access Control subsystem | | * - *NC_INIT_NACM* Enable NETCONF Access Control subsystem | |
| * @return -1 on fatal error\n 0 if this is the first init after previous | | * @return -1 on fatal error\n 0 if this is the first init after previous | |
| * system-wide nc_close() or system reboot\n 1 when someone else already ca
lled | | * system-wide nc_close() or system reboot\n 1 when someone else already ca
lled | |
| * nc_init() since last system-wide nc_close() or system reboot. | | * nc_init() since last system-wide nc_close() or system reboot. | |
| */ | | */ | |
| int nc_init(int flags); | | int nc_init(int flags); | |
| #define NC_INIT_ALL 0xffffffff /**< nc_init()'s flag to enable all o
ptional features/subsystems */ | | #define NC_INIT_ALL 0xffffffff /**< nc_init()'s flag to enable all o
ptional features/subsystems */ | |
| #define NC_INIT_NOTIF 0x00000002 /**< nc_init()'s flag to enable Notif
ication subsystem. */ | | #define NC_INIT_NOTIF 0x00000002 /**< nc_init()'s flag to enable Notif
ication subsystem. */ | |
| #define NC_INIT_NACM 0x00000004 /**< nc_init()'s flag to enable Accce
ss Control subsystem */ | | #define NC_INIT_NACM 0x00000004 /**< nc_init()'s flag to enable Accce
ss Control subsystem */ | |
| #define NC_INIT_MONITORING 0x00000008 /**< nc_init()'s flag to enable ietf-
netconf-monitoring module */ | | #define NC_INIT_MONITORING 0x00000008 /**< nc_init()'s flag to enable ietf-
netconf-monitoring module */ | |
| #define NC_INIT_WD 0x00000010 /**< nc_init()'s flag to enable with-
default capability */ | | #define NC_INIT_WD 0x00000010 /**< nc_init()'s flag to enable with-
default capability */ | |
|
| | | #define NC_INIT_VALIDATE 0x00000020 /**< nc_init()'s flag to enable serve | |
| | | r's validation capability */ | |
| | | #define NC_INIT_URL 0x00000040 /**< nc_init()'s flag to enable serve | |
| | | r's URL capability */ | |
| | | | |
| /** | | /** | |
| * @ingroup genAPI | | * @ingroup genAPI | |
| * @param[in] system Flag if close should be applied as system-wide. | | * @param[in] system Flag if close should be applied as system-wide. | |
| * System-wide nc_close() closes all the shared structures if no other libn
etconf | | * System-wide nc_close() closes all the shared structures if no other libn
etconf | |
| * participant is currently running. Local release of the calling instance | | * participant is currently running. Local release of the calling instance | |
| * from the shared structures is done in both cases. | | * from the shared structures is done in both cases. | |
| * @return -1 on error\n 0 on success\n 1 in case of system-wide when there
is | | * @return -1 on error\n 0 on success\n 1 in case of system-wide when there
is | |
| * another participant using shared structures and system-wide close cannot
be | | * another participant using shared structures and system-wide close cannot
be | |
| * done. | | * done. | |
| | | | |
End of changes. 4 change blocks. |
| 2 lines changed or deleted | | 30 lines changed or added | |
|
| session.h | | session.h | |
| /** | | /** | |
| * \file session.h | | * \file session.h | |
| * \author Radek Krejci <rkrejci@cesnet.cz> | | * \author Radek Krejci <rkrejci@cesnet.cz> | |
| * \brief Functions to handle NETCONF sessions. | | * \brief Functions to handle NETCONF sessions. | |
| * | | * | |
|
| * Copyright (C) 2012 CESNET, z.s.p.o. | | * Copyright (c) 2012-2014 CESNET, z.s.p.o. | |
| * | | * | |
| * Redistribution and use in source and binary forms, with or without | | * Redistribution and use in source and binary forms, with or without | |
| * modification, are permitted provided that the following conditions | | * modification, are permitted provided that the following conditions | |
| * are met: | | * are met: | |
| * 1. Redistributions of source code must retain the above copyright | | * 1. Redistributions of source code must retain the above copyright | |
| * notice, this list of conditions and the following disclaimer. | | * notice, this list of conditions and the following disclaimer. | |
| * 2. Redistributions in binary form must reproduce the above copyright | | * 2. Redistributions in binary form must reproduce the above copyright | |
| * notice, this list of conditions and the following disclaimer in | | * notice, this list of conditions and the following disclaimer in | |
| * the documentation and/or other materials provided with the | | * the documentation and/or other materials provided with the | |
| * distribution. | | * distribution. | |
| | | | |
| skipping to change at line 83 | | skipping to change at line 83 | |
| * @ingroup session | | * @ingroup session | |
| * @brief Add the session into the internal list of monitored sessions that
are | | * @brief Add the session into the internal list of monitored sessions that
are | |
| * returned as part of netconf-state information defined in RFC 6022. | | * returned as part of netconf-state information defined in RFC 6022. | |
| * @param session Session to be monitored; | | * @param session Session to be monitored; | |
| * @return 0 on success, non-zero on error. | | * @return 0 on success, non-zero on error. | |
| */ | | */ | |
| int nc_session_monitor(struct nc_session* session); | | int nc_session_monitor(struct nc_session* session); | |
| | | | |
| /** | | /** | |
| * @ingroup session | | * @ingroup session | |
|
| * @brief Close NETCONF connection with the server. | | | |
| * | | | |
| * Only nc_session_free() and nc_session_get_status() functions are allowed | | | |
| * after this call. | | | |
| * | | | |
| * @param[in] session Session to close. | | | |
| * @param[in] reason Type of the session termination reason. | | | |
| */ | | | |
| void nc_session_close (struct nc_session* session, NC_SESSION_TERM_REASON r | | | |
| eason); | | | |
| | | | |
| /** | | | |
| * @ingroup session | | | |
| * @brief Cleanup the session structure and free all the allocated resource
s. | | * @brief Cleanup the session structure and free all the allocated resource
s. | |
| * | | * | |
| * Do not use the given session structure after this call. | | * Do not use the given session structure after this call. | |
| * | | * | |
| * @param[in] session Session to free. | | * @param[in] session Session to free. | |
| */ | | */ | |
| void nc_session_free (struct nc_session* session); | | void nc_session_free (struct nc_session* session); | |
| | | | |
| /** | | /** | |
| * @ingroup session | | * @ingroup session | |
| | | | |
| skipping to change at line 295 | | skipping to change at line 283 | |
| * @ingroup session | | * @ingroup session | |
| * @brief Get NULL terminated list of the default capabilities supported by | | * @brief Get NULL terminated list of the default capabilities supported by | |
| * libnetconf including the list of namespaces provided by the datastores | | * libnetconf including the list of namespaces provided by the datastores | |
| * created with ncds_new() and initialized by ncds_init(). | | * created with ncds_new() and initialized by ncds_init(). | |
| * | | * | |
| * The caller is supposed to free the returned structure with nc_cpblts_fre
e(). | | * The caller is supposed to free the returned structure with nc_cpblts_fre
e(). | |
| * | | * | |
| * @return NETCONF capabilities structure containing capabilities supported
by | | * @return NETCONF capabilities structure containing capabilities supported
by | |
| * libnetconf. | | * libnetconf. | |
| */ | | */ | |
|
| struct nc_cpblts *nc_session_get_cpblts_default(); | | struct nc_cpblts *nc_session_get_cpblts_default(void); | |
| | | | |
| /** | | /** | |
| * @ingroup rpc | | * @ingroup rpc | |
| * @brief Send \<rpc\> request via specified NETCONF session. | | * @brief Send \<rpc\> request via specified NETCONF session. | |
| * This function is supposed to be performed only by NETCONF clients. | | * This function is supposed to be performed only by NETCONF clients. | |
| * | | * | |
| * This function IS thread safe. | | * This function IS thread safe. | |
| * | | * | |
| * @param[in] session NETCONF session to use. | | * @param[in] session NETCONF session to use. | |
| * @param[in] rpc \<rpc\> message to send. | | * @param[in] rpc \<rpc\> message to send. | |
| | | | |
| skipping to change at line 398 | | skipping to change at line 386 | |
| * @ingroup rpc | | * @ingroup rpc | |
| * @brief Send \<rpc\> and receive \<rpc-reply\> via the specified NETCONF
session. | | * @brief Send \<rpc\> and receive \<rpc-reply\> via the specified NETCONF
session. | |
| * @param[in] session NETCONF session to use. | | * @param[in] session NETCONF session to use. | |
| * @param[in] rpc RPC message to send. | | * @param[in] rpc RPC message to send. | |
| * @param[out] reply Received \<rpc-reply\> | | * @param[out] reply Received \<rpc-reply\> | |
| * @return Type of the received message. #NC_MSG_UNKNOWN means error, #NC_M
SG_REPLY | | * @return Type of the received message. #NC_MSG_UNKNOWN means error, #NC_M
SG_REPLY | |
| * means that *reply points to the received \<rpc-reply\> message. | | * means that *reply points to the received \<rpc-reply\> message. | |
| */ | | */ | |
| NC_MSG_TYPE nc_session_send_recv (struct nc_session* session, nc_rpc *rpc,
nc_reply** reply); | | NC_MSG_TYPE nc_session_send_recv (struct nc_session* session, nc_rpc *rpc,
nc_reply** reply); | |
| | | | |
|
| /** | | | |
| * ingroup session | | | |
| * @brief Get human-readable description to the specific type of the sessio | | | |
| n | | | |
| * termination reason. | | | |
| * @param[in] reason Type of the session termination reason. | | | |
| * @return String describing the given termination reason value. | | | |
| */ | | | |
| const char* nc_session_term_string(NC_SESSION_TERM_REASON reason); | | | |
| | | | |
| #ifdef __cplusplus | | #ifdef __cplusplus | |
| } | | } | |
| #endif | | #endif | |
| | | | |
| #endif /* SESSION_H_ */ | | #endif /* SESSION_H_ */ | |
| | | | |
End of changes. 4 change blocks. |
| 25 lines changed or deleted | | 2 lines changed or added | |
|