* NACM module support (RFC8341 A1+A2)
* Recovery user "_nacm_recovery" added.
* Example use is restconf PUT when NACM edit-config is permitted, then automatic commit and discard are permitted using recovery user.
* Example user changed adm1 to andy to comply with RFC8341 example
* Yang code upgrade (RFC7950)
* RPC method input parameters validated
* see https://github.com/clicon/clixon/issues/4
* Correct XML namespace handling
* XML multiple modules was based on "loose" semantics so that yang modules were found by iterating thorugh namespaces until a match was made. This did not adhere to proper [XML namespace handling](https://www.w3.org/TR/2009/REC-xml-names-20091208), and causes problems with overlapping names and false positives. Below see XML accepted (but wrong), and correct namespace declaration:
```
<rpc><my-own-method></rpc> # Wrong but accepted
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"> # Correct
<my-own-method xmlns="http://example.net/me/my-own/1.0">
</rpc>
```
* To keep old loose semantics set config option CLICON_XML_NS_ITERATE (true by default)
* XML to JSON translator support for mapping xmlns attribute to module name prefix.
* Default namespace is still "urn:ietf:params:xml:ns:netconf:base:1.0"
* See https://github.com/clicon/clixon/issues/49
* Changed all make tags --> make TAGS
* Keyvalue datastore removed (it has been disabled since 3.3.3)
* debug rpc added in example application (should be in clixon-config).
85 lines
2.1 KiB
YANG
85 lines
2.1 KiB
YANG
module example {
|
|
yang-version 1.1;
|
|
namespace "urn:example:clixon";
|
|
prefix ex;
|
|
import ietf-interfaces {
|
|
prefix if;
|
|
}
|
|
import ietf-ip {
|
|
prefix ip;
|
|
}
|
|
import ietf-routing {
|
|
description "defines fib-route";
|
|
prefix rt;
|
|
}
|
|
import iana-if-type {
|
|
prefix ianaift;
|
|
}
|
|
description
|
|
"Example code that includes ietf-ip and ietf-routing";
|
|
/* Example interface type for tests, local callbacks, etc */
|
|
identity eth {
|
|
base if:interface-type;
|
|
}
|
|
identity loopback {
|
|
base if:interface-type;
|
|
}
|
|
/* Translation function example - See also example_cli */
|
|
list translate{
|
|
leaf value{
|
|
type string;
|
|
}
|
|
}
|
|
/* State data (not config) for the example application*/
|
|
container state {
|
|
config false;
|
|
description "state data for the example application (must be here for example get operation)";
|
|
leaf-list op {
|
|
type string;
|
|
}
|
|
}
|
|
/* Example notification as used in RFC 5277 and RFC 8040 */
|
|
notification event {
|
|
description "Example notification event.";
|
|
leaf event-class {
|
|
type string;
|
|
description "Event class identifier.";
|
|
}
|
|
container reportingEntity {
|
|
description "Event specific information.";
|
|
leaf card {
|
|
type string;
|
|
description "Line card identifier.";
|
|
}
|
|
}
|
|
leaf severity {
|
|
type string;
|
|
description "Event severity description.";
|
|
}
|
|
}
|
|
rpc client-rpc {
|
|
description "Example local client-side RPC that is processed by the
|
|
the netconf/restconf and not sent to the backend.
|
|
This is a clixon implementation detail: some rpc:s
|
|
are better processed by the client for API or perf reasons";
|
|
input {
|
|
leaf request {
|
|
type string;
|
|
}
|
|
}
|
|
output {
|
|
leaf result{
|
|
type string;
|
|
}
|
|
}
|
|
}
|
|
rpc debug {
|
|
description "Set debug level of backend. XXX should be in clixon-config";
|
|
input {
|
|
leaf level {
|
|
type uint32;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|