libyang  2.0.7
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
Plugins: Extensions
Collaboration diagram for Plugins: Extensions:

Modules

 Plugins: Extensions compilation support
 
 Plugins: Extensions printer support
 

Data Structures

struct  lyplg_ext
 Extension plugin implementing various aspects of a YANG extension. More...
 
struct  lyplg_ext_record
 

Macros

#define LYPLG_EXT_API_VERSION   1
 Extensions API version. More...
 
#define LYPLG_EXTENSIONS
 Macro to define plugin information in external plugins. More...
 

Typedefs

typedef LY_ERR(* lyplg_ext_compile_clb) (struct lysc_ctx *cctx, const struct lysp_ext_instance *p_ext, struct lysc_ext_instance *c_ext)
 Callback to compile extension from the lysp_ext_instance to the lysc_ext_instance. The later structure is generally prepared and only the extension specific data are supposed to be added (if any). More...
 
typedef LY_ERR(* lyplg_ext_data_validation_clb) (struct lysc_ext_instance *ext, struct lyd_node *node)
 Callback to decide if data instance is valid according to the schema. More...
 
typedef void(* lyplg_ext_free_clb) (struct ly_ctx *ctx, struct lysc_ext_instance *ext)
 Callback to free the extension specific data created by the lyplg_ext_compile_clb callback of the same extension plugin. More...
 
typedef LY_ERR(* lyplg_ext_schema_printer_clb) (struct lyspr_ctx *ctx, struct lysc_ext_instance *ext, ly_bool *flag)
 Callback to print the compiled extension instance's private data in the INFO format. More...
 

Functions

void lyplg_ext_instance_substatements_free (struct ly_ctx *ctx, struct lysc_ext_substmt *substmts)
 Free the extension instance's data compiled with lys_compile_extension_instance(). More...
 
void lyplg_ext_log (const struct lysc_ext_instance *ext, LY_LOG_LEVEL level, LY_ERR err_no, const char *path, const char *format,...)
 Provide a log message from an extension plugin. More...
 

Detailed Description

Structures and functions to for libyang plugins implementing specific YANG extensions defined in YANG modules. For more information, see Type Plugins.

This part of libyang API is available by including <libyang/plugins_ext.h> header file.


Data Structure Documentation

◆ lyplg_ext

struct lyplg_ext

Extension plugin implementing various aspects of a YANG extension.

Definition at line 179 of file plugins_exts.h.

Data Fields
lyplg_ext_compile_clb compile

Callback to compile extension instance from the parsed data

lyplg_ext_free_clb free

Free the extension instance specific data created by lyplg_ext.compile callback

const char * id

Plugin identification (mainly for distinguish incompatible versions of the plugins for external tools)

lyplg_ext_schema_printer_clb sprinter

Callback to print the compiled content (info format) of the extension instance

lyplg_ext_data_validation_clb validate

Callback to decide if data instance is valid according to the schema.

◆ lyplg_ext_record

struct lyplg_ext_record

Definition at line 187 of file plugins_exts.h.

Data Fields
const char * module

name of the module where the extension is defined

const char * name

name of the extension

struct lyplg_ext plugin

data to utilize plugin implementation

const char * revision

optional module revision - if not specified, the plugin applies to any revision, which is not an optimal approach due to a possible future revisions of the module. Instead, there should be defined multiple items in the plugins list, each with the different revision, but all with the same pointer to the plugin functions. The only valid use case for the NULL revision is the case the module has no revision.

Macro Definition Documentation

◆ LYPLG_EXT_API_VERSION

#define LYPLG_EXT_API_VERSION   1

Extensions API version.

Definition at line 104 of file plugins_exts.h.

◆ LYPLG_EXTENSIONS

#define LYPLG_EXTENSIONS
Value:
uint32_t plugins_extensions_apiver__ = LYPLG_EXT_API_VERSION; \
const struct lyplg_ext_record plugins_extensions__[]
#define LYPLG_EXT_API_VERSION
Extensions API version.
Definition: plugins_exts.h:104

