YANG parser cardinality checked (https://github.com/clicon/clixon/issues/48)
This commit is contained in:
parent
9377986c81
commit
7d5bfe5c81
5 changed files with 335 additions and 18 deletions
|
|
@ -108,6 +108,217 @@ struct ycard{
|
|||
*/
|
||||
#define NMAX 1000000 /* Just a large number */
|
||||
static const struct ycard yclist[] = {
|
||||
{Y_ACTION, Y_DESCRIPTION, 0, 1},
|
||||
{Y_ACTION, Y_GROUPING, 0, NMAX},
|
||||
{Y_ACTION, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_ACTION, Y_INPUT, 0, 1},
|
||||
{Y_ACTION, Y_OUTPUT, 0, 1},
|
||||
{Y_ACTION, Y_REFERENCE, 0, 1},
|
||||
{Y_ACTION, Y_STATUS, 0, 1},
|
||||
{Y_ACTION, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_ANYDATA, Y_CONFIG, 0, 1},
|
||||
{Y_ANYDATA, Y_DESCRIPTION, 0, 1},
|
||||
{Y_ANYDATA, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_ANYDATA, Y_MANDATORY, 0, 1},
|
||||
{Y_ANYDATA, Y_MUST, 0, NMAX},
|
||||
{Y_ANYDATA, Y_REFERENCE, 0, 1},
|
||||
{Y_ANYDATA, Y_STATUS, 0, 1},
|
||||
{Y_ANYDATA, Y_WHEN, 0, 1},
|
||||
{Y_ANYXML, Y_CONFIG, 0, 1},
|
||||
{Y_ANYXML, Y_DESCRIPTION, 0, 1},
|
||||
{Y_ANYXML, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_ANYXML, Y_MANDATORY, 0, 1},
|
||||
{Y_ANYXML, Y_MUST, 0, NMAX},
|
||||
{Y_ANYXML, Y_REFERENCE, 0, 1},
|
||||
{Y_ANYXML, Y_STATUS, 0, 1},
|
||||
{Y_ANYXML, Y_WHEN, 0, 1},
|
||||
{Y_ARGUMENT, Y_YIN_ELEMENT, 0, 1},
|
||||
{Y_AUGMENT, Y_ACTION, 0, NMAX},
|
||||
{Y_AUGMENT, Y_ANYDATA, 0, NMAX},
|
||||
{Y_AUGMENT, Y_ANYXML, 0, NMAX},
|
||||
{Y_AUGMENT, Y_CASE, 0, NMAX},
|
||||
{Y_AUGMENT, Y_CHOICE, 0, NMAX},
|
||||
{Y_AUGMENT, Y_CONTAINER, 0, NMAX},
|
||||
{Y_AUGMENT, Y_DESCRIPTION, 0, 1},
|
||||
{Y_AUGMENT, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_AUGMENT, Y_LEAF, 0, NMAX},
|
||||
{Y_AUGMENT, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_AUGMENT, Y_LIST, 0, NMAX},
|
||||
{Y_AUGMENT, Y_NOTIFICATION, 0, NMAX},
|
||||
{Y_AUGMENT, Y_REFERENCE, 0, 1},
|
||||
{Y_AUGMENT, Y_STATUS, 0, 1},
|
||||
{Y_AUGMENT, Y_USES, 0, NMAX},
|
||||
{Y_AUGMENT, Y_WHEN, 0, 1},
|
||||
{Y_BELONGS_TO, Y_PREFIX, 1, 1},
|
||||
{Y_BIT, Y_DESCRIPTION, 0, 1},
|
||||
{Y_BIT, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_BIT, Y_POSITION, 0, 1},
|
||||
{Y_BIT, Y_REFERENCE, 0, 1},
|
||||
{Y_BIT, Y_STATUS, 0, 1},
|
||||
{Y_CASE, Y_ANYDATA, 0, NMAX},
|
||||
{Y_CASE, Y_ANYXML, 0, NMAX},
|
||||
{Y_CASE, Y_CHOICE, 0, NMAX},
|
||||
{Y_CASE, Y_CONTAINER, 0, NMAX},
|
||||
{Y_CASE, Y_DESCRIPTION, 0, 1},
|
||||
{Y_CASE, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_CASE, Y_LEAF, 0, NMAX},
|
||||
{Y_CASE, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_CASE, Y_LIST, 0, NMAX},
|
||||
{Y_CASE, Y_REFERENCE, 0, 1},
|
||||
{Y_CASE, Y_STATUS, 0, 1},
|
||||
{Y_CASE, Y_USES, 0, NMAX},
|
||||
{Y_CASE, Y_WHEN, 0, 1},
|
||||
{Y_CHOICE, Y_ANYXML, 0, NMAX},
|
||||
{Y_CHOICE, Y_CASE, 0, NMAX},
|
||||
{Y_CHOICE, Y_CHOICE, 0, NMAX},
|
||||
{Y_CHOICE, Y_CONFIG, 0, 1},
|
||||
{Y_CHOICE, Y_CONTAINER, 0, NMAX},
|
||||
{Y_CHOICE, Y_DEFAULT, 0, 1},
|
||||
{Y_CHOICE, Y_DESCRIPTION, 0, 1},
|
||||
{Y_CHOICE, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_CHOICE, Y_LEAF, 0, NMAX},
|
||||
{Y_CHOICE, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_CHOICE, Y_LIST, 0, NMAX},
|
||||
{Y_CHOICE, Y_MANDATORY, 0, 1},
|
||||
{Y_CHOICE, Y_REFERENCE, 0, 1},
|
||||
{Y_CHOICE, Y_STATUS, 0, 1},
|
||||
{Y_CHOICE, Y_WHEN, 0, 1},
|
||||
{Y_CHOICE, Y_ANYDATA, 0, NMAX},
|
||||
{Y_CONTAINER, Y_ACTION, 0, NMAX},
|
||||
{Y_CONTAINER, Y_ANYDATA, 0, NMAX},
|
||||
{Y_CONTAINER, Y_ANYXML, 0, NMAX},
|
||||
{Y_CONTAINER, Y_CHOICE, 0, NMAX},
|
||||
{Y_CONTAINER, Y_CONFIG, 0, 1},
|
||||
{Y_CONTAINER, Y_CONTAINER, 0, NMAX},
|
||||
{Y_CONTAINER, Y_DESCRIPTION, 0, 1},
|
||||
{Y_CONTAINER, Y_GROUPING, 0, NMAX},
|
||||
{Y_CONTAINER, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_CONTAINER, Y_LEAF, 0, NMAX},
|
||||
{Y_CONTAINER, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_CONTAINER, Y_LIST, 0, NMAX},
|
||||
{Y_CONTAINER, Y_MUST, 0, NMAX},
|
||||
{Y_CONTAINER, Y_NOTIFICATION, 0, NMAX},
|
||||
{Y_CONTAINER, Y_PRESENCE, 0, 1},
|
||||
{Y_CONTAINER, Y_REFERENCE, 0, 1},
|
||||
{Y_CONTAINER, Y_STATUS, 0, 1},
|
||||
{Y_CONTAINER, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_CONTAINER, Y_USES, 0, NMAX},
|
||||
{Y_CONTAINER, Y_WHEN, 0, 1},
|
||||
{Y_DEVIATE, Y_CONFIG, 0, 1},
|
||||
{Y_DEVIATE, Y_DEFAULT, 0, NMAX},
|
||||
{Y_DEVIATE, Y_MANDATORY, 0, 1},
|
||||
{Y_DEVIATE, Y_MAX_ELEMENTS, 0, 1},
|
||||
{Y_DEVIATE, Y_MIN_ELEMENTS, 0, 1},
|
||||
{Y_DEVIATE, Y_MUST, 0, NMAX},
|
||||
{Y_DEVIATE, Y_TYPE, 0, 1},
|
||||
{Y_DEVIATE, Y_UNIQUE, 0, NMAX},
|
||||
{Y_DEVIATE, Y_UNITS, 0, 1},
|
||||
{Y_DEVIATION, Y_DESCRIPTION, 0, 1},
|
||||
{Y_DEVIATION, Y_DEVIATE, 1, NMAX},
|
||||
{Y_DEVIATION, Y_REFERENCE, 0, 1},
|
||||
{Y_ENUM, Y_DESCRIPTION, 0, 1},
|
||||
{Y_ENUM, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_ENUM, Y_REFERENCE, 0, 1},
|
||||
{Y_ENUM, Y_STATUS, 0, 1},
|
||||
{Y_ENUM, Y_VALUE, 0, 1},
|
||||
{Y_EXTENSION, Y_ARGUMENT, 0, 1},
|
||||
{Y_EXTENSION, Y_DESCRIPTION, 0, 1},
|
||||
{Y_EXTENSION, Y_REFERENCE, 0, 1},
|
||||
{Y_EXTENSION, Y_STATUS, 0, 1},
|
||||
{Y_FEATURE, Y_DESCRIPTION, 0, 1},
|
||||
{Y_FEATURE, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_FEATURE, Y_REFERENCE, 0, 1},
|
||||
{Y_FEATURE, Y_STATUS, 0, 1},
|
||||
{Y_GROUPING, Y_ACTION, 0, NMAX},
|
||||
{Y_GROUPING, Y_ANYDATA, 0, NMAX},
|
||||
{Y_GROUPING, Y_ANYXML, 0, NMAX},
|
||||
{Y_GROUPING, Y_CHOICE, 0, NMAX},
|
||||
{Y_GROUPING, Y_CONTAINER, 0, NMAX},
|
||||
{Y_GROUPING, Y_DESCRIPTION, 0, 1},
|
||||
{Y_GROUPING, Y_GROUPING, 0, NMAX},
|
||||
{Y_GROUPING, Y_LEAF, 0, NMAX},
|
||||
{Y_GROUPING, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_GROUPING, Y_LIST, 0, NMAX},
|
||||
{Y_GROUPING, Y_NOTIFICATION, 0, NMAX},
|
||||
{Y_GROUPING, Y_REFERENCE, 0, 1},
|
||||
{Y_GROUPING, Y_STATUS, 0, 1},
|
||||
{Y_GROUPING, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_GROUPING, Y_USES, 0, NMAX},
|
||||
{Y_IDENTITY, Y_BASE, 0, NMAX},
|
||||
{Y_IDENTITY, Y_DESCRIPTION, 0, 1},
|
||||
{Y_IDENTITY, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_IDENTITY, Y_REFERENCE, 0, 1},
|
||||
{Y_IDENTITY, Y_STATUS, 0, 1},
|
||||
{Y_IMPORT, Y_DESCRIPTION, 0, 1},
|
||||
{Y_IMPORT, Y_PREFIX, 1, 1},
|
||||
{Y_IMPORT, Y_REFERENCE, 0, 1},
|
||||
{Y_IMPORT, Y_REVISION_DATE,0, 1},
|
||||
{Y_INCLUDE, Y_DESCRIPTION, 0, 1},
|
||||
{Y_INCLUDE, Y_REFERENCE, 0, 1},
|
||||
{Y_INCLUDE, Y_REVISION_DATE,0, 1},
|
||||
{Y_INPUT, Y_ANYDATA, 0, NMAX},
|
||||
{Y_INPUT, Y_ANYXML, 0, NMAX},
|
||||
{Y_INPUT, Y_CHOICE, 0, NMAX},
|
||||
{Y_INPUT, Y_CONTAINER, 0, NMAX},
|
||||
{Y_INPUT, Y_GROUPING, 0, NMAX},
|
||||
{Y_INPUT, Y_LEAF, 0, NMAX},
|
||||
{Y_INPUT, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_INPUT, Y_LIST, 0, NMAX},
|
||||
{Y_INPUT, Y_MUST, 0, NMAX},
|
||||
{Y_INPUT, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_INPUT, Y_USES, 0, NMAX},
|
||||
{Y_LEAF, Y_CONFIG, 0, 1},
|
||||
{Y_LEAF, Y_DEFAULT, 0, 1},
|
||||
{Y_LEAF, Y_DESCRIPTION, 0, 1},
|
||||
{Y_LEAF, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_LEAF, Y_MANDATORY, 0, 1},
|
||||
{Y_LEAF, Y_MUST, 0, NMAX},
|
||||
{Y_LEAF, Y_REFERENCE, 0, 1},
|
||||
{Y_LEAF, Y_STATUS, 0, 1},
|
||||
{Y_LEAF, Y_TYPE, 1, 1},
|
||||
{Y_LEAF, Y_UNITS, 0, 1},
|
||||
{Y_LEAF, Y_WHEN, 0, 1},
|
||||
{Y_LEAF_LIST, Y_CONFIG, 0, 1},
|
||||
{Y_LEAF_LIST, Y_DEFAULT, 0, NMAX},
|
||||
{Y_LEAF_LIST, Y_DESCRIPTION, 0, 1},
|
||||
{Y_LEAF_LIST, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_LEAF_LIST, Y_MAX_ELEMENTS, 0, 1},
|
||||
{Y_LEAF_LIST, Y_MIN_ELEMENTS, 0, 1},
|
||||
{Y_LEAF_LIST, Y_MUST, 0, NMAX},
|
||||
{Y_LEAF_LIST, Y_ORDERED_BY, 0, 1},
|
||||
{Y_LEAF_LIST, Y_REFERENCE, 0, 1},
|
||||
{Y_LEAF_LIST, Y_STATUS, 0, 1},
|
||||
{Y_LEAF_LIST, Y_TYPE, 1, 1},
|
||||
{Y_LEAF_LIST, Y_UNITS, 0, 1},
|
||||
{Y_LEAF_LIST, Y_WHEN, 0, 1},
|
||||
{Y_LENGTH, Y_DESCRIPTION, 0, 1},
|
||||
{Y_LENGTH, Y_ERROR_APP_TAG, 0, 1},
|
||||
{Y_LENGTH, Y_ERROR_MESSAGE, 0, 1},
|
||||
{Y_LENGTH, Y_REFERENCE, 0, 1},
|
||||
{Y_LIST, Y_ACTION, 0, NMAX},
|
||||
{Y_LIST, Y_ANYDATA, 0, NMAX},
|
||||
{Y_LIST, Y_ANYXML, 0, NMAX},
|
||||
{Y_LIST, Y_CHOICE, 0, NMAX},
|
||||
{Y_LIST, Y_CONFIG, 0, 1},
|
||||
{Y_LIST, Y_CONTAINER, 0, NMAX},
|
||||
{Y_LIST, Y_DESCRIPTION, 0, 1},
|
||||
{Y_LIST, Y_GROUPING, 0, NMAX},
|
||||
{Y_LIST, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_LIST, Y_KEY, 0, 1},
|
||||
{Y_LIST, Y_LEAF, 0, NMAX},
|
||||
{Y_LIST, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_LIST, Y_LIST, 0, NMAX},
|
||||
{Y_LIST, Y_MAX_ELEMENTS, 0, 1},
|
||||
{Y_LIST, Y_MIN_ELEMENTS, 0, 1},
|
||||
{Y_LIST, Y_MUST, 0, NMAX},
|
||||
{Y_LIST, Y_NOTIFICATION, 0, NMAX},
|
||||
{Y_LIST, Y_ORDERED_BY, 0, 1},
|
||||
{Y_LIST, Y_REFERENCE, 0, 1},
|
||||
{Y_LIST, Y_STATUS, 0, 1},
|
||||
{Y_LIST, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_LIST, Y_UNIQUE, 0, NMAX},
|
||||
{Y_LIST, Y_USES, 0, NMAX},
|
||||
{Y_LIST, Y_WHEN, 0,1},
|
||||
{Y_MODULE, Y_ANYDATA, 0, NMAX},
|
||||
{Y_MODULE, Y_ANYXML, 0, NMAX},
|
||||
{Y_MODULE, Y_AUGMENT, 0, NMAX},
|
||||
|
|
@ -134,17 +345,115 @@ static const struct ycard yclist[] = {
|
|||
{Y_MODULE, Y_RPC, 0, NMAX},
|
||||
{Y_MODULE, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_MODULE, Y_USES, 0, NMAX},
|
||||
{Y_MODULE, Y_YANG_VERSION, 0, 1},
|
||||
{Y_MODULE, Y_YANG_VERSION, 0, 1},
|
||||
{Y_MUST, Y_DESCRIPTION, 0, 1},
|
||||
{Y_MUST, Y_ERROR_APP_TAG, 0, 1},
|
||||
{Y_MUST, Y_ERROR_MESSAGE, 0, 1},
|
||||
{Y_MUST, Y_REFERENCE, 0, 1},
|
||||
{Y_NOTIFICATION, Y_ANYDATA, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_ANYXML, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_CHOICE, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_CONTAINER, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_DESCRIPTION, 0, 1},
|
||||
{Y_NOTIFICATION, Y_GROUPING, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_LEAF, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_LIST, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_MUST, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_REFERENCE, 0, 1},
|
||||
{Y_NOTIFICATION, Y_STATUS, 0, 1},
|
||||
{Y_NOTIFICATION, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_NOTIFICATION, Y_USES, 0, NMAX},
|
||||
{Y_OUTPUT, Y_ANYDATA, 0, NMAX},
|
||||
{Y_OUTPUT, Y_ANYXML, 0, NMAX},
|
||||
{Y_OUTPUT, Y_CHOICE, 0, NMAX},
|
||||
{Y_OUTPUT, Y_CONTAINER, 0, NMAX},
|
||||
{Y_OUTPUT, Y_GROUPING, 0, NMAX},
|
||||
{Y_OUTPUT, Y_LEAF, 0, NMAX},
|
||||
{Y_OUTPUT, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_OUTPUT, Y_LIST, 0, NMAX},
|
||||
{Y_OUTPUT, Y_MUST, 0, NMAX},
|
||||
{Y_OUTPUT, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_OUTPUT, Y_USES, 0, NMAX},
|
||||
{Y_PATTERN, Y_DESCRIPTION, 0, 1},
|
||||
{Y_PATTERN, Y_ERROR_APP_TAG, 0, 1},
|
||||
{Y_PATTERN, Y_ERROR_MESSAGE, 0, 1},
|
||||
{Y_PATTERN, Y_MODIFIER, 0, 1},
|
||||
{Y_PATTERN, Y_REFERENCE, 0, 1},
|
||||
{Y_RANGE, Y_DESCRIPTION, 0, 1},
|
||||
{Y_RANGE, Y_ERROR_APP_TAG, 0, 1},
|
||||
{Y_RANGE, Y_ERROR_MESSAGE, 0, 1},
|
||||
{Y_RANGE, Y_REFERENCE, 0, 1},
|
||||
{Y_REVISION, Y_DESCRIPTION, 0, 1},
|
||||
{Y_REVISION, Y_REFERENCE, 0, 1},
|
||||
{Y_RPC, Y_DESCRIPTION, 0, 1},
|
||||
{Y_RPC, Y_GROUPING, 0, NMAX},
|
||||
{Y_RPC, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_RPC, Y_INPUT, 0, 1},
|
||||
{Y_RPC, Y_OUTPUT, 0, 1},
|
||||
{Y_RPC, Y_REFERENCE, 0, 1},
|
||||
{Y_RPC, Y_STATUS, 0, 1},
|
||||
{Y_RPC, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_ANYDATA, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_AUGMENT, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_BELONGS_TO, 1, 1},
|
||||
{Y_SUBMODULE, Y_CHOICE, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_CONTACT, 0, 1},
|
||||
{Y_SUBMODULE, Y_CONTAINER, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_DESCRIPTION,0, 1},
|
||||
{Y_SUBMODULE, Y_DEVIATION, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_EXTENSION, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_FEATURE, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_GROUPING, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_IDENTITY, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_IMPORT, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_INCLUDE, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_LEAF, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_LEAF_LIST, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_LIST, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_NOTIFICATION,0, NMAX},
|
||||
{Y_SUBMODULE, Y_ORGANIZATION,0, 1},
|
||||
{Y_SUBMODULE, Y_REFERENCE, 0, 1},
|
||||
{Y_SUBMODULE, Y_REVISION, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_RPC, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_TYPEDEF, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_USES, 0, NMAX},
|
||||
{Y_SUBMODULE, Y_YANG_VERSION,0, 1}, /* "yang-version" statement is mandatory in YANG version "1.1". */
|
||||
{Y_TYPE, Y_BASE, 0, NMAX},
|
||||
{Y_TYPE, Y_BIT, 0, NMAX},
|
||||
{Y_TYPE, Y_ENUM, 0, NMAX},
|
||||
{Y_TYPE, Y_FRACTION_DIGITS, 0, 1},
|
||||
{Y_TYPE, Y_LENGTH, 0, 1},
|
||||
{Y_TYPE, Y_PATH, 0, 1},
|
||||
{Y_TYPE, Y_PATTERN, 0, NMAX},
|
||||
{Y_TYPE, Y_RANGE, 0, 1},
|
||||
{Y_TYPE, Y_REQUIRE_INSTANCE, 0, 1},
|
||||
{Y_TYPE, Y_TYPE, 0, NMAX},
|
||||
{Y_TYPEDEF, Y_DEFAULT, 0, 1},
|
||||
{Y_TYPEDEF, Y_DESCRIPTION,0, 1},
|
||||
{Y_TYPEDEF, Y_REFERENCE, 0, 1},
|
||||
{Y_TYPEDEF, Y_STATUS, 0, 1},
|
||||
{Y_TYPEDEF, Y_TYPE, 1, 1},
|
||||
{Y_TYPEDEF, Y_UNITS, 0, 1},
|
||||
{Y_USES, Y_AUGMENT, 0, NMAX},
|
||||
{Y_USES, Y_DESCRIPTION, 0, 1},
|
||||
{Y_USES, Y_IF_FEATURE, 0, NMAX},
|
||||
{Y_USES, Y_REFERENCE, 0, 1},
|
||||
{Y_USES, Y_REFINE, 0, NMAX},
|
||||
{Y_USES, Y_STATUS, 0, 1},
|
||||
{Y_USES, Y_WHEN, 0, 1},
|
||||
{0,}
|
||||
};
|
||||
|
||||
/*! Find yang parent and child combination in yang cardinality table
|
||||
* @param[in] parent Parent Yang spec
|
||||
* @param[in] child Child yang spec if -1 first
|
||||
* @param[in] child Child yang spec if 0 first
|
||||
* @param[in] yc Yang cardinality map
|
||||
* @param[in] p If set, quit as soon as parents dont match
|
||||
* @retval NULL Not found
|
||||
* @retval yp Found
|
||||
* @note if cardinal list above is sorted, this search could do binary
|
||||
*/
|
||||
static const struct ycard *
|
||||
ycard_find(enum rfc_6020 parent,
|
||||
|
|
@ -202,6 +511,7 @@ yang_cardinality(clicon_handle h,
|
|||
ck = ys->ys_keyword;
|
||||
if (ck == Y_UNKNOWN) /* special case */
|
||||
continue;
|
||||
/* Find entry in yang cardinality table from parent/child keyword pair */
|
||||
if ((yc = ycard_find(pk, ck, ycplist, 1)) == NULL){
|
||||
clicon_err(OE_YANG, 0, "%s: \"%s\" is child of \"%s\", but should not be",
|
||||
modname, yang_key2str(ck), yang_key2str(pk));
|
||||
|
|
@ -231,7 +541,7 @@ yang_cardinality(clicon_handle h,
|
|||
}
|
||||
}
|
||||
|
||||
if (0) { /* Notyet */
|
||||
if (1) { /* Notyet */
|
||||
/* 4) Recurse */
|
||||
i = 0;
|
||||
while (i<yt->ys_len){ /* Note, children may be removed */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue