From: Francis Dupont Date: Wed, 21 Nov 2018 02:17:42 +0000 (+0100) Subject: [204-move-models-] Checkpoint: moved modules, added revisions, updated pretests X-Git-Tag: 339-doxygen-errors_base~22 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c5b20a8cbac928abeb332664c24bb2d0ea11492e;p=thirdparty%2Fkea.git [204-move-models-] Checkpoint: moved modules, added revisions, updated pretests --- diff --git a/configure.ac b/configure.ac index c6e0710b33..bd890418f5 100644 --- a/configure.ac +++ b/configure.ac @@ -1659,6 +1659,8 @@ AC_CONFIG_FILES([Makefile src/share/database/scripts/pgsql/upgrade_3.2_to_3.3.sh src/share/database/scripts/pgsql/upgrade_3.3_to_4.0.sh src/share/database/scripts/pgsql/upgrade_4.0_to_5.0.sh + src/share/yang/Makefile + src/share/yang/modules/Makefile tools/Makefile tools/path_replacer.sh ]) diff --git a/src/lib/yang/Makefile.am b/src/lib/yang/Makefile.am index bf5717e350..a8043fc374 100644 --- a/src/lib/yang/Makefile.am +++ b/src/lib/yang/Makefile.am @@ -64,7 +64,8 @@ libkea_yang_include_HEADERS = \ translator_pool.h \ translator_shared_network.h \ translator_subnet.h \ - yang_models.h + yang_models.h \ + yang_revisions.h EXTRA_DIST = yang.dox # Distribute yang modules. diff --git a/src/lib/yang/pretests/Makefile.am b/src/lib/yang/pretests/Makefile.am index ef4f486367..65e5725929 100644 --- a/src/lib/yang/pretests/Makefile.am +++ b/src/lib/yang/pretests/Makefile.am @@ -2,7 +2,10 @@ CLEANFILES = *.gcno *.gcda TESTS = sysrepo_setup_tests sysrepo_setup_tests_SOURCES = sysrepo_setup_tests.cc -sysrepo_setup_tests_CPPFLAGS = $(SYSREPO_CPPFLAGS) -DSYSREPO_REPO=\"@SYSREPO_REPO@\" +sysrepo_setup_tests_CPPFLAGS = -I$(top_builddir)/src/lib +sysrepo_setup_tests_CPPFLAGS += -I$(top_srcdir)/src/lib +sysrepo_setup_tests_CPPFLAGS += $(SYSREPO_CPPFLAGS) +sysrepo_setup_tests_CPPFLAGS += -DSYSREPO_REPO=\"@SYSREPO_REPO@\" sysrepo_setup_tests_LDFLAGS = $(AM_LDFLAGS) sysrepo_setup_tests_LDADD = $(SYSREPO_LIBS) diff --git a/src/lib/yang/pretests/sysrepo_setup_tests.cc b/src/lib/yang/pretests/sysrepo_setup_tests.cc index d1ea676622..140966ca3a 100644 --- a/src/lib/yang/pretests/sysrepo_setup_tests.cc +++ b/src/lib/yang/pretests/sysrepo_setup_tests.cc @@ -6,6 +6,8 @@ #include +#include + #ifndef HAVE_PRE_0_7_6_SYSREPO #include #else @@ -18,31 +20,46 @@ using namespace std; #ifndef HAVE_PRE_0_7_6_SYSREPO using namespace sysrepo; #endif +using namespace isc::yang; -/// Not using libyang headers, e.g. yang_models.h. - -const string TEST_MODULE = "keatest-module"; -const string IETF_TYPES = "ietf-inet-types"; -const string YANG_TYPES = "ietf-yang-types"; -const string IETF_MODULE = "ietf-dhcpv6-server"; -const string KEA_DHCP4_MODULE = "kea-dhcp4-server"; -const string KEA_DHCP6_MODULE = "kea-dhcp6-server"; -const string KEA_CTRL_AGENT_MODULE = "kea-ctrl-agent"; -const string KEA_D2_MODULE = "kea-dhcp-ddns"; const string REPOSITORY = SYSREPO_REPO; /// @brief Returns nicely formed error message if module is missing /// /// @param name name of the YANG module to complain about +/// #param revision revision of the YANG module /// @return a text explaining what the problem is and how to fix it -string missingModuleText(const string& name) { +string missingModuleText(const string& name, const string& revision) { stringstream tmp; - tmp << "ERROR: YANG model " << name << " is not installed." << endl + tmp << "ERROR: YANG module " << name << " is not installed." << endl << "The environment is not suitable for running unit-tests." << endl - << "Please locate " << name << ".yang, change to its directory and " - << "issue the following command:" << endl << endl + << "Please locate " << name << "@" << revision << ".yang, " + << "change to its directory and issue the following command:" + << endl << endl << "# sysrepoctl -i -s " << REPOSITORY << "/yang " - << "-s . -g " << name << ".yang" << endl + << "-s . -g " << name << "@" << revision << ".yang" << endl + << endl << endl; + return (tmp.str()); +} + +/// @brief Returns nicely formed error message if module does not have +/// the expected revision. +/// +/// @param name name of the YANG module to complain about +/// @param expected expected revision of the YANG module +/// @param got got (bad) revision of the YANG module +string badRevisionModuleText(const string& name, const string& expected, + const string& got) { + stringstream tmp; + tmp << "ERROR: YANG module " << name << " is not installed with the right " + << "revision: expected " << expected << " but got " << got << endl + << "Please remove the module " << name << " and re-install it: " + << "Please locate " << name << "@" << expected << ".yang, " << endl + << "change to its directory and issue the following commands:" + << endl << endl + << "# sysrepoctl -u -m " << name << endl + << "# sysrepoctl -i -s " << REPOSITORY << "/yang " + << "-s . -g " << name << "@" << expected << ".yang" << endl << endl << endl; return (tmp.str()); } @@ -81,86 +98,44 @@ int main() { exit(-3); } - bool found_test = false; - bool found_ietf_types = false; - bool found_yang_types =false; - bool found_ietf = false; - bool found_kea4 = false; - bool found_kea6 = false; - bool found_keaca = false; - bool found_kea2 = false; + map found; + map got; + for (auto modrev : YANG_REVISIONS) { + found[modrev.first] = false; + } + for (size_t i = 0; i < schemas->schema_cnt(); ++i) { string module = schemas->schema(i)->module_name(); - size_t rev = module.find("@"); - if (rev != string::npos) { - module = module.substr(0, rev); - } - if (module == TEST_MODULE) { - found_test = true; - } else if (module == IETF_TYPES) { - found_ietf_types = true; - } else if (module == YANG_TYPES) { - found_yang_types = true; - } else if (module == IETF_MODULE) { - found_ietf = true; - } else if (module == KEA_DHCP4_MODULE) { - found_kea4 = true; - } else if (module == KEA_DHCP6_MODULE) { - found_kea6 = true; - } else if (module == KEA_CTRL_AGENT_MODULE) { - found_keaca = true; - } else if (module == KEA_D2_MODULE) { - found_kea2 = true; + if (YANG_REVISIONS.count(module)) { + found[module] = true; + if (!schemas->schema(i)->revision() || + !schemas->schema(i)->revision()->revision()) { + got[module] = "none"; + } else { + string rev = schemas->schema(i)->revision()->revision(); + got[module] = rev; + } } } int exit_code = 0; - if (!found_test || - !found_ietf_types || !found_yang_types || - !found_ietf || !found_kea4 || !found_kea6 || !found_keaca || - !found_kea2) { - exit_code = -4; - } - - if (!found_test) { - cerr << missingModuleText(TEST_MODULE); - --exit_code; - } - - if (!found_ietf_types) { - cerr << missingModuleText(IETF_TYPES); - --exit_code; - } - - if (!found_yang_types) { - cerr << missingModuleText(YANG_TYPES); - --exit_code; - } - - if (!found_ietf) { - cerr << missingModuleText(IETF_MODULE); - --exit_code; - } - - if (!found_kea4) { - cerr << missingModuleText(KEA_DHCP4_MODULE); - --exit_code; - } - - if (!found_kea6) { - cerr << missingModuleText(KEA_DHCP6_MODULE); - --exit_code; - } - - if (!found_keaca) { - cerr << missingModuleText(KEA_CTRL_AGENT_MODULE); - --exit_code; - } - - if (!found_kea2) { - cerr << missingModuleText(KEA_D2_MODULE); - --exit_code; + for (auto modfnd : found) { + string rev = YANG_REVISIONS.at(modfnd.first); + if (!modfnd.second) { + if (exit_code > -4) { + exit_code = -4; + } + --exit_code; + cerr << missingModuleText(modfnd.first, rev); + } else if (rev != got[modfnd.first]) { + if (exit_code > -40) { + exit_code += -40; + } else { + exit_code += -10; + } + cerr << badRevisionModuleText(modfnd.first, rev, got[modfnd.first]); + } } try { diff --git a/src/lib/yang/tests/Makefile.am b/src/lib/yang/tests/Makefile.am index 047478b2ce..60cf09a6a1 100644 --- a/src/lib/yang/tests/Makefile.am +++ b/src/lib/yang/tests/Makefile.am @@ -12,8 +12,6 @@ CLEANFILES = *.gcno *.gcda TESTS_ENVIRONMENT = \ $(LIBTOOL) --mode=execute $(VALGRIND_COMMAND) -EXTRA_DIST = keatest-module.yang - TESTS = if HAVE_GTEST TESTS += run_unittests diff --git a/src/lib/yang/yang_models.h b/src/lib/yang/yang_models.h index 42f0f0fac2..75944f805a 100644 --- a/src/lib/yang/yang_models.h +++ b/src/lib/yang/yang_models.h @@ -4,8 +4,8 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. -#ifndef ISC_YANG_MODELS -#define ISC_YANG_MODELS 1 +#ifndef ISC_YANG_MODELS_H +#define ISC_YANG_MODELS_H 1 #include @@ -29,9 +29,9 @@ static const std::string KEA_DHCP_DDNS = "kea-dhcp-ddns"; /// This model is currently in prototype phase. It will be developed /// by ISC in the near future. - static const std::string KEA_CTRL_AGENT = "kea-ctrl-agent"; +static const std::string KEA_CTRL_AGENT = "kea-ctrl-agent"; }; // end of namespace isc::yang }; // end of namespace isc -#endif // ISC_TRANSLATOR_POOL_H +#endif // ISC_YANG_MODELS_H diff --git a/src/lib/yang/yang_revisions.h b/src/lib/yang/yang_revisions.h new file mode 100644 index 0000000000..e0f50965e6 --- /dev/null +++ b/src/lib/yang/yang_revisions.h @@ -0,0 +1,36 @@ +// Copyright (C) 2018 Internet Systems Consortium, Inc. ("ISC") +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef ISC_YANG_REVISIONS_H +#define ISC_YANG_REVISIONS_H 1 + +#include +#include + +namespace isc { +namespace yang { + +// Table of module name / revision. +static const std::map YANG_REVISIONS = { +// Should be generated automatically. +// cf src/share/yang/modules/README +{ "ietf-dhcpv6-types", "2018-09-04" }, +{ "ietf-dhcpv6-options", "2018-09-04" }, +{ "ietf-dhcpv6-server", "2018-09-04" }, +{ "kea-types", "2018-11-20" }, +{ "kea-logging", "2018-11-20" }, +{ "kea-dhcp-types", "2018-11-20" }, +{ "kea-dhcp4-server", "2018-11-20" }, +{ "kea-dhcp6-server", "2018-11-20" }, +{ "kea-ctrl-agent", "2018-11-20" }, +{ "kea-dhcp-ddns", "2018-11-20" }, +{ "keatest-module", "2018-11-20" } +}; + +}; // end of namespace isc::yang +}; // end of namespace isc + +#endif // ISC_YANG_REVISIONS_H diff --git a/src/share/Makefile.am b/src/share/Makefile.am index 788b0b548d..16d6161337 100644 --- a/src/share/Makefile.am +++ b/src/share/Makefile.am @@ -1 +1 @@ -SUBDIRS = database +SUBDIRS = database yang diff --git a/src/share/yang/Makefile.am b/src/share/yang/Makefile.am new file mode 100644 index 0000000000..c8c0085ff3 --- /dev/null +++ b/src/share/yang/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = modules diff --git a/src/share/yang/modules/Makefile.am b/src/share/yang/modules/Makefile.am new file mode 100644 index 0000000000..576ecbf920 --- /dev/null +++ b/src/share/yang/modules/Makefile.am @@ -0,0 +1,20 @@ +SUBDIRS = . + +yangmodulesdir = ${datarootdir}/${PACKAGE_NAME}/yang/modules +yangmodules_DATA = ietf-dhcpv6-client@2018-09-04.yang +yangmodules_DATA += ietf-interfaces@2014-05-08.yang +yangmodules_DATA += ietf-dhcpv6-options@2018-09-04.yang +yangmodules_DATA += ietf-dhcpv6-relay@2018-09-04.yang +yangmodules_DATA += ietf-dhcpv6-server@2018-09-04.yang +yangmodules_DATA += ietf-dhcpv6-types@2018-09-04.yang +yangmodules_DATA += ietf-inet-types@2013-07-15.yang +yangmodules_DATA += ietf-yang-types@2013-07-15.yang +yangmodules_DATA += kea-ctrl-agent@2018-11-20.yang +yangmodules_DATA += kea-dhcp-ddns@2018-11-20.yang +yangmodules_DATA += kea-dhcp-types@2018-11-20.yang +yangmodules_DATA += kea-dhcp4-server@2018-11-20.yang +yangmodules_DATA += kea-dhcp6-server@2018-11-20.yang +yangmodules_DATA += kea-logging@2018-11-20.yang +yangmodules_DATA += kea-types@2018-11-20.yang + +EXTRA_DIST = ${yangmodules_DATA} diff --git a/src/share/yang/modules/README b/src/share/yang/modules/README new file mode 100644 index 0000000000..590034f97a --- /dev/null +++ b/src/share/yang/modules/README @@ -0,0 +1,74 @@ +Developer tools: + +Get revision from file content: + +yanglint -f yin xxx | grep ' + WG List: + + WG Chair: Thomas Nadeau + + + WG Chair: Juergen Schoenwaelder + + + Editor: Martin Bjorklund + "; + + description + "This module contains a collection of YANG definitions for + managing network interfaces. + + Copyright (c) 2014 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 7223; see + the RFC itself for full legal notices."; + + revision "2014-05-08" { + description "Initial revision."; + reference + "RFC 7223: A YANG Data Model for Interface Management"; + + } + + + typedef interface-ref { + type leafref { + path "/if:interfaces/if:interface/if:name"; + } + description + "This type is used by data models that need to reference + configured interfaces."; + } + + typedef interface-state-ref { + type leafref { + path "/if:interfaces-state/if:interface/if:name"; + } + description + "This type is used by data models that need to reference + the operationally present interfaces."; + } + + identity interface-type { + description + "Base identity from which specific interface types are + derived."; + } + + feature arbitrary-names { + description + "This feature indicates that the device allows user-controlled + interfaces to be named arbitrarily."; + } + + feature pre-provisioning { + description + "This feature indicates that the device supports + pre-provisioning of interface configuration, i.e., it is + possible to configure an interface whose physical interface + hardware is not present on the device."; + } + + feature if-mib { + description + "This feature indicates that the device implements + the IF-MIB."; + reference + "RFC 2863: The Interfaces Group MIB"; + + } + + container interfaces { + description + "Interface configuration parameters."; + list interface { + key "name"; + description + "The list of configured interfaces on the device. + + The operational state of an interface is available in the + /interfaces-state/interface list. If the configuration of a + system-controlled interface cannot be used by the system + (e.g., the interface hardware present does not match the + interface type), then the configuration is not applied to + the system-controlled interface shown in the + /interfaces-state/interface list. If the configuration + of a user-controlled interface cannot be used by the system, + the configured interface is not instantiated in the + /interfaces-state/interface list."; + leaf name { + type string; + description + "The name of the interface. + + A device MAY restrict the allowed values for this leaf, + possibly depending on the type of the interface. + For system-controlled interfaces, this leaf is the + device-specific name of the interface. The 'config false' + list /interfaces-state/interface contains the currently + existing interfaces on the device. + + If a client tries to create configuration for a + system-controlled interface that is not present in the + /interfaces-state/interface list, the server MAY reject + the request if the implementation does not support + pre-provisioning of interfaces or if the name refers to + an interface that can never exist in the system. A + NETCONF server MUST reply with an rpc-error with the + error-tag 'invalid-value' in this case. + + If the device supports pre-provisioning of interface + configuration, the 'pre-provisioning' feature is + advertised. + + If the device allows arbitrarily named user-controlled + interfaces, the 'arbitrary-names' feature is advertised. + + When a configured user-controlled interface is created by + the system, it is instantiated with the same name in the + /interface-state/interface list."; + } + + leaf description { + type string; + description + "A textual description of the interface. + + A server implementation MAY map this leaf to the ifAlias + MIB object. Such an implementation needs to use some + mechanism to handle the differences in size and characters + allowed between this leaf and ifAlias. The definition of + such a mechanism is outside the scope of this document. + + Since ifAlias is defined to be stored in non-volatile + storage, the MIB implementation MUST map ifAlias to the + value of 'description' in the persistently stored + datastore. + + Specifically, if the device supports ':startup', when + ifAlias is read the device MUST return the value of + 'description' in the 'startup' datastore, and when it is + written, it MUST be written to the 'running' and 'startup' + datastores. Note that it is up to the implementation to + + decide whether to modify this single leaf in 'startup' or + perform an implicit copy-config from 'running' to + 'startup'. + + If the device does not support ':startup', ifAlias MUST + be mapped to the 'description' leaf in the 'running' + datastore."; + reference + "RFC 2863: The Interfaces Group MIB - ifAlias"; + + } + + leaf type { + type identityref { + base interface-type; + } + mandatory true; + description + "The type of the interface. + + When an interface entry is created, a server MAY + initialize the type leaf with a valid value, e.g., if it + is possible to derive the type from the name of the + interface. + + If a client tries to set the type of an interface to a + value that can never be used by the system, e.g., if the + type is not supported or if the type does not match the + name of the interface, the server MUST reject the request. + A NETCONF server MUST reply with an rpc-error with the + error-tag 'invalid-value' in this case."; + reference + "RFC 2863: The Interfaces Group MIB - ifType"; + + } + + leaf enabled { + type boolean; + default "true"; + description + "This leaf contains the configured, desired state of the + interface. + + Systems that implement the IF-MIB use the value of this + leaf in the 'running' datastore to set + IF-MIB.ifAdminStatus to 'up' or 'down' after an ifEntry + has been initialized, as described in RFC 2863. + + + + Changes in this leaf in the 'running' datastore are + reflected in ifAdminStatus, but if ifAdminStatus is + changed over SNMP, this leaf is not affected."; + reference + "RFC 2863: The Interfaces Group MIB - ifAdminStatus"; + + } + + leaf link-up-down-trap-enable { + if-feature if-mib; + type enumeration { + enum "enabled" { + value 1; + } + enum "disabled" { + value 2; + } + } + description + "Controls whether linkUp/linkDown SNMP notifications + should be generated for this interface. + + If this node is not configured, the value 'enabled' is + operationally used by the server for interfaces that do + not operate on top of any other interface (i.e., there are + no 'lower-layer-if' entries), and 'disabled' otherwise."; + reference + "RFC 2863: The Interfaces Group MIB - + ifLinkUpDownTrapEnable"; + + } + } // list interface + } // container interfaces + + container interfaces-state { + config false; + description + "Data nodes for the operational state of interfaces."; + list interface { + key "name"; + description + "The list of interfaces on the device. + + System-controlled interfaces created by the system are + always present in this list, whether they are configured or + not."; + leaf name { + type string; + description + "The name of the interface. + + A server implementation MAY map this leaf to the ifName + MIB object. Such an implementation needs to use some + mechanism to handle the differences in size and characters + allowed between this leaf and ifName. The definition of + such a mechanism is outside the scope of this document."; + reference + "RFC 2863: The Interfaces Group MIB - ifName"; + + } + + leaf type { + type identityref { + base interface-type; + } + mandatory true; + description + "The type of the interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifType"; + + } + + leaf admin-status { + if-feature if-mib; + type enumeration { + enum "up" { + value 1; + description + "Ready to pass packets."; + } + enum "down" { + value 2; + description + "Not ready to pass packets and not in some test mode."; + } + enum "testing" { + value 3; + description + "In some test mode."; + } + } + mandatory true; + description + "The desired state of the interface. + + This leaf has the same read semantics as ifAdminStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifAdminStatus"; + + } + + leaf oper-status { + type enumeration { + enum "up" { + value 1; + description + "Ready to pass packets."; + } + enum "down" { + value 2; + description + "The interface does not pass any packets."; + } + enum "testing" { + value 3; + description + "In some test mode. No operational packets can + be passed."; + } + enum "unknown" { + value 4; + description + "Status cannot be determined for some reason."; + } + enum "dormant" { + value 5; + description + "Waiting for some external event."; + } + enum "not-present" { + value 6; + description + "Some component (typically hardware) is missing."; + } + enum "lower-layer-down" { + value 7; + description + "Down due to state of lower-layer interface(s)."; + } + } + mandatory true; + description + "The current operational state of the interface. + + This leaf has the same semantics as ifOperStatus."; + reference + "RFC 2863: The Interfaces Group MIB - ifOperStatus"; + + } + + leaf last-change { + type yang:date-and-time; + description + "The time the interface entered its current operational + state. If the current state was entered prior to the + last re-initialization of the local network management + subsystem, then this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifLastChange"; + + } + + leaf if-index { + if-feature if-mib; + type int32 { + range "1..2147483647"; + } + mandatory true; + description + "The ifIndex value for the ifEntry represented by this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifIndex"; + + } + + leaf phys-address { + type yang:phys-address; + description + "The interface's address at its protocol sub-layer. For + example, for an 802.x interface, this object normally + contains a Media Access Control (MAC) address. The + interface's media-specific modules must define the bit + + + and byte ordering and the format of the value of this + object. For interfaces that do not have such an address + (e.g., a serial line), this node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - ifPhysAddress"; + + } + + leaf-list higher-layer-if { + type interface-state-ref; + description + "A list of references to interfaces layered on top of this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + + } + + leaf-list lower-layer-if { + type interface-state-ref; + description + "A list of references to interfaces layered underneath this + interface."; + reference + "RFC 2863: The Interfaces Group MIB - ifStackTable"; + + } + + leaf speed { + type yang:gauge64; + units "bits/second"; + description + "An estimate of the interface's current bandwidth in bits + per second. For interfaces that do not vary in + bandwidth or for those where no accurate estimation can + be made, this node should contain the nominal bandwidth. + For interfaces that have no concept of bandwidth, this + node is not present."; + reference + "RFC 2863: The Interfaces Group MIB - + ifSpeed, ifHighSpeed"; + + } + + container statistics { + description + "A collection of interface-related statistics objects."; + leaf discontinuity-time { + type yang:date-and-time; + mandatory true; + description + "The time on the most recent occasion at which any one or + more of this interface's counters suffered a + discontinuity. If no such discontinuities have occurred + since the last re-initialization of the local management + subsystem, then this node contains the time the local + management subsystem re-initialized itself."; + } + + leaf in-octets { + type yang:counter64; + description + "The total number of octets received on the interface, + including framing characters. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInOctets"; + + } + + leaf in-unicast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were not addressed to a + multicast or broadcast address at this sub-layer. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCInUcastPkts"; + + } + + leaf in-broadcast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a broadcast + address at this sub-layer. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInBroadcastPkts"; + + } + + leaf in-multicast-pkts { + type yang:counter64; + description + "The number of packets, delivered by this sub-layer to a + higher (sub-)layer, that were addressed to a multicast + address at this sub-layer. For a MAC-layer protocol, + this includes both Group and Functional addresses. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCInMulticastPkts"; + + } + + leaf in-discards { + type yang:counter32; + description + "The number of inbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being deliverable to a higher-layer + protocol. One possible reason for discarding such a + packet could be to free up buffer space. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInDiscards"; + + } + + leaf in-errors { + type yang:counter32; + description + "For packet-oriented interfaces, the number of inbound + packets that contained errors preventing them from being + deliverable to a higher-layer protocol. For character- + oriented or fixed-length interfaces, the number of + inbound transmission units that contained errors + preventing them from being deliverable to a higher-layer + protocol. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInErrors"; + + } + + leaf in-unknown-protos { + type yang:counter32; + description + "For packet-oriented interfaces, the number of packets + received via the interface that were discarded because + of an unknown or unsupported protocol. For + character-oriented or fixed-length interfaces that + support protocol multiplexing, the number of + transmission units received via the interface that were + discarded because of an unknown or unsupported protocol. + For any interface that does not support protocol + multiplexing, this counter is not present. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifInUnknownProtos"; + + } + + leaf out-octets { + type yang:counter64; + description + "The total number of octets transmitted out of the + interface, including framing characters. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutOctets"; + + } + + leaf out-unicast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were not addressed + to a multicast or broadcast address at this sub-layer, + including those that were discarded or not sent. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifHCOutUcastPkts"; + + } + + leaf out-broadcast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were addressed to a + broadcast address at this sub-layer, including those + that were discarded or not sent. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutBroadcastPkts"; + + } + + leaf out-multicast-pkts { + type yang:counter64; + description + "The total number of packets that higher-level protocols + requested be transmitted, and that were addressed to a + multicast address at this sub-layer, including those + that were discarded or not sent. For a MAC-layer + protocol, this includes both Group and Functional + addresses. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - + ifHCOutMulticastPkts"; + + } + + leaf out-discards { + type yang:counter32; + description + "The number of outbound packets that were chosen to be + discarded even though no errors had been detected to + prevent their being transmitted. One possible reason + for discarding such a packet could be to free up buffer + space. + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutDiscards"; + + } + + leaf out-errors { + type yang:counter32; + description + "For packet-oriented interfaces, the number of outbound + packets that could not be transmitted because of errors. + For character-oriented or fixed-length interfaces, the + number of outbound transmission units that could not be + transmitted because of errors. + + + + + Discontinuities in the value of this counter can occur + at re-initialization of the management system, and at + other times as indicated by the value of + 'discontinuity-time'."; + reference + "RFC 2863: The Interfaces Group MIB - ifOutErrors"; + + } + } // container statistics + } // list interface + } // container interfaces-state + } // module ietf-interfaces diff --git a/src/lib/yang/models/ietf-yang-types.yang b/src/share/yang/modules/ietf-yang-types@2013-07-15.yang similarity index 100% rename from src/lib/yang/models/ietf-yang-types.yang rename to src/share/yang/modules/ietf-yang-types@2013-07-15.yang diff --git a/src/lib/yang/models/kea-ctrl-agent.yang b/src/share/yang/modules/kea-ctrl-agent@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-ctrl-agent.yang rename to src/share/yang/modules/kea-ctrl-agent@2018-11-20.yang diff --git a/src/lib/yang/models/kea-dhcp-ddns.yang b/src/share/yang/modules/kea-dhcp-ddns@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-dhcp-ddns.yang rename to src/share/yang/modules/kea-dhcp-ddns@2018-11-20.yang diff --git a/src/lib/yang/models/kea-dhcp-types.yang b/src/share/yang/modules/kea-dhcp-types@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-dhcp-types.yang rename to src/share/yang/modules/kea-dhcp-types@2018-11-20.yang diff --git a/src/lib/yang/models/kea-dhcp4-server.yang b/src/share/yang/modules/kea-dhcp4-server@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-dhcp4-server.yang rename to src/share/yang/modules/kea-dhcp4-server@2018-11-20.yang diff --git a/src/lib/yang/models/kea-dhcp6-server.yang b/src/share/yang/modules/kea-dhcp6-server@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-dhcp6-server.yang rename to src/share/yang/modules/kea-dhcp6-server@2018-11-20.yang diff --git a/src/lib/yang/models/kea-logging.yang b/src/share/yang/modules/kea-logging@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-logging.yang rename to src/share/yang/modules/kea-logging@2018-11-20.yang diff --git a/src/lib/yang/models/kea-types.yang b/src/share/yang/modules/kea-types@2018-11-20.yang similarity index 100% rename from src/lib/yang/models/kea-types.yang rename to src/share/yang/modules/kea-types@2018-11-20.yang diff --git a/src/lib/yang/tests/keatest-module.yang b/src/share/yang/modules/keatest-module@2018-11-20.yang similarity index 97% rename from src/lib/yang/tests/keatest-module.yang rename to src/share/yang/modules/keatest-module@2018-11-20.yang index d96e7d9cda..06a0dd6cee 100644 --- a/src/lib/yang/tests/keatest-module.yang +++ b/src/share/yang/modules/keatest-module@2018-11-20.yang @@ -10,6 +10,11 @@ module keatest-module { contact "kea-dev@lists.isc.org"; + revision 2018-11-20 { + description "Initial revision"; + reference ""; + } + container container { config true; list list {