blob: 2bf6889817ab0394ee120836ce96eeaa1fadfd36 [file] [log] [blame]
/**
* @file plugins_exts.c
* @author Radek Krejci <rkrejci@cesnet.cz>
* @brief Internally implemented YANG extensions.
*
* Copyright (c) 2019 CESNET, z.s.p.o.
*
* This source code is licensed under BSD 3-Clause License (the "License").
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://opensource.org/licenses/BSD-3-Clause
*/
#include "plugins_exts.h"
#include <stdint.h>
#include <string.h>
#include "common.h"
#include "plugins_exts_metadata.c"
#include "plugins_exts_nacm.c"
/**
* @brief list of all extension plugins implemented internally
*/
struct lyext_plugins_list lyext_plugins_internal[6] = {
{"ietf-netconf-acm", "2012-02-22", "default-deny-write", &nacm_plugin},
{"ietf-netconf-acm", "2018-02-14", "default-deny-write", &nacm_plugin},
{"ietf-netconf-acm", "2012-02-22", "default-deny-all", &nacm_plugin},
{"ietf-netconf-acm", "2018-02-14", "default-deny-all", &nacm_plugin},
{"ietf-yang-metadata", "2016-08-05", "annotation", &metadata_plugin},
{NULL, NULL, NULL, NULL} /* terminating item */
};
/* TODO support for external extension plugins */
struct lyext_plugin *
lyext_get_plugin(struct lysc_ext *ext)
{
for (uint8_t u = 0; lyext_plugins_internal[u].module; ++u) {
if (!strcmp(ext->name, lyext_plugins_internal[u].name) &&
!strcmp(ext->module->name, lyext_plugins_internal[u].module) &&
(!lyext_plugins_internal[u].revision || !strcmp(ext->module->revision, lyext_plugins_internal[u].revision))) {
/* we have the match */
return lyext_plugins_internal[u].plugin;
}
}
return NULL;
}
API const char *
lyext_parent2str(LYEXT_PARENT type)
{
switch (type) {
case LYEXT_PAR_MODULE:
return "module";
case LYEXT_PAR_NODE:
return "data node";
case LYEXT_PAR_INPUT:
return "input";
case LYEXT_PAR_OUTPUT:
return "output";
case LYEXT_PAR_TYPE:
return "type";
case LYEXT_PAR_TYPE_BIT:
return "bit";
case LYEXT_PAR_TYPE_ENUM:
return "enum";
case LYEXT_PAR_MUST:
return "must";
case LYEXT_PAR_PATTERN:
return "pattern";
case LYEXT_PAR_LENGTH:
return "length";
case LYEXT_PAR_RANGE:
return "range";
case LYEXT_PAR_WHEN:
return "when";
case LYEXT_PAR_IDENT:
return "identity";
case LYEXT_PAR_EXT:
return "extension instance";
case LYEXT_PAR_IMPORT:
return "import";
/* YANG allows extension instances inside the following statements,
* but they do not have any meaning in current libyang
case LYEXT_PAR_TPDF:
return "typedef";
case LYEXT_PAR_EXTINST:
return "extension";
case LYEXT_PAR_REFINE:
return "refine";
case LYEXT_PAR_DEVIATION:
return "deviation";
case LYEXT_PAR_DEVIATE:
return "deviate";
case LYEXT_PAR_INCLUDE:
return "include";
case LYEXT_PAR_REVISION:
return "revision";
*/
default:
return "unknown";
}
}