Macro to define plugin information in external plugins.

Use as follows: LYPLG_EXTENSIONS = {{<filled information of lyplg_ext_record>}, ..., {0}};

Definition at line 112 of file plugins_exts.h.

Typedef Documentation

◆ lyplg_ext_compile_clb

typedef LY_ERR(* lyplg_ext_compile_clb) (struct lysc_ctx *cctx, const struct lysp_ext_instance *p_ext, struct lysc_ext_instance *c_ext)

Callback to compile extension from the lysp_ext_instance to the lysc_ext_instance. The later structure is generally prepared and only the extension specific data are supposed to be added (if any).

The parsed generic statements can be processed by the callback on its own or the lys_compile_extension_instance function can be used to let the compilation to libyang following the standard rules for processing the YANG statements.

Parameters
[in]cctxCurrent compile context.
[in]p_extParsed extension instance data.
[in,out]c_extPrepared compiled extension instance structure where an addition, extension-specific, data are supposed to be placed for later use (data validation or use of external tool).
Returns
LY_SUCCESS in case of success.
LY_EVALID in case of non-conforming parsed data.
LY_ENOT in case the extension instance is not supported and should be removed.

Definition at line 140 of file plugins_exts.h.

◆ lyplg_ext_data_validation_clb

typedef LY_ERR(* lyplg_ext_data_validation_clb) (struct lysc_ext_instance *ext, struct lyd_node *node)

Callback to decide if data instance is valid according to the schema.

The callback is used only for the extension instances placed in the data nodes or type (the lysc_ext_instance.parent_stmt value must be LY_STMT_IS_DATA_NODE() values or LY_STMT_TYPE):

Parameters
[in]extExtension instance to be checked.
[in]nodeData node connected with the extension instance.
Returns
LY_SUCCESS on data validation success.
LY_EVALID in case the validation fails.

Definition at line 162 of file plugins_exts.h.

◆ lyplg_ext_free_clb

typedef void(* lyplg_ext_free_clb) (struct ly_ctx *ctx, struct lysc_ext_instance *ext)

Callback to free the extension specific data created by the lyplg_ext_compile_clb callback of the same extension plugin.

Parameters
[in]ctxlibyang context.
[in,out]extCompiled extension structure where the data to free are placed.

Definition at line 148 of file plugins_exts.h.

◆ lyplg_ext_schema_printer_clb

typedef LY_ERR(* lyplg_ext_schema_printer_clb) (struct lyspr_ctx *ctx, struct lysc_ext_instance *ext, ly_bool *flag)

Callback to print the compiled extension instance's private data in the INFO format.

Parameters
[in]ctxYANG printer context to provide output handler and other information for printing.
[in]extThe compiled extension instance, mainly to access the extensions.
[in,out]flagFlag to be shared with the caller regarding the opening brackets - 0 if the '{' not yet printed, 1 otherwise.
Returns
LY_SUCCESS when everything was fine, other LY_ERR values in case of failure

Definition at line 174 of file plugins_exts.h.

Function Documentation

◆ lyplg_ext_instance_substatements_free()

void lyplg_ext_instance_substatements_free ( struct ly_ctx ctx,
struct lysc_ext_substmt substmts 
)

Free the extension instance's data compiled with lys_compile_extension_instance().

Parameters
[in]ctxlibyang context
[in]substmtsThe sized array of extension instance's substatements. The whole array is freed except the storage places which are expected to be covered by the extension plugin.

◆ lyplg_ext_log()

void lyplg_ext_log ( const struct lysc_ext_instance ext,
LY_LOG_LEVEL  level,
LY_ERR  err_no,
const char *  path,
const char *  format,
  ... 
)

Provide a log message from an extension plugin.

Parameters
[in]extCompiled extension structure providing generic information about the extension/plugin causing the message.
[in]levelLog message level (error, warning, etc.)
[in]err_noError type code.
[in]pathPath relevant to the message.
[in]formatFormat string to print.