forked from sonic-net/sonic-buildimage
-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RFC7895 yang module library implementation (#15)
Added new yang ietf-yang-library.yang, which defines data models for RFC7895 yang library discovery feature. New app module yanglib_app.go to handle ietf-yang-library.yang APIs. REST and gNMI requests for '/ietf-yang-library:modules-state' and its child paths will be serviced by this app module. Parses all NB yangs using goyang parser and builds the module info data tree as per ietf-yang-library.yang. Yangs are parsed upon first request and cached thereafter. Uses translib.GetModel() API to identify the yang modules that are implemented by apps. Other modules are marked as 'import' in yang library response data. Transformer annotation files (*_annot.yang) are ignored -- they do not define any data model. Uses hardcoded module-set-id value for now. Should be changed to use "yang bundle version" number when yang versioning feature is in. Yang schema URL is included in the response only if main program set the root URL through translib.SetSchemaRootURL() API. Schema URL is prepared by appending the yang file name to the root URL.
- Loading branch information
1 parent
cc01ce4
commit 1d730df
Showing
7 changed files
with
1,000 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
module ietf-yang-library { | ||
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library"; | ||
prefix "yanglib"; | ||
|
||
import ietf-yang-types { | ||
prefix yang; | ||
} | ||
import ietf-inet-types { | ||
prefix inet; | ||
} | ||
|
||
organization | ||
"IETF NETCONF (Network Configuration) Working Group"; | ||
|
||
contact | ||
"WG Web: <https://datatracker.ietf.org/wg/netconf/> | ||
WG List: <mailto:netconf@ietf.org> | ||
WG Chair: Mehmet Ersue | ||
<mailto:mehmet.ersue@nsn.com> | ||
WG Chair: Mahesh Jethanandani | ||
<mailto:mjethanandani@gmail.com> | ||
Editor: Andy Bierman | ||
<mailto:andy@yumaworks.com> | ||
Editor: Martin Bjorklund | ||
<mailto:mbj@tail-f.com> | ||
Editor: Kent Watsen | ||
<mailto:kwatsen@juniper.net>"; | ||
|
||
description | ||
"This module contains monitoring information about the YANG | ||
modules and submodules that are used within a YANG-based | ||
server. | ||
Copyright (c) 2016 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 7895; see | ||
the RFC itself for full legal notices."; | ||
|
||
revision 2016-06-21 { | ||
description | ||
"Initial revision."; | ||
reference | ||
"RFC 7895: YANG Module Library."; | ||
} | ||
|
||
/* | ||
* Typedefs | ||
*/ | ||
|
||
typedef revision-identifier { | ||
type string { | ||
pattern '\d{4}-\d{2}-\d{2}'; | ||
} | ||
description | ||
"Represents a specific date in YYYY-MM-DD format."; | ||
} | ||
|
||
/* | ||
* Groupings | ||
*/ | ||
|
||
grouping module-list { | ||
description | ||
"The module data structure is represented as a grouping | ||
so it can be reused in configuration or another monitoring | ||
data structure."; | ||
|
||
grouping common-leafs { | ||
description | ||
"Common parameters for YANG modules and submodules."; | ||
|
||
leaf name { | ||
type yang:yang-identifier; | ||
description | ||
"The YANG module or submodule name."; | ||
} | ||
leaf revision { | ||
type union { | ||
type revision-identifier; | ||
type string { length 0; } | ||
} | ||
description | ||
"The YANG module or submodule revision date. | ||
A zero-length string is used if no revision statement | ||
is present in the YANG module or submodule."; | ||
} | ||
} | ||
|
||
grouping schema-leaf { | ||
description | ||
"Common schema leaf parameter for modules and submodules."; | ||
|
||
leaf schema { | ||
type inet:uri; | ||
description | ||
"Contains a URL that represents the YANG schema | ||
resource for this module or submodule. | ||
This leaf will only be present if there is a URL | ||
available for retrieval of the schema for this entry."; | ||
} | ||
} | ||
|
||
list module { | ||
key "name revision"; | ||
description | ||
"Each entry represents one revision of one module | ||
currently supported by the server."; | ||
|
||
uses common-leafs; | ||
uses schema-leaf; | ||
|
||
leaf namespace { | ||
type inet:uri; | ||
mandatory true; | ||
description | ||
"The XML namespace identifier for this module."; | ||
} | ||
leaf-list feature { | ||
type yang:yang-identifier; | ||
description | ||
"List of YANG feature names from this module that are | ||
supported by the server, regardless of whether they are | ||
defined in the module or any included submodule."; | ||
} | ||
list deviation { | ||
key "name revision"; | ||
description | ||
"List of YANG deviation module names and revisions | ||
used by this server to modify the conformance of | ||
the module associated with this entry. Note that | ||
the same module can be used for deviations for | ||
multiple modules, so the same entry MAY appear | ||
within multiple 'module' entries. | ||
The deviation module MUST be present in the 'module' | ||
list, with the same name and revision values. | ||
The 'conformance-type' value will be 'implement' for | ||
the deviation module."; | ||
uses common-leafs; | ||
} | ||
leaf conformance-type { | ||
type enumeration { | ||
enum implement { | ||
description | ||
"Indicates that the server implements one or more | ||
protocol-accessible objects defined in the YANG module | ||
identified in this entry. This includes deviation | ||
statements defined in the module. | ||
For YANG version 1.1 modules, there is at most one | ||
module entry with conformance type 'implement' for a | ||
particular module name, since YANG 1.1 requires that, | ||
at most, one revision of a module is implemented. | ||
For YANG version 1 modules, there SHOULD NOT be more | ||
than one module entry for a particular module name."; | ||
} | ||
enum import { | ||
description | ||
"Indicates that the server imports reusable definitions | ||
from the specified revision of the module but does | ||
not implement any protocol-accessible objects from | ||
this revision. | ||
Multiple module entries for the same module name MAY | ||
exist. This can occur if multiple modules import the | ||
same module but specify different revision dates in | ||
the import statements."; | ||
} | ||
} | ||
mandatory true; | ||
description | ||
"Indicates the type of conformance the server is claiming | ||
for the YANG module identified by this entry."; | ||
} | ||
list submodule { | ||
key "name revision"; | ||
description | ||
"Each entry represents one submodule within the | ||
parent module."; | ||
uses common-leafs; | ||
uses schema-leaf; | ||
} | ||
} | ||
} | ||
|
||
/* | ||
* Operational state data nodes | ||
*/ | ||
|
||
container modules-state { | ||
config false; | ||
description | ||
"Contains YANG module monitoring information."; | ||
|
||
leaf module-set-id { | ||
type string; | ||
mandatory true; | ||
description | ||
"Contains a server-specific identifier representing | ||
the current set of modules and submodules. The | ||
server MUST change the value of this leaf if the | ||
information represented by the 'module' list instances | ||
has changed."; | ||
} | ||
|
||
uses module-list; | ||
} | ||
|
||
/* | ||
* Notifications | ||
*/ | ||
|
||
notification yang-library-change { | ||
description | ||
"Generated when the set of modules and submodules supported | ||
by the server has changed."; | ||
leaf module-set-id { | ||
type leafref { | ||
path "/yanglib:modules-state/yanglib:module-set-id"; | ||
} | ||
mandatory true; | ||
description | ||
"Contains the module-set-id value representing the | ||
set of modules and submodules supported at the server at | ||
the time the notification is generated."; | ||
} | ||
} | ||
|
||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.