Update yang/mandatory files for rfc8527 compliance
Updated the yang/mandatory files and test scripts for rfc8527.
This commit is contained in:
parent
e6899cc3f5
commit
a1f54d71ac
14 changed files with 1274 additions and 716 deletions
|
|
@ -56,7 +56,7 @@ As restconf using curl on exposed port 80:
|
||||||
"ietf-restconf:restconf": {
|
"ietf-restconf:restconf": {
|
||||||
"data": {},
|
"data": {},
|
||||||
"operations": {},
|
"operations": {},
|
||||||
"yang-library-version": "2016-06-21"
|
"yang-library-version": "2019-01-04"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,9 @@ module clixon-example {
|
||||||
import iana-if-type {
|
import iana-if-type {
|
||||||
prefix ianaift;
|
prefix ianaift;
|
||||||
}
|
}
|
||||||
|
import ietf-datastores {
|
||||||
|
prefix ds;
|
||||||
|
}
|
||||||
|
|
||||||
/* Example interface type for tests, local callbacks, etc */
|
/* Example interface type for tests, local callbacks, etc */
|
||||||
identity eth {
|
identity eth {
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ fi
|
||||||
fi # false
|
fi # false
|
||||||
|
|
||||||
new "netconf module ietf-inet-types"
|
new "netconf module ietf-inet-types"
|
||||||
expect="<module><name>ietf-inet-types</name><revision>2013-07-15</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace><conformance-type>implement</conformance-type></module>"
|
expect="<module><name>ietf-inet-types</name><revision>2020-07-06</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace><conformance-type>implement</conformance-type></module>"
|
||||||
match=`echo "$ret" | grep --null -Go "$expect"`
|
match=`echo "$ret" | grep --null -Go "$expect"`
|
||||||
if [ -z "$match" ]; then
|
if [ -z "$match" ]; then
|
||||||
err "$expect" "$ret"
|
err "$expect" "$ret"
|
||||||
|
|
@ -248,7 +248,7 @@ match=`echo "$ret" | grep --null -Go "$expect"`
|
||||||
if [ -z "$match" ]; then
|
if [ -z "$match" ]; then
|
||||||
err "$expect" "$ret"
|
err "$expect" "$ret"
|
||||||
fi
|
fi
|
||||||
expect="<module><name>ietf-yang-library</name><revision>2016-06-21</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace><conformance-type>implement</conformance-type></module>"
|
expect="<module><name>ietf-yang-library</name><revision>2019-01-04</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace><conformance-type>implement</conformance-type></module>"
|
||||||
match=`echo "$ret" | grep --null -Go "$expect"`
|
match=`echo "$ret" | grep --null -Go "$expect"`
|
||||||
if [ -z "$match" ]; then
|
if [ -z "$match" ]; then
|
||||||
err "$expect" "$ret"
|
err "$expect" "$ret"
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ new "Netconf snd hello with prefix"
|
||||||
expecteof "$clixon_netconf -qf $cfg" 0 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><nc:hello xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><nc:capabilities><nc:capability>urn:ietf:params:netconf:base:1.0</nc:capability></nc:capabilities></nc:hello>]]>]]>" '^$'
|
expecteof "$clixon_netconf -qf $cfg" 0 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><nc:hello xmlns:nc=\"urn:ietf:params:xml:ns:netconf:base:1.0\"><nc:capabilities><nc:capability>urn:ietf:params:netconf:base:1.0</nc:capability></nc:capabilities></nc:hello>]]>]]>" '^$'
|
||||||
|
|
||||||
new "netconf snd + rcv hello"
|
new "netconf snd + rcv hello"
|
||||||
expecteof "$clixon_netconf -f $cfg" 0 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability></capabilities></hello>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2016-06-21&module-set-id=42</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]>$"
|
expecteof "$clixon_netconf -f $cfg" 0 "<?xml version=\"1.0\" encoding=\"UTF-8\"?><hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability></capabilities></hello>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:yang-library:1.0?revision=2019-01-04&module-set-id=42</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]>$"
|
||||||
|
|
||||||
new "netconf rcv hello, disable RFC7895/ietf-yang-library"
|
new "netconf rcv hello, disable RFC7895/ietf-yang-library"
|
||||||
expecteof "$clixon_netconf -f $cfg -o CLICON_MODULE_LIBRARY_RFC7895=0" 0 "<rpc $DEFAULTNS message-id=\"101\"><get-config><source><candidate/></source></get-config></rpc>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]><rpc-reply $DEFAULTNS message-id=\"101\"><data/></rpc-reply>]]>]]>$"
|
expecteof "$clixon_netconf -f $cfg -o CLICON_MODULE_LIBRARY_RFC7895=0" 0 "<rpc $DEFAULTNS message-id=\"101\"><get-config><source><candidate/></source></get-config></rpc>]]>]]>" "^<hello $DEFAULTNS><capabilities><capability>urn:ietf:params:netconf:base:1.0</capability><capability>urn:ietf:params:netconf:capability:candidate:1.0</capability><capability>urn:ietf:params:netconf:capability:validate:1.1</capability><capability>urn:ietf:params:netconf:capability:startup:1.0</capability><capability>urn:ietf:params:netconf:capability:xpath:1.0</capability><capability>urn:ietf:params:netconf:capability:notification:1.0</capability></capabilities><session-id>[0-9]*</session-id></hello>]]>]]><rpc-reply $DEFAULTNS message-id=\"101\"><data/></rpc-reply>]]>]]>$"
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,9 @@ expecteof "time -p $clixon_netconf -qf $cfg" 0 "<rpc $DEFAULTNS><commit/></rpc>]
|
||||||
new "netconf get test single req"
|
new "netconf get test single req"
|
||||||
sel="/ex:interfaces/ex:a[ex:name='foo']/ex:b/ex:interface[ex:name='e1']"
|
sel="/ex:interfaces/ex:a[ex:name='foo']/ex:b/ex:interface[ex:name='e1']"
|
||||||
msg="<rpc $DEFAULTNS><get><filter type=\"xpath\" select=\"$sel\" xmlns:ex=\"urn:example:clixon\"/></get></rpc>]]>]]>"
|
msg="<rpc $DEFAULTNS><get><filter type=\"xpath\" select=\"$sel\" xmlns:ex=\"urn:example:clixon\"/></get></rpc>]]>]]>"
|
||||||
expecteof "$clixon_netconf -qf $cfg" 0 "$msg" "^<rpc-reply $DEFAULTNS><data><interfaces xmlns=\"urn:example:clixon\"><a><name>foo</name><b><interface><name>e1</name><type>ex:eth</type><enabled>true</enabled><status>up</status></interface></b></a></interfaces></data></rpc-reply>]]>]]>$"
|
expecteof "$clixon_netconf -qf $cfg" 0 "$msg" "<rpc-reply $DEFAULTNS><data><interfaces xmlns=\"urn:example:clixon\"><a><name>foo</name><b><interface><name>e1</name><enabled>true</enabled><status>up</status></interface></b></a></interfaces></data></rpc-reply>]]>]]>"
|
||||||
|
|
||||||
|
# '^<rpc-reply $DEFAULTNS><data><interfaces xmlns=\"urn:example:clixon\"><a><name>foo</name><b><interface><name>e1</name><type>ex:eth</type><enabled>true</enabled><status>up</status></interface></b></a></interfaces></data></rpc-reply>]]>]]>$"
|
||||||
|
|
||||||
new "netconf get $perfreq single reqs"
|
new "netconf get $perfreq single reqs"
|
||||||
{ time -p for (( i=0; i<$perfreq; i++ )); do
|
{ time -p for (( i=0; i<$perfreq; i++ )); do
|
||||||
|
|
@ -150,7 +152,7 @@ done | $clixon_netconf -qf $cfg > /dev/null; } 2>&1 | awk '/real/ {print $2}'
|
||||||
|
|
||||||
# RESTCONF get
|
# RESTCONF get
|
||||||
new "restconf get test single req"
|
new "restconf get test single req"
|
||||||
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/example:interfaces/a=foo/b/interface=e1)" 0 "HTTP/1.1 200 OK" '{"example:interface":\[{"name":"e1","type":"ex:eth","enabled":true,"status":"up"}\]}'
|
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/example:interfaces/a=foo/b/interface=e1)" 0 "HTTP/1.1 200 OK" '{"example:interface":\[{"name":"e1","enabled":true,"status":"up"}\]}'
|
||||||
|
|
||||||
new "restconf get $perfreq single reqs"
|
new "restconf get $perfreq single reqs"
|
||||||
#curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/ietf-interfaces:interfaces/interface=e67
|
#curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/data/ietf-interfaces:interfaces/interface=e67
|
||||||
|
|
@ -166,7 +168,8 @@ edit interfaces a foo b interface e1
|
||||||
show state xml
|
show state xml
|
||||||
EOF
|
EOF
|
||||||
new "cli get test single req"
|
new "cli get test single req"
|
||||||
expectpart "$($clixon_cli -F $fin -f $cfg)" 0 "<name>e1</name>" "<type>ex:eth</type>" "<enabled>true</enabled>" "<status>up</status>$"
|
expectpart "$($clixon_cli -F $fin -f $cfg)" 0 "<name>e1</name>" "<enabled>true</enabled>" "<status>up</status>$"
|
||||||
|
#expectpart "$($clixon_cli -F $fin -f $cfg)" 0 "<name>e1</name>" "<type>ex:eth</type>" "<enabled>true</enabled>" "<status>up</status>$"
|
||||||
|
|
||||||
new "cli get $perfreq single reqs"
|
new "cli get $perfreq single reqs"
|
||||||
{ time -p for (( i=0; i<$perfreq; i++ )); do
|
{ time -p for (( i=0; i<$perfreq; i++ )); do
|
||||||
|
|
|
||||||
|
|
@ -66,11 +66,11 @@ new "restconf root discovery. RFC 8040 3.1 (xml+xrd)"
|
||||||
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/.well-known/host-meta)" 0 'HTTP/1.1 200 OK' "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/.well-known/host-meta)" 0 'HTTP/1.1 200 OK' "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||||
|
|
||||||
new "restconf get restconf resource. RFC 8040 3.3 (json)"
|
new "restconf get restconf resource. RFC 8040 3.3 (json)"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H "Accept: application/yang-data+json" $RCPROTO://localhost/restconf)" 0 'HTTP/1.1 200 OK' '{"ietf-restconf:restconf":{"data":{},"operations":{},"yang-library-version":"2016-06-21"}}'
|
expectpart "$(curl $CURLOPTS -X GET -H "Accept: application/yang-data+json" $RCPROTO://localhost/restconf)" 0 'HTTP/1.1 200 OK' '{"ietf-restconf:restconf":{"data":{},"operations":{},"yang-library-version":"2019-01-04"}}'
|
||||||
|
|
||||||
new "restconf get restconf resource. RFC 8040 3.3 (xml)"
|
new "restconf get restconf resource. RFC 8040 3.3 (xml)"
|
||||||
# Get XML instead of JSON?
|
# Get XML instead of JSON?
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf)" 0 'HTTP/1.1 200 OK' '<restconf xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"><data/><operations/><yang-library-version>2016-06-21</yang-library-version></restconf>'
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf)" 0 'HTTP/1.1 200 OK' '<restconf xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"><data/><operations/><yang-library-version>2019-01-04</yang-library-version></restconf>'
|
||||||
|
|
||||||
# Should be alphabetically ordered
|
# Should be alphabetically ordered
|
||||||
new "restconf get restconf/operations. RFC8040 3.3.2 (json)"
|
new "restconf get restconf/operations. RFC8040 3.3.2 (json)"
|
||||||
|
|
@ -85,11 +85,11 @@ if [ -z "$match" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
new "restconf get restconf/yang-library-version. RFC8040 3.3.3"
|
new "restconf get restconf/yang-library-version. RFC8040 3.3.3"
|
||||||
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/yang-library-version)" 0 'HTTP/1.1 200 OK' '{"yang-library-version":"2016-06-21"}'
|
expectpart "$(curl $CURLOPTS -X GET $RCPROTO://localhost/restconf/yang-library-version)" 0 'HTTP/1.1 200 OK' '{"yang-library-version":"2019-01-04"}'
|
||||||
|
|
||||||
new "restconf get restconf/yang-library-version. RFC8040 3.3.3 (xml)"
|
new "restconf get restconf/yang-library-version. RFC8040 3.3.3 (xml)"
|
||||||
ret=$(curl $CURLOPTS -X GET -H "Accept: application/yang-data+xml" $RCPROTO://localhost/restconf/yang-library-version)
|
ret=$(curl $CURLOPTS -X GET -H "Accept: application/yang-data+xml" $RCPROTO://localhost/restconf/yang-library-version)
|
||||||
expect="<yang-library-version>2016-06-21</yang-library-version>"
|
expect="<yang-library-version>2019-01-04</yang-library-version>"
|
||||||
match=`echo $ret | grep --null -Eo "$expect"`
|
match=`echo $ret | grep --null -Eo "$expect"`
|
||||||
if [ -z "$match" ]; then
|
if [ -z "$match" ]; then
|
||||||
err "$expect" "$ret"
|
err "$expect" "$ret"
|
||||||
|
|
|
||||||
|
|
@ -91,17 +91,17 @@ fi
|
||||||
new "B.1.1. Retrieve the Top-Level API Resource root"
|
new "B.1.1. Retrieve the Top-Level API Resource root"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/xrd+xml' $RCPROTO://localhost/.well-known/host-meta)" 0 "HTTP/1.1 200 OK" "Content-Type: application/xrd+xml" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/xrd+xml' $RCPROTO://localhost/.well-known/host-meta)" 0 "HTTP/1.1 200 OK" "Content-Type: application/xrd+xml" "<XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'>" "<Link rel='restconf' href='/restconf'/>" "</XRD>"
|
||||||
|
|
||||||
d='{"ietf-restconf:restconf":{"data":{},"operations":{},"yang-library-version":"2016-06-21"}}'
|
d='{"ietf-restconf:restconf":{"data":{},"operations":{},"yang-library-version":"2019-01-04"}}'
|
||||||
new "B.1.1. Retrieve the Top-Level API Resource /restconf json"
|
new "B.1.1. Retrieve the Top-Level API Resource /restconf json"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+json' $RCPROTO://localhost/restconf)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+json" "$d"
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+json' $RCPROTO://localhost/restconf)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+json" "$d"
|
||||||
|
|
||||||
new "B.1.1. Retrieve the Top-Level API Resource /restconf xml (not in RFC)"
|
new "B.1.1. Retrieve the Top-Level API Resource /restconf xml (not in RFC)"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+xml" '<restconf xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"><data/><operations/><yang-library-version>2016-06-21</yang-library-version></restconf>'
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+xml" '<restconf xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf"><data/><operations/><yang-library-version>2019-01-04</yang-library-version></restconf>'
|
||||||
|
|
||||||
# This just catches the header and the jukebox module, the RFC has foo and bar which
|
# This just catches the header and the jukebox module, the RFC has foo and bar which
|
||||||
# seems wrong to recreate
|
# seems wrong to recreate
|
||||||
new "B.1.2. Retrieve the Server Module Information"
|
new "B.1.2. Retrieve the Server Module Information"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+json' $RCPROTO://localhost/restconf/data/ietf-yang-library:modules-state)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+json" '{"ietf-yang-library:modules-state":{"module-set-id":"0","module":\[{"name":"clixon-lib","revision":"2020-04-23","namespace":"http://clicon.org/lib","conformance-type":"implement"},{"name":"example-events","revision":"","namespace":"urn:example:events","conformance-type":"implement"},{"name":"example-jukebox","revision":"2016-08-15","namespace":"http://example.com/ns/example-jukebox","conformance-type":"implement"},{"name":"example-system","revision":"","namespace":"http://example.com/ns/example-system","conformance-type":"implement"},{"name":"ietf-inet-types","revision":"2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"implement"},'
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+json' $RCPROTO://localhost/restconf/data/ietf-yang-library:modules-state)" 0 "HTTP/1.1 200 OK" 'Cache-Control: no-cache' "Content-Type: application/yang-data+json" '{"ietf-yang-library:modules-state":{"module-set-id":"0","module":\[{"name":"clixon-lib","revision":"2020-04-23","namespace":"http://clicon.org/lib","conformance-type":"implement"},{"name":"example-events","revision":"","namespace":"urn:example:events","conformance-type":"implement"},{"name":"example-jukebox","revision":"2016-08-15","namespace":"http://example.com/ns/example-jukebox","conformance-type":"implement"},{"name":"example-system","revision":"","namespace":"http://example.com/ns/example-system","conformance-type":"implement"},{"name":"ietf-datastores","revision":"2018-02-14","namespace":"urn:ietf:params:xml:ns:yang:ietf-datastores","conformance-type":"implement"},{"name":"ietf-inet-types","revision":"2020-07-06","namespace":"urn:ietf:params:xml:ns:yang:ietf-inet-types","conformance-type":"implement"},{"name":"ietf-netconf","revision":"2011-06-01","namespace":"urn:ietf:params:xml:ns:netconf:base:1.0","feature":\["candidate","validate","xpath"\],"conformance-type":"implement"},{"name":"ietf-restconf","revision":"2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf","conformance-type":"implement"},{"name":"ietf-restconf-monitoring","revision":"2017-01-26","namespace":"urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring","conformance-type":"implement"},{"name":"ietf-yang-library","revision":"2019-01-04","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-library","conformance-type":"implement"},{"name":"ietf-yang-types","revision":"2013-07-15","namespace":"urn:ietf:params:xml:ns:yang:ietf-yang-types","conformance-type":"implement"}\]}}'
|
||||||
|
|
||||||
new "B.1.3. Retrieve the Server Capability Information"
|
new "B.1.3. Retrieve the Server Capability Information"
|
||||||
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/ietf-restconf-monitoring:restconf-state/capabilities)" 0 "HTTP/1.1 200 OK" "Content-Type: application/yang-data+xml" 'Cache-Control: no-cache' '<capabilities xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring"><capability>urn:ietf:params:restconf:capability:defaults:1.0?basic-mode=explicit</capability><capability>urn:ietf:params:restconf:capability:depth</capability>
|
expectpart "$(curl $CURLOPTS -X GET -H 'Accept: application/yang-data+xml' $RCPROTO://localhost/restconf/data/ietf-restconf-monitoring:restconf-state/capabilities)" 0 "HTTP/1.1 200 OK" "Content-Type: application/yang-data+xml" 'Cache-Control: no-cache' '<capabilities xmlns="urn:ietf:params:xml:ns:yang:ietf-restconf-monitoring"><capability>urn:ietf:params:restconf:capability:defaults:1.0?basic-mode=explicit</capability><capability>urn:ietf:params:restconf:capability:depth</capability>
|
||||||
|
|
|
||||||
|
|
@ -301,7 +301,7 @@ cat <<EOF > $dir/startup_db
|
||||||
</config>
|
</config>
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
MODSTATE='<modules-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"><module-set-id>0</module-set-id><module><name>clixon-lib</name><revision>2020-04-23</revision><namespace>http://clicon.org/lib</namespace></module><module><name>ietf-inet-types</name><revision>2013-07-15</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace></module><module><name>ietf-netconf</name><revision>2011-06-01</revision><namespace>urn:ietf:params:xml:ns:netconf:base:1.0</namespace></module><module><name>ietf-restconf</name><revision>2017-01-26</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-restconf</namespace></module><module><name>ietf-yang-library</name><revision>2016-06-21</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace></module><module><name>ietf-yang-types</name><revision>2013-07-15</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-types</namespace></module><module><name>interfaces</name><revision>2018-02-20</revision><namespace>urn:example:interfaces</namespace></module></modules-state>'
|
MODSTATE='<modules-state xmlns="urn:ietf:params:xml:ns:yang:ietf-yang-library"><module-set-id>0</module-set-id><module><name>clixon-lib</name><revision>2020-04-23</revision><namespace>http://clicon.org/lib</namespace></module><module><name>ietf-datastores</name><revision>2018-02-14</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-datastores</namespace></module><module><name>ietf-inet-types</name><revision>2020-07-06</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-inet-types</namespace></module><module><name>ietf-netconf</name><revision>2011-06-01</revision><namespace>urn:ietf:params:xml:ns:netconf:base:1.0</namespace></module><module><name>ietf-restconf</name><revision>2017-01-26</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-restconf</namespace></module><module><name>ietf-yang-library</name><revision>2019-01-04</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-library</namespace></module><module><name>ietf-yang-types</name><revision>2013-07-15</revision><namespace>urn:ietf:params:xml:ns:yang:ietf-yang-types</namespace></module><module><name>interfaces</name><revision>2018-02-20</revision><namespace>urn:example:interfaces</namespace></module></modules-state>'
|
||||||
|
|
||||||
XML='<interfaces xmlns="urn:example:interfaces"><interface><name>e0</name><docs><descr>First interface</descr></docs><type>eth</type><admin-status>up</admin-status><statistics><in-octets>54326.432</in-octets><in-unicast-pkts>8458765</in-unicast-pkts></statistics></interface><interface><name>e1</name><type>eth</type><admin-status>down</admin-status></interface></interfaces>'
|
XML='<interfaces xmlns="urn:example:interfaces"><interface><name>e0</name><docs><descr>First interface</descr></docs><type>eth</type><admin-status>up</admin-status><statistics><in-octets>54326.432</in-octets><in-unicast-pkts>8458765</in-unicast-pkts></statistics></interface><interface><name>e1</name><type>eth</type><admin-status>down</admin-status></interface></interfaces>'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,13 +41,14 @@ datarootdir = @datarootdir@
|
||||||
# See also YANG_INSTALLDIR for the clixon-specific yang files
|
# See also YANG_INSTALLDIR for the clixon-specific yang files
|
||||||
YANG_INSTALLDIR = @YANG_INSTALLDIR@
|
YANG_INSTALLDIR = @YANG_INSTALLDIR@
|
||||||
|
|
||||||
YANGSPECS = ietf-inet-types@2013-07-15.yang
|
YANGSPECS = ietf-inet-types@2020-07-06.yang
|
||||||
YANGSPECS += ietf-netconf@2011-06-01.yang
|
YANGSPECS += ietf-netconf@2011-06-01.yang
|
||||||
YANGSPECS += ietf-netconf-acm@2018-02-14.yang
|
YANGSPECS += ietf-netconf-acm@2018-02-14.yang
|
||||||
YANGSPECS += ietf-restconf@2017-01-26.yang
|
YANGSPECS += ietf-restconf@2017-01-26.yang
|
||||||
YANGSPECS += ietf-restconf-monitoring@2017-01-26.yang
|
YANGSPECS += ietf-restconf-monitoring@2017-01-26.yang
|
||||||
YANGSPECS += ietf-yang-library@2016-06-21.yang
|
YANGSPECS += ietf-yang-library@2019-01-04.yang
|
||||||
YANGSPECS += ietf-yang-types@2013-07-15.yang
|
YANGSPECS += ietf-yang-types@2013-07-15.yang
|
||||||
|
YANGSPECS += ietf-datastores@2018-02-14.yang
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|
||||||
|
|
|
||||||
117
yang/mandatory/ietf-datastores@2018-02-14.yang
Normal file
117
yang/mandatory/ietf-datastores@2018-02-14.yang
Normal file
|
|
@ -0,0 +1,117 @@
|
||||||
|
module ietf-datastores {
|
||||||
|
yang-version 1.1;
|
||||||
|
namespace "urn:ietf:params:xml:ns:yang:ietf-datastores";
|
||||||
|
prefix ds;
|
||||||
|
|
||||||
|
organization
|
||||||
|
"IETF Network Modeling (NETMOD) Working Group";
|
||||||
|
|
||||||
|
contact
|
||||||
|
"WG Web: <https://datatracker.ietf.org/wg/netmod/>
|
||||||
|
|
||||||
|
WG List: <mailto:netmod@ietf.org>
|
||||||
|
|
||||||
|
Author: Martin Bjorklund
|
||||||
|
<mailto:mbj@tail-f.com>
|
||||||
|
|
||||||
|
Author: Juergen Schoenwaelder
|
||||||
|
<mailto:j.schoenwaelder@jacobs-university.de>
|
||||||
|
|
||||||
|
Author: Phil Shafer
|
||||||
|
<mailto:phil@juniper.net>
|
||||||
|
|
||||||
|
Author: Kent Watsen
|
||||||
|
<mailto:kwatsen@juniper.net>
|
||||||
|
|
||||||
|
Author: Rob Wilton
|
||||||
|
<rwilton@cisco.com>";
|
||||||
|
|
||||||
|
description
|
||||||
|
"This YANG module defines a set of identities for identifying
|
||||||
|
datastores.
|
||||||
|
|
||||||
|
Copyright (c) 2018 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
|
||||||
|
(https://trustee.ietf.org/license-info).
|
||||||
|
|
||||||
|
This version of this YANG module is part of RFC 8342
|
||||||
|
(https://www.rfc-editor.org/info/rfc8342); see the RFC itself
|
||||||
|
for full legal notices.";
|
||||||
|
|
||||||
|
revision 2018-02-14 {
|
||||||
|
description
|
||||||
|
"Initial revision.";
|
||||||
|
reference
|
||||||
|
"RFC 8342: Network Management Datastore Architecture (NMDA)";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Identities
|
||||||
|
*/
|
||||||
|
|
||||||
|
identity datastore {
|
||||||
|
description
|
||||||
|
"Abstract base identity for datastore identities.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity conventional {
|
||||||
|
base datastore;
|
||||||
|
description
|
||||||
|
"Abstract base identity for conventional configuration
|
||||||
|
datastores.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity running {
|
||||||
|
base conventional;
|
||||||
|
description
|
||||||
|
"The running configuration datastore.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity candidate {
|
||||||
|
base conventional;
|
||||||
|
description
|
||||||
|
"The candidate configuration datastore.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity startup {
|
||||||
|
base conventional;
|
||||||
|
description
|
||||||
|
"The startup configuration datastore.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity intended {
|
||||||
|
base conventional;
|
||||||
|
description
|
||||||
|
"The intended configuration datastore.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity dynamic {
|
||||||
|
base datastore;
|
||||||
|
description
|
||||||
|
"Abstract base identity for dynamic configuration datastores.";
|
||||||
|
}
|
||||||
|
|
||||||
|
identity operational {
|
||||||
|
base datastore;
|
||||||
|
description
|
||||||
|
"The operational state datastore.";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Type definitions
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef datastore-ref {
|
||||||
|
type identityref {
|
||||||
|
base datastore;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"A datastore identity reference.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,457 +0,0 @@
|
||||||
module ietf-inet-types {
|
|
||||||
|
|
||||||
namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
|
|
||||||
prefix "inet";
|
|
||||||
|
|
||||||
organization
|
|
||||||
"IETF NETMOD (NETCONF Data Modeling Language) Working Group";
|
|
||||||
|
|
||||||
contact
|
|
||||||
"WG Web: <http://tools.ietf.org/wg/netmod/>
|
|
||||||
WG List: <mailto:netmod@ietf.org>
|
|
||||||
|
|
||||||
WG Chair: David Kessens
|
|
||||||
<mailto:david.kessens@nsn.com>
|
|
||||||
|
|
||||||
WG Chair: Juergen Schoenwaelder
|
|
||||||
<mailto:j.schoenwaelder@jacobs-university.de>
|
|
||||||
|
|
||||||
Editor: Juergen Schoenwaelder
|
|
||||||
<mailto:j.schoenwaelder@jacobs-university.de>";
|
|
||||||
|
|
||||||
description
|
|
||||||
"This module contains a collection of generally useful derived
|
|
||||||
YANG data types for Internet addresses and related things.
|
|
||||||
|
|
||||||
Copyright (c) 2013 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 6991; see
|
|
||||||
the RFC itself for full legal notices.";
|
|
||||||
|
|
||||||
revision 2013-07-15 {
|
|
||||||
description
|
|
||||||
"This revision adds the following new data types:
|
|
||||||
- ip-address-no-zone
|
|
||||||
- ipv4-address-no-zone
|
|
||||||
- ipv6-address-no-zone";
|
|
||||||
reference
|
|
||||||
"RFC 6991: Common YANG Data Types";
|
|
||||||
}
|
|
||||||
|
|
||||||
revision 2010-09-24 {
|
|
||||||
description
|
|
||||||
"Initial revision.";
|
|
||||||
reference
|
|
||||||
"RFC 6021: Common YANG Data Types";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** collection of types related to protocol fields ***/
|
|
||||||
|
|
||||||
typedef ip-version {
|
|
||||||
type enumeration {
|
|
||||||
enum unknown {
|
|
||||||
value "0";
|
|
||||||
description
|
|
||||||
"An unknown or unspecified version of the Internet
|
|
||||||
protocol.";
|
|
||||||
}
|
|
||||||
enum ipv4 {
|
|
||||||
value "1";
|
|
||||||
description
|
|
||||||
"The IPv4 protocol as defined in RFC 791.";
|
|
||||||
}
|
|
||||||
enum ipv6 {
|
|
||||||
value "2";
|
|
||||||
description
|
|
||||||
"The IPv6 protocol as defined in RFC 2460.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"This value represents the version of the IP protocol.
|
|
||||||
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the InetVersion textual convention of the SMIv2.";
|
|
||||||
reference
|
|
||||||
"RFC 791: Internet Protocol
|
|
||||||
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
|
|
||||||
RFC 4001: Textual Conventions for Internet Network Addresses";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef dscp {
|
|
||||||
type uint8 {
|
|
||||||
range "0..63";
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The dscp type represents a Differentiated Services Code Point
|
|
||||||
that may be used for marking packets in a traffic stream.
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the Dscp textual convention of the SMIv2.";
|
|
||||||
reference
|
|
||||||
"RFC 3289: Management Information Base for the Differentiated
|
|
||||||
Services Architecture
|
|
||||||
RFC 2474: Definition of the Differentiated Services Field
|
|
||||||
(DS Field) in the IPv4 and IPv6 Headers
|
|
||||||
RFC 2780: IANA Allocation Guidelines For Values In
|
|
||||||
the Internet Protocol and Related Headers";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv6-flow-label {
|
|
||||||
type uint32 {
|
|
||||||
range "0..1048575";
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ipv6-flow-label type represents the flow identifier or Flow
|
|
||||||
Label in an IPv6 packet header that may be used to
|
|
||||||
discriminate traffic flows.
|
|
||||||
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the IPv6FlowLabel textual convention of the SMIv2.";
|
|
||||||
reference
|
|
||||||
"RFC 3595: Textual Conventions for IPv6 Flow Label
|
|
||||||
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef port-number {
|
|
||||||
type uint16 {
|
|
||||||
range "0..65535";
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The port-number type represents a 16-bit port number of an
|
|
||||||
Internet transport-layer protocol such as UDP, TCP, DCCP, or
|
|
||||||
SCTP. Port numbers are assigned by IANA. A current list of
|
|
||||||
all assignments is available from <http://www.iana.org/>.
|
|
||||||
|
|
||||||
Note that the port number value zero is reserved by IANA. In
|
|
||||||
situations where the value zero does not make sense, it can
|
|
||||||
be excluded by subtyping the port-number type.
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the InetPortNumber textual convention of the SMIv2.";
|
|
||||||
reference
|
|
||||||
"RFC 768: User Datagram Protocol
|
|
||||||
RFC 793: Transmission Control Protocol
|
|
||||||
RFC 4960: Stream Control Transmission Protocol
|
|
||||||
RFC 4340: Datagram Congestion Control Protocol (DCCP)
|
|
||||||
RFC 4001: Textual Conventions for Internet Network Addresses";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** collection of types related to autonomous systems ***/
|
|
||||||
|
|
||||||
typedef as-number {
|
|
||||||
type uint32;
|
|
||||||
description
|
|
||||||
"The as-number type represents autonomous system numbers
|
|
||||||
which identify an Autonomous System (AS). An AS is a set
|
|
||||||
of routers under a single technical administration, using
|
|
||||||
an interior gateway protocol and common metrics to route
|
|
||||||
packets within the AS, and using an exterior gateway
|
|
||||||
protocol to route packets to other ASes. IANA maintains
|
|
||||||
the AS number space and has delegated large parts to the
|
|
||||||
regional registries.
|
|
||||||
|
|
||||||
Autonomous system numbers were originally limited to 16
|
|
||||||
bits. BGP extensions have enlarged the autonomous system
|
|
||||||
number space to 32 bits. This type therefore uses an uint32
|
|
||||||
base type without a range restriction in order to support
|
|
||||||
a larger autonomous system number space.
|
|
||||||
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the InetAutonomousSystemNumber textual convention of
|
|
||||||
the SMIv2.";
|
|
||||||
reference
|
|
||||||
"RFC 1930: Guidelines for creation, selection, and registration
|
|
||||||
of an Autonomous System (AS)
|
|
||||||
RFC 4271: A Border Gateway Protocol 4 (BGP-4)
|
|
||||||
RFC 4001: Textual Conventions for Internet Network Addresses
|
|
||||||
RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
|
|
||||||
Number Space";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** collection of types related to IP addresses and hostnames ***/
|
|
||||||
|
|
||||||
typedef ip-address {
|
|
||||||
type union {
|
|
||||||
type inet:ipv4-address;
|
|
||||||
type inet:ipv6-address;
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ip-address type represents an IP address and is IP
|
|
||||||
version neutral. The format of the textual representation
|
|
||||||
implies the IP version. This type supports scoped addresses
|
|
||||||
by allowing zone identifiers in the address format.";
|
|
||||||
reference
|
|
||||||
"RFC 4007: IPv6 Scoped Address Architecture";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv4-address {
|
|
||||||
type string {
|
|
||||||
pattern
|
|
||||||
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
|
|
||||||
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
|
|
||||||
+ '(%[\p{N}\p{L}]+)?';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ipv4-address type represents an IPv4 address in
|
|
||||||
dotted-quad notation. The IPv4 address may include a zone
|
|
||||||
index, separated by a % sign.
|
|
||||||
|
|
||||||
The zone index is used to disambiguate identical address
|
|
||||||
values. For link-local addresses, the zone index will
|
|
||||||
typically be the interface index number or the name of an
|
|
||||||
interface. If the zone index is not present, the default
|
|
||||||
zone of the device will be used.
|
|
||||||
|
|
||||||
The canonical format for the zone index is the numerical
|
|
||||||
format";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv6-address {
|
|
||||||
type string {
|
|
||||||
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
|
|
||||||
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
|
|
||||||
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
|
|
||||||
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
|
|
||||||
+ '(%[\p{N}\p{L}]+)?';
|
|
||||||
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
|
|
||||||
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
|
|
||||||
+ '(%.+)?';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ipv6-address type represents an IPv6 address in full,
|
|
||||||
mixed, shortened, and shortened-mixed notation. The IPv6
|
|
||||||
address may include a zone index, separated by a % sign.
|
|
||||||
|
|
||||||
The zone index is used to disambiguate identical address
|
|
||||||
values. For link-local addresses, the zone index will
|
|
||||||
typically be the interface index number or the name of an
|
|
||||||
interface. If the zone index is not present, the default
|
|
||||||
zone of the device will be used.
|
|
||||||
|
|
||||||
The canonical format of IPv6 addresses uses the textual
|
|
||||||
representation defined in Section 4 of RFC 5952. The
|
|
||||||
canonical format for the zone index is the numerical
|
|
||||||
format as described in Section 11.2 of RFC 4007.";
|
|
||||||
reference
|
|
||||||
"RFC 4291: IP Version 6 Addressing Architecture
|
|
||||||
RFC 4007: IPv6 Scoped Address Architecture
|
|
||||||
RFC 5952: A Recommendation for IPv6 Address Text
|
|
||||||
Representation";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ip-address-no-zone {
|
|
||||||
type union {
|
|
||||||
type inet:ipv4-address-no-zone;
|
|
||||||
type inet:ipv6-address-no-zone;
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ip-address-no-zone type represents an IP address and is
|
|
||||||
IP version neutral. The format of the textual representation
|
|
||||||
implies the IP version. This type does not support scoped
|
|
||||||
addresses since it does not allow zone identifiers in the
|
|
||||||
address format.";
|
|
||||||
reference
|
|
||||||
"RFC 4007: IPv6 Scoped Address Architecture";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv4-address-no-zone {
|
|
||||||
type inet:ipv4-address {
|
|
||||||
pattern '[0-9\.]*';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"An IPv4 address without a zone index. This type, derived from
|
|
||||||
ipv4-address, may be used in situations where the zone is
|
|
||||||
known from the context and hence no zone index is needed.";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv6-address-no-zone {
|
|
||||||
type inet:ipv6-address {
|
|
||||||
pattern '[0-9a-fA-F:\.]*';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"An IPv6 address without a zone index. This type, derived from
|
|
||||||
ipv6-address, may be used in situations where the zone is
|
|
||||||
known from the context and hence no zone index is needed.";
|
|
||||||
reference
|
|
||||||
"RFC 4291: IP Version 6 Addressing Architecture
|
|
||||||
RFC 4007: IPv6 Scoped Address Architecture
|
|
||||||
RFC 5952: A Recommendation for IPv6 Address Text
|
|
||||||
Representation";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ip-prefix {
|
|
||||||
type union {
|
|
||||||
type inet:ipv4-prefix;
|
|
||||||
type inet:ipv6-prefix;
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ip-prefix type represents an IP prefix and is IP
|
|
||||||
version neutral. The format of the textual representations
|
|
||||||
implies the IP version.";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv4-prefix {
|
|
||||||
type string {
|
|
||||||
pattern
|
|
||||||
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
|
|
||||||
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
|
|
||||||
+ '/(([0-9])|([1-2][0-9])|(3[0-2]))';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ipv4-prefix type represents an IPv4 address prefix.
|
|
||||||
The prefix length is given by the number following the
|
|
||||||
slash character and must be less than or equal to 32.
|
|
||||||
|
|
||||||
A prefix length value of n corresponds to an IP address
|
|
||||||
mask that has n contiguous 1-bits from the most
|
|
||||||
significant bit (MSB) and all other bits set to 0.
|
|
||||||
|
|
||||||
The canonical format of an IPv4 prefix has all bits of
|
|
||||||
the IPv4 address set to zero that are not part of the
|
|
||||||
IPv4 prefix.";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ipv6-prefix {
|
|
||||||
type string {
|
|
||||||
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
|
|
||||||
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
|
|
||||||
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
|
|
||||||
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
|
|
||||||
+ '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
|
|
||||||
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
|
|
||||||
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
|
|
||||||
+ '(/.+)';
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ipv6-prefix type represents an IPv6 address prefix.
|
|
||||||
The prefix length is given by the number following the
|
|
||||||
slash character and must be less than or equal to 128.
|
|
||||||
|
|
||||||
A prefix length value of n corresponds to an IP address
|
|
||||||
mask that has n contiguous 1-bits from the most
|
|
||||||
significant bit (MSB) and all other bits set to 0.
|
|
||||||
|
|
||||||
The IPv6 address should have all bits that do not belong
|
|
||||||
to the prefix set to zero.
|
|
||||||
|
|
||||||
The canonical format of an IPv6 prefix has all bits of
|
|
||||||
the IPv6 address set to zero that are not part of the
|
|
||||||
IPv6 prefix. Furthermore, the IPv6 address is represented
|
|
||||||
as defined in Section 4 of RFC 5952.";
|
|
||||||
reference
|
|
||||||
"RFC 5952: A Recommendation for IPv6 Address Text
|
|
||||||
Representation";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** collection of domain name and URI types ***/
|
|
||||||
|
|
||||||
typedef domain-name {
|
|
||||||
type string {
|
|
||||||
pattern
|
|
||||||
'((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
|
|
||||||
+ '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
|
|
||||||
+ '|\.';
|
|
||||||
length "1..253";
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The domain-name type represents a DNS domain name. The
|
|
||||||
name SHOULD be fully qualified whenever possible.
|
|
||||||
|
|
||||||
Internet domain names are only loosely specified. Section
|
|
||||||
3.5 of RFC 1034 recommends a syntax (modified in Section
|
|
||||||
2.1 of RFC 1123). The pattern above is intended to allow
|
|
||||||
for current practice in domain name use, and some possible
|
|
||||||
future expansion. It is designed to hold various types of
|
|
||||||
domain names, including names used for A or AAAA records
|
|
||||||
(host names) and other records, such as SRV records. Note
|
|
||||||
that Internet host names have a stricter syntax (described
|
|
||||||
in RFC 952) than the DNS recommendations in RFCs 1034 and
|
|
||||||
1123, and that systems that want to store host names in
|
|
||||||
schema nodes using the domain-name type are recommended to
|
|
||||||
adhere to this stricter standard to ensure interoperability.
|
|
||||||
|
|
||||||
The encoding of DNS names in the DNS protocol is limited
|
|
||||||
to 255 characters. Since the encoding consists of labels
|
|
||||||
prefixed by a length bytes and there is a trailing NULL
|
|
||||||
byte, only 253 characters can appear in the textual dotted
|
|
||||||
notation.
|
|
||||||
|
|
||||||
The description clause of schema nodes using the domain-name
|
|
||||||
type MUST describe when and how these names are resolved to
|
|
||||||
IP addresses. Note that the resolution of a domain-name value
|
|
||||||
may require to query multiple DNS records (e.g., A for IPv4
|
|
||||||
and AAAA for IPv6). The order of the resolution process and
|
|
||||||
which DNS record takes precedence can either be defined
|
|
||||||
explicitly or may depend on the configuration of the
|
|
||||||
resolver.
|
|
||||||
|
|
||||||
Domain-name values use the US-ASCII encoding. Their canonical
|
|
||||||
format uses lowercase US-ASCII characters. Internationalized
|
|
||||||
domain names MUST be A-labels as per RFC 5890.";
|
|
||||||
reference
|
|
||||||
"RFC 952: DoD Internet Host Table Specification
|
|
||||||
RFC 1034: Domain Names - Concepts and Facilities
|
|
||||||
RFC 1123: Requirements for Internet Hosts -- Application
|
|
||||||
and Support
|
|
||||||
RFC 2782: A DNS RR for specifying the location of services
|
|
||||||
(DNS SRV)
|
|
||||||
RFC 5890: Internationalized Domain Names in Applications
|
|
||||||
(IDNA): Definitions and Document Framework";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef host {
|
|
||||||
type union {
|
|
||||||
type inet:ip-address;
|
|
||||||
type inet:domain-name;
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The host type represents either an IP address or a DNS
|
|
||||||
domain name.";
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef uri {
|
|
||||||
type string;
|
|
||||||
description
|
|
||||||
"The uri type represents a Uniform Resource Identifier
|
|
||||||
(URI) as defined by STD 66.
|
|
||||||
|
|
||||||
Objects using the uri type MUST be in US-ASCII encoding,
|
|
||||||
and MUST be normalized as described by RFC 3986 Sections
|
|
||||||
6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
|
|
||||||
percent-encoding is removed, and all case-insensitive
|
|
||||||
characters are set to lowercase except for hexadecimal
|
|
||||||
digits, which are normalized to uppercase as described in
|
|
||||||
Section 6.2.2.1.
|
|
||||||
|
|
||||||
The purpose of this normalization is to help provide
|
|
||||||
unique URIs. Note that this normalization is not
|
|
||||||
sufficient to provide uniqueness. Two URIs that are
|
|
||||||
textually distinct after this normalization may still be
|
|
||||||
equivalent.
|
|
||||||
|
|
||||||
Objects using the uri type may restrict the schemes that
|
|
||||||
they permit. For example, 'data:' and 'urn:' schemes
|
|
||||||
might not be appropriate.
|
|
||||||
|
|
||||||
A zero-length URI is not a valid URI. This can be used to
|
|
||||||
express 'URI absent' where required.
|
|
||||||
|
|
||||||
In the value set and its semantics, this type is equivalent
|
|
||||||
to the Uri SMIv2 textual convention defined in RFC 5017.";
|
|
||||||
reference
|
|
||||||
"RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
|
|
||||||
RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
|
|
||||||
Group: Uniform Resource Identifiers (URIs), URLs,
|
|
||||||
and Uniform Resource Names (URNs): Clarifications
|
|
||||||
and Recommendations
|
|
||||||
RFC 5017: MIB Textual Conventions for Uniform Resource
|
|
||||||
Identifiers (URIs)";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
589
yang/mandatory/ietf-inet-types@2020-07-06.yang
Normal file
589
yang/mandatory/ietf-inet-types@2020-07-06.yang
Normal file
|
|
@ -0,0 +1,589 @@
|
||||||
|
module ietf-inet-types {
|
||||||
|
|
||||||
|
namespace "urn:ietf:params:xml:ns:yang:ietf-inet-types";
|
||||||
|
prefix "inet";
|
||||||
|
|
||||||
|
organization
|
||||||
|
"IETF Network Modeling (NETMOD) Working Group";
|
||||||
|
|
||||||
|
contact
|
||||||
|
"WG Web: <https://datatracker.ietf.org/wg/netmod/>
|
||||||
|
WG List: <mailto:netmod@ietf.org>
|
||||||
|
|
||||||
|
Editor: Juergen Schoenwaelder
|
||||||
|
<mailto:j.schoenwaelder@jacobs-university.de>";
|
||||||
|
|
||||||
|
description
|
||||||
|
"This module contains a collection of generally useful derived
|
||||||
|
YANG data types for Internet addresses and related things.
|
||||||
|
|
||||||
|
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
|
||||||
|
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
|
||||||
|
'MAY', and 'OPTIONAL' in this document are to be interpreted as
|
||||||
|
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
|
||||||
|
they appear in all capitals, as shown here.
|
||||||
|
|
||||||
|
Copyright (c) 2020 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 XXXX;
|
||||||
|
see the RFC itself for full legal notices.";
|
||||||
|
revision 2020-07-06 {
|
||||||
|
description
|
||||||
|
"This revision adds the following new data types:
|
||||||
|
- ip-address-and-prefix
|
||||||
|
- ipv4-address-and-prefix
|
||||||
|
- ipv6-address-and-prefix
|
||||||
|
- email-address";
|
||||||
|
reference
|
||||||
|
"RFC XXXX: Common YANG Data Types";
|
||||||
|
}
|
||||||
|
|
||||||
|
revision 2013-07-15 {
|
||||||
|
description
|
||||||
|
"This revision adds the following new data types:
|
||||||
|
- ip-address-no-zone
|
||||||
|
- ipv4-address-no-zone
|
||||||
|
- ipv6-address-no-zone";
|
||||||
|
reference
|
||||||
|
"RFC 6991: Common YANG Data Types";
|
||||||
|
}
|
||||||
|
|
||||||
|
revision 2010-09-24 {
|
||||||
|
description
|
||||||
|
"Initial revision.";
|
||||||
|
reference
|
||||||
|
"RFC 6021: Common YANG Data Types";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** collection of types related to protocol fields ***/
|
||||||
|
|
||||||
|
typedef ip-version {
|
||||||
|
type enumeration {
|
||||||
|
enum unknown {
|
||||||
|
value "0";
|
||||||
|
description
|
||||||
|
"An unknown or unspecified version of the Internet
|
||||||
|
protocol.";
|
||||||
|
}
|
||||||
|
enum ipv4 {
|
||||||
|
value "1";
|
||||||
|
description
|
||||||
|
"The IPv4 protocol as defined in RFC 791.";
|
||||||
|
}
|
||||||
|
enum ipv6 {
|
||||||
|
value "2";
|
||||||
|
description
|
||||||
|
"The IPv6 protocol as defined in RFC 2460.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"This value represents the version of the IP protocol.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the InetVersion textual convention of the SMIv2.";
|
||||||
|
reference
|
||||||
|
"RFC 791: Internet Protocol
|
||||||
|
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
|
||||||
|
RFC 4001: Textual Conventions for Internet Network Addresses";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef dscp {
|
||||||
|
type uint8 {
|
||||||
|
range "0..63";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The dscp type represents a Differentiated Services Code Point
|
||||||
|
that may be used for marking packets in a traffic stream.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the Dscp textual convention of the SMIv2.";
|
||||||
|
reference
|
||||||
|
"RFC 3289: Management Information Base for the Differentiated
|
||||||
|
Services Architecture
|
||||||
|
RFC 2474: Definition of the Differentiated Services Field
|
||||||
|
(DS Field) in the IPv4 and IPv6 Headers
|
||||||
|
RFC 2780: IANA Allocation Guidelines For Values In
|
||||||
|
the Internet Protocol and Related Headers";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv6-flow-label {
|
||||||
|
type uint32 {
|
||||||
|
range "0..1048575";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv6-flow-label type represents the flow identifier or
|
||||||
|
Flow Label in an IPv6 packet header that may be used to
|
||||||
|
discriminate traffic flows.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the IPv6FlowLabel textual convention of the SMIv2.";
|
||||||
|
reference
|
||||||
|
"RFC 3595: Textual Conventions for IPv6 Flow Label
|
||||||
|
RFC 2460: Internet Protocol, Version 6 (IPv6) Specification";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef port-number {
|
||||||
|
type uint16 {
|
||||||
|
range "0..65535";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The port-number type represents a 16-bit port number of an
|
||||||
|
Internet transport-layer protocol such as UDP, TCP, DCCP, or
|
||||||
|
SCTP. Port numbers are assigned by IANA. A current list of
|
||||||
|
all assignments is available from <http://www.iana.org/>.
|
||||||
|
|
||||||
|
Note that the port number value zero is reserved by IANA. In
|
||||||
|
situations where the value zero does not make sense, it can
|
||||||
|
be excluded by subtyping the port-number type.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the InetPortNumber textual convention of the SMIv2.";
|
||||||
|
reference
|
||||||
|
"RFC 768: User Datagram Protocol
|
||||||
|
RFC 793: Transmission Control Protocol
|
||||||
|
RFC 4960: Stream Control Transmission Protocol
|
||||||
|
RFC 4340: Datagram Congestion Control Protocol (DCCP)
|
||||||
|
RFC 4001: Textual Conventions for Internet Network Addresses";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** collection of types related to autonomous systems ***/
|
||||||
|
|
||||||
|
typedef as-number {
|
||||||
|
type uint32;
|
||||||
|
description
|
||||||
|
"The as-number type represents autonomous system numbers
|
||||||
|
which identify an Autonomous System (AS). An AS is a set
|
||||||
|
of routers under a single technical administration, using
|
||||||
|
an interior gateway protocol and common metrics to route
|
||||||
|
packets within the AS, and using an exterior gateway
|
||||||
|
protocol to route packets to other ASes. IANA maintains
|
||||||
|
the AS number space and has delegated large parts to the
|
||||||
|
regional registries.
|
||||||
|
|
||||||
|
Autonomous system numbers were originally limited to 16
|
||||||
|
bits. BGP extensions have enlarged the autonomous system
|
||||||
|
number space to 32 bits. This type therefore uses an uint32
|
||||||
|
base type without a range restriction in order to support
|
||||||
|
a larger autonomous system number space.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the InetAutonomousSystemNumber textual convention of
|
||||||
|
the SMIv2.";
|
||||||
|
reference
|
||||||
|
"RFC 1930: Guidelines for creation, selection, and registration
|
||||||
|
of an Autonomous System (AS)
|
||||||
|
RFC 4271: A Border Gateway Protocol 4 (BGP-4)
|
||||||
|
RFC 4001: Textual Conventions for Internet Network Addresses
|
||||||
|
RFC 6793: BGP Support for Four-Octet Autonomous System (AS)
|
||||||
|
Number Space";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** collection of types related to IP addresses and hostnames ***/
|
||||||
|
|
||||||
|
typedef ip-address {
|
||||||
|
type union {
|
||||||
|
type inet:ipv4-address;
|
||||||
|
type inet:ipv6-address;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ip-address type represents an IP address and is IP
|
||||||
|
version neutral. The format of the textual representation
|
||||||
|
implies the IP version. This type supports scoped addresses
|
||||||
|
by allowing zone identifiers in the address format.";
|
||||||
|
reference
|
||||||
|
"RFC 4007: IPv6 Scoped Address Architecture";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv4-address {
|
||||||
|
type string {
|
||||||
|
pattern
|
||||||
|
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
|
||||||
|
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
|
||||||
|
+ '(%[\p{N}\p{L}]+)?';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv4-address type represents an IPv4 address in
|
||||||
|
dotted-quad notation. The IPv4 address may include a zone
|
||||||
|
index, separated by a % sign.
|
||||||
|
|
||||||
|
The zone index is used to disambiguate identical address
|
||||||
|
values. For link-local addresses, the zone index will
|
||||||
|
typically be the interface index number or the name of an
|
||||||
|
interface. If the zone index is not present, the default
|
||||||
|
zone of the device will be used.
|
||||||
|
|
||||||
|
The canonical format for the zone index is the numerical
|
||||||
|
format";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv6-address {
|
||||||
|
type string {
|
||||||
|
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
|
||||||
|
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
|
||||||
|
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
|
||||||
|
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
|
||||||
|
+ '(%[\p{N}\p{L}]+)?';
|
||||||
|
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
|
||||||
|
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
|
||||||
|
+ '(%.+)?';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv6-address type represents an IPv6 address in full,
|
||||||
|
mixed, shortened, and shortened-mixed notation. The IPv6
|
||||||
|
address may include a zone index, separated by a % sign.
|
||||||
|
|
||||||
|
The zone index is used to disambiguate identical address
|
||||||
|
values. For link-local addresses, the zone index will
|
||||||
|
typically be the interface index number or the name of an
|
||||||
|
interface. If the zone index is not present, the default
|
||||||
|
zone of the device will be used.
|
||||||
|
|
||||||
|
The canonical format of IPv6 addresses uses the textual
|
||||||
|
representation defined in Section 4 of RFC 5952. The
|
||||||
|
canonical format for the zone index is the numerical
|
||||||
|
format as described in Section 11.2 of RFC 4007.";
|
||||||
|
reference
|
||||||
|
"RFC 4291: IP Version 6 Addressing Architecture
|
||||||
|
RFC 4007: IPv6 Scoped Address Architecture
|
||||||
|
RFC 5952: A Recommendation for IPv6 Address Text
|
||||||
|
Representation";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ip-address-no-zone {
|
||||||
|
type union {
|
||||||
|
type inet:ipv4-address-no-zone;
|
||||||
|
type inet:ipv6-address-no-zone;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ip-address-no-zone type represents an IP address and is
|
||||||
|
IP version neutral. The format of the textual representation
|
||||||
|
implies the IP version. This type does not support scoped
|
||||||
|
addresses since it does not allow zone identifiers in the
|
||||||
|
address format.";
|
||||||
|
reference
|
||||||
|
"RFC 4007: IPv6 Scoped Address Architecture";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv4-address-no-zone {
|
||||||
|
type inet:ipv4-address {
|
||||||
|
pattern '[0-9\.]*';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"An IPv4 address without a zone index. This type, derived from
|
||||||
|
ipv4-address, may be used in situations where the zone is known
|
||||||
|
from the context and hence no zone index is needed.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv6-address-no-zone {
|
||||||
|
type inet:ipv6-address {
|
||||||
|
pattern '[0-9a-fA-F:\.]*';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"An IPv6 address without a zone index. This type, derived from
|
||||||
|
ipv6-address, may be used in situations where the zone is known
|
||||||
|
from the context and hence no zone index is needed.";
|
||||||
|
reference
|
||||||
|
"RFC 4291: IP Version 6 Addressing Architecture
|
||||||
|
RFC 4007: IPv6 Scoped Address Architecture
|
||||||
|
RFC 5952: A Recommendation for IPv6 Address Text
|
||||||
|
Representation";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ip-prefix {
|
||||||
|
type union {
|
||||||
|
type inet:ipv4-prefix;
|
||||||
|
type inet:ipv6-prefix;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ip-prefix type represents an IP prefix and is IP
|
||||||
|
version neutral. The format of the textual representations
|
||||||
|
implies the IP version.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv4-prefix {
|
||||||
|
type string {
|
||||||
|
pattern
|
||||||
|
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
|
||||||
|
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
|
||||||
|
+ '/(([0-9])|([1-2][0-9])|(3[0-2]))';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv4-prefix type represents an IPv4 prefix.
|
||||||
|
The prefix length is given by the number following the
|
||||||
|
slash character and must be less than or equal to 32.
|
||||||
|
|
||||||
|
A prefix length value of n corresponds to an IP address
|
||||||
|
mask that has n contiguous 1-bits from the most
|
||||||
|
significant bit (MSB) and all other bits set to 0.
|
||||||
|
The canonical format of an IPv4 prefix has all bits of
|
||||||
|
the IPv4 address set to zero that are not part of the
|
||||||
|
IPv4 prefix.
|
||||||
|
|
||||||
|
The definition of ipv4-prefix does not require that bits,
|
||||||
|
which are not part of the prefix, are set to zero. However,
|
||||||
|
implementations have to return values in canonical format,
|
||||||
|
which requires non-prefix bits to be set to zero. This means
|
||||||
|
that 192.0.2.1/24 must be accepted as a valid value but it
|
||||||
|
will be converted into the canonical format 192.0.2.0/24.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv6-prefix {
|
||||||
|
type string {
|
||||||
|
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
|
||||||
|
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
|
||||||
|
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
|
||||||
|
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
|
||||||
|
+ '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
|
||||||
|
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
|
||||||
|
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
|
||||||
|
+ '(/.+)';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv6-prefix type represents an IPv6 prefix.
|
||||||
|
The prefix length is given by the number following the
|
||||||
|
slash character and must be less than or equal to 128.
|
||||||
|
|
||||||
|
A prefix length value of n corresponds to an IP address
|
||||||
|
mask that has n contiguous 1-bits from the most
|
||||||
|
significant bit (MSB) and all other bits set to 0.
|
||||||
|
|
||||||
|
The canonical format of an IPv6 prefix has all bits of
|
||||||
|
the IPv6 address set to zero that are not part of the
|
||||||
|
IPv6 prefix. Furthermore, the IPv6 address is represented
|
||||||
|
as defined in Section 4 of RFC 5952.
|
||||||
|
|
||||||
|
The definition of ipv6-prefix does not require that bits,
|
||||||
|
which are not part of the prefix, are set to zero. However,
|
||||||
|
implementations have to return values in canonical format,
|
||||||
|
which requires non-prefix bits to be set to zero. This means
|
||||||
|
that 2001:db8::1/64 must be accepted as a valid value but it
|
||||||
|
will be converted into the canonical format 2001:db8::/64.";
|
||||||
|
reference
|
||||||
|
"RFC 5952: A Recommendation for IPv6 Address Text
|
||||||
|
Representation";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ip-address-and-prefix {
|
||||||
|
type union {
|
||||||
|
type inet:ipv4-address-and-prefix;
|
||||||
|
type inet:ipv6-address-and-prefix;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ip-address-and-prefix type represents an IP address and
|
||||||
|
prefix and is IP version neutral. The format of the textual
|
||||||
|
representations implies the IP version.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv4-address-and-prefix {
|
||||||
|
type string {
|
||||||
|
pattern
|
||||||
|
'(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}'
|
||||||
|
+ '([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'
|
||||||
|
+ '/(([0-9])|([1-2][0-9])|(3[0-2]))';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv4-address-and-prefix type represents an IPv4
|
||||||
|
address and an associated ipv4 prefix.
|
||||||
|
The prefix length is given by the number following the
|
||||||
|
slash character and must be less than or equal to 32.
|
||||||
|
|
||||||
|
A prefix length value of n corresponds to an IP address
|
||||||
|
mask that has n contiguous 1-bits from the most
|
||||||
|
significant bit (MSB) and all other bits set to 0.";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef ipv6-address-and-prefix {
|
||||||
|
type string {
|
||||||
|
pattern '((:|[0-9a-fA-F]{0,4}):)([0-9a-fA-F]{0,4}:){0,5}'
|
||||||
|
+ '((([0-9a-fA-F]{0,4}:)?(:|[0-9a-fA-F]{0,4}))|'
|
||||||
|
+ '(((25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])\.){3}'
|
||||||
|
+ '(25[0-5]|2[0-4][0-9]|[01]?[0-9]?[0-9])))'
|
||||||
|
+ '(/(([0-9])|([0-9]{2})|(1[0-1][0-9])|(12[0-8])))';
|
||||||
|
pattern '(([^:]+:){6}(([^:]+:[^:]+)|(.*\..*)))|'
|
||||||
|
+ '((([^:]+:)*[^:]+)?::(([^:]+:)*[^:]+)?)'
|
||||||
|
+ '(/.+)';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The ipv6-address-and-prefix type represents an IPv6
|
||||||
|
address and an associated ipv4 prefix.
|
||||||
|
The prefix length is given by the number following the
|
||||||
|
slash character and must be less than or equal to 128.
|
||||||
|
|
||||||
|
A prefix length value of n corresponds to an IP address
|
||||||
|
mask that has n contiguous 1-bits from the most
|
||||||
|
significant bit (MSB) and all other bits set to 0.
|
||||||
|
|
||||||
|
The canonical format requires that the IPv6 address is
|
||||||
|
represented as defined in Section 4 of RFC 5952.";
|
||||||
|
reference
|
||||||
|
"RFC 5952: A Recommendation for IPv6 Address Text
|
||||||
|
Representation";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** collection of domain name and URI types ***/
|
||||||
|
|
||||||
|
typedef domain-name {
|
||||||
|
type string {
|
||||||
|
length "1..253";
|
||||||
|
pattern
|
||||||
|
'((([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.)*'
|
||||||
|
+ '([a-zA-Z0-9_]([a-zA-Z0-9\-_]){0,61})?[a-zA-Z0-9]\.?)'
|
||||||
|
+ '|\.';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The domain-name type represents a DNS domain name. The
|
||||||
|
name SHOULD be fully qualified whenever possible. This
|
||||||
|
type does not support wildcards (see RFC 4592) or
|
||||||
|
classless in-addr.arpa delegations (see RFC 2317).
|
||||||
|
|
||||||
|
Internet domain names are only loosely specified. Section
|
||||||
|
3.5 of RFC 1034 recommends a syntax (modified in Section
|
||||||
|
2.1 of RFC 1123). The pattern above is intended to allow
|
||||||
|
for current practice in domain name use, and some possible
|
||||||
|
future expansion. Note that Internet host names have a
|
||||||
|
stricter syntax (described in RFC 952) than the DNS
|
||||||
|
recommendations in RFCs 1034 and 1123, and that systems
|
||||||
|
that want to store host names in schema node instances
|
||||||
|
using the domain-name type are recommended to adhere to
|
||||||
|
this stricter standard to ensure interoperability.
|
||||||
|
|
||||||
|
The encoding of DNS names in the DNS protocol is limited
|
||||||
|
to 255 characters. Since the encoding consists of labels
|
||||||
|
prefixed by a length bytes and there is a trailing NULL
|
||||||
|
byte, only 253 characters can appear in the textual dotted
|
||||||
|
notation.
|
||||||
|
|
||||||
|
The description clause of schema nodes using the domain-name
|
||||||
|
type MUST describe when and how these names are resolved to
|
||||||
|
IP addresses. Note that the resolution of a domain-name value
|
||||||
|
may require to query multiple DNS records (e.g., A for IPv4
|
||||||
|
and AAAA for IPv6). The order of the resolution process and
|
||||||
|
which DNS record takes precedence can either be defined
|
||||||
|
explicitly or may depend on the configuration of the
|
||||||
|
resolver.
|
||||||
|
|
||||||
|
Domain-name values use the US-ASCII encoding. Their canonical
|
||||||
|
format uses lowercase US-ASCII characters. Internationalized
|
||||||
|
domain names MUST be A-labels as per RFC 5890.";
|
||||||
|
reference
|
||||||
|
"RFC 952: DoD Internet Host Table Specification
|
||||||
|
RFC 1034: Domain Names - Concepts and Facilities
|
||||||
|
RFC 1123: Requirements for Internet Hosts -- Application
|
||||||
|
and Support
|
||||||
|
RFC 2317: Classless IN-ADDR.ARPA delegation
|
||||||
|
RFC 2782: A DNS RR for specifying the location of services
|
||||||
|
(DNS SRV)
|
||||||
|
RFC 4592: The Role of Wildcards in the Domain Name System
|
||||||
|
RFC 5890: Internationalized Domain Names in Applications
|
||||||
|
(IDNA): Definitions and Document Framework";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef host {
|
||||||
|
type union {
|
||||||
|
type inet:ip-address;
|
||||||
|
type inet:domain-name;
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The host type represents either an IP address or a DNS
|
||||||
|
domain name.";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DISCUSS:
|
||||||
|
* - Lada suggested to replace the inet:domain-name usage in
|
||||||
|
* the union with a new host-name definition that follows
|
||||||
|
* the NR-LDH definition in RFC 5890.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef uri {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"The uri type represents a Uniform Resource Identifier
|
||||||
|
(URI) as defined by STD 66.
|
||||||
|
|
||||||
|
Objects using the uri type MUST be in US-ASCII encoding,
|
||||||
|
and MUST be normalized as described by RFC 3986 Sections
|
||||||
|
6.2.1, 6.2.2.1, and 6.2.2.2. All unnecessary
|
||||||
|
percent-encoding is removed, and all case-insensitive
|
||||||
|
characters are set to lowercase except for hexadecimal
|
||||||
|
digits, which are normalized to uppercase as described in
|
||||||
|
Section 6.2.2.1.
|
||||||
|
|
||||||
|
The purpose of this normalization is to help provide
|
||||||
|
unique URIs. Note that this normalization is not
|
||||||
|
sufficient to provide uniqueness. Two URIs that are
|
||||||
|
textually distinct after this normalization may still be
|
||||||
|
equivalent.
|
||||||
|
|
||||||
|
Objects using the uri type may restrict the schemes that
|
||||||
|
they permit. For example, 'data:' and 'urn:' schemes
|
||||||
|
might not be appropriate.
|
||||||
|
|
||||||
|
A zero-length URI is not a valid URI. This can be used to
|
||||||
|
express 'URI absent' where required.
|
||||||
|
|
||||||
|
In the value set and its semantics, this type is equivalent
|
||||||
|
to the Uri SMIv2 textual convention defined in RFC 5017.";
|
||||||
|
reference
|
||||||
|
"RFC 3986: Uniform Resource Identifier (URI): Generic Syntax
|
||||||
|
RFC 3305: Report from the Joint W3C/IETF URI Planning Interest
|
||||||
|
Group: Uniform Resource Identifiers (URIs), URLs,
|
||||||
|
and Uniform Resource Names (URNs): Clarifications
|
||||||
|
and Recommendations
|
||||||
|
RFC 5017: MIB Textual Conventions for Uniform Resource
|
||||||
|
Identifiers (URIs)";
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef email-address {
|
||||||
|
type string {
|
||||||
|
// dot-atom-text "@" ...
|
||||||
|
pattern '[a-zA-Z0-9!#$%&'+"'"+'*+/=?^_`{|}~-]+'
|
||||||
|
+ '(\.[a-zA-Z0-9!#$%&'+"'"+'*+/=?^_`{|}~-]+)*'
|
||||||
|
+ '@'
|
||||||
|
+ '[a-zA-Z0-9!#$%&'+"'"+'*+/=?^_`{|}~-]+'
|
||||||
|
+ '(\.[a-zA-Z0-9!#$%&'+"'"+'*+/=?^_`{|}~-]+)*';
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The email-address type represents an email address as
|
||||||
|
defined as addr-spec in RFC 5322 section 3.4.1.";
|
||||||
|
reference
|
||||||
|
"RFC 5322: Internet Message Format";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DISCUSS:
|
||||||
|
* - It was suggested to add email types following RFC 5322
|
||||||
|
* email-address (addr-spec, per Section 3.4.1)
|
||||||
|
* named-email-address (name-addr, per Section 3.4)
|
||||||
|
* - This sounds useful but the devil is in the details,
|
||||||
|
* in particular name-addr is a quite complex construct;
|
||||||
|
* perhaps addr-spec is sufficient, this is also the
|
||||||
|
* format allowed in mailto: URIs (mailto: seems to use
|
||||||
|
* only a subset of addr-spec which may be good enough
|
||||||
|
* here as well).
|
||||||
|
* - Need to define a pattern that has a meaningful trade-off
|
||||||
|
* between precision and complexity (there are very tight
|
||||||
|
* pattern that are very long and complex). The current
|
||||||
|
* pattern does not take care of quoted-string, obs-local-part,
|
||||||
|
* domain-literal, obs-domain.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DISCUSS:
|
||||||
|
* - There was a request to add types for URI fields (scheme,
|
||||||
|
* authority, path, query, fragment) but it is not clear how
|
||||||
|
* commonly useful these types are, the WG was pretty silent
|
||||||
|
* about this proposal. On the technical side, it is unclear
|
||||||
|
* whether data is represented with percent escapes resolved
|
||||||
|
* or not. (Mahesh's proposal does not spell this out, the
|
||||||
|
* pattern does not allow the % character, which may be wrong.)
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
@ -1,242 +0,0 @@
|
||||||
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.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
544
yang/mandatory/ietf-yang-library@2019-01-04.yang
Normal file
544
yang/mandatory/ietf-yang-library@2019-01-04.yang
Normal file
|
|
@ -0,0 +1,544 @@
|
||||||
|
module ietf-yang-library {
|
||||||
|
yang-version 1.1;
|
||||||
|
namespace "urn:ietf:params:xml:ns:yang:ietf-yang-library";
|
||||||
|
prefix yanglib;
|
||||||
|
|
||||||
|
import ietf-yang-types {
|
||||||
|
prefix yang;
|
||||||
|
reference
|
||||||
|
"RFC 6991: Common YANG Data Types";
|
||||||
|
}
|
||||||
|
import ietf-inet-types {
|
||||||
|
prefix inet;
|
||||||
|
reference
|
||||||
|
"RFC 6991: Common YANG Data Types";
|
||||||
|
}
|
||||||
|
import ietf-datastores {
|
||||||
|
prefix ds;
|
||||||
|
reference
|
||||||
|
"RFC 8342: Network Management Datastore Architecture
|
||||||
|
(NMDA)";
|
||||||
|
}
|
||||||
|
|
||||||
|
organization
|
||||||
|
"IETF NETCONF (Network Configuration) Working Group";
|
||||||
|
contact
|
||||||
|
"WG Web: <https://datatracker.ietf.org/wg/netconf/>
|
||||||
|
WG List: <mailto:netconf@ietf.org>
|
||||||
|
|
||||||
|
Author: Andy Bierman
|
||||||
|
<mailto:andy@yumaworks.com>
|
||||||
|
|
||||||
|
Author: Martin Bjorklund
|
||||||
|
<mailto:mbj@tail-f.com>
|
||||||
|
|
||||||
|
Author: Juergen Schoenwaelder
|
||||||
|
<mailto:j.schoenwaelder@jacobs-university.de>
|
||||||
|
|
||||||
|
Author: Kent Watsen
|
||||||
|
<mailto:kent+ietf@watsen.net>
|
||||||
|
|
||||||
|
Author: Robert Wilton
|
||||||
|
<mailto:rwilton@cisco.com>";
|
||||||
|
description
|
||||||
|
"This module provides information about the YANG modules,
|
||||||
|
datastores, and datastore schemas used by a network
|
||||||
|
management server.
|
||||||
|
The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
|
||||||
|
NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
|
||||||
|
'MAY', and 'OPTIONAL' in this document are to be interpreted as
|
||||||
|
described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
|
||||||
|
they appear in all capitals, as shown here.
|
||||||
|
|
||||||
|
Copyright (c) 2019 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
|
||||||
|
(https://trustee.ietf.org/license-info).
|
||||||
|
|
||||||
|
This version of this YANG module is part of RFC 8525; see
|
||||||
|
the RFC itself for full legal notices.";
|
||||||
|
|
||||||
|
revision 2019-01-04 {
|
||||||
|
description
|
||||||
|
"Added support for multiple datastores according to the
|
||||||
|
Network Management Datastore Architecture (NMDA).";
|
||||||
|
reference
|
||||||
|
"RFC 8525: YANG Library";
|
||||||
|
}
|
||||||
|
revision 2016-04-09 {
|
||||||
|
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-identification-leafs {
|
||||||
|
description
|
||||||
|
"Parameters for identifying YANG modules and submodules.";
|
||||||
|
leaf name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The YANG module or submodule name.";
|
||||||
|
}
|
||||||
|
leaf revision {
|
||||||
|
type revision-identifier;
|
||||||
|
description
|
||||||
|
"The YANG module or submodule revision date. If no revision
|
||||||
|
statement is present in the YANG module or submodule, this
|
||||||
|
leaf is not instantiated.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping location-leaf-list {
|
||||||
|
description
|
||||||
|
"Common leaf-list parameter for the locations of modules and
|
||||||
|
submodules.";
|
||||||
|
leaf-list location {
|
||||||
|
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.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping module-implementation-parameters {
|
||||||
|
description
|
||||||
|
"Parameters for describing the implementation of a module.";
|
||||||
|
leaf-list feature {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
description
|
||||||
|
"List of all YANG feature names from this module that are
|
||||||
|
supported by the server, regardless whether they are defined
|
||||||
|
in the module or any included submodule.";
|
||||||
|
}
|
||||||
|
leaf-list deviation {
|
||||||
|
type leafref {
|
||||||
|
path "../../module/name";
|
||||||
|
}
|
||||||
|
|
||||||
|
description
|
||||||
|
"List of all YANG deviation modules 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.
|
||||||
|
|
||||||
|
This reference MUST NOT (directly or indirectly)
|
||||||
|
refer to the module being deviated.
|
||||||
|
|
||||||
|
Robust clients may want to make sure that they handle a
|
||||||
|
situation where a module deviates itself (directly or
|
||||||
|
indirectly) gracefully.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping module-set-parameters {
|
||||||
|
description
|
||||||
|
"A set of parameters that describe a module set.";
|
||||||
|
leaf name {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"An arbitrary name of the module set.";
|
||||||
|
}
|
||||||
|
list module {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"An entry in this list represents a module implemented by the
|
||||||
|
server, as per Section 5.6.5 of RFC 7950, with a particular
|
||||||
|
set of supported features and deviations.";
|
||||||
|
reference
|
||||||
|
"RFC 7950: The YANG 1.1 Data Modeling Language";
|
||||||
|
uses module-identification-leafs;
|
||||||
|
leaf namespace {
|
||||||
|
type inet:uri;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The XML namespace identifier for this module.";
|
||||||
|
}
|
||||||
|
uses location-leaf-list;
|
||||||
|
list submodule {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"Each entry represents one submodule within the
|
||||||
|
parent module.";
|
||||||
|
uses module-identification-leafs;
|
||||||
|
uses location-leaf-list;
|
||||||
|
}
|
||||||
|
uses module-implementation-parameters;
|
||||||
|
}
|
||||||
|
list import-only-module {
|
||||||
|
key "name revision";
|
||||||
|
description
|
||||||
|
"An entry in this list 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 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.";
|
||||||
|
leaf name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
description
|
||||||
|
"The YANG module name.";
|
||||||
|
}
|
||||||
|
leaf revision {
|
||||||
|
type union {
|
||||||
|
type revision-identifier;
|
||||||
|
type string {
|
||||||
|
length "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"The YANG module revision date.
|
||||||
|
A zero-length string is used if no revision statement
|
||||||
|
is present in the YANG module.";
|
||||||
|
}
|
||||||
|
leaf namespace {
|
||||||
|
type inet:uri;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"The XML namespace identifier for this module.";
|
||||||
|
}
|
||||||
|
uses location-leaf-list;
|
||||||
|
list submodule {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"Each entry represents one submodule within the
|
||||||
|
parent module.";
|
||||||
|
uses module-identification-leafs;
|
||||||
|
uses location-leaf-list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grouping yang-library-parameters {
|
||||||
|
description
|
||||||
|
"The YANG library data structure is represented as a grouping
|
||||||
|
so it can be reused in configuration or another monitoring
|
||||||
|
data structure.";
|
||||||
|
list module-set {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"A set of modules that may be used by one or more schemas.
|
||||||
|
|
||||||
|
A module set does not have to be referentially complete,
|
||||||
|
i.e., it may define modules that contain import statements
|
||||||
|
for other modules not included in the module set.";
|
||||||
|
uses module-set-parameters;
|
||||||
|
}
|
||||||
|
list schema {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"A datastore schema that may be used by one or more
|
||||||
|
datastores.
|
||||||
|
|
||||||
|
The schema must be valid and referentially complete, i.e.,
|
||||||
|
it must contain modules to satisfy all used import
|
||||||
|
statements for all modules specified in the schema.";
|
||||||
|
leaf name {
|
||||||
|
type string;
|
||||||
|
description
|
||||||
|
"An arbitrary name of the schema.";
|
||||||
|
}
|
||||||
|
leaf-list module-set {
|
||||||
|
type leafref {
|
||||||
|
path "../../module-set/name";
|
||||||
|
}
|
||||||
|
description
|
||||||
|
"A set of module-sets that are included in this schema.
|
||||||
|
If a non-import-only module appears in multiple module
|
||||||
|
sets, then the module revision and the associated features
|
||||||
|
and deviations must be identical.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list datastore {
|
||||||
|
key "name";
|
||||||
|
description
|
||||||
|
"A datastore supported by this server.
|
||||||
|
|
||||||
|
Each datastore indicates which schema it supports.
|
||||||
|
|
||||||
|
The server MUST instantiate one entry in this list per
|
||||||
|
specific datastore it supports.
|
||||||
|
Each datastore entry with the same datastore schema SHOULD
|
||||||
|
reference the same schema.";
|
||||||
|
leaf name {
|
||||||
|
type ds:datastore-ref;
|
||||||
|
description
|
||||||
|
"The identity of the datastore.";
|
||||||
|
}
|
||||||
|
leaf schema {
|
||||||
|
type leafref {
|
||||||
|
path "../../schema/name";
|
||||||
|
}
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"A reference to the schema supported by this datastore.
|
||||||
|
All non-import-only modules of the schema are implemented
|
||||||
|
with their associated features and deviations.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Top-level container
|
||||||
|
*/
|
||||||
|
|
||||||
|
container yang-library {
|
||||||
|
config false;
|
||||||
|
description
|
||||||
|
"Container holding the entire YANG library of this server.";
|
||||||
|
uses yang-library-parameters;
|
||||||
|
leaf content-id {
|
||||||
|
type string;
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"A server-generated identifier of the contents of the
|
||||||
|
'/yang-library' tree. The server MUST change the value of
|
||||||
|
this leaf if the information represented by the
|
||||||
|
'/yang-library' tree, except '/yang-library/content-id', has
|
||||||
|
changed.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Notifications
|
||||||
|
*/
|
||||||
|
|
||||||
|
notification yang-library-update {
|
||||||
|
description
|
||||||
|
"Generated when any YANG library information on the
|
||||||
|
server has changed.";
|
||||||
|
leaf content-id {
|
||||||
|
type leafref {
|
||||||
|
path "/yanglib:yang-library/yanglib:content-id";
|
||||||
|
}
|
||||||
|
mandatory true;
|
||||||
|
description
|
||||||
|
"Contains the YANG library content identifier for the updated
|
||||||
|
YANG library at the time the notification is generated.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Legacy groupings
|
||||||
|
*/
|
||||||
|
|
||||||
|
grouping module-list {
|
||||||
|
status deprecated;
|
||||||
|
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 {
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"Common parameters for YANG modules and submodules.";
|
||||||
|
leaf name {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"The YANG module or submodule name.";
|
||||||
|
}
|
||||||
|
leaf revision {
|
||||||
|
type union {
|
||||||
|
type revision-identifier;
|
||||||
|
type string {
|
||||||
|
length "0";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
status deprecated;
|
||||||
|
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 {
|
||||||
|
status deprecated;
|
||||||
|
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";
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"Each entry represents one revision of one module
|
||||||
|
currently supported by the server.";
|
||||||
|
uses common-leafs {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
uses schema-leaf {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
leaf namespace {
|
||||||
|
type inet:uri;
|
||||||
|
mandatory true;
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"The XML namespace identifier for this module.";
|
||||||
|
}
|
||||||
|
leaf-list feature {
|
||||||
|
type yang:yang-identifier;
|
||||||
|
status deprecated;
|
||||||
|
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";
|
||||||
|
status deprecated;
|
||||||
|
|
||||||
|
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 {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"Indicates the type of conformance the server is claiming
|
||||||
|
for the YANG module identified by this entry.";
|
||||||
|
}
|
||||||
|
list submodule {
|
||||||
|
key "name revision";
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"Each entry represents one submodule within the
|
||||||
|
parent module.";
|
||||||
|
uses common-leafs {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
uses schema-leaf {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Legacy operational state data nodes
|
||||||
|
*/
|
||||||
|
|
||||||
|
container modules-state {
|
||||||
|
config false;
|
||||||
|
status deprecated;
|
||||||
|
description
|
||||||
|
"Contains YANG module monitoring information.";
|
||||||
|
leaf module-set-id {
|
||||||
|
type string;
|
||||||
|
mandatory true;
|
||||||
|
status deprecated;
|
||||||
|
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 {
|
||||||
|
status deprecated;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Legacy notifications
|
||||||
|
*/
|
||||||
|
|
||||||
|
notification yang-library-change {
|
||||||
|
status deprecated;
|
||||||
|
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;
|
||||||
|
status deprecated;
|
||||||
|
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.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue