| /** |
| * @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[] = { |
| {"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"; |
| } |
| } |