blob: 8b23e6fa5a704ce713cf236dcb80efd332592c26 [file] [log] [blame]
Michal Vaskocde73ac2019-11-14 16:10:27 +01001/**
2 * @file validation.h
3 * @author Michal Vasko <mvasko@cesnet.cz>
4 * @brief Validation routines.
5 *
6 * Copyright (c) 2019 CESNET, z.s.p.o.
7 *
8 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * https://opensource.org/licenses/BSD-3-Clause
13 */
14
15#ifndef LY_VALIDATION_H_
16#define LY_VALIDATION_H_
17
18#include "log.h"
Michal Vaskofbed4ea2020-07-08 10:43:30 +020019#include "parser_data.h"
Michal Vaskof937cfe2020-08-03 16:07:12 +020020#include "plugins_types.h"
Michal Vaskocde73ac2019-11-14 16:10:27 +010021#include "tree_data.h"
22
Michal Vaskoa6669ba2020-08-06 16:14:26 +020023enum lyd_diff_op;
24
25/**
26 * @brief Add new changes into a diff. They are always merged.
27 *
28 * @param[in] node Node/subtree to add.
29 * @param[in] op Operation of the change.
30 * @param[in,out] diff Diff to update.
31 * @return LY_ERR value.
32 */
33LY_ERR lyd_val_diff_add(const struct lyd_node *node, enum lyd_diff_op op, struct lyd_node **diff);
34
Michal Vaskocde73ac2019-11-14 16:10:27 +010035/**
Michal Vaskob1b5c262020-03-05 14:29:47 +010036 * @brief Finish validation of nodes and attributes. Specifically, when (is processed first) and type validation.
Michal Vaskocde73ac2019-11-14 16:10:27 +010037 *
Michal Vaskob1b5c262020-03-05 14:29:47 +010038 * !! It is assumed autodeleted nodes cannot be in the unresolved node type set !!
39 *
40 * @param[in,out] tree Data tree, is updated if some nodes are autodeleted.
41 * @param[in] node_when Set with nodes with "when" conditions, can be NULL.
Michal Vaskocde73ac2019-11-14 16:10:27 +010042 * @param[in] node_types Set with nodes with unresolved types, can be NULL
Michal Vasko9f96a052020-03-10 09:41:45 +010043 * @param[in] meta_types Set with metdata with unresolved types, can be NULL.
Michal Vaskocde73ac2019-11-14 16:10:27 +010044 * @param[in] format Format of the unresolved data.
45 * @param[in] get_prefix_clb Format-specific getter to resolve prefixes.
46 * @param[in] parser_data Parser's data for @p get_prefix_clb.
Michal Vasko8104fd42020-07-13 11:09:51 +020047 * @param[in,out] diff Validation diff.
Michal Vaskocde73ac2019-11-14 16:10:27 +010048 * @return LY_ERR value.
49 */
Michal Vasko9f96a052020-03-10 09:41:45 +010050LY_ERR lyd_validate_unres(struct lyd_node **tree, struct ly_set *node_when, struct ly_set *node_types, struct ly_set *meta_types,
Radek Krejci1798aae2020-07-14 13:26:06 +020051 LYD_FORMAT format, ly_resolve_prefix_clb get_prefix_clb, void *parser_data, struct lyd_node **diff);
Michal Vaskocde73ac2019-11-14 16:10:27 +010052
53/**
Michal Vaskob1b5c262020-03-05 14:29:47 +010054 * @brief Validate new siblings. Specifically, check duplicated instances, autodelete default values and cases.
Michal Vaskocde73ac2019-11-14 16:10:27 +010055 *
Michal Vaskob1b5c262020-03-05 14:29:47 +010056 * !! It is assumed autodeleted nodes cannot yet be in the unresolved node type set !!
57 *
58 * @param[in,out] first First sibling.
59 * @param[in] sparent Schema parent of the siblings, NULL for top-level siblings.
60 * @param[in] mod Module of the siblings, NULL for nested siblings.
Michal Vasko8104fd42020-07-13 11:09:51 +020061 * @param[in,out] diff Validation diff.
Michal Vaskob1b5c262020-03-05 14:29:47 +010062 * @return LY_ERR value.
63 */
Michal Vasko8104fd42020-07-13 11:09:51 +020064LY_ERR lyd_validate_new(struct lyd_node **first, const struct lysc_node *sparent, const struct lys_module *mod,
65 struct lyd_node **diff);
Michal Vaskob1b5c262020-03-05 14:29:47 +010066
67/**
68 * @brief Perform all remaining validation tasks, the data tree must be final when calling this function.
69 *
70 * @param[in] first First sibling.
71 * @param[in] sparent Schema parent of the siblings, NULL for top-level siblings.
72 * @param[in] mod Module of the siblings, NULL for nested siblings.
Michal Vaskof03ed032020-03-04 13:31:44 +010073 * @param[in] val_opts Validation options (@ref datavalidationoptions).
Radek Krejci7931b192020-06-25 17:05:03 +020074 * @param[in] op Operation to validate (@ref datavalidateop) or 0 for data tree
Michal Vaskocde73ac2019-11-14 16:10:27 +010075 * @return LY_ERR value.
76 */
Michal Vaskofea12c62020-03-30 11:00:15 +020077LY_ERR lyd_validate_final_r(struct lyd_node *first, const struct lysc_node *sparent, const struct lys_module *mod,
Radek Krejci7931b192020-06-25 17:05:03 +020078 int val_opts, LYD_VALIDATE_OP op);
Michal Vasko9b368d32020-02-14 13:53:31 +010079
Michal Vaskocde73ac2019-11-14 16:10:27 +010080#endif /* LY_VALIDATION_H_ */