diff --git a/experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-03-03.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-03-03.yang index 6ab6aa8b2..723c20802 100644 --- a/experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/iana-bfd-types@2018-03-03.yang @@ -19,8 +19,11 @@ module iana-bfd-types { "; description - "This module contains a collection of YANG data types - considered defined by IANA and used for BFD. + "This module defines YANG data types for IANA-registered + BFD parameters. + + This YANG module is maintained by IANA and reflects the + 'BFD Diagnostic Codes' and 'BFD Authentication Types' registries. Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -40,7 +43,7 @@ module iana-bfd-types { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; reference "RFC XXXX: IANA BFD YANG Data Types."; } @@ -92,9 +95,9 @@ module iana-bfd-types { } } description - "BFD diagnostic as defined in RFC 5880. Range is 0 to 31."; + "BFD diagnostic as defined in RFC 5880, values are maintained in + the 'BFD Diagnostic Codes' IANA registry. Range is 0 to 31."; } - typedef auth-type { type enumeration { enum reserved { @@ -123,7 +126,8 @@ module iana-bfd-types { } } description - "BFD authentication type as defined in RFC 5880. Range is 0 to - 255."; + "BFD authentication type as defined in RFC 5880, values are + maintained in the 'BFD Authentication Types' IANA registry. + Range is 0 to 255."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-access-control-list@2018-03-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-access-control-list@2018-03-15.yang new file mode 100644 index 000000000..b3cffd745 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-access-control-list@2018-03-15.yang @@ -0,0 +1,667 @@ +module ietf-access-control-list { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-access-control-list"; + prefix acl; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991 - Common YANG Data Types."; + } + + import ietf-packet-fields { + prefix pf; + reference + "RFC XXXX - Network ACL YANG Model."; + } + + import ietf-interfaces { + prefix if; + reference + "I-D.draft-ietf-netmod-rfc7223bis - A YANG Data Model for + Interface Management."; + } + + organization + "IETF NETMOD (Network Modeling Language) + Working Group"; + + contact + "WG Web: http://tools.ietf.org/wg/netmod/ + WG List: netmod@ietf.org + + Editor: Mahesh Jethanandani + mjethanandani@gmail.com + Editor: Lisa Huang + lyihuang16@gmail.com + Editor: Sonal Agarwal + sagarwal12@gmail.com + Editor: Dana Blair + dblair@cisco.com"; + + description + "This YANG module defines a component that describe the + configuration of Access Control Lists (ACLs). + + Copyright (c) 2018 IETF Trust and the persons identified as + the document authors. 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 2018-03-15 { + description + "Initial version."; + reference + "RFC XXX: Network Access Control List (ACL) YANG Data Model."; + } + + /* + * Identities + */ + + /* + * Forwarding actions for a packet + */ + identity forwarding-action { + description + "Base identity for actions in the forwarding category"; + } + + identity accept { + base forwarding-action; + description + "Accept the packet"; + } + + identity drop { + base forwarding-action; + description + "Drop packet without sending any ICMP error message"; + } + + identity reject { + base forwarding-action; + description + "Drop the packet and send an ICMP error message to the source"; + } + + /* + * Logging actions for a packet + */ + identity log-action { + description + "Base identity for defining the destination for logging actions"; + } + + identity log-syslog { + base log-action; + description + "System log (syslog) the information for the packet"; + } + + identity log-none { + base log-action; + description + "No logging for the packet"; + } + + /* + * ACL type identities + */ + identity acl-base { + description + "Base Access Control List type for all Access Control List type + identifiers."; + } + + identity ipv4-acl-type { + base acl:acl-base; + if-feature "ipv4"; + description + "An ACL that matches on fields from the IPv4 header + (e.g. IPv4 destination address) and layer 4 headers (e.g. TCP + destination port). An acl of type ipv4 does not contain + matches on fields in the ethernet header or the IPv6 header."; + } + + identity ipv6-acl-type { + base acl:acl-base; + if-feature "ipv6"; + description + "An ACL that matches on fields from the IPv6 header + (e.g. IPv6 destination address) and layer 4 headers (e.g. TCP + destination port). An acl of type ipv6 does not contain + matches on fields in the ethernet header or the IPv4 header."; + } + + identity eth-acl-type { + base acl:acl-base; + if-feature "eth"; + description + "An ACL that matches on fields in the ethernet header, + like 10/100/1000baseT or WiFi Access Control List. An acl of + type ethernet does not contain matches on fields in the IPv4 + header, IPv6 header or layer 4 headers."; + } + + identity mixed-eth-ipv4-acl-type { + base "acl:eth-acl-type"; + base "acl:ipv4-acl-type"; + if-feature "mixed-eth-ipv4"; + description + "An ACL that contains a mix of entries that + match on fields in ethernet headers, + entries that match on IPv4 headers. + Matching on layer 4 header fields may also exist in the + list."; + } + + identity mixed-eth-ipv6-acl-type { + base "acl:eth-acl-type"; + base "acl:ipv6-acl-type"; + if-feature "mixed-eth-ipv6"; + description + "ACL that contains a mix of entries that + match on fields in ethernet headers, entries + that match on fields in IPv6 headers. Matching on + layer 4 header fields may also exist in the list."; + } + + identity mixed-eth-ipv4-ipv6-acl-type { + base "acl:eth-acl-type"; + base "acl:ipv4-acl-type"; + base "acl:ipv6-acl-type"; + if-feature "mixed-eth-ipv4-ipv6"; + description + "ACL that contains a mix of entries that + match on fields in ethernet headers, entries + that match on fields in IPv4 headers, and entries + that match on fields in IPv6 headers. Matching on + layer 4 header fields may also exist in the list."; + } + + /* + * Features + */ + + /* + * Features supported by device + */ + feature match-on-eth { + description + "The device can support matching on ethernet headers."; + } + + feature match-on-ipv4 { + description + "The device can support matching on IPv4 headers."; + } + + feature match-on-ipv6 { + description + "The device can support matching on IPv6 headers."; + } + + feature match-on-tcp { + description + "The device can support TCP headers."; + } + + feature match-on-udp { + description + "The device can support UDP header."; + } + + feature match-on-icmp { + description + "The device can support ICMP header."; + } + + /* + * Header classifications combinations supported by + * device + */ + feature eth { + if-feature "match-on-eth"; + description + "Plain Ethernet ACL supported"; + } + + feature ipv4 { + if-feature "match-on-ipv4"; + description + "Plain IPv4 ACL supported"; + } + + feature ipv6 { + if-feature "match-on-ipv6"; + description + "Plain IPv6 ACL supported"; + } + + feature mixed-eth-ipv4 { + if-feature "match-on-eth and match-on-ipv4"; + description + "Ethernet and IPv4 ACL combinations supported"; + } + + feature mixed-eth-ipv6 { + if-feature "match-on-eth and match-on-ipv6"; + description + "Ethernet and IPv6 ACL combinations supported"; + } + + feature mixed-eth-ipv4-ipv6 { + if-feature "match-on-eth and match-on-ipv4 + and match-on-ipv6"; + description + "Ethernet, IPv4 and IPv6 ACL combinations supported."; + } + + /* + * Stats Features + */ + feature interface-stats { + description + "ACL counters are available and reported only per interface"; + } + feature acl-aggregate-stats { + description + "ACL counters are aggregated over all interfaces, and reported + only per ACL entry"; + } + + /* + * Attachment point features + */ + feature interface-attachment { + description + "ACLs are set on interfaces."; + } + + /* + * Typedefs + */ + typedef acl-type { + type identityref { + base acl-base; + } + description + "This type is used to refer to an Access Control List + (ACL) type"; + } + + /* + * Groupings + */ + grouping acl-counters { + description + "Common grouping for ACL counters"; + + leaf matched-packets { + type yang:counter64; + config false; + description + "Count of the number of packets matching the current ACL + entry. + + An implementation should provide this counter on a + per-interface per-ACL-entry if possible. + + If an implementation only supports ACL counters per entry + (i.e., not broken out per interface), then the value + should be equal to the aggregate count across all interfaces. + + An implementation that provides counters per entry per + interface is not required to also provide an aggregate count, + e.g., per entry -- the user is expected to be able implement + the required aggregation if such a count is needed."; + } + + leaf matched-octets { + type yang:counter64; + config false; + description + "Count of the number of octets (bytes) matching the current + ACL entry. + + An implementation should provide this counter on a + per-interface per-ACL-entry if possible. + + If an implementation only supports ACL counters per entry + (i.e., not broken out per interface), then the value + should be equal to the aggregate count across all interfaces. + + An implementation that provides counters per entry per + interface is not required to also provide an aggregate count, + e.g., per entry -- the user is expected to be able implement + the required aggregation if such a count is needed."; + } + } + + /* + * Configuration data nodes + */ + container acls { + description + "This is a top level container for Access Control Lists. + It can have one or more acl nodes."; + list acl { + key "name"; + description + "An Access Control List (ACL) is an ordered list of + Access Control Entries (ACE). Each ACE has a + list of match criteria and a list of actions. + Since there are several kinds of Access Control Lists + implemented with different attributes for + different vendors, this model accommodates customizing + Access Control Lists for each kind and, for each vendor."; + leaf name { + type string { + length "1..64"; + } + description + "The name of access list. A device MAY restrict the length + and value of this name, possibly space and special + characters are not allowed."; + } + leaf type { + type acl-type; + description + "Type of access control list. Indicates the primary intended + type of match criteria (e.g. ethernet, IPv4, IPv6, mixed, + etc) used in the list instance."; + } + container aces { + description + "The aces container contains one or more ace nodes."; + list ace { + key "name"; + ordered-by user; + description + "List of Access Control Entries (ACEs)"; + leaf name { + type string { + length "1..64"; + } + description + "A unique name identifying this Access Control + Entry (ACE)."; + } + + container matches { + description + "The rules in this set determine what fields will be + matched upon before any action is taken on them. + The rules are selected based on the feature set + defined by the server and the acl-type defined. + If no matches are defined in a particular container, + then any packet will match that container. If no + matches are specified at all in an ACE, then any + packet will match the ACE."; + + choice l2 { + container eth { + when "derived-from-or-self(/acls/acl/type, " + + "'acl:eth-acl-type')"; + if-feature match-on-eth; + uses pf:acl-eth-header-fields; + description + "Rule set that matches ethernet headers."; + } + description + "Match layer 2 headers, for example ethernet + header fields."; + } + + choice l3 { + container ipv4 { + when "derived-from-or-self(/acls/acl/type, " + + "'acl:ipv4-acl-type')"; + if-feature match-on-ipv4; + uses pf:acl-ip-header-fields; + uses pf:acl-ipv4-header-fields; + description + "Rule set that matches IPv4 headers."; + } + + container ipv6 { + when "derived-from-or-self(/acls/acl/type, " + + "'acl:ipv6-acl-type')"; + if-feature match-on-ipv6; + uses pf:acl-ip-header-fields; + uses pf:acl-ipv6-header-fields; + description + "Rule set that matches IPv6 headers."; + } + description + "Choice of either ipv4 or ipv6 headers"; + } + + choice l4 { + container tcp { + if-feature match-on-tcp; + uses pf:acl-tcp-header-fields; + container source-port { + choice source-port { + case range-or-operator { + uses pf:port-range-or-operator; + description + "Source port definition from range or + operator."; + } + description + "Choice of source port definition using + range/operator or a choice to support future + 'case' statements, such as one enabling a + group of source ports to be referenced."; + } + description + "Source port definition."; + } + container destination-port { + choice destination-port { + case range-or-operator { + uses pf:port-range-or-operator; + description + "Destination port definition from range or + operator."; + } + description + "Choice of destination port definition using + range/operator or a choice to support future + 'case' statements, such as one enabling a + group of destination ports to be referenced."; + } + description + "Destination port definition."; + } + description + "Rule set that matches TCP headers."; + } + + container udp { + if-feature match-on-udp; + uses pf:acl-udp-header-fields; + container source-port { + choice source-port { + case range-or-operator { + uses pf:port-range-or-operator; + description + "Source port definition from range or + operator."; + } + description + "Choice of source port definition using + range/operator or a choice to support future + 'case' statements, such as one enabling a + group of source ports to be referenced."; + } + description + "Source port definition."; + } + container destination-port { + choice destination-port { + case range-or-operator { + uses pf:port-range-or-operator; + description + "Destination port definition from range or + operator."; + } + description + "Choice of destination port definition using + range/operator or a choice to support future + 'case' statements, such as one enabling a + group of destination ports to be referenced."; + } + description + "Destination port definition."; + } + description + "Rule set that matches UDP headers."; + } + + container icmp { + if-feature match-on-icmp; + uses pf:acl-icmp-header-fields; + description + "Rule set that matches ICMP headers."; + } + description + "Choice of TCP, UDP or ICMP headers."; + } + + leaf egress-interface { + type if:interface-ref; + description + "Egress interface. This should not be used if this ACL + is attached as an egress ACL (or the value should + equal the interface to which the ACL is attached)."; + } + + leaf ingress-interface { + type if:interface-ref; + description + "Ingress interface. This should not be used if this ACL + is attached as an ingress ACL (or the value should + equal the interface to which the ACL is attached)"; + } + } + + container actions { + description + "Definitions of action for this ace entry"; + leaf forwarding { + type identityref { + base forwarding-action; + } + mandatory true; + description + "Specifies the forwarding action per ace entry"; + } + + leaf logging { + type identityref { + base log-action; + } + default log-none; + description + "Specifies the log action and destination for + matched packets. Default value is not to log the + packet."; + } + } + container statistics { + if-feature "acl-aggregate-stats"; + config false; + description + "Statistics gathered across all attachment points for the + given ACL."; + uses acl-counters; + } + } + } + } + container attachment-points { + description + "Enclosing container for the list of + attachment-points on which ACLs are set"; + + /* + * Groupings + */ + grouping interface-acl { + description + "Grouping for per-interface ingress ACL data"; + + container acl-sets { + description + "Enclosing container the list of ingress ACLs on the + interface"; + + list acl-set { + key "name"; + ordered-by user; + description + "List of ingress ACLs on the interface"; + + leaf name { + type leafref { + path "/acls/acl/name"; + } + description + "Reference to the ACL name applied on ingress"; + } + + list ace-statistics { + if-feature "interface-stats"; + key "name"; + config false; + description + "List of Access Control Entries (ACEs)"; + leaf name { + type leafref { + path "/acls/acl/aces/ace/name"; + } + description + "The ace name"; + } + uses acl-counters; + } + } + } + } + + list interface { + if-feature interface-attachment; + key "interface-id"; + description + "List of interfaces on which ACLs are set"; + + leaf interface-id { + type if:interface-ref; + description + "Reference to the interface id list key"; + } + + container ingress { + uses interface-acl; + description + "The ACLs applied to ingress interface"; + } + container egress { + uses interface-acl; + description + "The ACLs applied to egress interface"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-03-01.yang similarity index 92% rename from experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-03-01.yang index 9af97022a..680da5216 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-acldns@2018-03-01.yang @@ -30,7 +30,7 @@ module ietf-acldns { IETF description of an access list to allow dns names as matching criteria."; - revision "2018-02-20" { + revision 2018-03-01 { description "Base version of dnsname extension of ACL model"; reference "RFC XXXX: Manufacturer Usage Description Specification"; @@ -50,14 +50,14 @@ module ietf-acldns { } augment "/acl:access-lists/acl:acl/acl:aces/acl:ace/" + - "acl:matches/acl:l3/acl:ipv4" { + "acl:matches/acl:l3/acl:ipv4/acl:ipv4" { description "Adding domain names to matching"; uses dns-matches; } augment "/acl:access-lists/acl:acl/" + "acl:aces/acl:ace/" + - "acl:matches/acl:l3/acl:ipv6" { + "acl:matches/acl:l3/acl:ipv6/acl:ipv6" { description "Adding domain names to matching"; uses dns-matches; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-01-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-01-30.yang deleted file mode 100644 index fdc169aab..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-01-30.yang +++ /dev/null @@ -1,511 +0,0 @@ -module ietf-actn-vn { - namespace "urn:ietf:params:xml:ns:yang:ietf-actn-vn"; - prefix "vn"; - - /* Import network */ - import ietf-network { - prefix "nw"; - } - - /* Import TE generic types */ - import ietf-te-types { - prefix "te-types"; - } - - /* Import Abstract TE Topology */ - import ietf-te-topology { - prefix "tet"; - } - - organization - "IETF Traffic Engineering Architecture and Signaling (TEAS) - Working Group"; - contact - "Editor: Young Lee - : Dhruv Dhody "; - description - "This module contains a YANG module for the ACTN VN. It - describes a VN operation module that takes place in the - context of the CNC-MDSC Interface (CMI) of the ACTN - architecture where the CNC is the actor of a VN Instantiation - /modification /deletion."; - revision 2018-01-30 { - description - "initial version."; - reference - "TBD"; - } - /* - * Features - */ - feature multi-src-dest { - description - "Support for selection of one src or destination - among multiple."; - } - - /*identity path-metric-delay { - base te-types:path-metric-type; - description - "delay path metric"; - } - identity path-metric-delay-variation { - base te-types:path-metric-type; - description - "delay-variation path metric"; - } - identity path-metric-loss { - base te-types:path-metric-type; - description - "loss path metric"; - }*/ - - identity vn-state-type { - description - "Base identity for VN state"; - } - identity vn-state-up { - base vn-state-type; - description "VN state up"; - } - identity vn-state-down { - base vn-state-type; - description "VN state down"; - } - identity vn-admin-state-type { - description - "Base identity for VN admin states"; - } - identity vn-admin-state-up { - base vn-admin-state-type; - description "VN administratively state up"; - } - identity vn-admin-state-down { - base vn-admin-state-type; - description "VN administratively state down"; - } - identity vn-compute-state-type { - description - "Base identity for compute states"; - } - identity vn-compute-state-computing { - base vn-compute-state-type; - description - "State path compute in progress"; - } - identity vn-compute-state-computation-ok { - base vn-compute-state-type; - description - "State path compute successful"; - } - identity vn-compute-state-computatione-failed { - base vn-compute-state-type; - description - "State path compute failed"; - } - /* - * Groupings - */ - grouping vn-ap { - description - "VNAP related information"; - leaf vn-ap-id { - type uint32; - description - "unique identifier for the referred - VNAP"; - } - leaf vn { - type leafref { - path "/actn/vn/vn-list/vn-id"; - } - description - "reference to the VN"; - } - leaf abstract-node { - type leafref { - path "/nw:networks/nw:network/nw:node/" - + "nw:node-id"; - } - description - "a reference to the abstract node in TE - Topology"; - } - leaf ltp { - type te-types:te-tp-id; - description - "Reference LTP in the TE-topology"; - } - } - grouping access-point{ - description - "AP related information"; - leaf access-point-id { - type uint32; - description - "unique identifier for the referred - access point"; - } - leaf access-point-name { - type string; - description - "ap name"; - } - - leaf max-bandwidth { - type te-types:te-bandwidth; - description - "max bandwidth of the AP"; - } - leaf avl-bandwidth { - type te-types:te-bandwidth; - description - "available bandwidth of the AP"; - } - /*add details and any other properties of AP, - not associated by a VN - CE port, PE port etc. - */ - list vn-ap { - key vn-ap-id; - uses vn-ap; - description - "list of VNAP in this AP"; - } - }//access-point - grouping vn-member { - description - "vn-member is described by this container"; - leaf vn-member-id { - type uint32; - description - "vn-member identifier"; - } - container src - { - description - "the source of VN Member"; - leaf src { - type leafref { - path "/actn/ap/access-point-list/access-point-id"; - } - description - "reference to source AP"; - } - leaf src-vn-ap-id{ - type leafref { - path "/actn/ap/access-point-list/vn-ap/vn-ap-id"; - } - description - "reference to source VNAP"; - } - leaf multi-src { - if-feature multi-src-dest; - type boolean; - description - "Is source part of multi-source, where - only one of the source is enabled"; - } - } - container dest - { - description - "the destination of VN Member"; - leaf dest { - type leafref { - path "/actn/ap/access-point-list/access-point-id"; - } - description - "reference to destination AP"; - } - leaf dest-vn-ap-id{ - type leafref { - path "/actn/ap/access-point-list/vn-ap/vn-ap-id"; - } - description - "reference to dest VNAP"; - } - leaf multi-dest { - if-feature multi-src-dest; - type boolean; - description - "Is destination part of multi-destination, where - only one of the destination is enabled"; - } - } - leaf connetivity-matrix-id{ - type leafref { - path "/nw:networks/nw:network/nw:node/tet:te/" - + "tet:te-node-attributes/tet:connectivity- -matrices/tet:connectivity-matrix/tet:id"; - } - description - "reference to connetivity-matrix"; - } - }//vn-member - /* - grouping policy { - description - "policy related to vn-member-id"; - leaf local-reroute { - type boolean; - description - "Policy to state if reroute - can be done locally"; - } - leaf push-allowed { - type boolean; - description - "Policy to state if changes - can be pushed to the customer"; - } - leaf incremental-update { - type boolean; - description - "Policy to allow only the - changes to be reported"; - } - }//policy - */ - /* - grouping metrics-op { - description - "metric related information"; - list metric{ - key "metric-type"; - config false; - description - "The list of metrics for VN"; - leaf metric-type { - type identityref { - base te-types:path-metric-type; - } - description - "The VN metric type."; - } - leaf value{ - type uint32; - description - "The limit value"; - } - } - } - */ - /* - grouping metrics { - description - "metric related information"; - list metric{ - key "metric-type"; - description - "The list of metrics for VN"; - uses te:path-metrics-bounds_config; - container optimize{ - description - "optimizing constraints"; - leaf enabled{ - type boolean; - description - "Metric to optimize"; - } - leaf value{ - type uint32; - description - "The computed value"; - } - } - } - } - */ - /* - grouping service-metric { - description - "service-metric"; - uses te:path-objective-function_config; - uses metrics; - uses te-types:common-constraints_config; - uses te:protection-restoration-params_config; - uses policy; - }//service-metric - */ - /* - * Configuration data nodes - */ - container actn { - description - "actn is described by this container"; - container ap { - description - "AP configurations"; - list access-point-list { - key "access-point-id"; - description - "access-point identifier"; - uses access-point{ - description - "access-point information"; - } - } - } - container vn { - description - "VN configurations"; - list vn-list { - key "vn-id"; - description - "a virtual network is identified by a vn-id"; - leaf vn-id { - type uint32; - description - "a unique vn identifier"; - } - leaf vn-name { - type string; - description "vn name"; - } - leaf vn-topology-id{ - type te-types:te-topology-id; - description - "An optional identifier to the TE Topology - Model where the abstract nodes and links - of the Topology can be found for Type 2 - VNS"; - } - leaf abstract-node { - type leafref { - path "/nw:networks/nw:network/nw:node/" - + "nw:node-id"; - } - description - "a reference to the abstract node in TE - Topology"; - } - list vn-member-list{ - key "vn-member-id"; - description - "List of VN-members in a VN"; - uses vn-member; - /*uses metrics-op;*/ - leaf oper-status { - type identityref { - base vn-state-type; - } - config false; - description - "VN-member operational state."; - } - - } - leaf if-selected{ - if-feature multi-src-dest; - type boolean; - default false; - config false; - description - "Is the vn-member is selected among the - multi-src/dest options"; - } - /* - container multi-src-dest{ - if-feature multi-src-dest; - config false; - description - "The selected VN Member when multi-src - and/or mult-destination is enabled."; - leaf selected-vn-member{ - type leafref { - path "/actn/vn/vn-list/vn-member-list/vn-member- -id"; - } - description - "The selected VN Member along the set - of source and destination configured - with multi-source and/or multi-destination"; - } - } - */ - /*uses service-metric;*/ - leaf admin-status { - type identityref { - base vn-admin-state-type; - } - default vn-admin-state-up; - description "VN administrative state."; - } - leaf oper-status { - type identityref { - base vn-state-type; - } - config false; - description "VN operational state."; - } - }//vn-list - }//vn - }//actn - /* - * Notifications - TBD - */ - /* - * RPC - */ - rpc vn-compute{ - description - "The VN computation without actual - instantiation"; - input { - leaf abstract-node { - type leafref { - path "/nw:networks/nw:network/nw:node/" - + "nw:node-id"; - } - description - "a reference to the abstract node in TE - Topology"; - } - list vn-member-list{ - key "vn-member-id"; - description - "List of VN-members in a VN"; - uses vn-member; - } - /*uses service-metric;*/ - } - output { - list vn-member-list{ - key "vn-member-id"; - description - "List of VN-members in a VN"; - uses vn-member; - leaf if-selected{ - if-feature multi-src-dest; - type boolean; - default false; - description - "Is the vn-member is selected among the - multi-src/dest options"; - } - /*uses metrics-op;*/ - leaf compute-status { - type identityref { - base vn-compute-state-type; - } - description - "VN-member compute state."; - } - } - /* - container multi-src-dest{ - if-feature multi-src-dest; - description - "The selected VN Member when multi-src - and/or mult-destination is enabled."; - leaf selected-vn-member-id{ - type uint32; - description - "The selected VN Member-id from the - input"; - } - }*/ - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-02-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-02-27.yang new file mode 100644 index 000000000..4e24b2e1d --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-actn-vn@2018-02-27.yang @@ -0,0 +1,546 @@ +module ietf-actn-vn { + namespace "urn:ietf:params:xml:ns:yang:ietf-actn-vn"; + prefix "vn"; + + /* Import network */ + import ietf-network { + prefix "nw"; + } + + /* Import TE generic types */ + import ietf-te-types { + prefix "te-types"; + } + + /* Import Abstract TE Topology */ + import ietf-te-topology { + prefix "tet"; + } + + organization + "IETF Traffic Engineering Architecture and Signaling (TEAS) + Working Group"; + contact + "Editor: Young Lee + : Dhruv Dhody "; + description + "This module contains a YANG module for the ACTN VN. It + describes a VN operation module that takes place in the + context of the CNC-MDSC Interface (CMI) of the ACTN + architecture where the CNC is the actor of a VN + Instantiation/modification /deletion."; + revision 2018-02-27 { + description + "initial version."; + reference + "TBD"; + } + /* + * Features + */ + feature multi-src-dest { + description + "Support for selection of one src or destination + among multiple."; + } + + /*identity path-metric-delay { + base te-types:path-metric-type; + description + "delay path metric"; + } + identity path-metric-delay-variation { + base te-types:path-metric-type; + description + "delay-variation path metric"; + } + identity path-metric-loss { + base te-types:path-metric-type; + description + "loss path metric"; + }*/ + + identity vn-state-type { + description + "Base identity for VN state"; + } + identity vn-state-up { + base vn-state-type; + description "VN state up"; + } + identity vn-state-down { + base vn-state-type; + description "VN state down"; + } + identity vn-admin-state-type { + description + "Base identity for VN admin states"; + } + identity vn-admin-state-up { + base vn-admin-state-type; + description "VN administratively state up"; + } + identity vn-admin-state-down { + base vn-admin-state-type; + description "VN administratively state down"; + } + identity vn-compute-state-type { + description + "Base identity for compute states"; + } + identity vn-compute-state-computing { + base vn-compute-state-type; + description + "State path compute in progress"; + } + identity vn-compute-state-computation-ok { + base vn-compute-state-type; + description + "State path compute successful"; + } + identity vn-compute-state-computatione-failed { + base vn-compute-state-type; + description + "State path compute failed"; + } + /* + * Groupings + */ + + typedef vn-disjointness { + type bits { + bit node { + position 0; + description "node disjoint"; + } + bit link { + position 1; + description "link disjoint"; + } + bit srlg { + position 2; + description "srlg disjoint"; + } + } + description + "type of the resource disjointness for + VN level applied across all VN members + in a VN"; + } + + grouping vn-ap { + description + "VNAP related information"; + leaf vn-ap-id { + type uint32; + description + "unique identifier for the referred + VNAP"; + } + leaf vn { + type leafref { + path "/actn/vn/vn-list/vn-id"; + } + description + "reference to the VN"; + } + leaf abstract-node { + type leafref { + path "/nw:networks/nw:network/nw:node/" + + "tet:te-node-id"; + } + description + "a reference to the abstract node in TE + Topology"; + } + leaf ltp { + type te-types:te-tp-id; + description + "Reference LTP in the TE-topology"; + } + } + grouping access-point{ + description + "AP related information"; + leaf access-point-id { + type uint32; + description + "unique identifier for the referred + access point"; + } + leaf access-point-name { + type string; + description + "ap name"; + } + + leaf max-bandwidth { + type te-types:te-bandwidth; + description + "max bandwidth of the AP"; + } + leaf avl-bandwidth { + type te-types:te-bandwidth; + description + "available bandwidth of the AP"; + } + /*add details and any other properties of AP, + not associated by a VN + CE port, PE port etc. + */ + list vn-ap { + key vn-ap-id; + uses vn-ap; + description + "list of VNAP in this AP"; + } + }//access-point + grouping vn-member { + description + "vn-member is described by this container"; + leaf vn-member-id { + type uint32; + description + "vn-member identifier"; + } + container src + { + description + "the source of VN Member"; + leaf src { + type leafref { + path "/actn/ap/access-point-list/access-point-id"; + } + description + "reference to source AP"; + } + leaf src-vn-ap-id{ + type leafref { + path "/actn/ap/access-point-list/vn-ap/vn-ap-id"; + } + description + "reference to source VNAP"; + } + leaf multi-src { + if-feature multi-src-dest; + type boolean; + description + "Is source part of multi-source, where + only one of the source is enabled"; + } + } + container dest + { + description + "the destination of VN Member"; + leaf dest { + type leafref { + path "/actn/ap/access-point-list/access-point-id"; + } + description + "reference to destination AP"; + } + leaf dest-vn-ap-id{ + type leafref { + path "/actn/ap/access-point-list/vn-ap/vn-ap-id"; + } + description + "reference to dest VNAP"; + } + leaf multi-dest { + if-feature multi-src-dest; + type boolean; + description + "Is destination part of multi-destination, where + only one of the destination is enabled"; + } + } + leaf connetivity-matrix-id{ + type leafref { + path "/nw:networks/nw:network/nw:node/tet:te/" + + "tet:te-node-attributes/" + + "tet:connectivity-matrices/" + + "tet:connectivity-matrix/tet:id"; + } + description + "reference to connetivity-matrix"; + } + }//vn-member + /* + grouping policy { + description + "policy related to vn-member-id"; + leaf local-reroute { + type boolean; + description + "Policy to state if reroute + can be done locally"; + } + leaf push-allowed { + type boolean; + description + "Policy to state if changes + can be pushed to the customer"; + } + leaf incremental-update { + type boolean; + description + "Policy to allow only the + changes to be reported"; + } + }//policy + */ + grouping vn-policy { + description + "policy for VN-level diverisity"; + leaf vn-level-diversity { + type vn-disjointness; + description + "the type of disjointness on the VN level + (i.e., across all VN members)"; + } + } + /* + grouping metrics-op { + description + "metric related information"; + list metric{ + key "metric-type"; + config false; + description + "The list of metrics for VN"; + leaf metric-type { + type identityref { + base te-types:path-metric-type; + } + description + "The VN metric type."; + } + leaf value{ + type uint32; + description + "The limit value"; + } + } + } + */ + /* + grouping metrics { + description + "metric related information"; + list metric{ + key "metric-type"; + description + "The list of metrics for VN"; + uses te:path-metrics-bounds_config; + container optimize{ + description + "optimizing constraints"; + leaf enabled{ + type boolean; + description + "Metric to optimize"; + } + leaf value{ + type uint32; + description + "The computed value"; + } + } + } + } + */ + /* + grouping service-metric { + description + "service-metric"; + uses te:path-objective-function_config; + uses metrics; + uses te-types:common-constraints_config; + uses te:protection-restoration-params_config; + uses policy; + }//service-metric + */ + /* + * Configuration data nodes + */ + container actn { + description + "actn is described by this container"; + container ap { + description + "AP configurations"; + list access-point-list { + key "access-point-id"; + description + "access-point identifier"; + uses access-point{ + description + "access-point information"; + } + } + } + container vn { + description + "VN configurations"; + list vn-list { + key "vn-id"; + description + "a virtual network is identified by a vn-id"; + leaf vn-id { + type uint32; + description + "a unique vn identifier"; + } + leaf vn-name { + type string; + description "vn name"; + } + leaf vn-topology-id{ + type te-types:te-topology-id; + description + "An optional identifier to the TE Topology + Model where the abstract nodes and links + of the Topology can be found for Type 2 + VNS"; + } + leaf abstract-node { + type leafref { + path "/nw:networks/nw:network/nw:node/" + + "tet:te-node-id"; + } + description + "a reference to the abstract node in TE + Topology"; + } + list vn-member-list{ + key "vn-member-id"; + description + "List of VN-members in a VN"; + uses vn-member; + /*uses metrics-op;*/ + leaf oper-status { + type identityref { + base vn-state-type; + } + config false; + description + "VN-member operational state."; + } + + } + leaf if-selected{ + if-feature multi-src-dest; + type boolean; + default false; + config false; + description + "Is the vn-member is selected among the + multi-src/dest options"; + } + /* + container multi-src-dest{ + if-feature multi-src-dest; + config false; + description + "The selected VN Member when multi-src + and/or mult-destination is enabled."; + leaf selected-vn-member{ + type leafref { + path "/actn/vn/vn-list/vn-member-list" + + "/vn-member-id"; + } + description + "The selected VN Member along the set + of source and destination configured + with multi-source and/or multi-destination"; + } + } + */ + /*uses service-metric;*/ + leaf admin-status { + type identityref { + base vn-admin-state-type; + } + default vn-admin-state-up; + description "VN administrative state."; + } + leaf oper-status { + type identityref { + base vn-state-type; + } + config false; + description "VN operational state."; + } + uses vn-policy; + }//vn-list + }//vn + }//actn + /* + * Notifications - TBD + */ + /* + * RPC + */ + rpc vn-compute{ + description + "The VN computation without actual + instantiation"; + input { + leaf abstract-node { + type leafref { + path "/nw:networks/nw:network/nw:node/" + + "tet:te-node-id"; + } + description + "a reference to the abstract node in TE + Topology"; + } + list vn-member-list{ + key "vn-member-id"; + description + "List of VN-members in a VN"; + uses vn-member; + } + uses vn-policy; + /*uses service-metric;*/ + } + output { + list vn-member-list{ + key "vn-member-id"; + description + "List of VN-members in a VN"; + uses vn-member; + leaf if-selected{ + if-feature multi-src-dest; + type boolean; + default false; + description + "Is the vn-member is selected among + the multi-src/dest options"; + } + /*uses metrics-op;*/ + leaf compute-status { + type identityref { + base vn-compute-state-type; + } + description + "VN-member compute state."; + } + } + /* + container multi-src-dest{ + if-feature multi-src-dest; + description + "The selected VN Member when multi-src + and/or mult-destination is enabled."; + leaf selected-vn-member-id{ + type uint32; + description + "The selected VN Member-id from the + input"; + } + }*/ + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-arp-dynamic-learning@2018-01-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-arp-dynamic-learning@2018-01-27.yang new file mode 100644 index 000000000..69d2bc0c3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-arp-dynamic-learning@2018-01-27.yang @@ -0,0 +1,235 @@ +submodule ietf-arp-dynamic-learning { + yang-version 1.1; + belongs-to ietf-arp { + prefix arp; + } + + import ietf-interfaces { + prefix if; + description + "A Network Management Datastore Architecture (NMDA) + compatible version of the ietf-interfaces module + is required."; + } + import ietf-ip { + prefix ip; + description + "A Network Management Datastore Architecture (NMDA) + compatible version of the ietf-ip module is + required."; + } + + organization + "IETF Routing Area Working Group (rtgwg)"; + contact + "WG Web: + WG List: + Editor: Xiaojian Ding + dingxiaojian1@huawei.com + Editor: Feng Zheng + habby.zheng@huawei.com + Editor: Robert Wilton + rwilton@cisco.com"; + description + "This YANG module augments 'ietf-if' and 'ietf-ip' + modules with parameters for ARP configuration on interfaces. + The model fully conforms to the Network Management + Datastore Architecture (NMDA). + + Copyright (c) 2017 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 2018-01-27 { + description + "Initial revision."; + reference "RFC XXX: ARP (Address Resolution Protocol) YANG data model"; + } + + augment "/if:interfaces/if:interface" { + description + "Augment interface configuration with parameters of ARP."; + container arp-dynamic-learning { + description + "Support for ARP configuration on interfaces."; + leaf expire-time { + type uint32 { + range "60..86400"; + } + units "second"; + description + "Aging time of a dynamic ARP entry."; + } + leaf learn-disable { + type boolean; + default "false"; + description + "Whether dynamic ARP learning is disabled. If the value + is True, dynamic ARP learning is disabled. If the value + is False, dynamic ARP learning is enabled."; + } + leaf proxy-enable { + type boolean; + default "false"; + description + "Enable proxy ARP."; + } + list if-limit { + key "vlan-id"; + description + "Maximum number of dynamic ARP entries that an + interface can learn. If the number of ARP entries that + an interface can learn changes and the number of the + learned ARP entries exceeds the changed value, the + interface cannot learn additional ARP entries. The + system prompts you to delete the excess ARP entries."; + leaf vlan-id { + type uint16 { + range "0..4094"; + } + description + "ID of the VLAN where ARP learning is restricted. + This parameter can be set only on Layer 2 interfaces + and sub-interfaces. Ethernet, GE, VE, and Eth-Trunk + interfaces can be both Layer 3 and Layer 2 + interfaces. When they work in Layer 3 mode, they + cannot have VLANs configured. When they work in Layer + 2 mode, they must have VLANs configured. Ethernet, + GE, and Eth-Trunk sub-interfaces can be both common + and QinQ sub-interfaces. "; + } + leaf limit-number { + type uint32 { + range "1..65536"; + } + mandatory true; + description + "Maximum number of dynamic ARP entries that an + interface can learn."; + } + leaf threshold-value { + type uint32 { + range "60..100"; + } + must "not(not(../limit-number))" { + description + "Upper boundary must be higher than lower boundary."; + } + description + "Alarm-Threshold for Maximum number of ARP entries + that an interface can learn."; + } + } + container probe { + description + "Common configuration parameters for all ARP probe."; + leaf interval { + type uint8 { + range "1..5"; + } + units "second"; + description + "Interval for detecting dynamic ARP entries."; + } + leaf times { + type uint8 { + range "0..10"; + } + description + "Number of aging probe attempts for a dynamic ARP entry. + If a device does not receive an ARP reply message after + the number of aging probe attempts reaches a specified + number,thedynamic ARP entry is deleted."; + } + leaf unicast { + type boolean; + default "false"; + description + "Send unicast ARP aging probe messages for a dynamic ARP + entry."; + } + } + container gratuitous { + description + "Configure gratuitous ARP."; + leaf gratuitous-enable { + type boolean; + default "false"; + description + "Enable or disable sending gratuitous-arp packet on + interface."; + } + leaf interval { + type uint32 { + range "1..86400"; + } + units "second"; + description + "The interval of sending gratuitous-arp packet on the + interface."; + } + leaf drop { + type boolean; + default "false"; + description + "Drop the receipt of gratuitous ARP packets on the interface."; + } + } + container statistics { + config false; + description + "IP ARP Statistics information on interfaces"; + leaf in-requests-pkts { + type uint64; + description + "Total ARP requests received"; + } + leaf in-replies-pkts { + type uint64; + description + "Total ARP replies received"; + } + leaf in-gratuitous-pkts { + type uint64; + description + "Total gratuitous ARP received"; + } + leaf out-requests-pkts { + type uint64; + description + "Total ARP requests sent"; + } + leaf out-replies-pkts { + type uint64; + description + "Total ARP replies sent"; + } + leaf out-gratuitous-pkts { + type uint64; + description + "Total gratuitous ARP sent"; + } + } + } + } + augment "/if:interfaces/if:interface/ip:ipv4/ip:neighbor" { + description + "Augment neighbor list with parameters of ARP, + eg., support for remaining expire time query on interfaces."; + leaf remaining-expire-time { + type uint32; + config false; + description + "Remaining expire time of a dynamic ARP entry. "; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-arp@2017-10-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-arp@2017-10-18.yang index 63347602c..852078e88 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-arp@2017-10-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-arp@2017-10-18.yang @@ -1,368 +1,138 @@ -module ietf-arp { - namespace "urn:ietf:params:xml:ns:yang:ietf-arp"; - prefix arp; - - // import some basic types - - import ietf-inet-types { - prefix inet; - } - - import ietf-yang-types { - prefix yang; - } - - import ietf-interfaces { - prefix if; - } - - import ietf-ip { - prefix ip; - } - - import ietf-network-instance { - prefix ni; - } - organization - "IETF Routing Area Working Group (rtgwg)"; - contact - "WG Web: - WG List: - Editor: Xiaojian Ding - dingxiaojian1@huawei.com - Editor: Feng Zheng - habby.zheng@huawei.com"; - description - "Address Resolution Protocol (ARP) management, which includes - static ARP configuration, dynamic ARP learning, ARP entry query, - and packet statistics collection."; - - revision 2017-10-18 { - description - "Init revision"; - reference - "RFC XXX: ARP (Address Resolution Protocol) YANG data model."; - } - -/*grouping*/ - - grouping arp-prob-grouping { - description - "Common configuration for all ARP probe."; - leaf probe-interval { - type uint8 { - range "1..5"; - } - units "second"; - description - "Interval for detecting dynamic ARP entries."; - } - leaf probe-times { - type uint8 { - range "0..10"; - } - description - "Number of aging probe attempts for a dynamic ARP entry. - If a device does not receive an ARP reply message after - the number of aging probe attempts reaches a specified - number, the dynamic ARP entry is deleted."; - } - leaf probe-unicast { - type boolean; - default "false"; - description - "Send unicast ARP aging probe messages for a dynamic ARP - entry."; - } - } - - grouping arp-gratuitous-grouping { - description - "Configure gratuitous ARP."; - leaf arp-gratuitous { - type boolean; - default "false"; - description - "Enable or disable sending gratuitous-arp packet on - interface."; - } - leaf arp-gratuitous-interval { - type uint32 { - range "1..86400"; - } - units "second"; - description - "The interval of sending gratuitous-arp packet on the - interface."; - } - leaf arp-gratuitous-drop { - type boolean; - default "false"; - description - "Drop the receipt of gratuitous ARP packets on the interface."; - } - } - - grouping arp-statistics-grouping { - description "IP ARP Statistics information"; - leaf requests-received { - type uint32; - description "Total ARP requests received"; - } - leaf replies-received { - type uint32; - description "Total ARP replies received"; - } - leaf gratuitous-received { - type uint32; - description "Total gratuitous ARP received"; - } - leaf requests-sent { - type uint32; - description "Total ARP requests sent"; - } - leaf replies-sent { - type uint32; - description "Total ARP replies sent"; - } - leaf gratuitous-sent { - type uint32; - description "Total gratuitous ARP sent"; - } - } - - /* Typedefs */ - - typedef routing-instance-ref { - type leafref { - path "/ni:network-instances/ni:network-instance/ni:name"; - } - description - "This type is used for leafs that reference a routing instance - configuration."; - } - - /* Configuration data nodes */ - - container arp { - description - "Address Resolution Protocol (ARP) management, which includes - static ARP configuration, dynamic ARP learning, ARP entry - query, and packet statistics collection."; - - container arp-static-tables { - //config false; - description - "List of ARP entries that can be configured."; - list arp-static-table { - key "ip-address"; - description - "Short static ARP table. By default, the system ARP table is - empty, and address mappings are implemented by dynamic - ARP."; - - leaf ip-address { - type inet:ipv4-address-no-zone; - description - "IP address, in dotted decimal notation."; - } - leaf mac-address { - type yang:mac-address; - mandatory true; - description - "MAC address in the format of H-H-H, in which H is - a hexadecimal number of 1 to 4 bits."; - } - - } - }//End of arp-tables - - container arp-statistics { - config false; - description - "List of ARP packet statistics."; - container global-statistics { - description - "ARP packet statistics."; - uses arp-statistics-grouping; - leaf drops-received { - type uint32 { - range "0..4294967294"; - } - description - "Number of ARP packets discarded."; - } - leaf total-received { - type uint32 { - range "0..4294967294"; - } - description - "Total number of ARP received packets."; - } - leaf total-sent { - type uint32 { - range "0..4294967294"; - } - description - "Total number of ARP sent packets."; - } - leaf arp-dynamic-count { - type uint32 { - range "0..4294967294"; - } - description - "Number of dynamic ARP count."; - } - leaf arp-static-count { - type uint32 { - range "0..4294967294"; - } - description - "Number of static ARP count."; - } - } - container local-statistics { - list arp-if-statistics { - key "if-name"; - description - "ARP statistics on interfaces. ARP statistics on all - interfaces are displayed in sequence."; - leaf if-name { - type leafref { - path "/if:interfaces/if:interface/if:name"; - } - description - "Name of an interface where ARP statistics to be - displayed reside."; - } - uses arp-statistics-grouping; - } - - description - "foo"; - } - } - } - - //End of arp-static-tables - - augment "/if:interfaces/if:interface/ip:ipv4/ip:neighbor" - { - description - "Long static ARP table has been defined in - /if:interfaces/if:interface/ip:ipv4/ip:neighbor"; - } - augment "/if:interfaces-state/if:interface/ip:ipv4/ip:neighbor" { - description - "List of ARP entries that can be queried."; - - leaf vrf-name { - type arp:routing-instance-ref; - config false; - description - "Name of the VPN instance to which an ARP entry - belongs."; - } - - leaf expire-time { - - type uint32 { - range "1..1440"; - } - config false; - description - "Aging time of a dynamic ARP entry. "; - } - - } - - augment "/if:interfaces/if:interface" { - description - "List of ARP Interface configurations.including the aging time, - probe interval, number of aging probe attempts, ARP - learning status, and ARP proxy."; - - leaf expire-time { - type uint32 { - range "60..86400"; - } - units "second"; - description - "Aging time of a dynamic ARP entry."; - } - leaf arp-learn-disable { - type boolean; - default "false"; - description - "Whether dynamic ARP learning is disabled. - If the value is True, dynamic ARP learning - is disabled. If the value is False, dynamic - ARP learning is enabled."; - } - leaf proxy-enable { - type boolean; - default "false"; - description - "Enable proxy ARP."; - } - uses arp-prob-grouping; - uses arp-gratuitous-grouping; - - list arp-if-limit { - key "vlan-id"; - description - "Maximum number of dynamic ARP entries that an - interface can learn. If the number of ARP - entries that an interface can learn changes - and the number of the learned ARP entries - exceeds the changed value, the interface cannot - learn additional ARP entries. The system prompts - you to delete the excess ARP entries."; - - leaf vlan-id { - type uint16 { - range "0..4094"; - } - description - "ID of the VLAN where ARP learning is restricted. - This parameter can be set only on Layer 2 - interfaces and sub-interfaces. Ethernet, GE, VE, - and Eth-Trunk interfaces can be both Layer 3 and - Layer 2 interfaces. When they work in Layer 3 mode, - they cannot have VLANs configured. When they work - in Layer 2 mode, they must have VLANs configured. - Ethernet, GE, and Eth-Trunk sub-interfaces can be - both common and QinQ sub-interfaces."; - } - leaf limit-number { - type uint32 { - range "1..65536"; - } - mandatory true; - description - "Maximum number of dynamic ARP entries that an - interface can learn."; - } - leaf threshold-value { - type uint32 { - range "60..100"; - } - must "not(not(../limit-number))"{ - description - "Upper boundary must be higher than lower boundary."; - } - description - "Alarm-Threshold for Maximum number of ARP entries - that an interface can learn."; - } - } - } - augment "/if:interfaces-state/if:interface" { - description - "ARP statistics on interfaces. ARP statistics on all - interfaces are displayed in sequence."; - uses arp-statistics-grouping; - } - // End of arp-statistics - -} +module ietf-arp { + namespace "urn:ietf:params:xml:ns:yang:ietf-arp"; + prefix arp; + + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + + organization + "IETF Routing Area Working Group (rtgwg)"; + contact + "WG Web: + WG List: + Editor: Xiaojian Ding + dingxiaojian1@huawei.com + Editor: Feng Zheng + habby.zheng@huawei.com + Editor: Robert Wilton + rwilton@cisco.com"; + description + "Address Resolution Protocol (ARP) management, which includes + static ARP configuration, dynamic ARP learning, ARP entry query, + and packet statistics collection."; + + revision 2017-10-18 { + description + "Init revision"; + reference "RFC XXX: ARP (Address Resolution Protocol) YANG data model."; + } + + feature global-static-table { + description + "This feature indicates that the device allows static entries + to be configured globally."; + } + + container arp { + description + "Address Resolution Protocol (ARP) management, which includes + static ARP configuration, dynamic ARP learning, ARP entry + query, and packet statistics collection."; + container global-static-table { + if-feature "global-static-table"; + description + "Set a global static ARP entry, which is independent of the interface."; + list static-entry { + key "ip-address"; + description + "List of ARP static entries that can be configured globally."; + leaf ip-address { + type inet:ipv4-address-no-zone; + description + "IP address, in dotted decimal notation."; + } + leaf mac-address { + type yang:mac-address; + mandatory true; + description + "MAC address in the format of H-H-H, in which H is + a hexadecimal number of 1 to 4 bits."; + } + } + } + container statistics { + config false; + description + "List of ARP packet statistics."; + leaf in-requests-pkts { + type uint64; + description + "Total ARP requests received"; + } + leaf in-replies-pkts { + type uint64; + description + "Total ARP replies received"; + } + leaf in-gratuitous-pkts { + type uint64; + description + "Total gratuitous ARP received"; + } + leaf out-requests-pkts { + type uint64; + description + "Total ARP requests sent"; + } + leaf out-replies-pkts { + type uint64; + description + "Total ARP replies sent"; + } + leaf out-gratuitous-pkts { + type uint64; + description + "Total gratuitous ARP sent"; + } + leaf in-drops { + type uint64 { + range "0..4294967294"; + } + description + "Number of ARP packets discarded."; + } + leaf in-total { + type uint64 { + range "0..4294967294"; + } + description + "Total number of ARP received packets."; + } + leaf out-total { + type uint64 { + range "0..4294967294"; + } + description + "Total number of ARP sent packets."; + } + leaf all-dynamic-pkts { + type uint64 { + range "0..4294967294"; + } + description + "Number of dynamic ARP packets count."; + } + leaf all-static-pkts { + type uint64 { + range "0..4294967294"; + } + description + "Number of static ARP packets count."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-03-03.yang similarity index 55% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-03-03.yang index a471f98f8..858c1c663 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-mh@2018-03-03.yang @@ -5,6 +5,7 @@ module ietf-bfd-ip-mh { namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-ip-mh"; prefix "bfd-ip-mh"; + import ietf-bfd-types { prefix "bfd-types"; } @@ -15,12 +16,15 @@ module ietf-bfd-ip-mh { import ietf-inet-types { prefix "inet"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } organization "IETF BFD Working Group"; @@ -55,7 +59,7 @@ module ietf-bfd-ip-mh { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; reference "RFC XXXX: A YANG data model for BFD IP multihop."; } @@ -69,47 +73,51 @@ module ietf-bfd-ip-mh { container ip-mh { description "BFD IP multihop top level container."; - uses bfd-types:session-statistics; + uses bfd-types:session-statistics-summary; - list session-group { - key "source-addr dest-addr"; + container session-groups { description - "Group of BFD IP multi-hop sessions (for ECMP). A " + - "group of sessions is between 1 source and 1 " + - "destination, each session has a different field " + - "in UDP/IP hdr for ECMP."; - - leaf source-addr { - type inet:ip-address; - description - "Local IP address."; - } - leaf dest-addr { - type inet:ip-address; - description - "IP address of the peer."; - } - uses bfd-types:common-cfg-parms; - - leaf tx-ttl { - type bfd-types:hops; - default 255; - description "Hop count of outgoing BFD control packets."; - } - leaf rx-ttl { - type bfd-types:hops; - mandatory true; - description - "Minimum allowed hop count value for incoming BFD control - packets. Control packets whose hop count is lower than this - value are dropped."; - } - list sessions { - config false; + "BFD IP multi-hop session groups."; + list session-group { + key "source-addr dest-addr"; description - "The multiple BFD sessions between a source and a " + - "destination."; - uses bfd-types:all-session; + "Group of BFD IP multi-hop sessions (for ECMP). A " + + "group of sessions is between 1 source and 1 " + + "destination, each session has a different field " + + "in UDP/IP hdr for ECMP."; + + leaf source-addr { + type inet:ip-address; + description + "Local IP address."; + } + leaf dest-addr { + type inet:ip-address; + description + "IP address of the peer."; + } + uses bfd-types:common-cfg-parms; + + leaf tx-ttl { + type bfd-types:hops; + default 255; + description "Hop count of outgoing BFD control packets."; + } + leaf rx-ttl { + type bfd-types:hops; + mandatory true; + description + "Minimum allowed hop count value for incoming BFD control + packets. Control packets whose hop count is lower than + this value are dropped."; + } + list sessions { + config false; + description + "The multiple BFD sessions between a source and a " + + "destination."; + uses bfd-types:all-session; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-03-03.yang similarity index 69% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-03-03.yang index 54931778d..7fd7efd76 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-ip-sh@2018-03-03.yang @@ -1,7 +1,6 @@ module ietf-bfd-ip-sh { yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-ip-sh"; prefix "bfd-ip-sh"; @@ -16,17 +15,23 @@ module ietf-bfd-ip-sh { import ietf-interfaces { prefix "if"; - reference "RFC 7223"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc7223bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Interface Management"; } import ietf-inet-types { prefix "inet"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } organization "IETF BFD Working Group"; @@ -52,6 +57,7 @@ module ietf-bfd-ip-sh { 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."; @@ -60,7 +66,7 @@ module ietf-bfd-ip-sh { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; reference "RFC XXXX: A YANG data model for BFD IP single-hop"; } @@ -74,28 +80,32 @@ module ietf-bfd-ip-sh { container ip-sh { description "BFD IP single-hop top level container"; - uses bfd-types:session-statistics; - - list sessions { - key "interface dest-addr"; - description "List of IP single-hop sessions"; - leaf interface { - type if:interface-ref; - description - "Interface on which the BFD session is running."; - } - leaf dest-addr { - type inet:ip-address; - description "IP address of the peer."; - } - leaf source-addr { - type inet:ip-address; - description "Local IP address."; + uses bfd-types:session-statistics-summary; + + container sessions { + description + "BFD IP single-hop sessions."; + list session { + key "interface dest-addr"; + description "List of IP single-hop sessions."; + leaf interface { + type if:interface-ref; + description + "Interface on which the BFD session is running."; + } + leaf dest-addr { + type inet:ip-address; + description "IP address of the peer."; + } + leaf source-addr { + type inet:ip-address; + description "Local IP address."; + } + + uses bfd-types:common-cfg-parms; + + uses bfd-types:all-session; } - - uses bfd-types:common-cfg-parms; - - uses bfd-types:all-session; } list interfaces { key "interface"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-03-03.yang similarity index 54% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-03-03.yang index 1f02a6a01..3ddfbd7e5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-lag@2018-03-03.yang @@ -13,19 +13,26 @@ module ietf-bfd-lag { import ietf-bfd { prefix "bfd"; } + import ietf-interfaces { prefix "if"; - reference "RFC 7223"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc7223bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Interface Management"; } import ietf-inet-types { prefix "inet"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } organization "IETF BFD Working Group"; @@ -60,7 +67,7 @@ module ietf-bfd-lag { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; reference "RFC XXXX: A YANG data model for BFD over LAG"; } @@ -76,67 +83,71 @@ module ietf-bfd-lag { container micro-bfd-ipv4-session-statistics { description "Micro-BFD IPv4 session counters."; - uses bfd-types:session-statistics; + uses bfd-types:session-statistics-summary; } container micro-bfd-ipv6-session-statistics { description "Micro-BFD IPv6 session counters."; - uses bfd-types:session-statistics; + uses bfd-types:session-statistics-summary; } - list sessions { - key "lag-name"; - description "A LAG interface on which BFD is running."; - leaf lag-name { - type if:interface-ref ; - description "Name of the LAG"; - } - leaf ipv4-dest-addr { - type inet:ipv4-address; - description - "IPv4 address of the peer, for IPv4 micro-BFD."; - } - leaf ipv6-dest-addr { - type inet:ipv6-address; - description - "IPv6 address of the peer, for IPv6 micro-BFD."; - } - uses bfd-types:common-cfg-parms; - - leaf use-ipv4 { - type boolean; - description "Using IPv4 micro-BFD."; - } - leaf use-ipv6 { - type boolean; - description "Using IPv6 micro-BFD."; - } - - list member-links { - key "member-link"; - config false; - description - "Micro-BFD over LAG. This represents one member link."; - - leaf member-link { - type if:interface-ref; + container sessions { + description + "BFD over LAG sessions"; + list session { + key "lag-name"; + description "List of BFD over LAG sessions."; + leaf lag-name { + type if:interface-ref ; + description "Name of the LAG"; + } + leaf ipv4-dest-addr { + type inet:ipv4-address; description - "Member link on which micro-BFD is running."; + "IPv4 address of the peer, for IPv4 micro-BFD."; } - container micro-bfd-ipv4 { - when "../../use-ipv4 = 'true'" { - description "Needed only if IPv4 is used."; - } + leaf ipv6-dest-addr { + type inet:ipv6-address; description - "Micro-BFD IPv4 session state on member link."; - uses bfd-types:all-session; + "IPv6 address of the peer, for IPv6 micro-BFD."; } - container micro-bfd-ipv6 { - when "../../use-ipv6 = 'true'" { - description "Needed only if IPv6 is used."; - } + uses bfd-types:common-cfg-parms; + + leaf use-ipv4 { + type boolean; + description "Using IPv4 micro-BFD."; + } + leaf use-ipv6 { + type boolean; + description "Using IPv6 micro-BFD."; + } + + list member-links { + key "member-link"; + config false; description - "Micro-BFD IPv6 session state on member link."; - uses bfd-types:all-session; + "Micro-BFD over LAG. This represents one member link."; + + leaf member-link { + type if:interface-ref; + description + "Member link on which micro-BFD is running."; + } + container micro-bfd-ipv4 { + when "../../use-ipv4 = 'true'" { + description "Needed only if IPv4 is used."; + } + description + "Micro-BFD IPv4 session state on member link."; + uses bfd-types:all-session; + } + container micro-bfd-ipv6 { + when "../../use-ipv6 = 'true'" { + description "Needed only if IPv6 is used."; + } + description + "Micro-BFD IPv6 session state on member link."; + uses bfd-types:all-session; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls-te@2018-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls-te@2018-03-03.yang new file mode 100644 index 000000000..471b953fd --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls-te@2018-03-03.yang @@ -0,0 +1,126 @@ +module ietf-bfd-mpls-te { + + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-mpls-te"; + + prefix "bfd-mpls-te"; + + import ietf-bfd-types { + prefix "bfd-types"; + } + + import ietf-bfd { + prefix "bfd"; + } + + import ietf-bfd-mpls { + prefix "bfd-mpls"; + } + + import ietf-te { + prefix "te"; + } + + import ietf-routing { + prefix "rt"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; + } + + organization "IETF BFD Working Group"; + + contact + "WG Web: + WG List: + + Editors: Reshad Rahman (rrahman@cisco.com), + Lianshu Zheng (vero.zheng@huawei.com), + Mahesh Jethanandani (mjethanandani@gmail.com)"; + + description + "This module contains the YANG definition for BFD parameters for + MPLS Traffic Engineering as per RFC 5884. + + 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 + (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."; + + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note + + reference "RFC XXXX"; + + revision 2018-03-03 { + description "Initial revision."; + reference "RFC XXXX: A YANG data model for BFD over MPLS-TE"; + } + + /* + * Augments + */ + augment "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol/bfd:bfd" { + description "BFD augmentation for MPLS-TE."; + container mpls-te { + description "BFD MPLS-TE top level container."; + + container egress { + description "Egress configuration."; + + uses bfd-types:client-cfg-parms; + + uses bfd-types:auth-parms; + } + + uses bfd-types:session-statistics-summary; + } + } + + augment "/te:te/te:tunnels/te:tunnel" { + description "BFD configuration on MPLS-TE tunnel."; + + uses bfd-types:common-cfg-parms; + + uses bfd-mpls:encap-cfg; + } + augment "/te:te/te:lsps-state/te:lsp" { + when "/te:te/te:lsps-state/te:lsp/te:origin-type != 'transit'" { + description "BFD information not needed at transit points."; + } + description "BFD state information on MPLS-TE LSP."; + + uses bfd-types:all-session; + + uses bfd-mpls:mpls-dest-address; + } + + /* + * Notifications + */ + notification mpls-te-notification { + description + "Notification for BFD over MPLS-TE session state change. " + + "An implementation may rate-limit notifications, e.g. when a" + + "session is continuously changing state."; + + uses bfd-types:notification-parms; + + uses bfd-mpls:mpls-dest-address; + + leaf tunnel-name { + type string; + description "MPLS-TE tunnel on which BFD was running."; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-03-03.yang similarity index 75% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-03-03.yang index a6e1cc032..2a121d2b9 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-mpls@2018-03-03.yang @@ -16,12 +16,15 @@ module ietf-bfd-mpls { import ietf-inet-types { prefix "inet"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } organization "IETF BFD Working Group"; @@ -37,7 +40,6 @@ module ietf-bfd-mpls { description "This module contains the YANG definition for BFD parameters for MPLS LSPs as per RFC 5884. - Copyright (c) 2018 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -56,7 +58,7 @@ module ietf-bfd-mpls { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; reference "RFC XXXX: A YANG data model for BFD over MPLS LSPs"; } @@ -112,7 +114,7 @@ module ietf-bfd-mpls { container mpls { description "BFD MPLS top level container."; - uses bfd-types:session-statistics; + uses bfd-types:session-statistics-summary; container egress { description "Egress configuration."; @@ -122,28 +124,32 @@ module ietf-bfd-mpls { uses bfd-types:auth-parms; } - list session-group { - key "mpls-fec"; + container session-groups { description - "Group of BFD MPLS sessions (for ECMP). A group of " + - "sessions is for 1 FEC, each session has a different " + - "field in UDP/IP hdr for ECMP."; - leaf mpls-fec { - type inet:ip-prefix; - description "MPLS FEC."; - } - - uses bfd-types:common-cfg-parms; - - list sessions { - config false; + "BFD over MPLS session groups."; + list session-group { + key "mpls-fec"; description - "The BFD sessions for an MPLS FEC. Local " + - "discriminator is unique for each session in the " + - "group."; - uses bfd-types:all-session; - - uses bfd-mpls:mpls-dest-address; + "Group of BFD MPLS sessions (for ECMP). A group of " + + "sessions is for 1 FEC, each session has a different " + + "field in UDP/IP hdr for ECMP."; + leaf mpls-fec { + type inet:ip-prefix; + description "MPLS FEC."; + } + + uses bfd-types:common-cfg-parms; + + list sessions { + config false; + description + "The BFD sessions for an MPLS FEC. Local " + + "discriminator is unique for each session in the " + + "group."; + uses bfd-types:all-session; + + uses bfd-mpls:mpls-dest-address; + } } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-03-03.yang similarity index 82% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-03-03.yang index f55b2112d..ee5dd99f6 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd-types@2018-03-03.yang @@ -3,7 +3,6 @@ module ietf-bfd-types { yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-bfd-types"; - prefix "bfd-types"; import iana-bfd-types { @@ -12,22 +11,25 @@ module ietf-bfd-types { import ietf-inet-types { prefix "inet"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-yang-types { prefix "yang"; - reference "RFC 6991"; + reference "RFC 6991: Common YANG Data Types"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } import ietf-key-chain { prefix "kc"; - reference "RFC 8177"; + reference "RFC 8177: YANG Data Model for Key Chains"; } organization "IETF BFD Working Group"; @@ -42,9 +44,10 @@ module ietf-bfd-types { description "This module contains a collection of BFD specific YANG data type - definitions, as per RFC 5880. + definitions, as per RFC 5880, and also groupings which are common + to other BFD YANG modules. - Copyright (c) 2017 IETF Trust and the persons + 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 @@ -62,14 +65,21 @@ module ietf-bfd-types { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; - reference "RFC XXXX: A YANG data model for BFD"; + reference "RFC XXXX: YANG Data Model for BFD"; } /* * Feature definitions */ + feature single-minimum-interval { + description + "This feature indicates that the server supports configuration + of one minimum interval value which is used for both transmit and + receive minimum intervals."; + } + feature authentication { description "This feature indicates that the server supports BFD @@ -217,7 +227,7 @@ module ietf-bfd-types { choice interval-config-type { description - "Two interval values or 1 value used for both transmit and + "Two interval values or one value used for both transmit and receive."; case tx-rx-intervals { leaf desired-min-tx-interval { @@ -237,6 +247,8 @@ module ietf-bfd-types { } } case single-interval { + if-feature single-minimum-interval; + leaf min-interval { type uint32; units microseconds; @@ -431,75 +443,85 @@ module ietf-bfd-types { } } - container sesssion-statistics { + container session-statistics { config "false"; description "BFD per-session statistics."; leaf create-time { type yang:date-and-time; description - "Time and date when session was created."; + "Time and date when this session was created."; } leaf last-down-time { type yang:date-and-time; description - "Time and date of last time the session went down."; + "Time and date of last time this session went down."; } leaf last-up-time { type yang:date-and-time; description - "Time and date of last time the session went up."; + "Time and date of last time this session went up."; } leaf down-count { - type uint32; - description "Session Down Count."; + type yang:counter32; + description + "The number of times this session has transitioned in the + down state."; } leaf admin-down-count { - type uint32; - description "Session Admin-Down Count."; + type yang:counter32; + description + "The number of times this session has transitioned in the + admin-down state."; } leaf receive-packet-count { - type uint64; - description "Received Packet Count."; + type yang:counter64; + description + "Count of received packets in this session. This includes + valid and invalid received packets."; } leaf send-packet-count { - type uint64; - description "Sent Packet Count."; + type yang:counter64; + description "Count of sent packets in this session."; } - leaf receive-bad-packet { - type uint64; - description "Received bad packet count."; + leaf receive-invalid-packet-count { + type yang:counter64; + description + "Count of invalid received packets in this session."; } - leaf send-failed-packet { - type uint64; - description "Packet Failed to Send Count."; + leaf send-failed-packet-count { + type yang:counter64; + description + "Count of packets which failed to be sent in this session."; } } } - grouping session-statistics { - description "Grouping for session counters."; - container session-statistics { + grouping session-statistics-summary { + description "Grouping for session statistics summary."; + container summary { config false; - description "BFD session counters."; - leaf session-count { - type uint32; - description "Number of sessions."; + description "BFD session statistics summary."; + leaf number-of-sessions { + type yang:gauge32; + description "Number of BFD sessions."; } - leaf session-up-count { - type uint32; - description "Count of sessions which are up."; + leaf number-of-sessions-up { + type yang:gauge32; + description "Number of BFD sessions currently in up state."; } - leaf session-down-count { - type uint32; - description "Count of sessions which are down."; + leaf number-of-sessions-down { + type yang:gauge32; + description "Number of BFD sessions currently in down state."; } - leaf session-admin-down-count { - type uint32; - description "Count of sessions which are admin-down."; + leaf number-of-sessions-admin-down { + type yang:gauge32; + description + "Number of BFD sessions currently in admin-down state."; } } } + grouping notification-parms { description "This group describes common parameters that will be sent " + @@ -509,7 +531,6 @@ module ietf-bfd-types { type discriminator; description "BFD local discriminator."; } - leaf remote-discr { type discriminator; description "BFD remote discriminator."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-01-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-03-03.yang similarity index 74% rename from experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-01-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-03-03.yang index 496f613d4..daf1382ae 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-01-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-bfd@2018-03-03.yang @@ -8,11 +8,17 @@ module ietf-bfd { import ietf-bfd-types { prefix "bfd-types"; + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note + reference "RFC XXXX: YANG Data Model for BFD"; } import ietf-routing { prefix "rt"; - reference "RFC 8022"; + // RFC Ed.: replace XXXX with actual RFC number of + // draft-ietf-netmod-rfc8022bis and remove this note. + reference + "RFC XXXX: A YANG Data Model for Routing Management"; } organization "IETF BFD Working Group"; @@ -29,7 +35,7 @@ module ietf-bfd { "This module contains the YANG definition for BFD parameters as per RFC 5880. - Copyright (c) 2017 IETF Trust and the persons + 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 @@ -47,14 +53,14 @@ module ietf-bfd { reference "RFC XXXX"; - revision 2018-01-22 { + revision 2018-03-03 { description "Initial revision."; - reference "RFC XXXX: A YANG data model for BFD"; + reference "RFC XXXX: YANG Data Model for BFD"; } augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol" { - when "rt:type = 'bfd-types:bfdv1'" { + when "derived-from-or-self(rt:type, 'bfd-types:bfdv1')" { description "This augmentation is only valid for a control-plane protocol instance of BFD (type 'bfdv1')."; @@ -64,7 +70,7 @@ module ietf-bfd { container bfd { description "BFD top level container."; - uses bfd-types:session-statistics; + uses bfd-types:session-statistics-summary; } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-connection-oriented-oam@2018-02-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-connection-oriented-oam@2018-02-07.yang index 5ba8ca8a3..0aa4b062b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-connection-oriented-oam@2018-02-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-connection-oriented-oam@2018-02-07.yang @@ -29,7 +29,20 @@ module ietf-connection-oriented-oam { with YANG modeling. It is assumed that each protocol maps corresponding abstracts to its native format. Each protocol may extend the YANG model defined - here to include protocol specific extensions"; + here to include protocol specific extensions + + 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 + (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 2018-02-07 { description @@ -48,7 +61,6 @@ module ietf-connection-oriented-oam { connectivity verification command or rpc model for connectivity verification command."; } - feature continuity-check { description "This feature indicates that the server supports @@ -145,7 +157,6 @@ module ietf-connection-oriented-oam { "Defines different defect types, e.g. Remote Defect Indication (rdi), loss of continuity"; } - identity rdi { base defect-types; description @@ -163,13 +174,16 @@ module ietf-connection-oriented-oam { identity loss-of-continuity { base defect-types; description - "If no proactive Continuity Check (CC) + "Indicate there is no proactive Continuity Check (CC) OAM packets from the source Maintenance End Point (MEP) (and in the case of Connectivity Verification , this includes the requirement to have the expected unique, technology dependent source MEP - identifier) are received within the interval."; + identifier) received within the interval."; + reference + "RFC 6371: Operations, Administration, and Maintenance + Framework for MPLS-Based Transport Networks"; } identity cv-defect { @@ -178,11 +192,11 @@ module ietf-connection-oriented-oam { "This function should support monitoring between the Maintenance End Points (MEPs) and, in addition, between a MEP and Maintenance Intermediate - Point (MIP). [RFC6371] highlights, when performing - Connectivity Verification, the need for the Continuity - Check and Connectivity Verification (CC-V) messages - to include unique identification of the MEG that is being - monitored and the MEP that originated the message."; + Point (MIP). When performing Connectivity Verification, + the need for the Continuity Check and Connectivity + Verification (CC-V) messages to include unique + identification of the MEG that is being monitored and + the MEP that originated the message."; reference "RFC 6371: Operations, Administration, and Maintenance Framework for MPLS-Based Transport Networks"; @@ -301,6 +315,7 @@ module ietf-connection-oriented-oam { association End Point."; } } + grouping time-to-live { leaf ttl { type uint8; @@ -445,6 +460,7 @@ module ietf-connection-oriented-oam { description "Maintenance Domain (MD) name."; } + grouping ma-identifier { description "Grouping containing leaves sufficient to identify @@ -588,13 +604,14 @@ module ietf-connection-oriented-oam { container domains { description - "Contains configuration related data. Within the container - is list of fault domains. Within each domian has List of - Maintenance Association (MA)."; + "Contains configuration related data. Within the + container there is a list of fault domains. each + domian has a List of Maintenance Association + (MA)."; list domain { key "technology md-name-string"; description - "Define the list of fault Domains within the + "Define a list of Domains within the ietf-connection-oriented-oam module."; uses maintenance-domain-id; uses md-name; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-crypto-types@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-crypto-types@2018-03-05.yang new file mode 100644 index 000000000..54b09f63c --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-crypto-types@2018-03-05.yang @@ -0,0 +1,435 @@ +module ietf-crypto-types { + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-crypto-types"; + prefix "ct"; + + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 6536: Network Configuration Protocol (NETCONF) Access + Control Model"; + } + + organization + "IETF NETCONF (Network Configuration) Working Group"; + + contact + "WG Web: + WG List: + + Author: Kent Watsen + "; + + description + "This module defines common YANG types for cryptography applications. + + 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 + (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 "2018-03-05" { + description + "Initial version"; + reference + "RFC XXXX: Common YANG Data Types for Cryptography"; + } + + /****************************************/ + /* Identities for Hashing Algorithms */ + /****************************************/ + + identity hash-algorithm { + description + "A base identity for hash algorithm verification. + + This identity is used in the ietf-zerotouch-information + module (draft-ietf-netconf-zerotouch)"; + } + + identity sha-256 { + base "hash-algorithm"; + description "The SHA-256 algorithm."; + reference "RFC 6234: US Secure Hash Algorithms."; + } + + /************************************************************/ + /* Identities for Key Algorithms (used by Certificates) */ + /************************************************************/ + + identity key-algorithm { + description + "Base identity from which all key-algorithms are derived. + + This identity is used in the 'private-key-grouping' grouping + and the 'generate-private-key' action below."; + } + + identity rsa1024 { + base key-algorithm; + description + "The RSA algorithm using a 1024-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity rsa2048 { + base key-algorithm; + description + "The RSA algorithm using a 2048-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity rsa3072 { + base key-algorithm; + description + "The RSA algorithm using a 3072-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity rsa4096 { + base key-algorithm; + description + "The RSA algorithm using a 4096-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity rsa7680 { + base key-algorithm; + description + "The RSA algorithm using a 7680-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity rsa15360 { + base key-algorithm; + description + "The RSA algorithm using a 15360-bit key."; + reference + "RFC3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1."; + } + + identity secp192r1 { + base key-algorithm; + description + "The secp192r1 algorithm."; + reference + "RFC5480: + Elliptic Curve Cryptography Subject Public Key Information."; + } + + identity secp256r1 { + base key-algorithm; + description + "The secp256r1 algorithm."; + reference + "RFC5480: + Elliptic Curve Cryptography Subject Public Key Information."; + } + + identity secp384r1 { + base key-algorithm; + description + "The secp384r1 algorithm."; + reference + "RFC5480: + Elliptic Curve Cryptography Subject Public Key Information."; + } + + identity secp521r1 { + base key-algorithm; + description + "The secp521r1 algorithm."; + reference + "RFC5480: + Elliptic Curve Cryptography Subject Public Key Information."; + } + + /************************************/ + /* Typedefs for ASN.1 structures */ + /************************************/ + + typedef x509 { + type binary; + description + "A Certificate structure, as specified in RFC 5280, encoded using + ASN.1 distinguished encoding rules (DER), as specified in + ITU-T X.690."; + reference + "RFC 5652: + Cryptographic Message Syntax (CMS) + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + + typedef cms { + type binary; + description + "A ContentInfo structure, as specified in RFC 5652, encoded + using ASN.1 distinguished encoding rules (DER), as specified + in ITU-T X.690."; + reference + "RFC 5652: + Cryptographic Message Syntax (CMS) + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + + /******************************************************************/ + /* Groupings for a Private Key and its Associated Certificates */ + /******************************************************************/ + + grouping private-key-grouping { + description + "A private/public key pair, and an action to request the + system to generate a private key. + + This grouping is currently used by the YANG modules + ietf-ssh-client, ietf-ssh-server, ietf-tls-client, + and ietf-tls-server, where it populates the SSH/TLS + peer object's private key parameters."; + leaf algorithm { + type identityref { + base "key-algorithm"; + } + description + "Identifies the key's algorithm. More specifically, this + leaf specifies how the 'private-key' and 'public-key' + binary leafs are encoded."; + } + leaf private-key { + nacm:default-deny-all; + type union { + type binary; + type enumeration { + enum "hardware-protected" { + description + "The private key is inaccessible due to being + protected by a cryptographic hardware module + (e.g., a TPM)."; + } + } + } + must "../algorithm"; + description + "A binary that contains the value of the private key. The + interpretation of the content is defined by the key + algorithm. For example, a DSA key is an integer, an RSA + key is represented as RSAPrivateKey as defined in + [RFC3447], and an Elliptic Curve Cryptography (ECC) key + is represented as ECPrivateKey as defined in [RFC5915]"; + reference + "RFC 3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1. + RFC 5915: Elliptic Curve Private Key Structure."; + } + leaf public-key { + type binary; + must "../algorithm"; + must "../private-key"; + description + "A binary that contains the value of the public key. The + interpretation of the content is defined by the key + algorithm. For example, a DSA key is an integer, an RSA + key is represented as RSAPublicKey as defined in + [RFC3447], and an Elliptic Curve Cryptography (ECC) key + is represented using the 'publicKey' described in + [RFC5915]"; + reference + "RFC 3447: Public-Key Cryptography Standards (PKCS) #1: + RSA Cryptography Specifications Version 2.1. + RFC 5915: Elliptic Curve Private Key Structure."; + } + action generate-private-key { + description + "Requests the device to generate a private key using the + specified key algorithm. This action is primarily to + support cryptographic processors that must generate + the private key themselves. The resulting key is + considered operational state and hence only present + in ."; + input { + leaf algorithm { + type identityref { + base "key-algorithm"; + } + mandatory true; + description + "The algorithm to be used when generating the key."; + } + } + } // end generate-private-key + } + + grouping certificates-grouping { + description + "A container of certificates, and an action to generate + a certificate signing request. + + This grouping is currently used by the YANG modules + ietf-ssh-client, ietf-ssh-server, ietf-tls-client, + and ietf-tls-server, where it populates the SSH/TLS + peer object's value for a certificates associated + with the private key."; + container certificates { + description + "Certificates associated with this key. More than one + certificate supports, for instance, a TPM-protected + key that has both IDevID and LDevID certificates + associated."; + list certificate { + key name; + description + "A certificate for this private key."; + leaf name { + type string; + description + "An arbitrary name for the certificate."; + } + leaf value { + type binary; + description + "A PKCS #7 SignedData structure, as specified by + Section 9.1 in RFC 2315, containing just certificates + (no content, signatures, or CRLs), encoded using ASN.1 + distinguished encoding rules (DER), as specified in + ITU-T X.690. + + This structure contains the certificate itself as well + as any intermediate certificates leading up to a trust + anchor certificate. The trust anchor certificate MAY + be included as well."; + reference + "RFC 2315: + PKCS #7: Cryptographic Message Syntax Version 1.5. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + } + action generate-certificate-signing-request { + description + "Generates a certificate signing request structure for + the associated private key using the passed subject and + attribute values. The specified assertions need to be + appropriate for the certificate's use. For example, + an entity certificate for a TLS server SHOULD have + values that enable clients to satisfy RFC 6125 + processing."; + input { + leaf subject { + type binary; + mandatory true; + description + "The 'subject' field from the CertificationRequestInfo + structure as specified by RFC 2986, Section 4.1 encoded + using the ASN.1 distinguished encoding rules (DER), as + specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax Specification + Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + leaf attributes { + type binary; + description + "The 'attributes' field from the CertificationRequestInfo + structure as specified by RFC 2986, Section 4.1 encoded + using the ASN.1 distinguished encoding rules (DER), as + specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax Specification + Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + output { + leaf certificate-signing-request { + type binary; + mandatory true; + description + "A CertificationRequest structure as specified by RFC + 2986, Section 4.1 encoded using the ASN.1 distinguished + encoding rules (DER), as specified in ITU-T X.690."; + reference + "RFC 2986: + PKCS #10: Certification Request Syntax Specification + Version 1.7. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + + } + } + } + } + + notification certificate-expiration { + description + "A notification indicating that a configured certificate is + either about to expire or has already expired. When to send + notifications is an implementation specific decision, but + it is RECOMMENDED that a notification be sent once a month + for 3 months, then once a week for four weeks, and then once + a day thereafter."; + leaf certificate { + type instance-identifier; + mandatory true; + description + "Identifies which certificate is expiring or is expired."; + } + leaf expiration-date { + type yang:date-and-time; + mandatory true; + description + "Identifies the expiration date on the certificate."; + } + } + +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-detnet-static@2018-01-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-detnet-static@2018-01-15.yang new file mode 100644 index 000000000..bdec5f056 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-detnet-static@2018-01-15.yang @@ -0,0 +1,178 @@ +module ietf-detnet-static { + namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-static"; + prefix "detnet-static"; + + import ietf-routing { + prefix "rt"; + } + + import ietf-yang-types{ + prefix "yang"; + } + + import ietf-inet-types{ + prefix "inet"; + } + + import ietf-routing-types { + prefix "rt-types"; + } + + organization + "IETF Deterministic Networking(detnet)Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Lou Berger + + + Editor: Xuesong Geng + + + Editor: Mach Chen + "; + + description + "This YAGN module augments the 'ietf-routing'module + with detnet flow configuration attribute"; + revision "2018-01-15" { + description "Initial revision"; + reference "RFC XXXX: YANG Data Model for DetNet Topologies"; + //RFC Ed.: replace XXXX with actual RFC number and remove + // this note + } + + grouping flow-identfication { + description + "DetNet flow identification"; + reference + "draft-farkas-detnet-flow-information-model"; + leaf source-ip-address { + type inet:ip-address; + description + "Source IP address"; + } + leaf destination-ip-address { + type inet:ip-address; + description + "Destination IP address"; + } + leaf source-mac-address { + type yang:mac-address; + description + "Source MAC address"; + } + leaf destination-mac-address { + type yang:mac-address; + description + "Destination MAC address"; + } + leaf ipv6-flow-label { + type uint32; + description + "ipv6 flow label"; + } + leaf mpls-label { + type rt-types:mpls-label; + description + "MPLS Label"; + } + } + + grouping traffic-specification{ + description + "traffic-specification specifies how the Source + transmits packets for the flow. This is the + promise/request of the Source to the network. + The network uses this traffic specification + to allocate resources and adjust queue + parameters in network nodes."; + reference + "draft-farkas-detnet-flow-information-model"; + leaf max-packets-per-interval{ + type uint16; + description + "max-packets-per-interval specifies the maximum + number of packets that the application shall + transmit in one Interval."; + } + leaf max-packet-size{ + type uint16; + description + "max-packet-size specifies maximum packet size + that the Source will transmit"; + } + leaf queuing-algorithm-selection{ + type uint8; + description + ""; + } + } + + grouping routing-configuration{ + description + "configuration parameters direct data plane + operations"; + container flow-identification{ + description + "flow identification"; + uses flow-identfication; + } + leaf operation{ + type enumeration{ + enum transmission{ + description + "Operation: transmit "; + } + enum replication{ + description + "Operation: packet replication"; + } + enum elimination{ + description + "Operation: packet elimination"; + } + enum elimination-and-replication{ + description + "Operation: packet elimination and + replication"; + } + } + description + "The operation will be done to the + packet"; + } + } + + grouping queuing-parameters{ + description + "The paramters used to configure + queuing managment algorithm"; + } + + grouping replication-function{ + description + "The paramters used to configure + packet replication"; + } + + grouping elimination-function{ + description + "The paramters used to configure + packet elimination"; + } + + augment "/rt:routing"{ + description + "DetNet node static configuration + attributes."; + uses flow-identfication; + uses traffic-specification; + uses routing-configuration; + uses queuing-parameters; + uses replication-function; + uses elimination-function; + } + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2017-12-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2017-12-22.yang deleted file mode 100644 index c815bc8ee..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2017-12-22.yang +++ /dev/null @@ -1,444 +0,0 @@ -module ietf-dhcpv6-client { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; - prefix "dhcpv6-client"; - - import ietf-inet-types { - prefix inet; - revision-date "2013-07-15"; - } - import ietf-yang-types { - prefix yang; - revision-date "2013-07-15"; - } - import ietf-dhcpv6-options { - prefix dhcpv6-options; - revision-date "2017-12-22"; - } - - organization "DHC WG"; - contact "yong@csnet1.cs.tsinghua.edu.cn - wangh13@mails.tsinghua.edu.cn - lh.sunlinh@gmail.com - ian.farrer@telekom.de - sladjana.zechlin@telekom.de - hezihao9512@gmail.com "; - - description "This model defines a YANG data model that can be - used to configure and manage a DHCPv6 client."; - - revision 2017-12-22 { - description "Resolve most issues on Ian's github."; - reference "I-D: draft-ietf-dhc-dhcpv6-yang"; - } - - revision 2017-11-24 { - description "First version of the separated client specific - YANG model."; - reference "I-D: draft-ietf-dhc-dhcpv6-yang"; - } - - /* - * Grouping - */ - - grouping vendor-infor { - description "Vendor information."; - container vendor-info { - description ""; - leaf ent-num { - type uint32; - mandatory true; - description "enterprise number"; - } - leaf-list data { - type string; - description "specific vendor info"; - } - } - } - - grouping duid { - description "DHCP Unique Identifier"; - reference "RFC3315: Section 9"; - leaf type-code { - type uint16; - default 65535; - description "Type code of this DUID"; - } - choice duid-type { - default duid-invalid; - description "Selects the format for the DUID."; - case duid-llt { - description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; - reference "RFC3315 Section 9.2"; - - leaf duid-llt-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-llt-time { - type yang:timeticks; - description "The time value is the time that the DUID is generated - represented in seconds since midnight (UTC), January 1, 2000, - modulo 2^32."; - } - leaf duid-llt-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-en { - description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; - reference "RFC3315 Section 9.3"; - leaf duid-en-enterprise-number { - type uint32; - description "Vendor's registered Private Enterprise Number as - maintained by IANA"; - } - leaf duid-en-identifier { - type string; - description "Indentifier, unique to the device that is using it"; - } - } - case duid-ll { - description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; - reference "RFC3315 Section 9.4"; - leaf duid-ll-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-ll-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-uuid { - description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; - reference "RFC6335 Defination of the UUID-Based Unique Identifier"; - leaf uuid { - type yang:uuid; - description "A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters"; - } - } - case duid-invalid { - description "DUID based on free raw bytes"; - leaf data { - type binary; - description "The bits to be used as the identifier"; - } - } - } - } - grouping portset-para { - description "portset parameters"; - container port-parameter { - description "port parameter"; - leaf offset { - type uint8; - mandatory true; - description "offset in a port set"; - } - leaf psid-len { - type uint8; - mandatory true; - description "length of a psid"; - } - leaf psid { - type uint16; - mandatory true; - description "psid value"; - } - } - } - - grouping iaid { - description "IA is a construct through which a server and a - client can identify, group, and manage a set of related IPv6 - addresses. The key of the list is a 4-byte number IAID defined - in [RFC3315]."; - list identity-association { - config "false"; - key iaid; - description "IA"; - leaf iaid { - type uint32; - mandatory true; - description "IAID"; - } - leaf ia-type { - type string; - mandatory true; - description "IA type"; - } - leaf-list ipv6-addr { - type inet:ipv6-address; - description "ipv6 address"; - } - leaf-list ipv6-prefix { - type inet:ipv6-prefix; - description "ipv6 prefix"; - } - leaf-list prefix-length { - type uint8; - description "ipv6 prefix length"; - } - leaf t1-time { - type yang:timeticks; - mandatory true; - description "t1 time"; - } - leaf t2-time { - type yang:timeticks; - mandatory true; - description "t2 time"; - } - leaf preferred-lifetime { - type yang:timeticks; - mandatory true; - description "preferred lifetime"; - } - leaf valid-lifetime { - type yang:timeticks; - mandatory true; - description "valid lifetime"; - } - } - - } - - /* - * Data Nodes - */ - - container client { - presence "Enables the client"; - description "dhcpv6 client portion"; - container client-config{ - description "configuration tree of client"; - container duid { - description "Sets the DUID"; - uses duid; - } - list client-if { - key if-name; - description "A client may have several - interfaces, it is more reasonable to - configure and manage parameters on - the interface-level. The list defines - specific client interfaces and their - data. Different interfaces are distinguished - by the key which is a configurable string - value."; - leaf if-name { - type string; - mandatory true; - description "interface name"; - } - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - leaf description { - type string; - description - "description of the client interface"; - } - leaf pd-function { - type boolean; - mandatory true; - description "Whether the client - can act as a requesting router - to request prefixes using prefix - delegation ([RFC3633])."; - } - leaf rapid-commit { - type boolean; - mandatory true; - description "'1' indicates a client can initiate a Solicit-Reply - message exchange by adding a Rapid Commit option in Solicit - message. '0' means the client is not allowed to add a Rapid - Commit option to request addresses in a two-message exchange - pattern."; - } - container mo-tab { - description "The management tab label indicates the operation - mode of the DHCPv6 client. 'm'=1 and 'o'=1 indicate the - client will use DHCPv6 to obtain all the configuration data. - 'm'=1 and 'o'=0 are a meaningless combination. 'm'=0 and 'o'=1 - indicate the client will use stateless DHCPv6 to obtain - configuration data apart from addresses/prefixes data. - 'm'=0 and 'o'=0 represent the client will not use DHCPv6 - but use SLAAC to achieve configuration."; - // if - not sure about the intended use here as it seems - // to be redfining what will be received in the PIO. Is - // the intention to be whether they PIO options will be - // obeyed as received or overridden? - leaf m-tab { - type boolean; - mandatory true; - description "m tab"; - } - leaf o-tab { - type boolean; - mandatory true; - description "o tab"; - } - } - container client-configured-options { - description "client configured options"; - uses dhcpv6-options:client-option-definitions; - } - } - - } - - container client-state{ - config "false"; - description "state tree of client"; - container if-other-paras { - description "A client can obtain - extra configuration data other than - address and prefix information through - DHCPv6. This container describes such - data the client was configured. The - potential configuration data may - include DNS server addresses, SIP - server domain names, etc."; - uses dhcpv6-options:server-option-definitions; - } - } - } - /* - * Notifications - */ - - notification notifications { - description "dhcpv6 client notification module"; - container dhcpv6-client-event { - description "dhcpv6 client event"; - container ia-lease-event { - description "raised when the - client was allocated a new IA from - the server or it renew/rebind/release - its current IA"; - leaf event-type { - type enumeration{ - enum "allocation" { - description "allocate"; - } - enum "rebind" { - description "rebind"; - } - enum "renew" { - description "renew"; - } - enum "release" { - description "release"; - } - } - mandatory true; - description "event type"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf iaid { - type uint32; - mandatory true; - description "IAID"; - } - leaf serv-name { - type string; - description "server name"; - } - leaf description { - type string; - description "description of event"; - } - } - container invalid-ia-detected { - description "raised when the identity - association of the client can be proved - to be invalid. Possible condition includes - duplicated address, illegal address, etc."; - container duid { - description "Sets the DUID"; - uses duid; - } - leaf cli-duid { - type uint32; - mandatory true; - description "duid of client"; - } - leaf iaid { - type uint32; - mandatory true; - description "IAID"; - } - leaf serv-name { - type string; - description "server name"; - } - leaf description { - type string; - description "description of the event"; - } - } - container retransmission-failed { - description "raised when the retransmission - mechanism defined in [RFC3315] is failed."; - container duid { - description "Sets the DUID"; - uses duid; - } - leaf description { - type enumeration { - enum "MRC failed" { - description "MRC failed"; - } - enum "MRD failed" { - description "MRD failed"; - } - } - mandatory true; - description "description of failure"; - } - } - container failed-status-turn-up { - description "raised when the client receives - a message includes an unsuccessful Status Code - option."; - container duid { - description "Sets the DUID"; - uses duid; - } - leaf status-code { - type enumeration { - enum "1" { - description "UnspecFail"; - } - enum "2" { - description "NoAddrAvail"; - } - enum "3" { - description "NoBinding"; - } - enum "4" { - description "NotOnLink"; - } - enum "5" { - description "UseMulticast"; - } - } - mandatory true; - description "employed status code"; - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2018-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2018-03-04.yang new file mode 100644 index 000000000..85d05d55f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-client@2018-03-04.yang @@ -0,0 +1,342 @@ +module ietf-dhcpv6-client { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-client"; + prefix "dhcpv6-client"; + + import ietf-dhcpv6-options { + prefix dhcpv6-options; + } + import ietf-dhcpv6-types { + prefix dhcpv6-types; + } + import ietf-interfaces { + prefix if; + } + + organization "DHC WG"; + contact + "cuiyong@tsinghua.edu.cn + wangh13@mails.tsinghua.edu.cn + lh.sunlinh@gmail.com + ian.farrer@telekom.de + sladjana.zechlin@telekom.de + hezihao9512@gmail.com "; + + description "This model defines a YANG data model that can be + used to configure and manage a DHCPv6 client."; + + revision 2018-03-04 { + description "Resolved most issues on the DHC official + github"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-12-22 { + description "Resolve most issues on Ian's github."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-11-24 { + description "First version of the separated client specific + YANG model."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + /* + * Data Nodes + */ + + container client { + presence "Enables the client"; + description "dhcpv6 client portion"; + + container client-config { + description "configuration tree of client"; + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + list client-if { + key if-name; + description "A client may have several interfaces, it is more reasonable to + configure and manage parameters on the interface-level. The list defines + specific client interfaces and their data. Different interfaces are + distinguished by the key which is a configurable string value."; + leaf if-name { + type if:interface-ref; + mandatory true; + description "interface name"; + } + + leaf cli-id { + type uint32; + mandatory true; + description "client id"; + } + + /* + leaf description { + type string; + description "description of the client interface"; + } + */ + + leaf pd-function { + type boolean; + mandatory true; + description "Whether the client can act as a requesting router + to request prefixes using prefix delegation ([RFC3633])."; + } + leaf rapid-commit { + type boolean; + mandatory true; + description "'1' indicates a client can initiate a Solicit-Reply message + exchange by adding a Rapid Commit option in Solicit message. '0' means + the client is not allowed to add a Rapid Commit option to request + addresses in a two-message exchange pattern."; + } + + /* + container mo-tab { + description "The management tab label indicates the operation mode of the + DHCPv6 client. + 'm'=1 and 'o'=1 indicate the client will use DHCPv6 to obtain all the configuration + data. + 'm'=1 and 'o'=0 are a meaningless combination. + 'm'=0 and 'o'=1 indicate the client will use stateless DHCPv6 to obtain configuration + data apart from addresses/prefixes data. + 'm'=0 and 'o'=0 represent the client will not use DHCPv6 but use SLAAC to + achieve configuration."; + + // if - not sure about the intended use here as it seems + // to be redfining what will be received in the PIO. Is + // the intention to be whether they PIO options will be + // obeyed as received or overridden? + leaf m-tab { + type boolean; + mandatory true; + description "m tab"; + } + leaf o-tab { + type boolean; + mandatory true; + description "o tab"; + } + } + */ + + container client-configured-options { + description "client configured options"; + uses dhcpv6-options:client-option-definitions; + } + } + } + + container client-state { + config "false"; + description "state tree of client"; + container if-other-paras { + description "A client can obtain extra configuration + data other than address and prefix information through + DHCPv6. This container describes such data the client + was configured. The potential configuration data may + include DNS server addresses, SIP server domain names, etc."; + uses dhcpv6-options:server-option-definitions; + } + container packet-stats { + config "false"; + description "A container records + all the packet status information + of a specific interface."; + leaf solicit-count { + type uint32; + mandatory true; + description "solicit counter"; + } + leaf request-count { + type uint32; + mandatory true; + description "request counter"; + } + leaf renew-count { + type uint32; + mandatory true; + description "renew counter"; + } + leaf rebind-count { + type uint32; + mandatory true; + description "rebind counter"; + } + leaf decline-count { + type uint32; + mandatory true; + description "decline counter"; + } + leaf release-count { + type uint32; + mandatory true; + description "release counter"; + } + leaf info-req-count { + type uint32; + mandatory true; + description "information request counter"; + } + leaf advertise-count { + type uint32; + mandatory true; + description "advertise counter"; + } + leaf confirm-count { + type uint32; + mandatory true; + description "confirm counter"; + } + leaf reply-count { + type uint32; + mandatory true; + description "reply counter"; + } + leaf reconfigure-count { + type uint32; + mandatory true; + description "recofigure counter"; + } + } + } + + } + + /* + * Notifications + */ + + notification notifications { + description "dhcpv6 client notification module"; + container dhcpv6-client-event { + description "dhcpv6 client event"; + + container ia-lease-event { + description "raised when the client was allocated + a new IA from the server or it renew/rebind/release + its current IA"; + leaf event-type { + type enumeration { + enum "allocation" { + description "allocate"; + } + enum "rebind" { + description "rebind"; + } + enum "renew" { + description "renew"; + } + enum "release" { + description "release"; + } + } + mandatory true; + description "event type"; + } + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf serv-name { + type string; + description "server name"; + } + leaf description { + type string; + description "description of event"; + } + } + + container invalid-ia-detected { + description "raised when the identity association of the + client can be proved to be invalid. Possible condition + includes duplicated address, illegal address, etc."; + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf cli-duid { + type uint32; + mandatory true; + description "duid of client"; + } + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf serv-name { + type string; + description "server name"; + } + leaf description { + type string; + description "description of the event"; + } + } + + container retransmission-failed { + description "raised when the retransmission mechanism defined + in [RFC3315] is failed."; + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf description { + type enumeration { + enum "MRC failed" { + description "MRC failed"; + } + enum "MRD failed" { + description "MRD failed"; + } + } + mandatory true; + description "description of failure"; + } + } + + container failed-status-turn-up { + description "raised when the client receives a message includes + an unsuccessful Status Code option."; + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf status-code { + type enumeration { + enum "1" { + description "UnspecFail"; + } + enum "2" { + description "NoAddrAvail"; + } + enum "3" { + description "NoBinding"; + } + enum "4" { + description "NotOnLink"; + } + enum "5" { + description "UseMulticast"; + } + } + mandatory true; + description "employed status code"; + } + } + + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2017-12-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2018-03-04.yang similarity index 77% rename from experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2017-12-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2018-03-04.yang index bcdb878d2..3fd66d7e2 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2017-12-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-options@2018-03-04.yang @@ -5,23 +5,30 @@ module ietf-dhcpv6-options { import ietf-inet-types { prefix inet; - revision-date "2013-07-15"; } import ietf-yang-types { prefix yang; - revision-date "2013-07-15"; + } + import ietf-dhcpv6-types { + prefix dhcpv6-types; } organization "DHC WG"; - contact "yong@csnet1.cs.tsinghua.edu.cn + contact + "cuiyong@tsinghua.edu.cn wangh13@mails.tsinghua.edu.cn lh.sunlinh@gmail.com ian.farrer@telekom.de sladjana.zechlin@telekom.de hezihao9512@gmail.com"; - description "This model defines a YANG data model that can be - used to configure and manage a DHCPv6 server."; + used to configure DHCPv6 options."; + + revision 2018-03-04 { + description "Resolved most issues on the DHC official + github"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } revision 2017-12-22 { description "Resolve most issues on Ian's github."; @@ -31,7 +38,6 @@ module ietf-dhcpv6-options { revision 2017-11-24 { description "First version of the separated DHCPv6 options YANG model."; - reference "I-D:draft-ietf-dhc-dhcpv6-yang"; } @@ -49,8 +55,8 @@ module ietf-dhcpv6-options { feature sip-server-address-list-op { description "Support for SIP Server Address List option"; } - feature dns-config-op { - description "Support for DNS Recursive Name Server option"; + feature dns-servers-op { + description "Support for DNS Servers Option"; } feature domain-searchlist-op { description "Support for Domain Search List Option"; @@ -138,8 +144,7 @@ module ietf-dhcpv6-options { // features for relay-supplied options feature erp-local-domain-name-op { - description "Support for ERP Local Domain - Name option"; + description "Support for ERP Local Domain Name option"; } // features for client options @@ -190,187 +195,85 @@ module ietf-dhcpv6-options { Integer Value"; } feature operator-op-int16 { - description "Support for Opion with 16-bit - Integer Value"; + description "Support for Opion with 16-bit Integer Value"; } feature operator-op-int8 { - description "Support for Opion with 8-bit - Integer Value"; + description "Support for Opion with 8-bit Integer Value"; } feature operator-op-uri { description "Support for Opion with URI"; } feature operator-op-textstring { - description "Support for Opion with Text - String"; + description "Support for Opion with Text String"; } feature operator-op-var-data { - description "Support for Opion with - Variable-Length Data"; + description "Support for Opion with Variable-Length Data"; } feature operator-op-dns-wire { description "Support for Opion with DNS Wire Format Domain Name List"; } - /* * Groupings */ - grouping portset-para { - description "portset parameters"; - container port-parameter { - description "port parameter"; - leaf offset { - type uint8; - mandatory true; - description "offset in a port set"; - } - leaf psid-len { - type uint8; - mandatory true; - description "length of a psid"; - } - leaf psid { - type uint16; - mandatory true; - description "psid value"; - } - } - } - - grouping duid { - description "DHCP Unique Identifier"; - reference "RFC3315: Section 9"; - leaf type-code { - type uint16; - default 65535; - description "Type code of this DUID"; - } - choice duid-type { - default duid-invalid; - description "Selects the format for the DUID."; - case duid-llt { - description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; - reference "RFC3315 Section 9.2"; - - leaf duid-llt-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-llt-time { - type yang:timeticks; - description "The time value is the time that the DUID is generated - represented in seconds since midnight (UTC), January 1, 2000, - modulo 2^32."; - } - leaf duid-llt-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-en { - description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; - reference "RFC3315 Section 9.3"; - leaf duid-en-enterprise-number { - type uint32; - description "Vendor's registered Private Enterprise Number as - maintained by IANA"; - } - leaf duid-en-identifier { - type string; - description "Indentifier, unique to the device that is using it"; - } - } - case duid-ll { - description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; - reference "RFC3315 Section 9.4"; - leaf duid-ll-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-ll-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-uuid { - description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; - reference "RFC6335 Defination of the UUID-Based Unique Identifier"; - leaf uuid { - type yang:uuid; - description "A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters"; - } - } - case duid-invalid { - description "DUID based on free raw bytes"; - leaf data { - type binary; - description "The bits to be used as the identifier"; - } - } - } - } - grouping server-option-definitions { description "Contains definitions for options configured on the DHCPv6 server which will be supplied to clients."; + container server-unicast-option { if-feature server-unicast-op; presence "Enable this option"; description "OPTION_UNICAST (12) Server Unicast Option"; - reference "RFC3315: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; + reference "RFC3315: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6)"; leaf server-address { type inet:ipv6-address; description "server ipv6 address"; } } + container sip-server-domain-name-list-option { - if-feature sip-server-domain-name-list-op; - presence "Enable this option"; - description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List"; - reference "RFC3319: Dynamic Host Configuration Protocol - (DHCPv6) Options for Session Initiation Protocol (SIP) - Servers"; - leaf sip-serv-domain-name { - type string; - mandatory true; - description "sip server domain - name"; - } + if-feature sip-server-domain-name-list-op; + presence "Enable this option"; + description "OPTION_SIP_SERVER_D (21) SIP Servers Domain Name List"; + reference "RFC3319: Dynamic Host Configuration Protocol + (DHCPv6) Options for Session Initiation Protocol (SIP) Servers"; + leaf sip-serv-domain-name { + type string; + mandatory true; + description "sip server domain name"; + } } + container sip-server-address-list-option { - if-feature sip-server-address-list-op; - presence "Enable this option"; - description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; - reference "RFC3319: Dynamic Host Configuration Protocol - (DHCPv6) Options for Session Initiation Protocol (SIP) - Servers"; - list sip-server { - key sip-serv-id; - description "sip server info"; - leaf sip-serv-id { - type uint8; - mandatory true; - description "sip server id"; - } - leaf sip-serv-addr { - type inet:ipv6-address; - mandatory true; - description "sip server addr"; - } + if-feature sip-server-address-list-op; + presence "Enable this option"; + description "OPTION_SIP_SERVER_A (22) SIP Servers IPv6 Address List"; + reference "RFC3319: Dynamic Host Configuration Protocol (DHCPv6) + Options for Session Initiation Protocol (SIP) Servers"; + list sip-server { + key sip-serv-id; + description "sip server info"; + leaf sip-serv-id { + type uint8; + mandatory true; + description "sip server id"; } + leaf sip-serv-addr { + type inet:ipv6-address; + mandatory true; + description "sip server addr"; + } + } } - container dns-config-option { - if-feature dns-config-op; + + container dns-servers-option { + if-feature dns-servers-op; presence "Enable this option"; - description "OPTION_DNS_SERVERS (23) DNS recursive Name - Server option"; - reference "RFC3646: DNS Configuration options for Dynamic - Host Configuration Protocol for IPv6 (DHCPv6)"; + description "OPTION_DNS_SERVERS (23) DNS recursive Name Server option"; + reference "RFC3646: DNS Configuration options for Dynamic Host Configuration + Protocol for IPv6 (DHCPv6)"; list dns-server { key dns-serv-id; description "dns server info"; @@ -386,6 +289,7 @@ module ietf-dhcpv6-options { } } } + container domain-searchlist-option { if-feature domain-searchlist-op; presence "Enable this option"; @@ -407,6 +311,7 @@ module ietf-dhcpv6-options { } } } + container nis-config-option { if-feature nis-config-op; presence "Enable this option"; @@ -429,6 +334,7 @@ module ietf-dhcpv6-options { } } } + container nis-plus-config-option { if-feature nis-plus-config-op; presence "Enable this option"; @@ -462,25 +368,27 @@ module ietf-dhcpv6-options { leaf nis-domain-name { type string; description "The Network Information Service (NIS) Domain Name - option is used by the server to convey client's NIS Domain Name - info to the client."; + option is used by the server to convey client's NIS Domain Name + info to the client."; } } + container nis-plus-domain-name-option { - if-feature nis-plus-domain-name-op; - presence "Enable this option"; - description "OPTION_NISP_DOMAIN_NAME (30) Network Information - Service V2 (NIS+) Domain Name Option"; - reference "RFC3989: Network Information Service (NIS) - Configuration Options for Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; - leaf nis-plus-domain-name { - type string; - description "The Network Information Service V2 (NIS+) Domain Name - option is used by the server to convey client's NIS+ Domain Name - info to the client."; - } + if-feature nis-plus-domain-name-op; + presence "Enable this option"; + description "OPTION_NISP_DOMAIN_NAME (30) Network Information + Service V2 (NIS+) Domain Name Option"; + reference "RFC3989: Network Information Service (NIS) + Configuration Options for Dynamic Host Configuration Protocol + for IPv6 (DHCPv6)"; + leaf nis-plus-domain-name { + type string; + description "The Network Information Service V2 (NIS+) Domain Name + option is used by the server to convey client's NIS+ Domain Name + info to the client."; } + } + container sntp-server-option { if-feature sntp-server-op; presence "Enable this option"; @@ -503,6 +411,7 @@ module ietf-dhcpv6-options { } } } + container info-refresh-time-option { if-feature info-refresh-time-op; presence "Enable this option"; @@ -516,6 +425,7 @@ module ietf-dhcpv6-options { description "The refresh time."; } } + container client-fqdn-option { if-feature client-fqdn-op; presence "Enable this option"; @@ -538,6 +448,7 @@ module ietf-dhcpv6-options { description "modify by client"; } } + container posix-timezone-option { if-feature posix-timezone-op; presence "Enable this option"; @@ -549,6 +460,7 @@ module ietf-dhcpv6-options { description "TZ Posix IEEE 1003.1 String"; } } + container tzdb-timezone-option { if-feature tzdb-timezone-op; presence "Enable this option"; @@ -560,49 +472,50 @@ module ietf-dhcpv6-options { description "Reference to the TZ Database"; } } + container ntp-server-option { //This option looks like it needs work to correctly model the //option as defined in the RFC. - // Zihao - Re-modelled so it only contains one - // time source suboption + // Zihao - Re-modelled so it only contains one time source suboption if-feature ntp-server-op; presence "Enable this option"; description "OPTION_NTP_SERVER (56) NTP Server Option for DHCPv6"; reference "RFC5908: Network Time Protocol (NTP) Server Option for - DHCPv6"; + DHCPv6"; list ntp-server { key ntp-serv-id; description "ntp server info"; leaf ntp-serv-id { type uint8; mandatory true; - description "ntp server id"; + description "NTP server id"; } choice ntp-time-source-suboption { description "Select a NTP time source suboption."; case server-address { - leaf-list ntp-serv-addr-suboption { - type inet:ipv6-address; - description "ntp server addr"; - } + leaf-list ntp-serv-addr-suboption { + type inet:ipv6-address; + description "NTP server addr"; + } } case server-multicast-address { leaf-list ntp-serv-mul-addr-suboption { - type inet:ipv6-address; - description "ntp server multicast addr"; - } + type inet:ipv6-address; + description "NTP server multicast addr"; + } } case server-fqdn { leaf-list ntp-serv-fqdn-suboption { - type string; - description "ntp server fqdn"; - } + type string; + description "NTP server fqdn"; + } } } } } + container boot-file-url-option { if-feature boot-file-url-op; presence "Enable this option"; @@ -616,14 +529,14 @@ module ietf-dhcpv6-options { mandatory true; description "boot file id"; } - leaf-list suitable-arch-type { - type uint16; - description "architecture type"; - } - leaf-list suitable-net-if { - type uint32; - description "network interface"; - } + leaf-list suitable-arch-type { + type uint16; + description "architecture type"; + } + leaf-list suitable-net-if { + type uint32; + description "network interface"; + } leaf boot-file-url { type string; mandatory true; @@ -631,96 +544,99 @@ module ietf-dhcpv6-options { } } } + container boot-file-param-option { if-feature boot-file-param-op; presence "Enable this option"; description "OPT_BOOTFiLE_PARAM (60) Boot File Parameters Option"; reference "RFC5970: DHCPv6 Options for Network Boot"; - list boot-file-paras { - key para-id; - description "boot file parameters"; - leaf para-id { - type uint8; - mandatory true; - description "parameter id"; - } - leaf parameter { - type string; - mandatory true; - description "parameter - value"; - } - - } + list boot-file-paras { + key para-id; + description "boot file parameters"; + leaf para-id { + type uint8; + mandatory true; + description "parameter id"; + } + leaf parameter { + type string; + mandatory true; + description "parameter value"; + } + } } + container aftr-name-option { if-feature aftr-name-op; presence "Enable this option"; description "OPTION_AFTR_NAME (64) AFTR-Name DHCPv6 Option"; reference "RFC6334: Dynamic Host Configuration Protocol for IPv6 - (DHCPv6) Option for Dual-Stack Lite"; + (DHCPv6) Option for Dual-Stack Lite"; leaf tunnel-endpoint-name { type string; mandatory true; description "aftr name"; } } + container kbr-default-name-option { if-feature kbr-default-name-op; presence "Enable this option"; description "OPTION_KRB_DEFAULT_REALM_NAME (77) Kerberos Default Realm Name Option"; reference "RFC6784: Kerberos Options for DHCPv6"; - leaf default-realm-name { - type string; - mandatory true; - description "default realm name"; - } + leaf default-realm-name { + type string; + mandatory true; + description "default realm name"; + } } + container kbr-kdc-option { if-feature kbr-kdc-op; presence "Enable this option"; description "OPTION_KRB_KDC (78) Kerberos KDB Option"; reference "RFC6784: Kerberos Options for DHCPv6"; - list kdc-info { - key kdc-id; - description "kdc info"; - leaf kdc-id { - type uint8; - mandatory true; - description "kdc id"; - } - leaf priority { - type uint16; - mandatory true; - description "priority"; - } - leaf weight { - type uint16; - mandatory true; - description "weight"; - } - leaf transport-type { - type uint8; - mandatory true; - description "transport type"; - } - leaf port-number { - type uint16; - mandatory true; - description "port number"; - } - leaf kdc-ipv6-addr { - type inet:ipv6-address; - mandatory true; - description "kdc ipv6 addr"; - } - leaf realm-name { - type string; - mandatory true; - description "realm name"; - } - } + list kdc-info { + key kdc-id; + description "kdc info"; + leaf kdc-id { + type uint8; + mandatory true; + description "kdc id"; + } + leaf priority { + type uint16; + mandatory true; + description "priority"; + } + leaf weight { + type uint16; + mandatory true; + description "weight"; + } + leaf transport-type { + type uint8; + mandatory true; + description "transport type"; + } + leaf port-number { + type uint16; + mandatory true; + description "port number"; + } + leaf kdc-ipv6-addr { + type inet:ipv6-address; + mandatory true; + description "kdc ipv6 addr"; + } + leaf realm-name { + type string; + mandatory true; + description "realm name"; + } + } } + container sol-max-rt-option { if-feature sol-max-rt-op; presence "Enable this option"; @@ -733,6 +649,7 @@ module ietf-dhcpv6-options { description "sol max rt value"; } } + container inf-max-rt-option { if-feature inf-max-rt-op; presence "Enable this option"; @@ -745,12 +662,13 @@ module ietf-dhcpv6-options { description "inf max rt value"; } } + container addr-selection-option { if-feature addr-selection-op; presence "Enable this option"; description "OPTION_ADDRSEL (84) and OPTION_ADDRSEL_TABLE (85)"; reference "RFC7078: Distributing Address Selection Policy Using - DHCPv6"; + DHCPv6"; // if - Needs checking to see if this matches the RFC - there // are two options here. // Zihao - I think this matches RFC7078 @@ -794,11 +712,11 @@ module ietf-dhcpv6-options { } } } + container pcp-server-option { if-feature pcp-server-op; presence "Enable this option"; - description "OPTION_V6_PCP_SERVER (86) - pcp server option"; + description "OPTION_V6_PCP_SERVER (86) pcp server option"; reference "RFC7291: DHCP Options for the Port Control Protocol (PCP)"; list pcp-server { @@ -816,6 +734,7 @@ module ietf-dhcpv6-options { } } } + container s46-rule-option { if-feature s46-rule-op; presence "Enable this option"; @@ -833,20 +752,20 @@ module ietf-dhcpv6-options { leaf rule-type { type enumeration { enum "BMR" { - description "BMR"; - } - enum "FMR" { - description "FMR"; + description "BMR"; + } + enum "FMR" { + description "FMR"; + } } + mandatory true; + description "rule type"; + } + leaf prefix4-len { + type uint8; + mandatory true; + description "ipv4 prefix length"; } - mandatory true; - description "rule type"; - } - leaf prefix4-len { - type uint8; - mandatory true; - description "ipv4 prefix length"; - } leaf ipv4-prefix { type inet:ipv4-prefix; mandatory true; @@ -862,9 +781,10 @@ module ietf-dhcpv6-options { mandatory true; description "ipv6 prefix"; } - uses portset-para; + uses dhcpv6-types:portset-para; } } + container s46-br-option { if-feature s46-br-op; presence "Enable this option"; @@ -886,6 +806,7 @@ module ietf-dhcpv6-options { } } } + container s46-dmr-option { if-feature s46-dmr-op; presence "Enable this option"; @@ -912,6 +833,7 @@ module ietf-dhcpv6-options { } } } + container s46-v4-v6-binding-option { if-feature s46-v4-v6-binding-op; presence "Enable this option"; @@ -943,9 +865,10 @@ module ietf-dhcpv6-options { mandatory true; description "bind ipv6 prefix"; } - uses portset-para; + uses dhcpv6-types:portset-para; } } + } //if - NB - The list of options needs to be updated. @@ -972,7 +895,7 @@ module ietf-dhcpv6-options { description "Sets the DUID"; // uses duid; // if - Maybe DUID definition needs to be moved to this module. - uses duid; + uses dhcpv6-types:duid; } leaf erp-name { type string; @@ -986,6 +909,7 @@ module ietf-dhcpv6-options { grouping client-option-definitions { description "Contains definitions for options configured on the DHCPv6 client which will be sent to the server."; + list new-or-standard-cli-option { key option-code; description "new or standard client option"; @@ -1015,12 +939,13 @@ module ietf-dhcpv6-options { description "the option value"; } } + container option-request-option { if-feature option-request-op; presence "Enable this option"; description "OPTION_ORO (6) Option Request Option"; - reference "RFC3315: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; + reference "RFC3315: Dynamic Host Configuration Protocol for + IPv6 (DHCPv6)"; list oro-option { key option-code; description "oro option"; @@ -1043,7 +968,7 @@ module ietf-dhcpv6-options { presence "Enable this option"; description "OPTION_USER_CLASS (15) User Class Option"; reference "RFC3315: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; + for IPv6 (DHCPv6)"; list user-class { key user-class-id; description "user class"; @@ -1062,12 +987,13 @@ module ietf-dhcpv6-options { } } } + container vendor-class-option { if-feature vendor-class-op; presence "Enable this option"; description "OPTION_VENDOR_CLASS (16) Vendor Class Option"; reference "RFC3315: Dynamic Host Configuration Protocol - for IPv6 (DHCPv6)"; + for IPv6 (DHCPv6)"; leaf enterprise-number { type uint32; mandatory true; @@ -1076,23 +1002,24 @@ module ietf-dhcpv6-options { list vendor-class { key vendor-class-id; description "vendor class"; - leaf vendor-class-id { - type uint8; - mandatory true; - description "vendor class id"; - } - leaf vendor-class-data { - type string; - mandatory true; - description "The vendor-class-data is composed of a series - of separate items, each of which describes some - characteristic of the client's hardware configuration. - Examples of vendor-class-data instances might include the - version of the operating system the client is running or - the amount of memory installed on the client."; - } + leaf vendor-class-id { + type uint8; + mandatory true; + description "vendor class id"; + } + leaf vendor-class-data { + type string; + mandatory true; + description "The vendor-class-data is composed of a series of + separate items, each of which describes some characteristic + of the client's hardware configuration. Examples of + vendor-class-data instances might include the version of the + operating system the client is running or the amount of memory + installed on the client."; + } } } + container client-fqdn-option { if-feature client-fqdn-op; presence "Enable this option"; @@ -1118,6 +1045,7 @@ module ietf-dhcpv6-options { description "whether client initiate"; } } + container client-arch-type-option { if-feature client-arch-type-op; presence "Enable this option"; @@ -1139,6 +1067,7 @@ module ietf-dhcpv6-options { } } } + container client-network-interface-identifier-option { if-feature client-network-interface-identifier-op; presence "Enable this option"; @@ -1161,6 +1090,7 @@ module ietf-dhcpv6-options { description "minor"; } } + container kbr-principal-name-option { if-feature kbr-principal-name-op; presence "Enable this option"; @@ -1187,7 +1117,8 @@ module ietf-dhcpv6-options { a name, each component encoded as a KerberoString"; } } - } + } + container kbr-realm-name-option { if-feature kbr-realm-name-op; presence "Enable this option"; @@ -1199,6 +1130,7 @@ module ietf-dhcpv6-options { description "realm name"; } } + container client-link-layer-addr-option { if-feature client-link-layer-addr-op; presence "Enable this option"; @@ -1219,10 +1151,12 @@ module ietf-dhcpv6-options { description "Client link-layer address"; } } - } + + } grouping custom-option-definitions { - description "operator customized options"; + description "operator customized options"; + container operator-option-ipv6-address { if-feature operator-op-ipv6-address; presence "Enable this option"; @@ -1243,6 +1177,7 @@ module ietf-dhcpv6-options { } } } + container operator-option-single-flag { if-feature operator-op-single-flag; presence "Enable this option"; @@ -1264,13 +1199,14 @@ module ietf-dhcpv6-options { } } } + container operator-option-ipv6-prefix { if-feature operator-op-ipv6-prefix; presence "Enable this option"; description "operator ipv6 prefix option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list operator-ipv6-prefix{ + list operator-ipv6-prefix { key operator-ipv6-prefix-id; description "operator ipv6 prefix info"; leaf operator-ipv6-prefix-id { @@ -1278,7 +1214,7 @@ module ietf-dhcpv6-options { mandatory true; description "operator ipv6 prefix id"; } - leaf operator-ipv6-prefix6-len{ + leaf operator-ipv6-prefix6-len { type uint8; mandatory true; description "operator ipv6 prefix length"; @@ -1290,13 +1226,14 @@ module ietf-dhcpv6-options { } } } + container operator-option-int32 { if-feature operator-op-int32; presence "Enable this option"; description "operator integer 32 option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list int32val{ + list int32val { key int32val-id; description "operator integer 32 info"; leaf int32val-id { @@ -1304,20 +1241,21 @@ module ietf-dhcpv6-options { mandatory true; description "operator integer 32 id"; } - leaf int32val{ + leaf int32val { type uint32; mandatory true; description "operator integer 32 value"; } } } + container operator-option-int16 { if-feature operator-op-int16; presence "Enable this option"; description "operator integer 16 option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list int16val{ + list int16val { key int16val-id; description "operator integer 16 info"; leaf int16val-id { @@ -1325,20 +1263,21 @@ module ietf-dhcpv6-options { mandatory true; description "operator integer 16 id"; } - leaf int16val{ + leaf int16val { type uint16; mandatory true; description "operator integer 16 value"; } } } + container operator-option-int8 { if-feature operator-op-int8; presence "Enable this option"; description "operator integer 8 option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list int8val{ + list int8val { key int8val-id; description "operator integer 8 info"; leaf int8val-id { @@ -1346,19 +1285,19 @@ module ietf-dhcpv6-options { mandatory true; description "operator integer 8 id"; } - leaf int8val{ + leaf int8val { type uint8; mandatory true; description "operator integer 8 value"; } } } + container operator-option-uri { if-feature operator-op-uri; presence "Enable this option"; description "operator uri option"; - reference "RFC7227: Guidelines for Creating New DHCPv6 - Options"; + reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; list uri{ key uri-id; description "operator uri info"; @@ -1367,13 +1306,14 @@ module ietf-dhcpv6-options { mandatory true; description "operator uri id"; } - leaf uri{ + leaf uri { type string; mandatory true; description "operator uri value"; } } } + container operator-option-textstring { if-feature operator-op-textstring; presence "Enable this option"; @@ -1387,19 +1327,20 @@ module ietf-dhcpv6-options { mandatory true; description "operator text string id"; } - leaf textstring{ + leaf textstring { type string; mandatory true; description "operator text string value"; } } } + container operator-option-var-data { if-feature operator-op-var-data; presence "Enable this option"; description "operator variable length data option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list int32val{ + list int32val { key var-data-id; description "operator ivariable length data info"; leaf var-data-id { @@ -1407,20 +1348,21 @@ module ietf-dhcpv6-options { mandatory true; description "operator variable length id"; } - leaf var-data{ + leaf var-data { type binary; mandatory true; description "operator variable length value"; } } } + container operator-option-dns-wire { if-feature operator-op-dns-wire; presence "Enable this option"; description "operator dns wire format domain name list option"; reference "RFC7227: Guidelines for Creating New DHCPv6 Options"; - list operator-option-dns-wire{ + list operator-option-dns-wire { key operator-option-dns-wire-id; description "operator dns wire format info"; leaf operator-option-dns-wire-id { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-relay@2018-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-relay@2018-03-04.yang new file mode 100644 index 000000000..12e88f15d --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-relay@2018-03-04.yang @@ -0,0 +1,469 @@ +module ietf-dhcpv6-relay { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay"; + prefix "dhcpv6-relay"; + + import ietf-inet-types { + prefix inet; + } + import ietf-dhcpv6-options { + prefix dhcpv6-options; + } + import ietf-dhcpv6-types { + prefix dhcpv6-types; + } + import ietf-interfaces { + prefix if; + } + + organization + "IETF DHC (Dynamic Host Configuration) Working group"; + + contact + "cuiyong@tsinghua.edu.cn + lh.sunlinh@gmail.com + ian.farrer@telekom.de + sladjana.zechlin@telekom.de + hezihao9512@gmail.com"; + + description + "This model defines a YANG data model that can be + used to configure and manage a DHCPv6 relay."; + + revision 2018-03-04 { + description "Resolved most issues on the DHC official + github"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-12-22 { + description + "Resolve most issues on Ian's github."; + reference + "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-11-24 { + description + "First version of the separated relay specific + YANG model."; + reference + "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + /* + * Data Nodes + */ + + container relay { + presence + "Enables the relay"; + description + "DHCPv6 relay portion"; + + container relay-config { + description + "This container contains the configuration data + of the relay."; + container relay-attributes { + description + "A container describes some basic attributes of the relay + agent including some relay agent specific options data that + need to be configured previously. + Such options include Remote-Id option and Subscriber-Id + option."; + leaf name { + type string; + description + "Relay agent name"; + } + leaf description { + type string; + description + "Textual description of the relay agent"; + } + leaf-list dest-addrs { + type inet:ipv6-address; + description + "Each DHCPv6 relay agent may be configured with a list + of destination addresses. + This node defines such a list of IPv6 addresses that + may include unicast addresses, multicast addresses or + other addresses."; + } + list subscribers { + key subscriber; + description + "Subscribers"; + leaf subscriber { + type uint8; + mandatory true; + description + "Subscriber"; + } + leaf subscriber-id { + type string; + mandatory true; + description + "Subscriber id"; + } + } + list remote-host { + key ent-num; + description + "Remote host"; + leaf ent-num { + type uint32; + mandatory true; + description + "Enterprise number"; + } + leaf remote-id { + type string; + mandatory true; + description + "Remote id"; + } + } + uses dhcpv6-types:vendor-infor; + } + container rsoo-option-sets { + description + "DHCPv6 relay agent could provide some information that would + be useful to DHCPv6 client. + Since relay agent cannot provide options directly to the + client, RSOO-enabled options are defined to propose options + for the server to send to the client. + This container models such RSOO-enabled options."; + reference + "RFC6422"; + list option-set { + key option-set-id; + description + "This list under the 'rsoo-option-sets' container is similar + to the that defined in server module. + It allows the relay to implement several sets of RSOO-enabled + options for different interfaces. + The list only includes the EAP Re-authentication Protocol + (ERP) Local Domain Name DHCPv6 Option defined in RFC6440, + since it is the only one RSOO-enabled options accepted by + IANA so far."; + leaf option-set-id { + type uint32; + description "Option sed id"; + } + uses dhcpv6-options:relay-supplied-option-definitions; + } + } + + list relay-if { + // if - This should reference an entry in ietf-interfaces + key if-name; + description + "A relay agent may have several interfaces, we should provide + a way to configure and manage parameters on the interface-level. + A list that describes specific interfaces and their corresponding + parameters is employed to fulfil the configfuration. Here we use + a string called 'if-name' as the key of list."; + leaf if-name { + type if:interface-ref; + mandatory true; + description + "Interface name"; + } + leaf interface-id { + type string; + description + "Interface id"; + } + + /* + leaf enable { + type boolean; + mandatory true; + description "whether this interface is enabled"; + } + */ + + leaf ipv6-address { + type inet:ipv6-address; + description + "IPv6 address for this interface"; + } + + leaf rsoo-option-set-id { + type leafref { + path "/relay/relay-config/rsoo-option-sets/option-set/option-set-id"; + } + description "Configured Relay Supplied Option set"; + } + + list next-entity { + key dest-addr; + description + "This node defines a list that is used to describe the + next hop entity of this relay distinguished by their + addresses."; + leaf dest-addr { + type inet:ipv6-address; + mandatory true; + description + "Destination addr"; + } + leaf available { + type boolean; + mandatory true; + description + "Whether the next entity is available or not"; + } + leaf multicast { + type boolean; + mandatory true; + description + "Whether the address is multicast or not"; + } + leaf server { + type boolean; + mandatory true; + description + "Whether the next entity is a server"; + } + } + } + } + + container relay-state { + config "false"; + description + "State data of relay"; + list relay-if { + key if-name; + description + "A relay agent may have several interfaces, we should provide + a way to configure and manage parameters on the interface-level. + A list that describes specific interfaces and their corresponding + parameters is employed to fulfil the configfuration. Here we use + a string called 'if-name' as the key of list."; + leaf if-name{ + type string; + mandatory true; + description + "Interface name"; + } + list pd-route { + // if - need to look at if/how we model these. If they are + // going to be modelled, then they should be ro state + // entries (we're not trying to configure routes here) + key pd-route-id; + description "pd route"; + leaf pd-route-id { + type uint8; + mandatory true; + description + "PD route id"; + } + leaf requesting-router-id { + type uint32; + mandatory true; + description + "Requesting router id"; + } + leaf delegating-router-id { + type uint32; + mandatory true; + description + "Delegating router id"; + } + leaf next-router { + type inet:ipv6-address; + mandatory true; + description + "Next router"; + } + leaf last-router { + type inet:ipv6-address; + mandatory true; + description + "Previous router"; + } + } + list next-entity { + key dest-addr; + description "This node defines a list that is used to + describe the next hop entity of this relay agent. + Different entities are distinguished by their + addresses."; + leaf dest-addr { + type inet:ipv6-address; + mandatory true; + description "destination addr"; + } + container packet-stats { + description "packet statistics"; + leaf solicit-rvd-count { + type uint32; + mandatory true; + description "solicit received counter"; + } + leaf request-rvd-count { + type uint32; + mandatory true; + description "request received counter"; + } + leaf renew-rvd-count { + type uint32; + mandatory true; + description "renew received counter"; + } + leaf rebind-rvd-count { + type uint32; + mandatory true; + description "rebind recevied counter"; + } + leaf decline-rvd-count { + type uint32; + mandatory true; + description "decline received counter"; + } + leaf release-rvd-count { + type uint32; + mandatory true; + description "release received counter"; + } + leaf info-req-rvd-count { + type uint32; + mandatory true; + description "information request counter"; + } + leaf relay-for-rvd-count { + type uint32; + mandatory true; + description "relay forward received counter"; + } + leaf relay-rep-rvd-count { + type uint32; + mandatory true; + description "relay reply received counter"; + } + leaf packet-to-cli-count { + type uint32; + mandatory true; + description "packet to client counter"; + } + leaf adver-sent-count { + type uint32; + mandatory true; + description "advertisement sent counter"; + } + leaf confirm-sent-count { + type uint32; + mandatory true; + description "confirm sent counter"; + } + leaf reply-sent-count { + type uint32; + mandatory true; + description "reply sent counter"; + } + leaf reconfig-sent-count { + type uint32; + mandatory true; + description "reconfigure sent counter"; + } + leaf relay-for-sent-count { + type uint32; + mandatory true; + description "relay forward sent counter"; + } + leaf relay-rep-sent-count { + type uint32; + mandatory true; + description "relay reply sent counter"; + } + } + } + } + container relay-stats { + config "false"; + description + "Relay statistics"; + leaf cli-packet-rvd-count { + type uint32; + mandatory true; + description + "Client packet received counter"; + } + leaf relay-for-rvd-count { + type uint32; + mandatory true; + description + "Relay forward received counter"; + } + leaf relay-rep-rvd-count { + type uint32; + mandatory true; + description + "Relay reply recevied counter"; + } + leaf packet-to-cli-count { + type uint32; + mandatory true; + description + "Packet to client counter"; + } + leaf relay-for-sent-count { + type uint32; + mandatory true; + description + "Relay forward sent counter"; + } + leaf relay-rep-sent-count { + type uint32; + mandatory true; + description + "Relay reply sent counter"; + } + leaf discarded-packet-count { + type uint32; + mandatory true; + description + "Discarded packet counter"; + } + } + } + } + + /* + * Notifications + */ + + notification notifications { + description "DHCPv6 relay notification module"; + container dhcpv6-relay-event { + description + "DHCPv6 relay event"; + container topo-changed { + description + "Raised when the topology of the relay agent is changed."; + leaf relay-if-name { + type string; + mandatory true; + description + "Relay interface name"; + } + leaf first-hop { + type boolean; + mandatory true; + description + "First hop"; + } + leaf last-entity-addr { + type inet:ipv6-address; + mandatory true; + description + "Last entity address"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2017-12-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2017-12-22.yang deleted file mode 100644 index 85156e9fa..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2017-12-22.yang +++ /dev/null @@ -1,1005 +0,0 @@ -module ietf-dhcpv6-server { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; - prefix "dhcpv6-server"; - - import ietf-inet-types { - prefix inet; - revision-date "2013-07-15"; - } - import ietf-yang-types { - prefix yang; - revision-date "2013-07-15"; - } - import ietf-dhcpv6-options { - prefix dhcpv6-options; - revision-date "2017-12-22"; - } - - organization "DHC WG"; - contact "yong@csnet1.cs.tsinghua.edu.cn - lh.sunlinh@gmail.com - ian.farrer@telekom.de - sladjana.zechlin@telekom.de - hezihao9512@gmail.com"; - - description "This model defines a YANG data model that can be - used to configure and manage a DHCPv6 server."; - - revision 2017-12-22 { - description "Resolve most issues on Ian's github."; - reference "I-D: draft-ietf-dhc-dhcpv6-yang"; - } - - revision 2017-11-24 { - description "First version of the separated server specific - YANG model."; - reference "I-D: draft-ietf-dhc-dhcpv6-yang"; - } - - /* - * Typedef - */ - - typedef threshold { - type union { - type uint16 { - range 0..100; - } - type enumeration { - enum "disabled" { - description "No threshold"; - } - } - } - description "Threshold value in percent"; - } - - /* - * Grouping - */ - - grouping vendor-infor { - description "Vendor information."; - container vendor-info { - description ""; - leaf ent-num { - type uint32; - mandatory true; - description "enterprise number"; - } - leaf-list data { - type string; - description "specific vendor info"; - } - } - } - - grouping duid { - description "DHCP Unique Identifier"; - reference "RFC3315: Section 9 and RFC6355: Section 4"; - leaf type-code { - type uint16; - default 65535; - description "Type code of this DUID"; - } - choice duid-type { - default duid-invalid; - description "Selects the format for the DUID."; - case duid-llt { - description "DUID Based on Link-layer Address Plus Time (Type 1 - DUID-LLT)"; - reference "RFC3315 Section 9.2"; - leaf duid-llt-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-llt-time { - type yang:timeticks; - description "The time value is the time that the DUID is generated - represented in seconds since midnight (UTC), January 1, 2000, - modulo 2^32."; - } - leaf duid-llt-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-en { - description "DUID Assigned by Vendor Based on Enterprise Number (Type 2 - DUID-EN)"; - reference "RFC3315 Section 9.3"; - leaf duid-en-enterprise-number { - type uint32; - description "Vendor's registered Private Enterprise Number as - maintained by IANA"; - } - leaf duid-en-identifier { - type string; - description "Indentifier, unique to the device that is using it"; - } - } - case duid-ll { - description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; - reference "RFC3315 Section 9.4"; - leaf duid-ll-hardware-type { - type uint16; - description "Hardware type as assigned by IANA (RFC826)."; - } - leaf duid-ll-link-layer-addr { - type yang:mac-address; - description "Link-layer address as described in RFC2464"; - } - } - case duid-uuid { - description "DUID Based on Universally Unique Identifier (Type 4 - DUID-UUID)"; - reference "RFC6335 Defination of the UUID-Based Unique Identifier"; - leaf uuid { - type yang:uuid; - description "A Universally Unique IDentifier in the string representation - defined in RFC 4122. The canonical representation uses - lowercase characters"; - } - } - case duid-invalid { - description "DUID based on free raw bytes"; - leaf data { - type binary; - description "The bits to be used as the identifier"; - } - } - } - } - - /* - * Data Nodes - */ - - container server { - presence "Enables the server"; - description "DHCPv6 server portion"; - /* - * Configuration data - */ - container server-config { - description "configuration tree of server"; - container serv-attributes { - description "This container contains basic attributes - of a DHCPv6 server such as IPv6 address, server name - and so on. Some optional functions that can be provided - by 0the server is also included."; - leaf name { - type string; - description "server's name"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf-list ipv6-address { - type inet:ipv6-address; - description "Server's IPv6 address."; - } - leaf description { - type string; - description "Description of the server."; - } - leaf pd-function { - type boolean; - mandatory true; - description "Whether the server can act as a - delegating router to perform prefix delegation - ([RFC3633])."; - } - leaf stateless-service { - type boolean; - mandatory true; - description "A boolean value specifies whether - the server support client-server exchanges - involving two messages defined in ([RFC3315])."; - } - leaf rapid-commit { - type boolean; - mandatory true; - description "A boolean value specifies whether - the server support client-server exchanges - involving two messages defined in ([RFC3315])."; - } - leaf-list interfaces-config { - // Note - this should probably be references to - // entries in the ietf-interfaces model - type string; - description "A leaf list to denote which one or - more interfaces the server should listen on. The - default value is to listen on all the interfaces. - This node is also used to set a unicast address - for the server to listen with a specific interface. - For example, if people want the server to listen - on a unicast address with a specific interface, he - can use the format like 'eth1/2001:db8::1'."; - } - uses vendor-infor; - } - - container option-sets { - description "DHCPv6 employs various options to carry additional - information and parameters in DHCP messages. This container defines - all the possible options that need to be configured at the server - side. "; - list option-set { - key id; - description "A server may allow different option sets to be - configured for different conditions (i.e. different networks, - clients and etc). This 'option-set' list enables various sets of - options being defined and configured in a single server. Different - sets are distinguished by the key called 'option-set-id'. All the - possible options discussed above are defined in the list and each - option is corresponding to a container. Since all the options in - the list are optional, each container in this list has a 'presence' - statement to indicate whether this option (container) will be - included in the current option set or not. In addition, each container - also has a 'if-feature' statement to indicate whether the server - supports this option (container)."; - leaf id { - type uint32; - description "option set id"; - } - uses dhcpv6-options:server-option-definitions; - uses dhcpv6-options:custom-option-definitions; - } - } - - container network-ranges { - description "This model supports a hierarchy - to achieve dynamic configuration. That is to - say we could configure the server at different - levels through this model. The top level is a - global level which is defined as the container - 'network-ranges'. The following levels are - defined as sub-containers under it. The - 'network-ranges' contains the parameters - (e.g. option-sets) that would be allocated to - all the clients served by this server."; - list network-range { - key network-range-id; - description "Under the 'network-ranges' - container, a 'network-range' list is - defined to configure the server at a - network level which is also considered - as the second level. Different network - are identified by the key 'network-range-id'. - This is because a server may have different - configuration parameters (e.g. option sets) - for different networks."; - leaf network-range-id { - type uint32; - mandatory true; - description "equivalent to subnet id"; - } - leaf network-description { - type string; - mandatory true; - description "description of the subnet"; - } - leaf network-prefix { - type inet:ipv6-prefix; - mandatory true; - description "subnet prefix"; - } - leaf inherit-option-set { - type boolean; - mandatory true; - description "indicate whether to inherit - the configuration from higher level"; - } - leaf option-set-id { - type leafref { - path "/server/server-config/option-sets/option-set/id"; - - } - description "The ID field of relevant option-set to be - provisioned to clients of this network-range."; - } - - container reserved-addresses { - description "reserved addresses"; - list static-binding { - key cli-id; - description "static binding of - reserved addresses"; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf-list reserv-addr { - type inet:ipv6-address; - description "reserved addr"; - } - } - leaf-list other-reserv-addr { - type inet:ipv6-address; - description "other reserved - addr"; - } - } - - container reserved-prefixes { - description "reserved prefixes"; - list static-binding { - key cli-id; - description "static binding"; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf reserv-prefix-len { - type uint8; - mandatory true; - description "reserved - prefix length"; - } - leaf reserv-prefix { - type inet:ipv6-prefix; - mandatory true; - description - "reserved prefix"; - } - } - leaf exclude-prefix-len { - type uint8; - mandatory true; - description "exclude prefix - length"; - } - leaf exclude-prefix { - type inet:ipv6-prefix; - mandatory true; - description "exclude prefix"; - } - list other-reserv-prefix { - key reserv-id; - description - "other reserved prefix"; - leaf reserv-id { - type uint32; - mandatory true; - description - "reserved prefix id"; - } - leaf prefix-len { - type uint8; - mandatory true; - description "prefix length"; - } - leaf prefix { - type inet:ipv6-prefix; - mandatory true; - description - "reserved prefix"; - } - } - } - - container address-pools { - description "A container that describes - the DHCPv6 server's address pools."; - list address-pool { - key pool-id; - description "A DHCPv6 server can - be configured with several address - pools. This list defines such - address pools which are distinguished - by the key called 'pool-name'."; - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - leaf pool-prefix { - type inet:ipv6-prefix; - mandatory true; - description "pool prefix"; - } - leaf start-address { - type inet:ipv6-address-no-zone; - mandatory true; - description "start address"; - } - leaf end-address { - type inet:ipv6-address-no-zone; - mandatory true; - description "end address"; - } - leaf renew-time { - type yang:timeticks; - mandatory true; - description "renew time"; - } - leaf rebind-time { - type yang:timeticks; - mandatory true; - description "rebind time"; - } - leaf preferred-lifetime { - type yang:timeticks; - mandatory true; - description "preferred lifetime - for IA"; - } - leaf valid-lifetime { - type yang:timeticks; - mandatory true; - description "valid liftime for IA"; - } - leaf max-address-utilization-ratio { - type threshold; - mandatory true; - description "address pool utilization ratio threshold"; - } - leaf inherit-option-set { - type boolean; - mandatory true; - description "indicate whether to - inherit the configuration from - higher level"; - } - leaf option-set-id { - type leafref { - path "/server/server-config/option-sets/option-set/id"; - } - mandatory true; - description "The ID field of relevant option-set to be - provisioned to clients of this address-pool."; - } - } - } - - container prefix-pools { - description "If a server supports prefix - delegation function, this container will - be used to define the delegating router's - refix pools."; - list prefix-pool { - key pool-id; - description "Similar to server's - address pools, a delegating router - can also be configured with multiple - prefix pools specified by a list - called 'prefix-pool'."; - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - leaf prefix { - type inet:ipv6-prefix; - mandatory true; - description "ipv6 prefix"; - } - leaf prefix-length { - type uint8; - mandatory true; - description "prefix length"; - } - leaf renew-time { - type yang:timeticks; - mandatory true; - description "renew time"; - } - leaf rebind-time { - type yang:timeticks; - mandatory true; - description "rebind time"; - } - leaf preferred-lifetime { - type yang:timeticks; - mandatory true; - description "preferred lifetime for - IA"; - } - leaf valid-lifetime { - type yang:timeticks; - mandatory true; - description "valid lifetime for IA"; - } - leaf max-prefix-utilization-ratio { - type threshold; - mandatory true; - description "prefix pool utilization ratio threshold"; - } - leaf inherit-option-set { - type boolean; - mandatory true; - description "whether to inherit - configuration from higher level"; - } - leaf option-set-id { - type leafref { - path "/server/server-config/option-sets/option-set/id"; - } - description "The ID field of relevant option-set to be - provisioned to clients of this prefix-pool."; - } - } - } - container hosts { - description "hosts level"; - list host { - key cli-id; - description "specific host"; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf inherit-option-set { - type boolean; - mandatory true; - description "whether to inherit - configuration - from higher level"; - } - leaf option-set-id { - type leafref { - path "/server/server-config/option-sets/option-set/id"; - } - description "The ID field of relevant option-set to be - provisioned to clients of this prefix-pool."; - } - leaf nis-domain-name { - type string; - description "nis domain name"; - } - leaf nis-plus-domain-name { - type string; - description "nisp domain name"; - } - } - } - } - - } - container relay-opaque-paras { - description "This container contains some - opaque values in Relay Agent options that - need to be configured on the server side - only for value match. Such Relay Agent - options include Interface-Id option, - Remote-Id option and Subscriber-Id option."; - list relays { - key relay-name; - description "relay agents"; - leaf relay-name { - type string; - mandatory true; - description "relay agent name"; - } - list interface-info { - key if-name; - description "interface info"; - leaf if-name { - type string; - mandatory true; - description "interface name"; - } - leaf interface-id { - type string; - mandatory true; - description "interface id"; - } - } - list subscribers { - key subscriber; - description "subscribers"; - leaf subscriber { - type uint32; - mandatory true; - description "subscriber"; - } - leaf subscriber-id { - type string; - mandatory true; - description "subscriber id"; - } - } - list remote-host { - key ent-num; - description "remote host"; - leaf ent-num { - type uint32; - mandatory true; - description "enterprise number"; - } - leaf remote-id { - type string; - mandatory true; - description "remote id"; - } - } - } - } - container rsoo-enabled-options { - description "rsoo enabled options"; - list rsoo-enabled-option{ - key option-code; - description "rsoo enabled option"; - leaf option-code { - type uint16; - mandatory true; - description "option code"; - } - leaf description { - type string; - mandatory true; - description "description of the option"; - } - } - } - - } - - /* - * State data - */ - container server-state{ - config "false"; - description "states of server"; - container network-ranges{ - description "This model supports a hierarchy - to achieve dynamic configuration. That is to - say we could configure the server at different - levels through this model. The top level is a - global level which is defined as the container - 'network-ranges'. The following levels are - defined as sub-containers under it. The - 'network-ranges' contains the parameters - (e.g. option-sets) that would be allocated to - all the clients served by this server."; - list network-range{ - key network-range-id; - description "The ID field of relevant option-set to be - provisioned to clients of this network-range."; - leaf network-range-id { - type uint32; - mandatory true; - description "equivalent to subnet id"; - } - container address-pools{ - description "A container that describes - the DHCPv6 server's address pools"; - list address-pool{ - key pool-id; - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - description "..."; - leaf total-ipv6-count { - type uint64; - mandatory true; - description "how many ipv6 addresses - are in the pool"; - } - leaf used-ipv6-count { - type uint64; - mandatory true; - description "how many are allocated"; - } - leaf address-utilization-ratio { - type uint16; - mandatory true; - description "current address pool utilization ratio"; - } - } - list binding-info { - key cli-id; - description "A list that records a binding - information for each DHCPv6 client - that has already been allocated - IPv6 addresses."; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - container duid { - description "Read the DUID"; - uses duid; - } - list cli-ia{ - key iaid; - description "client IA"; - leaf ia-type { - type string; - mandatory true; - description "IA type"; - } - leaf iaid { - type uint32; - mandatory true; - description "IAID"; - } - leaf-list cli-addr { - type inet:ipv6-address; - description "client addr"; - } - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - } - } - } - container prefix-pools{ - description "If a server supports prefix - delegation function, this container will - be used to define the delegating router's - prefix pools."; - list prefix-pool { - key pool-id; - description "Similar to server's address pools, - a delegating router can also be configured with - multiple prefix pools specified by a list - called 'prefix-pool'."; - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - leaf prefix-utilization-ratio { - type uint16; - mandatory true; - description "current prefix pool utilization ratio"; - } - } - list binding-info { - key cli-id; - description "A list records a binding information - for each DHCPv6 client that has already been - alloated IPv6 addresses."; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - container duid { - description "Reads the DUID"; - uses duid; - } - list cli-iapd { - key iaid; - description "client IAPD"; - leaf iaid { - type uint32; - mandatory true; - description "IAID"; - } - leaf-list cli-prefix { - type inet:ipv6-prefix; - description "client ipv6 prefix"; - } - leaf-list cli-prefix-len { - type uint8; - description "client prefix length"; - } - leaf pool-id { - type uint32; - mandatory true; - description "pool id"; - } - - } - } - } - - list address-prefix-assign-param { - // Zihao - This probably needs further updated. - // But is it a way to represent the address/prefix assignment - // logic? - key cli-id; - description "This list includes some parameters/identifiers - that the server obtains from DHCPv6 options in this network-range. - These identifiers may be helpful for the server to assign - addresses/prefixes."; - reference "Section 3.12 of RFC7824"; - leaf cli-id { - type uint32; - mandatory true; - description "client id"; - } - leaf source-ipv6-addr { - type inet:ipv6-address; - description "The adrress of the link to which the client - is attached."; - } - container duid { - description "The DUID supplied by the client."; - uses duid; - } - leaf-list iaid { - type uint32; - description "IAID"; - } - leaf-list preferred-addr { - type inet:ipv6-address; - description "The IPv6 address preferred by the client."; - } - leaf-list preferred-prefix-len { - type uint8; - description "The prefix length preferred by the client."; - } - leaf client-fqdn { - type string; - description "Fully Qualified Domain Name supplied by the client."; - } - leaf client-link-layer-addr { - type uint16; - description "Link-layer address supplied by the client."; - } - leaf client-enterprise-number { - type uint32; - description "Enterprise number supplied by the client."; - } - leaf-list client-sys-archi-type { - type uint16; - description "Supported system architecture type supplied by - the client"; - } - } - - } - - } - - container packet-stats { - description "A container presents - the packet statistics related to - the DHCPv6 server."; - leaf solicit-count { - type uint32; - mandatory true; - description "solicit counter"; - } - leaf request-count { - type uint32; - mandatory true; - description "request counter"; - } - leaf renew-count { - type uint32; - mandatory true; - description "renew counter"; - } - leaf rebind-count { - type uint32; - mandatory true; - description "rebind counter"; - } - leaf decline-count { - type uint32; - mandatory true; - description "decline count"; - } - leaf release-count { - type uint32; - mandatory true; - description "release counter"; - } - leaf info-req-count { - type uint32; - mandatory true; - description "information request - counter"; - } - leaf advertise-count { - type uint32; - mandatory true; - description "advertise counter"; - } - leaf confirm-count { - type uint32; - mandatory true; - description "confirm counter"; - } - leaf reply-count { - type uint32; - mandatory true; - description "reply counter"; - } - leaf reconfigure-count { - type uint32; - mandatory true; - description "reconfigure counter"; - } - leaf relay-forward-count { - type uint32; - mandatory true; - description "relay forward counter"; - } - leaf relay-reply-count { - type uint32; - mandatory true; - description "relay reply counter"; - } - } - } - } - - /* - * Notifications - */ - - notification notifications { - description "dhcpv6 server notification module"; - container dhcpv6-server-event { - description "dhcpv6 server event"; - container pool-running-out { - description "raised when the address/prefix pool is going to - run out. A threshold for utilization ratio of the pool has - been defined in the server feature so that it will notify the - administrator when the utilization ratio reaches the - threshold, and such threshold is a settable parameter"; - leaf max-address-utilization-ratio { - type uint16; - mandatory true; - description "address pool utilization ratio threshold"; - } - leaf address-utilization-ratio { - type uint16; - mandatory true; - description "current address pool utilization ratio"; - } - leaf max-prefix-utilization-ratio { - type uint16; - mandatory true; - description "prefix pool utilization ratio threshold"; - } - leaf prefix-utilization-ratio { - type uint16; - mandatory true; - description "current prefix pool utilization ratio"; - } - container duid { - description "Sets the DUID"; - uses duid; - } - leaf serv-name { - type string; - description "server name"; - } - leaf pool-name { - type string; - mandatory true; - description "pool name"; - } - } - container invalid-client-detected { - description "raised when the server has found a client which - can be regarded as a potential attacker. Some description - could also be included."; - container duid { - description "Sets the DUID"; - uses duid; - } - leaf description { - type string; - description "description of the event"; - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2018-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2018-03-04.yang new file mode 100644 index 000000000..d45f95657 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-server@2018-03-04.yang @@ -0,0 +1,852 @@ +module ietf-dhcpv6-server { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-server"; + prefix "dhcpv6-server"; + + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + import ietf-dhcpv6-options { + prefix dhcpv6-options; + } + import ietf-dhcpv6-types { + prefix dhcpv6-types; + } + import ietf-interfaces { + prefix if; + } + + organization "DHC WG"; + contact + "cuiyong@tsinghua.edu.cn + lh.sunlinh@gmail.com + ian.farrer@telekom.de + sladjana.zechlin@telekom.de + hezihao9512@gmail.com"; + description "This model defines a YANG data model that can be + used to configure and manage a DHCPv6 server."; + + revision 2018-03-04 { + description "Resolved most issues on the DHC official + github"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-12-22 { + description "Resolve most issues on Ian's github."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + revision 2017-11-24 { + description "First version of the separated server specific + YANG model."; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + /* + * Typedef + */ + typedef threshold { + type union { + type uint16 { + range 0..100; + } + type enumeration { + enum "disabled" { + description "No threshold"; + } + } + } + description "Threshold value in percent"; + } + + /* + * Data Nodes + */ + container server { + presence "Enables the server"; + description "DHCPv6 server portion"; + + /* + * Configuration data + */ + container server-config { + description "This container contains the configuration data + of a server."; + container serv-attributes { + description + "This container contains basic attributes of a DHCPv6 server + such as IPv6 address, server name and so on. Some optional + functions that can be provided by the server is also included."; + container duid { + description "Sets the DUID of server"; + uses dhcpv6-types:duid; + } + leaf name { + type string; + description "server's name"; + } + leaf description { + type string; + description "description of the server."; + } + leaf-list ipv6-address { + type inet:ipv6-address; + description "server's IPv6 address."; + } + leaf-list interfaces-config { + // Note - this should probably be references to + // entries in the ietf-interfaces model + type if:interface-ref; + description "A leaf list to denote which one or more interfaces + the server should listen on. The default value is to listen + on all the interfaces. This node is also used to set a unicast + address for the server to listen with a specific interface. + For example, if people want the server to listen on a unicast + address with a specific interface, he can use the format like + 'eth1/2001:db8::1'."; + } + uses dhcpv6-types:vendor-infor; + } + + container option-sets { + description "DHCPv6 employs various options to carry additional + information and parameters in DHCP messages. This container defines + all the possible options that need to be configured at the server + side. "; + list option-set { + key option-set-id; + description "A server may allow different option sets to be + configured for different conditions (i.e. different networks, + clients and etc). This 'option-set' list enables various sets of + options being defined and configured in a single server. Different + sets are distinguished by the key called 'option-set-id'. All the + possible options discussed above are defined in the list and each + option is corresponding to a container. Since all the options in + the list are optional, each container in this list has a 'presence' + statement to indicate whether this option (container) will be + included in the current option set or not. In addition, each container + also has a 'if-feature' statement to indicate whether the server + supports this option (container)."; + leaf option-set-id { + type uint32; + description "option set id"; + } + uses dhcpv6-options:server-option-definitions; + uses dhcpv6-options:custom-option-definitions; + } + } + + container network-ranges { + description "This model supports a hierarchy + to achieve dynamic configuration. That is to say we could configure the + server at different levels through this model. The top level is a global + level which is defined as the container 'network-ranges'. The following + levels are defined as sub-containers under it. The 'network-ranges' + contains the parameters (e.g. option-sets) that would be allocated to + all the clients served by this server."; + + leaf option-set-id { + type leafref { + path "/server/server-config/option-sets/option-set/option-set-id"; + } + description + "The ID field of relevant global option-set to be provisioned to + clients."; + } + list network-range { + key network-range-id; + description + "Under the 'network-ranges' container, a 'network-range' list + is defined to configure the server at a network level which is also + considered as the second level. Different network are identified by the + key 'network-range-id'. This is because a server may have different + configuration parameters (e.g. option sets) for different networks."; + leaf network-range-id { + type uint32; + mandatory true; + description "equivalent to subnet id"; + } + leaf network-description { + type string; + mandatory true; + description "description of the subnet"; + } + leaf network-prefix { + type inet:ipv6-prefix; + mandatory true; + description "subnet prefix"; + } + leaf option-set-id { + type leafref { + path "/server/server-config/option-sets/option-set/option-set-id"; + } + description "The ID field of relevant option-set to be provisioned to + clients of this network-range."; + } + + container address-pools { + description + "A container that describes the DHCPv6 server's + address pools."; + list address-pool { + key pool-id; + description "A DHCPv6 server can be configured with + several address pools. This list defines such address pools + which are distinguished by the key called 'pool-id'."; + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + leaf pool-prefix { + type inet:ipv6-prefix; + mandatory true; + description "pool prefix"; + } + leaf start-address { + type inet:ipv6-address-no-zone; + mandatory true; + description "start address"; + } + leaf end-address { + type inet:ipv6-address-no-zone; + mandatory true; + description "end address"; + } + leaf valid-lifetime { + type yang:timeticks; + mandatory true; + description "valid liftime for IA"; + } + leaf renew-time { + type yang:timeticks; + mandatory true; + description "renew time"; + } + leaf rebind-time { + type yang:timeticks; + mandatory true; + description "rebind time"; + } + leaf preferred-lifetime { + type yang:timeticks; + mandatory true; + description "preferred lifetime for IA"; + } + leaf rapid-commit { + type boolean; + mandatory true; + description "A boolean value specifies whether the pool + supports client-server exchanges involving two messages."; + } + leaf client-class { + type string; + description + "If this leaf is specified, this pool will only serve + the clients belonging to this class."; + } + leaf max-address-count { + type threshold; + mandatory true; + description "maximum count of addresses that can + be allocated in this pool. This value may be + less than count of total addresses."; + } + leaf option-set-id { + type leafref { + path "/server/server-config/option-sets/option-set/option-set-id"; + } + mandatory true; + description "The ID field of relevant option-set to be + provisioned to clients of this address-pool."; + } + } + } + container pd-pools { + description "If a server supports prefix delegation function, this + container will be used to define the delegating router's prefix + pools."; + list pd-pool { + key pool-id; + description "Similar to server's address pools, a delegating + router can also be configured with multiple prefix pools + specified by a list called 'prefix-pool'."; + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + leaf prefix { + type inet:ipv6-prefix; + mandatory true; + description "ipv6 prefix"; + } + leaf prefix-length { + type uint8; + mandatory true; + description "prefix length"; + } + leaf valid-lifetime { + type yang:timeticks; + mandatory true; + description "valid lifetime for IA"; + } + leaf renew-time { + type yang:timeticks; + mandatory true; + description "renew time"; + } + leaf rebind-time { + type yang:timeticks; + mandatory true; + description "rebind time"; + } + leaf preferred-lifetime { + type yang:timeticks; + mandatory true; + description "preferred lifetime for IA"; + } + leaf rapid-commit { + type boolean; + mandatory true; + description "A boolean value specifies whether the server + support client-server exchanges involving two messages defined."; + } + leaf client-class { + type string; + description "client class"; + } + leaf max-pd-space-utlization { + type threshold; + mandatory true; + description "Maximum utilization of pd space in this pool"; + } + leaf option-set-id { + type leafref { + path "/server/server-config/option-sets/option-set/option-set-id"; + } + mandatory true; + description "The ID field of relevant option-set to be + provisioned to clients of this prefix-pool."; + } + } + } + + container host-reservations { + description + "This container allows the server to make reservations at host level."; + list host-reservation { + key cli-id; + description "This list allows the server to reserve addresses, + prefixes, hostname and options for different clients."; + leaf cli-id { + type uint32; + mandatory true; + description "client id"; + } + + choice client-identifier { + description "When making reservations, the server needs to choose a + identifier to identify the server. Currently 'DUID' and 'hardware + address' are supported."; + case duid { + description "DUID"; + uses dhcpv6-types:duid; + } + case hw-address { + description "hardware address"; + leaf hardware-address { + type yang:mac-address; + description "MAC address of client"; + } + } + } + + leaf-list reserv-addr { + type inet:ipv6-address; + description "reserved addr"; + } + + list prefix-reservation { + key reserv-prefix-id; + description "reserved prefix reservation"; + leaf reserv-prefix-id { + type uint32; + mandatory true; + description "reserved prefix id"; + } + leaf reserv-prefix { + type inet:ipv6-prefix; + mandatory true; + description "reserved prefix"; + } + leaf reserv-prefix-len { + type uint8; + mandatory true; + description "reserved prefix length"; + } + } + + leaf hostname { + type string; + description "reserved hostname"; + } + + leaf option-set-id { + type leafref { + path "/server/server-config/option-sets/option-set/option-set-id"; + } + description "The ID field of relevant option-set to be provisioned + in the host reservation."; + } + } + } + + } + } + + container relay-opaque-paras { + description "This container contains some opaque values in Relay Agent + options that need to be configured on the server side only for value + match. Such Relay Agent options include Interface-Id option, + Remote-Id option and Subscriber-Id option."; + list relays { + key relay-name; + description "relay agents"; + leaf relay-name { + type string; + mandatory true; + description "relay agent name"; + } + list interface-info { + key if-name; + description "interface info"; + leaf if-name { + type string; + mandatory true; + description "interface name"; + } + leaf interface-id { + type string; + mandatory true; + description "interface id"; + } + } + list subscribers { + key subscriber; + description "subscribers"; + leaf subscriber { + type uint32; + mandatory true; + description "subscriber"; + } + leaf subscriber-id { + type string; + mandatory true; + description "subscriber id"; + } + } + list remote-host { + key ent-num; + description "remote host"; + leaf ent-num { + type uint32; + mandatory true; + description "enterprise number"; + } + leaf remote-id { + type string; + mandatory true; + description "remote id"; + } + } + } + } + + container rsoo-enabled-options { + description "rsoo enabled options"; + list rsoo-enabled-option { + key option-code; + description "rsoo enabled option"; + leaf option-code { + type uint16; + mandatory true; + description "option code"; + } + leaf description { + type string; + mandatory true; + description "description of the option"; + } + } + } + + } + + /* + * State data + */ + container server-state { + config "false"; + description "states of server"; + container network-ranges { + description "This model supports a hierarchy to achieve dynamic configuration. + That is to say we could configure the server at different levels through + this model. The top level is a global level which is defined as the container + 'network-ranges'. The following levels are defined as sub-containers under it. + The 'network-ranges' contains the parameters (e.g. option-sets) that would be + allocated to all the clients served by this server."; + list network-range { + key network-range-id; + description "The ID field of relevant option-set to be provisioned + to clients of this network-range."; + leaf network-range-id { + type uint32; + mandatory true; + description "equivalent to subnet id"; + } + container address-pools { + description "A container that describes the DHCPv6 server's address pools"; + list address-pool { + key pool-id; + description "A DHCPv6 server can be configured with + several address pools. This list defines such address pools + which are distinguished by the key called 'pool-id'."; + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + leaf total-address-count { + type uint64; + mandatory true; + description "count of total addresses in the pool"; + } + leaf allocated-address-conut { + type uint64; + mandatory true; + description "count of allocated addresses in the pool"; + } + } + list binding-info { + key cli-id; + description "A list that records a binding information for each DHCPv6 + client that has already been allocated IPv6 addresses."; + leaf cli-id { + type uint32; + mandatory true; + description "client id"; + } + container duid { + description "Read the DUID"; + uses dhcpv6-types:duid; + } + list cli-ia { + key iaid; + description "client IA"; + leaf ia-type { + type string; + mandatory true; + description "IA type"; + } + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf-list cli-addr { + type inet:ipv6-address; + description "client addr"; + } + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + } + } + } + container pd-pools { + description "If a server supports prefix delegation function, + this container will be used to define the delegating + router's prefix pools."; + list prefix-pool { + key pool-id; + description "Similar to server's address pools, a delegating + router can also be configured with multiple prefix pools + specified by a list called 'prefix-pool'."; + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + leaf pd-space-utilization { + type threshold; + mandatory true; + description "current PD space utilization"; + } + } + list binding-info { + key cli-id; + description "A list records a binding information for each DHCPv6 + client that has already been alloated IPv6 prefixes."; + leaf cli-id { + type uint32; + mandatory true; + description "client id"; + } + container duid { + description "Reads the DUID"; + uses dhcpv6-types:duid; + } + list cli-iapd { + key iaid; + description "client IAPD"; + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf-list cli-prefix { + type inet:ipv6-prefix; + description "client ipv6 prefix"; + } + leaf-list cli-prefix-len { + type uint8; + description "client prefix length"; + } + leaf pool-id { + type uint32; + mandatory true; + description "pool id"; + } + } + } + } + + container host-reservations { + description "This container provides host reservations in the host level."; + list binding-info { + key cli-id; + description + "A list records a binding information for each DHCPv6 + client that has already been alloated IPv6 addresses or prefixes + by host reservations."; + leaf cli-id { + type uint32; + mandatory true; + description "client id"; + } + container duid { + description "Reads the DUID"; + uses dhcpv6-types:duid; + } + list cli-ia { + key iaid; + description "client IA"; + leaf ia-type { + type string; + mandatory true; + description "IA type, IA_NA or IA_TA"; + } + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf-list cli-addr { + type inet:ipv6-address; + description "client addr"; + } + } + + list cli-iapd { + key iaid; + description "client IAPD"; + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf-list cli-prefix { + type inet:ipv6-prefix; + description "client ipv6 prefix"; + } + leaf-list cli-prefix-len { + type uint8; + description "client prefix length"; + } + } + } + } + + } + } + + container packet-stats { + description "A container presents the packet statistics related to + the DHCPv6 server."; + leaf solicit-count { + type uint32; + mandatory true; + description "solicit counter"; + } + leaf request-count { + type uint32; + mandatory true; + description "request counter"; + } + leaf renew-count { + type uint32; + mandatory true; + description "renew counter"; + } + leaf rebind-count { + type uint32; + mandatory true; + description "rebind counter"; + } + leaf decline-count { + type uint32; + mandatory true; + description "decline count"; + } + leaf release-count { + type uint32; + mandatory true; + description "release counter"; + } + leaf info-req-count { + type uint32; + mandatory true; + description "information request counter"; + } + leaf advertise-count { + type uint32; + mandatory true; + description "advertise counter"; + } + leaf confirm-count { + type uint32; + mandatory true; + description "confirm counter"; + } + leaf reply-count { + type uint32; + mandatory true; + description "reply counter"; + } + leaf reconfigure-count { + type uint32; + mandatory true; + description "reconfigure counter"; + } + leaf relay-forward-count { + type uint32; + mandatory true; + description "relay forward counter"; + } + leaf relay-reply-count { + type uint32; + mandatory true; + description "relay reply counter"; + } + } + } + } + + /* + * Notifications + */ + + notification notifications { + description "dhcpv6 server notification module"; + container dhcpv6-server-event { + description "dhcpv6 server event"; + container address-pool-running-out { + description "raised when the address pool is going to + run out. A threshold for utilization ratio of the pool has + been defined in the server feature so that it will notify the + administrator when the utilization ratio reaches the + threshold, and such threshold is a settable parameter"; + leaf total-address-count { + type uint64; + mandatory true; + description "count of total addresses in the pool"; + } + leaf max-address-count { + type uint64; + mandatory true; + description "maximum count of addresses that can be allocated + in the pool. This value may be less than count of total + addresses"; + } + leaf allocated-address-conut { + type uint64; + mandatory true; + description "count of allocated addresses in the pool"; + } + container duid { + description "server duid"; + uses dhcpv6-types:duid; + } + leaf serv-name { + type string; + description "server name"; + } + leaf pool-name { + type string; + mandatory true; + description "pool name"; + } + } + container pd-pool-running-out { + description "raised when the address/prefix pool is going to + run out. A threshold for utilization ratio of the pool has + been defined in the server feature so that it will notify the + administrator when the utilization ratio reaches the + threshold, and such threshold is a settable parameter"; + leaf max-pd-space-utilization { + type threshold; + mandatory true; + description "maximum pd space utilization"; + } + leaf pd-space-utilization { + type threshold; + mandatory true; + description "current pd space utilization"; + } + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf serv-name { + type string; + description "server name"; + } + leaf pool-name { + type string; + mandatory true; + description "pool name"; + } + } + container invalid-client-detected { + description "raised when the server has found a client which + can be regarded as a potential attacker. Some description + could also be included."; + container duid { + description "Sets the DUID"; + uses dhcpv6-types:duid; + } + leaf description { + type string; + description "description of the event"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-types@2018-01-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-types@2018-01-30.yang new file mode 100644 index 000000000..7614adab0 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-dhcpv6-types@2018-01-30.yang @@ -0,0 +1,206 @@ +module ietf-dhcpv6-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-types"; + prefix "dhcpv6-types"; + + import ietf-inet-types { + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + + organization "DHC WG"; + contact + "cuiyong@tsinghua.edu.cn + lh.sunlinh@gmail.com + ian.farrer@telekom.de + sladjana.zechlin@telekom.de + hezihao9512@gmail.com"; + + description "This model defines a YANG data model that can be + used to define some commonly used DHCPv6 types"; + + revision 2018-01-30 { + description "Initial revision"; + reference "I-D: draft-ietf-dhc-dhcpv6-yang"; + } + + /* + * Grouping + */ + grouping vendor-infor { + description "Vendor information."; + container vendor-info { + description ""; + leaf ent-num { + type uint32; + mandatory true; + description "enterprise number"; + } + leaf-list data { + type string; + description "specific vendor info"; + } + } + } + + grouping duid { + description + "Each server and client has only one DUID (DHCP Unique Identifier). + The DUID here identifies a unique DHCPv6 server for clients. DUID + consists of a two-octet type field and an arbitrary length (no more + than 128 bytes) content field. Currently there are four defined types + of DUIDs in RFC3315 and RFC6355 - DUID-LLT, DUID-EN, DUID-LL and + DUID-UUID. DUID-Uknown represents those unconventional DUIDs."; + reference "RFC3315: Section 9 and RFC6355: Section 4"; + leaf type-code { + type uint16; + default 65535; + description "Type code of this DUID"; + } + choice duid-type { + default duid-unknown; + description "Selects the format for the DUID."; + case duid-llt { + description "DUID Based on Link-layer Address Plus Time + (Type 1 - DUID-LLT)"; + reference "RFC3315 Section 9.2"; + leaf duid-llt-hardware-type { + type uint16; + description "Hardware type as assigned by IANA (RFC826)."; + } + leaf duid-llt-time { + type yang:timeticks; + description "The time value is the time that the DUID is + generated represented in seconds since midnight (UTC), + January 1, 2000, modulo 2^32."; + } + leaf duid-llt-link-layer-addr { + type yang:mac-address; + description "Link-layer address as described in RFC2464"; + } + } + case duid-en { + description "DUID Assigned by Vendor Based on Enterprise Number + (Type 2 - DUID-EN)"; + reference "RFC3315 Section 9.3"; + leaf duid-en-enterprise-number { + type uint32; + description "Vendor's registered Private Enterprise Number as + maintained by IANA"; + } + leaf duid-en-identifier { + type string; + description "Indentifier, unique to the device that is + using it"; + } + } + case duid-ll { + description "DUID Based on Link-layer Address (Type 3 - DUID-LL)"; + reference "RFC3315 Section 9.4"; + leaf duid-ll-hardware-type { + type uint16; + description "Hardware type as assigned by IANA (RFC826)."; + } + leaf duid-ll-link-layer-addr { + type yang:mac-address; + description "Link-layer address as described in RFC2464"; + } + } + case duid-uuid { + description "DUID Based on Universally Unique Identifier + (Type 4 - DUID-UUID)"; + reference "RFC6335 Defination of the UUID-Based Unique Identifier"; + leaf uuid { + type yang:uuid; + description "A Universally Unique IDentifier in the string + representation defined in RFC 4122. The canonical + representation uses lowercase characters"; + } + } + case duid-unknown { + description "DUID based on free raw bytes"; + leaf data { + type binary; + description "The bits to be used as the identifier"; + } + } + } + } + + grouping portset-para { + description "portset parameters"; + container port-parameter { + description "port parameter"; + leaf offset { + type uint8; + mandatory true; + description "offset in a port set"; + } + leaf psid-len { + type uint8; + mandatory true; + description "length of a psid"; + } + leaf psid { + type uint16; + mandatory true; + description "psid value"; + } + } + } + + grouping iaid { + description "IA is a construct through which a server and a + client can identify, group, and manage a set of related IPv6 + addresses. The key of the list is a 4-byte number IAID defined + in [RFC3315]."; + list identity-association { + config "false"; + description "IA"; + leaf iaid { + type uint32; + mandatory true; + description "IAID"; + } + leaf ia-type { + type string; + mandatory true; + description "IA type"; + } + leaf-list ipv6-addr { + type inet:ipv6-address; + description "ipv6 address"; + } + leaf-list ipv6-prefix { + type inet:ipv6-prefix; + description "ipv6 prefix"; + } + leaf-list prefix-length { + type uint8; + description "ipv6 prefix length"; + } + leaf t1-time { + type yang:timeticks; + mandatory true; + description "t1 time"; + } + leaf t2-time { + type yang:timeticks; + mandatory true; + description "t2 time"; + } + leaf preferred-lifetime { + type yang:timeticks; + mandatory true; + description "preferred lifetime"; + } + leaf valid-lifetime { + type yang:timeticks; + mandatory true; + description "valid lifetime"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-diam-trafficclassifier@2018-02-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-diam-trafficclassifier@2018-02-28.yang new file mode 100644 index 000000000..057886595 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-diam-trafficclassifier@2018-02-28.yang @@ -0,0 +1,355 @@ +module ietf-diam-trafficclassifier { + yang-version 1.1; + + namespace + "urn:ietf:params:xml:ns:yang:ietf-diam-trafficclassifier"; + + prefix "diamclassifier"; + + import ietf-inet-types { + prefix inet; + revision-date 2013-07-15; + } + import ietf-yang-types { prefix yang-types; } + + organization "IETF Distributed Mobility Management (DMM) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Dapeng Liu + + + WG Chair: Sri Gundavelli + + + Editor: Satoru Matsushima + + + Editor: Lyle Bertz + "; + + description + "This module contains a collection of YANG definitions for + traffic classification and QoS Attributes for Diameter. + + Copyright (c) 2018 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with + respect to this document. Code Components extracted from this + document must include Simplified BSD License text as described + in Section 4.e of the Trust Legal Provisions and are provided + without warranty as described in the Simplified BSD License."; + + revision 2018-02-28 { + description + "Initial"; + reference + "RFC 5777: Traffic Classification and Quality of Service (QoS) + Attributes for Diameter"; + } + + typedef eui64-address-type { + type string { + length "6"; + } + description + "specifies a single layer 2 address in EUI-64 format. + The value is an 8-octet encoding of the address as + it would appear in the frame header."; + } + typedef direction-type { + type enumeration { + enum IN { + value 0; + description + "Applies to flows from the managed terminal."; + } + enum OUT { + value 1; + description + "Applies to flows to the managed terminal."; + } + enum BOTH { + value 2; + description + "Applies to flows both to and from the managed + terminal."; + } + } + description + "Specifies in which direction to apply the classifier."; + } + typedef negated-flag-type { + type enumeration { + enum False { value 0; + description "false"; } + enum True { value 1; + description "True"; } + } + description + "When set to True, the meaning of the match is + inverted and the classifier will match addresses + other than those specified by the From-Spec or + To-Spec AVP. + + Note that the negation does not impact the port + comparisons."; + } + grouping index { + leaf index { + type uint16; + mandatory true; + description "Identifier used for referencing"; + } + description "Index Value"; + } + grouping to-from-spec-value { + leaf-list ip-address { + type inet:ip-address; + description "IP address"; + } + list ip-address-range { + key index; + uses diamclassifier:index; + leaf ip-address-start { + type inet:ip-address; + description "IP Address Start"; + } + leaf ip-address-end { + type inet:ip-address; + description "IP Address End"; + } + description "IP Address Range"; + } + leaf-list ip-address-mask { + type inet:ip-prefix; + description "IP Address Mask"; + } + leaf-list mac-address { + type yang-types:mac-address; + description "MAC address"; + } + list mac-address-mask { + key mac-address; + leaf mac-address { + type yang-types:mac-address; + mandatory true; + description "MAC address"; + } + leaf macaddress-mask-pattern { + type yang-types:mac-address; + mandatory true; + description + "The value specifies the bit positions of a + MAC address that are taken for matching."; + } + description "MAC Address Mask"; + } + leaf-list eui64-address { + type diamclassifier:eui64-address-type; + description "EUI64 Address"; + } + list eui64-address-mask { + key eui64-address; + leaf eui64-address { + type diamclassifier:eui64-address-type; + mandatory true; + description "eui64 address"; + } + leaf eui64-address-mask-pattern { + type diamclassifier:eui64-address-type; + mandatory true; + description + "The value is 8 octets specifying the bit + positions of a EUI64 address that are taken + for matching."; + } + description "EUI64 Address Mask"; + } + leaf-list port { + type inet:port-number; + description "Port Number"; + } + list port-range { + key index; + uses diamclassifier:index; + leaf ip-address-start { + type inet:port-number; + description "Port Start"; + } + leaf ip-address-end { + type inet:port-number; + description "Port End"; + } + description "Port Range"; + } + leaf negated { + type diamclassifier:negated-flag-type; + description "Negated"; + } + leaf use-assigned-address { + type boolean; + description "Use Assigned Address"; + } + description + "Basic traffic description value"; + } + + grouping option-type-group { + leaf option-type { + type uint8; + mandatory true; + description "Option Type"; + } + leaf-list ip-option-value { + type string; + description "Option Value"; + } + leaf negated { + type diamclassifier:negated-flag-type; + description "Negated"; + } + description "Common X Option Pattern"; + } + typedef vlan-id { + type uint32 { + range "0..4095"; + } + description "VLAN ID"; + } + + grouping classifier { + leaf protocol { + type uint8; + description "Protocol"; + } + leaf direction { + type diamclassifier:direction-type; + description "Direction"; + } + list from-spec { + key index; + uses diamclassifier:index; + uses diamclassifier:to-from-spec-value; + description "from specification"; + } + list to-spec { + key index; + uses diamclassifier:index; + uses diamclassifier:to-from-spec-value; + description "to specification"; + } + leaf-list disffserv-code-point { + type inet:dscp; + description "DSCP"; + } + leaf fragmentation-flag { + type enumeration { + enum DF { + value 0; + description "Don't Fragment"; + } + enum MF { + value 1; + description "More Fragments"; + } + } + description "Fragmenttation Flag"; + } + list ip-option { + key option-type; + uses diamclassifier:option-type-group; + description "IP Option Value"; + } + list tcp-option { + key option-type; + uses diamclassifier:option-type-group; + description "TCP Option Value"; + } + list tcp-flag { + key tcp-flag-type; + leaf tcp-flag-type { + type uint32; + mandatory true; + description "TCP Flag Type"; + } + leaf negated { + type diamclassifier:negated-flag-type; + description "Negated"; + } + description "TCP Flags"; + } + list icmp-option { + key option-type; + uses diamclassifier:option-type-group; + description "ICMP Option Value"; + } + list eth-option { + key index; + uses diamclassifier:index; + container eth-proto-type { + leaf-list eth-ether-type { + type string { + length "2"; + } + description "value of ethertype field"; + } + leaf-list eth-sap { + type string { + length "2"; + } + description "802.2 SAP"; + } + description "Ether Proto Type"; + } + list vlan-id-range { + key index; + uses diamclassifier:index; + leaf-list s-vlan-id-start { + type diamclassifier:vlan-id; + description "S-VID VLAN ID Start"; + } + leaf-list s-vlan-id-end { + type diamclassifier:vlan-id; + description "S-VID VLAN ID End"; + } + leaf-list c-vlan-id-start { + type diamclassifier:vlan-id; + description "C-VID VLAN ID Start"; + } + leaf-list c-vlan-id-end { + type diamclassifier:vlan-id; + description "C-VID VLAN ID End"; + } + description "VLAN ID Range"; + } + list user-priority-range { + key index; + uses diamclassifier:index; + leaf-list low-user-priority { + type uint32 { + range "0..7"; + } + description "Low User Priority"; + } + leaf-list high-user-priority { + type uint32 { + range "0..7"; + } + description "High User Priority"; + } + description "User priority range"; + } + description "Ether Option"; + } + description "RFC 5777 Classifier"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2017-12-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2017-12-12.yang deleted file mode 100644 index b1cf78fd4..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-diffserv@2017-12-12.yang +++ /dev/null @@ -1,139 +0,0 @@ -module ietf-diffserv { - yang-version 1; - namespace "urn:ietf:params:xml:ns:yang:ietf-diffserv"; - prefix diffserv; - - import ietf-qos-classifier { - prefix classifier; - } - import ietf-qos-policy { - prefix policy; - } - import ietf-qos-action { - prefix action; - } - - organization "IETF RTG (Routing Area) Working Group"; - contact - "WG Web: - WG List: - WG Chair: Chris Bowers - - WG Chair: Jeff Tantsura - - Editor: Aseem Choudhary - - Editor: Mahesh Jethanandani - + WG List: + WG Chair: Jurgen Schonwalder + + WG Chair: Lou Berger + + WG Chair: Kent Watsen + + Editor: Aseem Choudhary + + Editor: Mahesh Jethanandani + - WG Chair: Jouni Korhonen - + WG Chair: Sri Gundavelli + Editor: Satoru Matsushima @@ -51,7 +53,11 @@ module ietf-dmm-fpc-settingsext { in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License."; - revision 2017-09-27 { +revision 2018-02-28 { + description "Version updates."; + reference "draft-ietf-dmm-fpc-cpdp-10"; +} +revision 2017-09-27 { description "Version 10 updates."; reference "draft-ietf-dmm-fpc-cpdp-10"; } @@ -68,289 +74,104 @@ revision 2016-08-03 { reference "draft-ietf-dmm-fpc-cpdp-05"; } - // Next Hop Structures - SETTING - typedef fpc-service-path-id { - type uint32 { - range "0..33554431"; - } - description "SERVICE_PATH_ID"; - } - typedef fpc-mpls-label { - type uint32 { - range "0..1048575"; - } - description "MPLS label"; - } - identity fpc-nexthop-type { - description "NAT Service"; - } - - grouping fpc-nexthop { - leaf nexthop-type { - type identityref { - base "fpcbase:fpc-nexthop-type"; - } - mandatory true; - description "Nexthop Type"; - } - choice nexthop-value { - mandatory true; - case ip-nexthop { - leaf ip { - type inet:ip-address; - description "IP Value"; - } - description "IP Case"; - } - case macaddress-nexthop { - leaf macaddress { - type ytypes:mac-address; - description "MAC Address Value"; - } - } - case servicepath-nexthop { - leaf servicepath { - type fpcbase:fpc-service-path-id; - description "Service Path Value"; - } - description "Service Path Case"; - } - case mplslabel-nexthop { - leaf lsp { - type fpcbase:fpc-mpls-label; - description "MPLS Value"; - } - description "Service Path Case"; - } - case if-nexthop { - leaf if-index { - type uint16; - description "If (interface) Value"; - } - description "Service Path Case"; - } - description "Value"; - } - description "Nexthop Value"; - } - - // Address Translation - ACTION - grouping simple-nat { - leaf outbound-nat-address { - type inet:ip-address; - description "Outbound NAT Address"; - } - description "Simple NAT value"; - } - grouping simple-napt { - leaf source-port { - type inet:port-number; - description "Source Port"; - } - leaf outbound-napt-address { - type inet:ip-address; - description "Outbound NAPT Address"; - } - leaf destination-port { - type inet:port-number; - description "Destination Port"; - } - description "Simple NAPT Configuration"; - } - - // COPY FORWARD - ACTION - grouping copy-forward { - container destination { - choice value { - case nexthop-case { - container nexthop { - uses fpcbase:fpc-nexthop; - description "Next Hop"; - } - description "Port Forward Case"; - } - description "Copy Forward Value"; - } - description "destination"; - } - description "Copy Then Forward to Port/Context Action"; - } - - ////////////////////////////// - // PMIP Integration // - identity pmip-tunnel-type { - description "PMIP Tunnel Type"; + //Tunnel Information + identity tunnel-type { + description "Tunnel Type"; } identity grev1 { - base "pmip-tunnel-type"; + base "fpcbase:tunnel-type"; description "GRE v1"; } identity grev2 { - base "pmip-tunnel-type"; + base "fpcbase:tunnel-type"; description "GRE v2"; } identity ipinip { - base "pmip-tunnel-type"; + base "fpcbase:tunnel-type"; description "IP in IP"; } - grouping pmip-tunnel-info { - leaf pmip-tunnel-type { - type identityref { - base "pmip-tunnel-type"; - } - description "PMIP Mobility"; - } - choice pmip-tunnel-value { - case gre { - leaf gre-key { - type uint32; - description "GRE_KEY"; - } - description "GRE Value"; - } - description "PMIP Mobility value"; - } - uses traffic-selectors:traffic-selector; - description "PMIP Tunnel Information"; - } - typedef pmip-commandset { - type bits { - bit assign-ip { - position 0; - description "Assign IP"; - } - bit assign-dpn { - position 1; - description "Assign DPN"; - } - bit session { - position 2; - description "Session Level"; - } - bit uplink { - position 3; - description "Uplink"; - } - bit downlink { - position 4; - description "Downlink"; - } - } - description "PMIP Instructions"; - } - /////////////////////////////// - // 3GPP Integration // - // Tunnel Types - identity threeGPP-tunnel-type { - description "3GPP Base Tunnel Type"; - } identity gtpv1 { - base "fpcbase:threeGPP-tunnel-type"; + base "fpcbase:tunnel-type"; description "GTP version 1 Tunnel"; } identity gtpv2 { - base "fpcbase:threeGPP-tunnel-type"; + base "fpcbase:tunnel-type"; description "GTP version 2 Tunnel"; } - // QoS Profile - typedef fpc-qos-class-identifier { - type uint8 { - range "1..9"; - } - description "QoS Class Identifier (QCI)"; - } - grouping threeGPP-QoS { - description "3GPP QoS Attributes"; - leaf qci { - type fpc-qos-class-identifier; - description "QCI"; - } - leaf gbr { - type uint32; - description "Guaranteed Bit Rate"; - } - leaf mbr { - type uint32; - description "Maximum Bit Rate"; - } - leaf apn-ambr { - type uint32; - description "Access Point Name Aggregate Max Bit Rate"; - } - leaf ue-ambr { - type uint32; - description "User Equipment Aggregate Max Bit Rate"; - } - container arp { - uses pmipqos:Allocation-Retention-Priority-Value; - description "Allocation Retention Priority"; - } - } - typedef ebi-type { - type uint8 { - range "0..15"; + + grouping tunnel-value { + container tunnel-info { + leaf tunnel-local-address { + type inet:ip-address; + description "local tunnel address"; } - description "EUTRAN Bearere Identifier (EBI) Type"; - } - // From 3GPP TS 24.008 version 13.5.0 Release 13 - typedef component-type-enum { - type enumeration { - enum ipv4RemoteAddress { - value 16; - description "IPv4 Remote Address"; - } - enum ipv4LocalAddress { - value 17; - description "IPv4 Local Address"; - } - enum ipv6RemoteAddress { - value 32; - description "IPv6 Remote Address"; - } - enum ipv6RemoteAddressPrefix { - value 33; - description "IPv6 Remote Address Prefix"; - } - enum ipv6LocalAddressPrefix { - value 35; - description "IPv6 Local Address Prefix"; - } - enum protocolNextHeader { - value 48; - description "Protocol (IPv4) or NextHeader (IPv6) - value"; - } - enum localPort { - value 64; - description "Local Port"; - } - enum localPortRange { - value 65; - description "Local Port Range"; - } - enum reomotePort { - value 80; - description "Remote Port"; - } - enum remotePortRange { - value 81; - description "Remote Port Range"; - } - enum secParamIndex { - value 96; - description "Security Parameter Index (SPI)"; - } - enum tosTraffClass { - value 112; - description "TOS Traffic Class"; - } - enum flowLabel { - value 128; - description "Flow Label"; - } - } - description "TFT Component Type"; + leaf tunnel-remote-address { + type inet:ip-address; + description "remote tunnel address"; + } + leaf mtu-size { + type uint32; + description "MTU size"; + } + leaf tunnel { + type identityref { + base "fpcbase:tunnel-type"; + } + description "tunnel type"; + } + leaf payload-type { + type enumeration { + enum ipv4 { + value 0; + description "IPv4"; + } + enum ipv6 { + value 1; + description "IPv6"; + } + enum dual { + value 2; + description "IPv4 and IPv6"; + } + } + description "Payload Type"; + } + leaf gre-key { + type uint32; + description "GRE_KEY"; + } + container gtp-tunnel-info { + leaf local-tunnel-identifier { + type uint32; + description "Tunnel Endpoint IDentifier (TEID)"; + } + leaf remote-tunnel-identifier { + type uint32; + description "Tunnel Endpoint IDentifier (TEID)"; + } + leaf sequence-numbers-enabled { + type boolean; + description "Sequence No. Enabled"; + } + description "GTP Tunnel Information"; + } + leaf ebi { + type fpcbase:ebi-type; + description "EPS Bearier Identifier"; + } + leaf lbi { + type fpcbase:ebi-type; + description "Linked Bearier Identifier"; + } + description "Tunnel Information"; } + description "Tunnel Value"; + } + + ////////////////////////////// + // DESCRIPTOR DEFINITIONS + + // From 3GPP TS 24.008 version 13.5.0 Release 13 typedef packet-filter-direction { type enumeration { enum preRel7Tft { @@ -402,41 +223,29 @@ revision 2016-08-03 { description "Component Type"; } choice value { - case ipv4-local { - leaf ipv4-local { + leaf ipv4-local { type inet:ipv4-address; description "IPv4 Local Address"; - } } - case ipv6-prefix-local { - leaf ipv6-prefix-local { + leaf ipv6-prefix-local { type inet:ipv6-prefix; description "IPv6 Local Prefix"; - } } - case ipv4-ipv6-remote { - leaf ipv4-ipv6-remote { + leaf ipv4-ipv6-remote { type inet:ip-address; description "Ipv4 Ipv6 remote address"; - } } - case ipv6-prefix-remote { - leaf ipv6-prefix-remote { + leaf ipv6-prefix-remote { type inet:ipv6-prefix; description "IPv6 Remote Prefix"; - } } - case next-header { - leaf next-header { + leaf next-header { type uint8; description "Next Header"; - } } - case local-port { - leaf local-port { + leaf local-port { type inet:port-number; description "Local Port"; - } } case local-port-range { leaf local-port-lo { @@ -448,11 +257,9 @@ revision 2016-08-03 { description "Local Port Max Value"; } } - case remote-port { - leaf remote-port { + leaf remote-port { type inet:port-number; description "Remote Port"; - } } case remote-port-range { leaf remote-port-lo { @@ -464,17 +271,13 @@ revision 2016-08-03 { description "Remote Port Max Value"; } } - case ipsec-index { - leaf ipsec-index { + leaf ipsec-index { type traffic-selectors:ipsec-spi; description "IPSec Index"; - } } - case traffic-class { - leaf traffic-class { + leaf traffic-class { type inet:dscp; description "Traffic Class"; - } } case traffic-class-range { leaf traffic-class-lo { @@ -486,24 +289,181 @@ revision 2016-08-03 { description "Traffic Class Max Value"; } } - case flow-label-type { - leaf-list flow-label { + leaf-list flow-label { type inet:ipv6-flow-label; description "Flow Label"; - } } description "Component Value"; } } description "Packet Filter"; } - grouping tft { - list packet-filters { - key identifier; + + grouping prefix-descriptor { + leaf destination-ip { + type inet:ip-prefix; + description "Rule of destination IP"; + } + leaf source-ip { + type inet:ip-prefix; + description "Rule of source IP"; + } + description "Traffic descriptor based upon source/ + destination as IP prefixes"; + } + + grouping fpc-descriptor-value { + choice descriptor-value { + mandatory true; + leaf all-traffic { + type empty; + description "admit any"; + } + leaf no-traffic { + type empty; + description "deny any"; + } + case prefix-descriptor { + uses fpcbase:prefix-descriptor; + description "IP Prefix descriptor"; + } + case pmip-selector { + uses traffic-selectors:traffic-selector; + description "PMIP Selector"; + } + container rfc5777-classifier-template { + uses rfc5777:classifier; + description "RFC 5777 Classifier"; + } + container packet-filter { uses fpcbase:packet-filter; - description "List of Packet Filters"; + description "Packet Filter"; + } + case tunnel-info { + uses fpcbase:tunnel-value; + description "Tunnel Descriptor (only + considers source info)"; + } + description "Descriptor Value"; + } + description "FPC Descriptor Values"; + } + + // Next Hop Structures + typedef fpc-service-path-id { + type uint32 { + range "0..33554431"; + } + description "SERVICE_PATH_ID"; + } + typedef fpc-mpls-label { + type uint32 { + range "0..1048575"; + } + description "MPLS label"; + } + typedef segment-id { + type string { + length "16"; } - description "Packet Filter List"; + description "SR Segement Identifier"; + } + grouping fpc-nexthop { + choice next-hop-value { + leaf ip-address { + type inet:ip-address; + description "IP Value"; + } + leaf mac-address { + type ytypes:mac-address; + description "MAC Address Value"; + } + leaf service-path { + type fpcbase:fpc-service-path-id; + description "Service Path Value"; + } + leaf mpls-path { + type fpcbase:fpc-mpls-label; + description "MPLS Value"; + } + leaf nsh { + type string { + length "16"; + } + description "Network Service Header"; + } + leaf interface { + type uint16; + description "If (interface) Value"; + } + leaf segment-identifier { + type fpcbase:segment-id; + description "Segment Id"; + } + leaf-list mpls-label-stack { + type fpcbase:fpc-mpls-label; + description "MPLS Stack"; + } + leaf-list mpls-sr-stack { + type fpcbase:fpc-mpls-label; + description "MPLS SR Stack"; + } + leaf-list srv6-stack { + type fpcbase:segment-id; + description "Segment Id"; + } + case tunnel-info { + uses fpcbase:tunnel-value; + description "Tunnel Descriptor (only + considers source info)"; + } + description "Value"; + } + description "Nexthop Value"; + } + + ////////////////////////////// + // PMIP Integration // + typedef pmip-commandset { + type bits { + bit assign-ip { + position 0; + description "Assign IP"; + } + bit assign-dpn { + position 1; + description "Assign DPN"; + } + bit session { + position 2; + description "Session Level"; + } + bit uplink { + position 3; + description "Uplink"; + } + bit downlink { + position 4; + description "Downlink"; + } + } + description "PMIP Instructions"; + } + /////////////////////////////// + // 3GPP Integration // + + // Type Defs + typedef fpc-qos-class-identifier { + type uint8 { + range "1..9"; + } + description "QoS Class Identifier (QCI)"; + } + typedef ebi-type { + type uint8 { + range "0..15"; + } + description "EUTRAN Bearere Identifier (EBI) Type"; } typedef imsi-type { type uint64; @@ -511,6 +471,7 @@ revision 2016-08-03 { "International Mobile Subscriber Identity (IMSI) Value Type"; } + // Instructions typedef threegpp-instr { type bits { bit assign-ip { @@ -545,195 +506,78 @@ revision 2016-08-03 { description "Instruction Set for 3GPP R11"; } - grouping threegpp-tunnel-info { - leaf tunnel-type { - type identityref { - base "fpcbase:threeGPP-tunnel-type"; - } - description "3GPP Tunnel Subtype"; - } - leaf tunnel-identifier { - type uint32; - description "Tunnel Endpoint IDentifier (TEID)"; - } - choice tft-or-ref { - case defined-tft { - uses fpcbase:tft; - } - description "TFT Value"; - } - description "3GPP TFT and Tunnel Information"; - } - - grouping threegpp-properties { - leaf imsi { - type fpcbase:imsi-type; - description "IMSI"; - } - leaf ebi { - type fpcbase:ebi-type; - description "EUTRAN Bearere Identifier (EBI)"; - } - leaf lbi { - type fpcbase:ebi-type; - description "Linked Bearer Identifier (LBI)"; - } - description "3GPP Mobility Session Properties"; - } ////////////////////////////// // ACTION VALUE AUGMENTS grouping fpc-action-value { choice action-value { mandatory true; - case drop { - leaf drop { + leaf drop { type empty; description "Drop Traffic"; - } } - case simple-nat { - uses fpcbase:simple-nat; - description "Simple NAT value"; + container rewrite { + choice rewrite-value { + case prefix-descriptor { + uses fpcbase:prefix-descriptor; + description "IP Prefix descriptor"; + } + case pmip-selector { + uses traffic-selectors:traffic-selector; + description "PMIP Selector"; + } + container rfc5777-classifier-template { + uses rfc5777:classifier; + description "RFC 5777 Classifier"; + } + description "Rewrite Choice"; + } + description "Rewrite/NAT value"; } - case simple-napt { - uses fpcbase:simple-napt; - description "Simple NAPT Value"; + container copy-forward-nexthop { + uses fpcbase:fpc-nexthop; + description "Copy Forward Value"; } - case copy-forward { - uses fpcbase:copy-forward; - description "Copy Forward Value"; + container nexthop { + uses fpcbase:fpc-nexthop; + description "NextHop Value"; } - case pmip-selector { - uses traffic-selectors:traffic-selector; - description "PMIP Selector"; + case qos { + leaf trafficclass { + type inet:dscp; + description "Traffic Class"; + } + uses pmipqos:qosattribute; + leaf qci { + type fpcbase:fpc-qos-class-identifier; + description "QCI"; + } + leaf ue-agg-max-bitrate { + type uint32; + description "UE Aggregate Max Bitrate"; + } + leaf apn-ambr { + type uint32; + description "Access Point Name + Aggregate Max Bit Rate"; + } + description "QoS Attributes"; } description "Action Value"; } description "FPC Action Value"; } - ////////////////////////////// - // DESCRIPTOR DEFINITIONS - grouping fpc-descriptor-value { - choice descriptor-value { - mandatory true; - case all-traffic { - leaf all-traffic { - type empty; - description "admit any"; - } - } - case no-traffic { - leaf no-traffic { - type empty; - description "deny any"; - } - } - case prefix-descriptor { - leaf destination-ip { - type inet:ip-prefix; - description "Rule of destination IP"; - } - leaf source-ip { - type inet:ip-prefix; - description "Rule of source IP"; - } - description "Traffic descriptor based upon source/ - destination as IP prefixes"; - } - case pmip-selector { - uses traffic-selectors:traffic-selector; - description "PMIP Selector"; - } - case threegpp-tft { - uses fpcbase:tft; - description "3GPP TFT"; - } - description "Descriptor Value"; - } - description "FPC Descriptor Values"; - } - - //SETTINGS DEFINITIONS - grouping fpc-settings { - leaf-list delegated-ip-prefixes { - type inet:ip-prefix; - description "Delegated Prefix(es)"; - } - leaf tunnel-local-address { - type inet:ip-address; - description "local tunnel address"; - } - leaf tunnel-remote-address { - type inet:ip-address; - description "remote tunnel address"; - } - leaf mtu-size { - type uint32; - description "MTU size"; - } - container mobility-tunnel-parameters { - choice profile-parameters { - case nothing { - leaf none { - type empty; - description "Empty Value"; - } - description "No Parameters Case"; - } - case pmip { - uses pmip-tunnel-info; - } - case threegpp { - uses threegpp-tunnel-info; - uses threegpp-properties; - } - description "Mobility Profile Parameters"; - } - description - "Profile specific tunnel parameters"; - } - container nexthop { - uses fpcbase:fpc-nexthop; - description "Next Hop"; - } - container qos-profile-parameters { - choice value { - description "QoS Value"; - } - description "QoS Parameters"; - } - description "A collection of settings"; - } - identity access-technology { - description "The technology used in the access network"; - } - identity role { - description "The access-technology function of the DPN"; -} - identity ietf-pmip-access-type { - base "fpcbase:access-technology"; - description "PMIP Access"; - } - identity threeGPP-access-type { - base "fpcbase:access-technology"; - description "3GPP Access Type"; - } - // Instructions + // Instructions grouping instructions { container instructions { choice instr-type { - case threegpp-instr { - leaf instr-3gpp-mob { + leaf instr-3gpp-mob { type fpcbase:threegpp-instr; description "3GPP GTP Mobility Instructions"; - } } - case pmip-instr { - leaf instr-pmip { + leaf instr-pmip { type pmip-commandset; description "PMIP Instructions"; - } } description "Instruction Value Choice"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dmm-fpc@2018-02-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-dmm-fpc@2018-02-28.yang new file mode 100644 index 000000000..c789a34c6 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-dmm-fpc@2018-02-28.yang @@ -0,0 +1,1056 @@ +module ietf-dmm-fpc { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-dmm-fpc"; + prefix fpc; + + import ietf-inet-types { prefix inet; + revision-date 2013-07-15; } + import ietf-dmm-fpc-settingsext { prefix fpcbase; + revision-date 2018-02-28; } + import ietf-diam-trafficclassifier { prefix rfc5777; + revision-date 2018-02-28; } + import ietf-restconf { prefix rc; + revision-date 2017-01-26; } + import ietf-yang-patch { prefix ypatch; + revision-date 2017-02-22; } + + organization "IETF Distributed Mobility Management (DMM) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Dapeng Liu + + + WG Chair: Sri Gundavelli + + + Editor: Satoru Matsushima + + + Editor: Lyle Bertz + "; + + description + "This module contains YANG definition for + Forwarding Policy Configuration Protocol (FPCP). + + Copyright (c) 2016 IETF Trust and the persons identified as the + document authors. All rights reserved. + + This document is subject to BCP 78 and the IETF Trust's Legal + Provisions Relating to IETF Documents + (http://trustee.ietf.org/license-info) in effect on the date of + publication of this document. Please review these documents + carefully, as they describe your rights and restrictions with + respect to this document. Code Components extracted from this + document must include Simplified BSD License text as described + in Section 4.e of the Trust Legal Provisions and are provided + without warranty as described in the Simplified BSD License."; + + revision 2018-02-28 { + description "Version 10 updates."; + reference "draft-ietf-dmm-fpc-cpdp-10"; + } + revision 2017-09-27 { + description "Version 10 updates."; + reference "draft-ietf-dmm-fpc-cpdp-09"; + } +revision 2017-07-22 { + description "Version 08 updates."; + reference "draft-ietf-dmm-fpc-cpdp-08"; +} +revision 2017-03-08 { + description "Version 06 updates."; + reference "draft-ietf-dmm-fpc-cpdp-06"; +} +revision 2016-08-03 { + description "Initial Revision."; + reference "draft-ietf-dmm-fpc-cpdp-05"; +} + + //General Structures + grouping templatedef { + leaf extensible { + type boolean; + description "Indicates if the template is + extensible"; + } + leaf-list mandatory-static-attributes { + type string; + description "Attribute (Name) that cannot change. + If it has not been defined in the template it + MUST NOT be present at all for the template + to be valid."; + } + leaf entity-state { + type enumeration { + enum initial { + description "Inital Configuration"; + } + enum partially-configured { + description "Partial Configuration"; + } + enum configured { + description "Confgured"; + } + enum active { + description "Active"; + } + } + default initial; + description "Entity State"; + } + description "Teamplate Definition"; + } + typedef fpc-identity { + type union { + type uint32; + type string; + type instance-identifier; + } + description "FPC Identity"; + } + grouping index { + leaf index { + type uint16; + description "Index"; + } + description "Index Value"; + } + + // Policy Structures + grouping descriptor-template-key { + leaf descriptor-template-key { + type fpc:fpc-identity; + mandatory true; + description "Descriptor Key"; + } + description "Descriptor-Template Key"; + } + grouping action-template-key { + leaf action-template-key { + type fpc:fpc-identity; + mandatory true; + description "Action Key"; + } + description "Action-Template Key"; + } + grouping rule-template-key { + leaf rule-template-key { + type fpc:fpc-identity; + mandatory true; + description "Rule Identifier"; + } + description "Rule Key"; + } + grouping policy-template-key { + leaf policy-template-key { + type fpc:fpc-identity; + mandatory true; + description "Rule Identifier"; + } + description "Rule Key"; + } + + // Settings + grouping policy-configuration { + list policy-configuration { + key index; + leaf index { + type uint16; + description "Index used for reference"; + } + choice policy-setting { + case descriptor-value { + uses fpcbase:fpc-descriptor-value; + description "Descriptor Value"; + } + case action-value { + uses fpcbase:fpc-action-value; + description "Action Value"; + } + description "Policy Attributes"; + } + description "Policy Configuration"; + } + description "Policy Configuration Value"; + } + + // FPC Policy + grouping policy-information-model { + list action-template { + key action-template-key; + uses fpc:action-template-key; + uses fpcbase:fpc-action-value; + uses fpc:templatedef; + description "Action Template"; + } + list descriptor-template { + key descriptor-template-key; + uses fpc:descriptor-template-key; + uses fpcbase:fpc-descriptor-value; + uses fpc:templatedef; + description "Descriptor Template"; + } + list rule-template { + key rule-template-key; + uses fpc:rule-template-key; + leaf descriptor-match-type { + type enumeration { + enum or { + value 0; + description "OR logic"; + } + enum and { + value 1; + description "AND logic"; + } + } + default "and"; + description "Type of Match (OR or AND) + applied to the descriptor-configurations"; + } + list descriptor-configuration { + key "descriptor-template-key"; + uses fpc:descriptor-template-key; + leaf direction { + type rfc5777:direction-type; + description "Direction"; + } + list attribute-expression { + key index; + uses fpc:index; + uses fpcbase:fpc-descriptor-value; + description "Descriptor Attributes"; + } + description "A set of Descriptor references"; + } + list action-configuration { + key "action-order"; + leaf action-order { + type uint32; + mandatory true; + description "Action Execution Order"; + } + uses fpc:action-template-key; + list attribute-expression { + key index; + uses fpc:index; + uses fpcbase:fpc-action-value; + description "Action Attributes"; + } + description "A set of Action references"; + } + uses fpc:templatedef; + uses fpc:policy-configuration; + description "Rule Template"; + } + list policy-template { + key policy-template-key; + uses fpc:policy-template-key; + list rule-template { + key "precedence"; + unique "rule-template-key"; + leaf precedence { + type uint32; + mandatory true; + description "Rule Precedence"; + } + uses fpc:rule-template-key; + description "Rule Entry"; + } + uses fpc:templatedef; + uses fpc:policy-configuration; + description "Policy Template"; + } + description "FPC Policy Structures"; + } + + // Topology Information Model + identity role { + description "Role"; + } + grouping dpn-key { + leaf dpn-key { + type fpc:fpc-identity; + description "DPN Key"; + } + description "DPN Key"; + } + grouping role-key { + leaf role-key { + type identityref { + base "fpc:role"; + } + mandatory true; + description "Access Technology Role"; + } + description "Access Technology Role key"; + } + grouping interface-key { + leaf interface-key{ + type fpc:fpc-identity; + mandatory true; + description "interface identifier"; + } + description "Interface Identifier key"; + } + identity interface-protocols { + description "Protocol supported by the interface"; + } + identity features { + description "Protocol features"; + } + + // Settings + grouping interface-settings { + list interface-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "Interface settings"; + } + description "Generic interface settings container"; + } + + // Mobility Context + grouping mobility-context { + leaf mobility-context-key { + type fpc:fpc-identity; + mandatory true; + description "Mobility Context Key"; + } + leaf-list delegating-ip-prefix { + type inet:ip-prefix; + description "IP Prefix"; + } + leaf parent-context { + type fpc:fpc-identity; + description "Parent Mobility Context"; + } + leaf-list child-context { + type fpc:fpc-identity; + description "Child Mobility Context"; + } + container mobile-node { + leaf-list ip-address { + type inet:ip-address; + description "IP Address"; + } + leaf imsi { + type fpcbase:imsi-type; + description "IMSI"; + } + list mn-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "MN Policy Cofiguration"; + } + description "Mobile Node"; + } + container domain { + leaf domain-key { + type fpc:fpc-identity; + description "Domain Key"; + } + list domain-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "MN Policy Cofiguration"; + } + description "Domain"; + } + list dpn { + key dpn-key; + uses fpc:dpn-key; + list dpn-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "DPN Policy Cofiguration"; + } + leaf role { + type identityref { + base "fpc:role"; + } + description "Role"; + } + list service-data-flow { + key identifier; + leaf identifier { + type uint32; + description "Generic Identifier"; + } + leaf service-group-key { + type fpc:fpc-identity; + description "Service Group Key"; + } + list interface { + key interface-key; + uses fpc:interface-key; + description "interface assigned"; + } + list flow-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "Flow Policy Cofiguration"; + } + description "Service Dataflow"; + } + description "DPN"; + } + description "Mobility Context"; + } + + // Events, Probes & Notifications + identity event-type { + description "Base Event Type"; + } + typedef event-type-id { + type uint32; + description "Event ID Type"; + } + grouping monitor-key { + leaf monitor-key { + type fpc:fpc-identity; + mandatory true; + description "Monitor Key"; + } + description "Monitor Id"; + } + grouping target-value { + leaf target { + type string; + description "target"; + } + description "Target Value"; + } + grouping monitor-config { + uses fpc:templatedef; + uses fpc:monitor-key; + uses fpc:target-value; + container binding-information { + description "Placeholder for information helpful + to binding the monitor ot the correct target"; + } + leaf deterrable { + type boolean; + description "Indicates reports related to this + config can be delayed."; + } + choice configuration { + mandatory true; + leaf period { + type uint32; + description "Period"; + } + case threshold-config { + leaf low { + type uint32; + description "low threshold"; + } + leaf hi { + type uint32; + description "high threshold"; + } + description "Threshold Config Case"; + } + leaf schedule { + type uint32; + description "Reporting Time"; + } + leaf-list event-identities { + type identityref { + base "fpc:event-type"; + } + description "Event Identities"; + } + leaf-list event-ids { + type uint32; + description "Event IDs"; + } + description "Event Config Value"; + } + description "Monitor Configuration"; + } + + // Top Level Structures + list tenant { + key "tenant-key"; + leaf tenant-key { + type fpc:fpc-identity; + description "Tenant Key"; + } + container mobility-information-model { + list dpn { + key dpn-key; + uses fpc:dpn-key; + leaf dpn-name { + type string; + description "DPN name"; + } + leaf dpn-resource-mapping-reference { + type string; + description "Reference to underlying + DPN resource(s)"; + } + leaf-list domain-key { + type fpc:fpc-identity; + description "Domains"; + } + leaf-list service-group-key { + type fpc:fpc-identity; + description "Service Group"; + } + list interface { + key "interface-key"; + uses fpc:interface-key; + leaf interface-name { + type string; + description "Interface Name"; + } + leaf-list roles { + type identityref { + base "fpc:role"; + } + description "Roles supported"; + } + leaf-list protocol { + type identityref { + base "interface-protocols"; + } + description "Supported protocols"; + } + uses fpc:interface-settings; + description "DPN interfaces"; + } + list dpn-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "DPN Policy Configuration"; + } + description "Set of DPNs"; + } + description "Mobility Information Model"; + } + container dpn-checkpoint { + uses fpc:basename-info; + description "DPN Checkpoint information"; + } + list service-group { + key service-group-key; + leaf service-group-key { + type fpc:fpc-identity; + mandatory true; + description "Service Group Key"; + } + leaf service-group-name { + type string; + description "Service Group Name"; + } + list dpn { + key "dpn-key role-key"; + uses fpc:dpn-key; + uses fpc:role-key; + list referenced-interface { + key interface-key; + uses fpc:interface-key; + leaf-list peer-service-group-key { + type fpc:fpc-identity; + description "Peer Service Group"; + } + description "Referenced Interface"; + } + description "DPN"; + } + list service-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "Service Configuration"; + } + description "Service Group"; + } + container service-group-checkpoint { + uses fpc:basename-info; + description "Service Group Checkpoint + information"; + } + container topology-information-model { + list service-endpoint { + key role-key; + uses fpc:role-key; + leaf role-name { + type string; + description "Role Name"; + } + leaf-list service-group-key { + type fpc:fpc-identity; + description "Service Group"; + } + list interface { + key "dpn-key interface-key"; + uses fpc:dpn-key; + uses fpc:interface-key; + leaf-list protocol { + type identityref { + base "interface-protocols"; + } + description "Supported protocols"; + } + leaf-list feature { + type identityref { + base "interface-protocols"; + } + description "Supported features"; + } + uses fpc:interface-settings; + description "A DPN interface types"; + } + description "Set of DPN types"; + } + list domain { + key domain-key; + leaf domain-key { + type fpc:fpc-identity; + mandatory true; + description "Domain Key"; + } + leaf domain-name { + type string; + description "Domain displayname"; + } + list domain-settings { + key policy-template-key; + uses fpc:policy-template-key; + uses fpc:policy-configuration; + description "Domain Cofiguration"; + } + description "List of Domains"; + } + uses fpc:basename-info; + description "FPC Topology grouping"; + } + container policy-information-model { + uses fpc:policy-information-model; + uses fpc:basename-info; + description "Policy"; + } + list mobility-context { + key "mobility-context-key"; + uses fpc:mobility-context; + description "Mobility Context"; + } + list monitor { + key monitor-key; + uses fpc:monitor-config; + description "Monitor"; + } + description "Tenant"; + } + + typedef agent-identifier { + type fpc:fpc-identity; + description "Agent Identifier"; + } + typedef client-identifier { + type fpc:fpc-identity; + description "Client Identifier"; + } + grouping basename-info { + leaf basename { + type fpc:fpc-identity; + description "Rules Basename"; + } + leaf base-checkpoint { + type string; + description "Checkpoint"; + } + description "Basename Information"; + } + + // RPCs + grouping client-id { + leaf client-id { + type fpc:client-identifier; + mandatory true; + description "Client Id"; + } + description "Client Identifier"; + } + grouping execution-delay { + leaf execution-delay { + type uint32; + description "Execution Delay (ms)"; + } + description "Execution Delay"; + } + typedef ref-scope { + type enumeration { + enum none { + value 0; + description "no references"; + } + enum op { + value 1; + description "All references are intra-operation"; + } + enum bundle { + value 2; + description "All references in exist in bundle"; + } + enum storage { + value 3; + description "One or more references exist in + storage."; + } + enum unknown { + value 4; + description "The location of the references + are unknown."; + } + } + description "Search scope for references in + the operation."; + } + rpc configure { + description "Configure RPC"; + input { + uses client-id; + uses execution-delay; + uses ypatch:yang-patch; + } + output { + uses ypatch:yang-patch-status; + } + } + augment "/configure/input/yang-patch/edit" { + leaf op-ref-scope { + type fpc:ref-scope; + description "Reference Scope"; + } + uses fpcbase:instructions; + description "yang-patch edit augments for + configure rpc"; + } + grouping subsequent-edits { + list subsequent-edit { + key edit-id; + ordered-by user; + + description "Edit list"; + + leaf edit-id { + type string; + description "Arbitrary string index + for the edit."; + } + + leaf operation { + type enumeration { + enum create { + description "Create"; + } + enum delete { + description "Delete"; + } + enum insert { + description "Insert"; + } + enum merge { + description "Merge"; + } + enum move { + description "Move"; + } + enum replace { + description "Replace"; + } + enum remove { + description + "Delete the target node if it currently + exists."; + } + } + mandatory true; + description + "The datastore operation requested"; + } + + leaf target { + type ypatch:target-resource-offset; + mandatory true; + description + "Identifies the target data node"; + } + leaf point { + when "(../operation = 'insert' or ../operation = 'move')" + + "and (../where = 'before' or ../where = 'after')" { + description + "This leaf only applies for 'insert' or 'move' + operations, before or after an existing entry."; + } + type ypatch:target-resource-offset; + description + "The absolute URL path for the data node"; + } + + leaf where { + when "../operation = 'insert' or ../operation = 'move'" { + description + "This leaf only applies for 'insert' or 'move' + operations."; + } + type enumeration { + enum before { + description + "Insert or move a data node before."; + } + enum after { + description + "Insert or move a data node after."; + } + enum first { + description + "Insert or move a data node so it becomes ordered + as the first entry."; + } + enum last { + description + "Insert or move a data node so it becomes ordered + as the last entry."; + } + } + default last; + description + "Identifies where a data resource will be inserted + or moved."; + } + + anydata value { + when "../operation = 'create' " + + "or ../operation = 'merge' " + + "or ../operation = 'replace' " + + "or ../operation = 'insert'" { + description + "The anydata 'value' is only used for 'create', + 'merge', 'replace', and 'insert' operations."; + } + description + "Value used for this edit operation."; + } + } + description "Subsequent Edits"; + } + augment "/configure/output/yang-patch-status/edit-status/edit/" + + "edit-status-choice/ok" { + leaf notify-follows { + type boolean; + description "Notify Follows Indication"; + } + uses fpc:subsequent-edits; + description "Configure output augments"; + } + + grouping op-header { + uses client-id; + uses execution-delay; + leaf op-id { + type uint64; + mandatory true; + description "Operation Identifier"; + } + description "Common Operation header"; + } + grouping monitor-response { + leaf op-id { + type uint64; + mandatory true; + description "Operation Identifier"; + } + choice edit-status-choice { + description + "A choice between different types of status + responses for each 'edit' entry."; + leaf ok { + type empty; + description + "This 'edit' entry was invoked without any + errors detected by the server associated + with this edit."; + } + case errors { + uses rc:errors; + description + "The server detected errors associated with the + edit identified by the same 'edit-id' value."; + } + } + description "Monitor Response"; + } + + // Common RPCs + rpc reg_monitor { + description "Used to register monitoring of parameters/events"; + input { + uses fpc:op-header; + list monitors { + key monitor-key; + uses fpc:monitor-config; + description "Monitor Configuration"; + } + } + output { + uses fpc:monitor-response; + } + } + rpc dereg_monitor { + description "Used to de-register monitoring of + parameters/events"; + input { + uses fpc:op-header; + list monitor { + key monitor-key; + uses fpc:monitor-key; + min-elements 1; + leaf send_data { + type boolean; + description "Indicates if NOTIFY with final data + is desired upon deregistration"; + } + description "Monitor Identifier"; + } + } + output { + uses fpc:monitor-response; + } + } + rpc probe { + description "Probe the status of a registered monitor"; + input { + uses fpc:op-header; + list monitor { + key monitor-key; + uses fpc:monitor-key; + min-elements 1; + description "Monitor"; + } + } + output { + uses fpc:monitor-response; + } + } + + // Notification Messages & Structures + notification config-result-notification { + uses ypatch:yang-patch-status; + description "Configuration Result Notification"; + } + augment "/config-result-notification" { + uses fpc:subsequent-edits; + description "config-result-notificatio augment"; + } + + identity notification-cause { + description "Notification Cause"; + } + identity subscribed-event-occured { + base "notification-cause"; + description "Subscribed Event Occurence"; + } + identity low-threshold-crossed { + base "notification-cause"; + description "Subscribed Event Occurence"; + } + identity high-threshold-crossed { + base "notification-cause"; + description "Subscribed Event Occurence"; + } + identity periodic-report { + base "notification-cause"; + description "Periodic Report"; + } + identity scheduled-report { + base "notification-cause"; + description "Scheduled Report"; + } + identity probe { + base "notification-cause"; + description "Probe"; + } + identity deregistration-final-value { + base "notification-cause"; + description "Probe"; + } + identity monitoring-suspension { + base "notification-cause"; + description "Indicates monitoring suspension"; + } + identity monitoring-resumption { + base "notification-cause"; + description "Indicates that monitoring has resumed"; + } + identity dpn-available { + base "notification-cause"; + description "DPN Candidate Available"; + } + identity dpn-unavailable { + base "notification-cause"; + description "DPN Unavailable"; + } + notification notify { + leaf notification-id { + type uint32; + description "Notification Identifier"; + } + leaf timestamp { + type uint32; + description "timestamp"; + } + list report { + key monitor-key; + uses fpc:monitor-key; + min-elements 1; + leaf trigger { + type identityref { + base "notification-cause"; + } + description "Notification Cause"; + } + choice value { + case dpn-candidate-available { + leaf node-id { + type inet:uri; + description "Topology URI"; + } + list supported-interface-list { + key role-key; + uses fpc:role-key; + description "Support Intefaces"; + } + description "DPN Candidate Information"; + } + case dpn-unavailable { + leaf dpn-id { + type fpc:fpc-identity; + description "DPN Identifier for DPN Unavailable"; + } + description "DPN Unavailable"; + } + anydata report-value { + description "Any non integer report"; + } + description "Report Value"; + } + description "Report"; + } + description "Notify Message"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-01-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-02-26.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-01-10.yang rename to experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-02-26.yang index beccc0864..3a5bfa979 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-01-10.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-dslite@2018-02-26.yang @@ -4,11 +4,36 @@ module ietf-dslite { namespace "urn:ietf:params:xml:ns:yang:ietf-dslite"; prefix dslite; - import ietf-inet-types { prefix inet; } - import ietf-interfaces { prefix if; } - import iana-if-type { prefix ianaift; } - import ietf-nat {prefix nat;} - import ietf-yang-types { prefix yang; } + import ietf-inet-types { + prefix inet; + reference + "Section 4 of RFC 6991"; + } + + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + + import iana-if-type { + prefix ianaift; + reference + "RFC 7224: IANA Interface Type YANG Module"; + } + + import ietf-nat { + prefix nat; + reference + "RFC YYYY: A YANG Module for Network Address Translation (NAT) + and Network Prefix Translation (NPT)"; + } + + import ietf-yang-types { + prefix yang; + reference + "Section 3 of RFC 6991"; + } organization "IETF Softwire Working Group"; @@ -20,17 +45,17 @@ module ietf-dslite { Editor: Mohamed Boucadair - Editor: Christian Jacquenet + Author: Christian Jacquenet - Editor: Senthil Sivakumar + Author: Senthil Sivakumar "; description "This module is a YANG module for DS-Lite AFTR and B4 implementations. - Copyright (c) 2017 IETF Trust and the persons identified as + 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 @@ -43,12 +68,13 @@ module ietf-dslite { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2018-01-10 { + revision 2018-02-26 { description "Initial revision."; reference "RFC XXXX: A YANG Data Module for Dual-Stack Lite (DS-Lite)"; } + /* * Features */ @@ -97,6 +123,7 @@ module ietf-dslite { type inet:ipv4-address; description "IPv4 address of the local DS-Lite AFTR or B4. + 192.0.0.1 is reserved for the AFTR element, while 192.0.0.0/29 is reserved for the B4 element. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2017-09-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2017-09-12.yang deleted file mode 100644 index 0390da336..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2017-09-12.yang +++ /dev/null @@ -1,251 +0,0 @@ -module ietf-eth-te-topology { - /* TODO: FIXME */ - yang-version 1.1; - - namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-topology"; - - prefix "ethtetopo"; - - import ietf-network { - prefix "nd"; - } - - import ietf-network-topology { - prefix "lnk"; - } - - import ietf-te-topology { - prefix "tet"; - } - - import ietf-yang-types { - prefix "yang"; - } - - import ietf-eth-tran-types { - prefix "etht-types"; - } - - organization - "Internet Engineering Task Force (IETF) CCAMP WG"; - contact - " - WG List: - - ID-draft editor: - Haomian Zheng (zhenghaomian@huawei.com); - Italo Busi (italo.busi@huawei.com); - Aihua Guo (aihuaguo@huawei.com); - Yunbin Xu (xuyunbin@ritt.cn); - Yang Zhao (zhaoyangyjy@chinamobile.com); - Xufeng Liu (Xufeng_Liu@jabil.com); - Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); - "; - - description - "This module defines a YANG data model for describing - layer-2 Ethernet transport topologies."; - - revision 2017-09-12 { - description - "Updated version: - - Moved eth-ltp-svc-attributes grouping to ietf-eth-tran-svc module. - "; - } - - revision 2017-08-10 { - description - "Initial version"; - } - - /* - Groupings - */ - - grouping eth-tran-topology-type { - description - "Identifies the Ethernet Transport topology type"; - - container eth-tran-topology { - presence "indicates a topology type of Ethernet - Transport Network."; - description "Eth transport topology type"; - } - } - - grouping eth-topology-attributes { - description "Ethernet transport topology attributes"; - - leaf name { - type string; - description "the topology name"; - } - } - - grouping eth-node-attributes { - description "Ethernet transport node attributes"; - - leaf name { - type string; - description "a name for this node."; - } - leaf node-mac-address { - type yang:mac-address; - description "the MAC address of the node."; - } - } - grouping eth-link-te-attributes { - description "Ethernet TE link attributes"; - - leaf max-bandwidth { - type uint64{ - range "0..10000000000"; - } - units "Kbps"; - description "Maximum bandwith value expressed in kilobits per second"; - } - - leaf available-bandwidth { - type uint64{ - range "0..10000000000"; - } - units "Kbps"; - description "Available bandwith value expressed in kilobits per second"; - } - - leaf available-vlan-range { - type etht-types:vid-range-type; - description - "The range of the VLAN values that are available."; - } - } - - grouping eth-ltp-attributes { - description "Ethernet transport link termination point attributes"; - - leaf ltp-mac-address { - type yang:mac-address; - description "the MAC address of the LTP."; - } - leaf port-vlan-id { - type etht-types:vlanid; - description "the port VLAN ID of the LTP."; - } - } - - grouping eth-ltp-te-attributes { - description "Ethernet transport link termination point TE attributes"; - - /* - Do we need the client-facing attribute? - Cannot we use the svc container presence instead? - */ - leaf client-facing { - type empty; - description - "if present, it means this tp is a client-facing ltp."; - } - leaf maximum-frame-size { - type uint16 { - range "64 .. 65535"; - } - description - "Maximum frame size"; - } - } - - /* - Data nodes - */ - - augment "/nd:networks/nd:network/nd:network-types/tet:te-topology" { - description "Augment network types to include ETH transport newtork"; - - uses eth-tran-topology-type; - } - - augment "/nd:networks/nd:network" { - when "nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network"; - } - description "Augment ETH transport network topology attributes"; - - uses eth-topology-attributes; - } - - augment "/nd:networks/nd:network/nd:node" { - when "../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network"; - } - description "Augment ETH transport node attributes"; - - uses eth-node-attributes; - } - - augment "/nd:networks/nd:network/lnk:link/tet:te/tet:config" { - when "../../../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network."; - } - description "Augment ETH transport link config attributes"; - - uses eth-link-te-attributes; - } - augment "/nd:networks/nd:network/lnk:link/tet:te/tet:state" { - when "../../../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network."; - } - description "Augment ETH transport link state attributes"; - - uses eth-link-te-attributes; - } - - augment "/nd:networks/nd:network/nd:node/lnk:termination-point" { - when "../../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network"; - } - description "Augment ETH LTP attributes"; - - container config { - description - "ETH LTP configuration data."; - uses eth-ltp-attributes; - container access-link-bandwidth-profiles { - uses etht-types:etht-bandwidth-profiles; - description - "Bandwidth profiles for access link."; - } - } - container state { - config false; - description - "ETH LTP operational state data."; - uses eth-ltp-attributes; - container access-link-bandwidth-profiles { - uses etht-types:etht-bandwidth-profiles; - description - "Bandwidth profiles for access link."; - } - } - } - - augment "/nd:networks/nd:network/nd:node/" - +"lnk:termination-point/tet:te/tet:config" { - when "../../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network"; - } - description "Augment ETH transport LTP TE config attributes"; - - uses eth-ltp-te-attributes; - } - - augment "/nd:networks/nd:network/nd:node/" - +"lnk:termination-point/tet:te/tet:state" { - when "../../nd:network-types/tet:te-topology/eth-tran-topology" { - description "Augment only for ETH transport network"; - } - description "Augment ETH transport LTP TE state attributes"; - - uses eth-ltp-te-attributes; - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2018-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2018-03-01.yang new file mode 100644 index 000000000..4a0e5978a --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-topology@2018-03-01.yang @@ -0,0 +1,357 @@ +module ietf-eth-te-topology { + + namespace "urn:ietf:params:xml:ns:yang:ietf-eth-te-topology"; + + prefix "ethtetopo"; + + import ietf-network { + prefix "nd"; + } + + import ietf-network-topology { + prefix "lnk"; + } + + import ietf-te-topology { + prefix "tet"; + } + + import ietf-yang-types { + prefix "yang"; + } + + import ietf-eth-tran-types { + prefix "etht-types"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + " + WG List: + + ID-draft editor: + Haomian Zheng (zhenghaomian@huawei.com); + Italo Busi (italo.busi@huawei.com); + Aihua Guo (aihuaguo@huawei.com); + Yunbin Xu (xuyunbin@ritt.cn); + Yang Zhao (zhaoyangyjy@chinamobile.com); + Xufeng Liu (Xufeng_Liu@jabil.com); + Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); + "; + + description + "This module defines a YANG data model for describing + layer-2 Ethernet transport topologies."; + + revision 2018-03-01 { + description + "Initial revision"; + reference + "draft-zheng-ccamp-client-topo-yang"; + } + + /* + Groupings + */ + + grouping eth-tran-topology-type { + description + "Identifies the Ethernet Transport topology type"; + + container eth-tran-topology { + presence "indicates a topology type of Ethernet + Transport Network."; + description "Eth transport topology type"; + } + } + + grouping eth-link-te-attributes { + description "Ethernet TE link attributes"; + + leaf max-bandwidth { + type uint64{ + range "0..10000000000"; + } + units "Kbps"; + description + "Maximum bandwith value expressed in kilobits per second"; + } + + leaf available-bandwidth { + type uint64{ + range "0..10000000000"; + } + units "Kbps"; + description + "Available bandwith value expressed in kilobits per second"; + } + + leaf available-vlan-range { + type etht-types:vid-range-type; + description + "The range of the VLAN values that are available."; + } + } + + grouping ltp-bandwidth-profiles { + description + "A grouping which represents the bandwidt profile(s) for the ETH LTP."; + + choice direction { + description + "Whether the bandwidth profiles are symmetrical or + asymmetrical"; + case symmetrical { + description + "The same bandwidth profile is used to describe the ingress + and the egress bandwidth profile."; + + container ingress-egress-bandwidth-profile { + description + "The bandwith profile used in the ingress and egress direction."; + uses etht-types:etht-bandwidth-profiles; + } + } + case asymmetrical { + description + "Different ingress and egress bandwidth profiles + can be specified."; + container ingress-bandwidth-profile { + description + "The bandwidth profile used in the ingress direction."; + uses etht-types:etht-bandwidth-profiles; + } + container egress-bandwidth-profile { + description + "The bandwidth profile used in the egress direction."; + uses etht-types:etht-bandwidth-profiles; + } + } + } + } + + grouping eth-ltp-attributes { + description + "Ethernet transport link termination point attributes"; + + /* + Open Issue: should we remove this attribute (duplicates with I2RS L2 attributes)? + */ + leaf ltp-mac-address { + type yang:mac-address; + description "the MAC address of the LTP."; + } + /* + Open Issue: should we remove this attribute (duplicates with I2RS L2 attributes)? + */ + leaf port-vlan-id { + type etht-types:vlanid; + description "the port VLAN ID of the LTP."; + } + /* + Open Issue: should we remove this attribute (duplicates with I2RS L2 attributes)? + */ + leaf maximum-frame-size { + type uint16 { + range "64 .. 65535"; + } + description + "Maximum frame size"; + } + uses ltp-bandwidth-profiles; + } + + grouping svc-vlan-classification { + description + "Grouping defining the capabilities for VLAN classification."; + + leaf-list supported-tag-types { + type etht-types:eth-tag-classify; + description + "List of VLAN tag types that can be used for the VLAN classification. + In case VLAN classification is not supported, the list is empty."; + } + leaf vlan-bundling { + type boolean; + description + "In case VLAN classification is supported, indicates whether VLAN bundling classification is also supported."; + } + leaf vlan-range { + type etht-types:vid-range-type; + description + "In case VLAN classification is supported, indicates the of available VLAN ID values."; + } + } + + grouping svc-vlan-push { + description + "Grouping defining the capabilities for VLAN push or swap operations."; + + leaf-list supported-tag-types { + type etht-types:eth-tag-type; + description + "List of VLAN tag types that can be used to push or swap a VLAN tag. + In case VLAN push/swap is not supported, the list is empty."; + } + leaf vlan-range { + type etht-types:vid-range-type; + description + "In case VLAN push/swap operation is supported, the range of available VLAN ID values."; + } + } + + grouping eth-ltp-svc-attributes { + description + "Ethernet link termination point (LTP) service attributes."; + + leaf client-facing { + type boolean; + description + "indicates whether this LTP is a client-facing ltp."; + } + + container supported-classification { + description + "Service classification capabilities supported by the ETH LTP."; + leaf port-classification { + type boolean; + description + "Indicates that the ETH LTP support port-based service classification."; + } + container vlan-classification { + description + "Service classification capabilities based on the VLAN tag(s) + supported by the ETH LTP."; + + leaf vlan-tag-classification { + type boolean; + description + "Indicates that the ETH LTP supports VLAN service classification."; + } + container outer-tag { + description + "Service classification capabilities based on the outer VLAN tag, + supported by the ETH LTP."; + uses svc-vlan-classification; + } + container second-tag { + description + "Service classification capabilities based on the second VLAN tag, + supported by the ETH LTP."; + /* + Open issue: indicates that second-tag-classification can be True only if + outer-tag-classification is also True. + */ + leaf second-tag-classification { + type boolean; + description + "Indicates that the ETH LTP support VLAN service classification + based on the second VLAN tag."; + } + uses svc-vlan-classification; + } + } + } + + container supported-vlan-operations { + description + "Description."; + leaf asymmetrical-operations { + type boolean; + description + "Indicates whether the ETH LTP supports also asymmetrical VLAN operations. + It is assumed that symmetrical VLAN operations are alwyas supported."; + } + leaf transparent-vlan-operations { + type boolean; + description + "Indicates that the ETH LTP supports transparent operations."; + } + container vlan-pop { + description + "Indicates VLAN pop or swap operations capabilities."; + + leaf vlan-pop-operations { + type boolean; + description + "Indicates that the ETH LTP supports VLAN pop or swap operations."; + } + leaf max-pop-tags { + type uint8 { + range "1..2"; + } + description + "Indicates the maximum number of tags that can be popped/swapped."; + } + } + container vlan-push { + description + "Indicates VLAN push or swap operations capabilities."; + + leaf vlan-push-operation { + type boolean; + description + "Indicates that the ETH LTP supports VLAN push or swap operations."; + } + container outer-tag { + description + "Indicates the supported VLAN operation capabilities on the outer VLAN tag."; + uses svc-vlan-push; + } + container second-tag { + description + "Indicates the supported VLAN operation capabilities on the second VLAN tag."; + + leaf push-second-tag { + type boolean; + description + "Indicates that the ETH LTP supports VLAN push or swap operations + for the second VLAN tag."; + } + uses svc-vlan-push; + } + } + } + } + + /* + Data nodes + */ + + augment "/nd:networks/nd:network/nd:network-types/tet:te-topology" { + description + "Augment network types to include ETH transport newtork"; + + uses eth-tran-topology-type; + } + + augment "/nd:networks/nd:network/lnk:link/tet:te/tet:te-link-attributes" { + when "../../../nd:network-types/tet:te-topology/eth-tran-topology" { + description + "Augment only for ETH transport network."; + } + description + "Augment ETH transport link config attributes"; + + uses eth-link-te-attributes; + } + + augment "/nd:networks/nd:network/nd:node/lnk:termination-point" { + when "../../nd:network-types/tet:te-topology/eth-tran-topology" { + description + "Augment only for ETH transport network"; + } + description + "Augment ETH LTP attributes"; + + uses eth-ltp-attributes; + container svc { + presence "client-facing LTP."; + + description + "ETH LTP Service attributes."; + uses eth-ltp-svc-attributes; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2017-09-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2017-09-04.yang deleted file mode 100644 index fdf8cd160..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2017-09-04.yang +++ /dev/null @@ -1,105 +0,0 @@ -module ietf-eth-te-tunnel { - //TODO: FIXME - yang-version 1.1; - - namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tunnel"; - prefix "eth-tunnel"; - - import ietf-te { prefix "te"; } - import ietf-eth-tran-types { prefix "etht-types"; } - - organization - "IETF CCAMP Working Group"; - - contact - "WG Web: - WG List: - - ID-draft editor: - Haomian Zheng (zhenghaomian@huawei.com); - Italo Busi (italo.busi@huawei.com); - Aihua Guo (aihuaguo@huawei.com); - Yunbin Xu (xuyunbin@ritt.cn); - Yang Zhao (zhaoyangyjy@chinamobile.com); - Xufeng Liu (Xufeng_Liu@jabil.com); - Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); - "; - - description - "This module defines a model for ETH transport tunnel"; - - revision "2017-09-04" { - description - "Revision 0.1"; - reference "TBD"; - } - - grouping eth-tunnel-endpoint { - description "Parameters for ETH tunnel."; - - leaf vlanid { - type etht-types:vlanid; - description - "VLAN tag id."; - } - - leaf tag-type { - type etht-types:eth-tag-type; - description "VLAN tag type."; - } - } - - augment "/te:te/te:tunnels/te:tunnel/te:config" { - description - "Augment with additional parameters required for ETH - service."; - - container src-eth-tunnel-endpoint { - description - "Source ETH tunnel endpoint."; - - uses eth-tunnel-endpoint; - } - - container dst-eth-tunnel-endpoint { - description - "Destination ETH tunnel endpoint."; - - uses eth-tunnel-endpoint; - } - - container bandwidth-profile { - description - "ETH tunnel bandwidth profile specification."; - - uses etht-types:etht-bandwidth-profiles; - } - } - - augment "/te:te/te:tunnels/te:tunnel/te:state" { - description - "Augment with additional parameters required for ETH - service."; - - container src-eth-tunnel-endpoint { - description - "Source ETH tunnel endpoint."; - - uses eth-tunnel-endpoint; - } - - container dst-eth-tunnel-endpoint { - description - "Destination ETH tunnel endpoint."; - - uses eth-tunnel-endpoint; - } - container bandwidth-profile { - description - "ETH tunnel bandwidth profile specification."; - - uses etht-types:etht-bandwidth-profiles; - } - } - -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2018-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2018-03-01.yang new file mode 100644 index 000000000..e3d98dd13 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-eth-te-tunnel@2018-03-01.yang @@ -0,0 +1,81 @@ +module ietf-eth-te-tunnel { + + namespace "urn:ietf:params:xml:ns:yang:ietf-eth-te-tunnel"; + + prefix "eth-tunnel"; + + import ietf-te { + prefix "te"; + } + + import ietf-eth-tran-types { + prefix "etht-types"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + " + WG List: + + ID-draft editor: + Haomian Zheng (zhenghaomian@huawei.com); + Italo Busi (italo.busi@huawei.com); + Aihua Guo (aihuaguo@huawei.com); + Yunbin Xu (xuyunbin@ritt.cn); + Yang Zhao (zhaoyangyjy@chinamobile.com); + Xufeng Liu (Xufeng_Liu@jabil.com); + Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); + "; + + description + "This module defines a model for ETH transport tunnel"; + + revision 2018-03-01 { + description + "Initial revision"; + reference + "draft-zheng-ccamp-client-tunnel-yang-02"; + } + + grouping eth-tunnel-endpoint { + description "Parameters for ETH tunnel."; + + leaf vlanid { + type etht-types:vlanid; + description + "VLAN tag id."; + } + + leaf tag-type { + type etht-types:eth-tag-type; + description "VLAN tag type."; + } + } + + augment "/te:te/te:tunnels/te:tunnel" { + description + "Augment with additional parameters required for ETH + service."; + + container src-eth-tunnel-endpoint { + description + "Source ETH tunnel endpoint."; + uses eth-tunnel-endpoint; + } + + container dst-eth-tunnel-endpoint { + description + "Destination ETH tunnel endpoint."; + + uses eth-tunnel-endpoint; + } + + container bandwidth-profile { + description + "ETH tunnel bandwidth profile specification."; + + uses etht-types:etht-bandwidth-profiles; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2017-09-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2018-03-01.yang similarity index 60% rename from experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2017-09-12.yang rename to experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2018-03-01.yang index 59c1bd3d0..294772f7b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2017-09-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-service@2018-03-01.yang @@ -1,16 +1,12 @@ module ietf-eth-tran-service { - /* TODO: FIXME */ - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-svc"; + namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-service"; prefix "ethtsvc"; - /* - import ietf-inet-types { - prefix "inet"; - } - */ + import ietf-yang-types { + prefix "yang"; + } import ietf-te-types { prefix "te-types"; @@ -20,44 +16,32 @@ module ietf-eth-tran-service { prefix "etht-types"; } - organization - "Internet Engineering Task Force (IETF) CCAMP WG"; + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; contact " WG List: ID-draft editor: - Haomian Zheng (zhenghaomian@huawei.com); - Italo Busi (italo.busi@huawei.com); - Aihua Guo (aihuaguo@huawei.com); - Yunbin Xu (xuyunbin@ritt.cn); - Yang Zhao (zhaoyangyjy@chinamobile.com); - Xufeng Liu (Xufeng_Liu@jabil.com); - Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); + Haomian Zheng (zhenghaomian@huawei.com); + Italo Busi (italo.busi@huawei.com); + Aihua Guo (aihuaguo@huawei.com); + Yunbin Xu (xuyunbin@ritt.cn); + Yang Zhao (zhaoyangyjy@chinamobile.com); + Xufeng Liu (Xufeng_Liu@jabil.com); + Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); "; + description "This module defines a YANG data model for describing the Ethernet transport services."; - revision 2017-09-12 { - description - "Updated version: - - Changed s-tag to vlan-tag choice in svc-multiplexing-tag - to support also services where the C-Tag is used - as service multiplexing tag - (assume proper coordination/configuration of C-Tag is adopted) - - Added support for bandwidth profiles. - - Split config and state data for Ethernet services. - "; - } - - revision 2017-08-10 { - description - "Initial version"; - } + revision 2018-03-01 { + description + "Initial revision"; + reference + "draft-zheng-ccamp-otn-client-signal-yang"; + } /* Groupings @@ -76,7 +60,6 @@ module ietf-eth-tran-service { description "VLAN based classification can be individual or bundling."; - case individual-vlan { leaf vlan-value { type etht-types:vlanid; @@ -141,8 +124,8 @@ module ietf-eth-tran-service { } container second-tag { must - '../outer-tag/write-tag-type = "s-vlan-tag-type" and ' + - 'write-tag-type = "c-vlan-tag-type"' + '../outer-tag/tag-type = "s-vlan-tag-type" and ' + + 'tag-type = "c-vlan-tag-type"' { error-message @@ -254,8 +237,8 @@ module ietf-eth-tran-service { } container second-tag { must - '../outer-tag/access-tag-type = "classify-s-vlan" and ' + - 'access-tag-type = "classify-s-vlan"' + '../outer-tag/tag-type = "classify-s-vlan" and ' + + 'tag-type = "classify-c-vlan"' { error-message @@ -282,9 +265,19 @@ module ietf-eth-tran-service { } } +/* + Open issue: can we constraints it to be used only with mp services? +*/ + leaf split-horizon-group { + type string; + description "Identify a split horizon group"; + } + uses bandwidth-profiles; container vlan-operations { + description + "include parameters for vlan-operation"; choice direction { description "Whether the VLAN operations are symmetrical or @@ -333,11 +326,11 @@ module ietf-eth-tran-service { placeholder to support proprietary multiplexing (for further discussion) */ - } + } case none { /* no additional information is needed */ - } + } case vlan-tag { /* @@ -346,15 +339,29 @@ module ietf-eth-tran-service { by the VLAN classification and operations configured in the etht-svc-access-parameters grouping */ - } + } case pw { /* to be completed (for further discussion) */ + } } - } + +/* + Open issue: can we constraints it to be used only with mp services? +*/ + leaf src-split-horizon-group { + type string; + description "Identify a split horizon group at the Tunnel source TTP"; + } + leaf dst-split-horizon-group { + type string; + description "Identify a split horizon group at the Tunnel destination TTP"; + } } grouping te-topology-identifier { + description + "An identifier to uniquely identify the TE topology."; leaf access-provider-id { type te-types:te-global-id; description @@ -373,6 +380,58 @@ module ietf-eth-tran-service { } } + grouping etht-svc-pm-threshold_config { + description + "Configuraiton parameters for Ethernet service PM thresholds."; + + leaf sending-rate-high { + type uint64; + description + "High threshold of packet sending rate in kbps."; + } + leaf sending-rate-low { + type uint64; + description + "Low threshold of packet sending rate in kbps."; + } + leaf receiving-rate-high { + type uint64; + description + "High threshold of packet receiving rate in kbps."; + } + leaf receiving-rate-low { + type uint64; + description + "Low threshold of packet receiving rate in kbps."; + } + } + + grouping etht-svc-pm-stats { + description + "Ethernet service PM statistics."; + + leaf sending-rate-too-high { + type uint32; + description + "Counter that indicates the number of times the sending rate is above the high threshold"; + } + leaf sending-rate-too-low { + type uint32; + description + "Counter that indicates the number of times the sending rate is below the low threshold"; + } + leaf receiving-rate-too-high { + type uint32; + description + "Counter that indicates the number of times the receiving rate is above the high threshold"; + } + leaf receiving-rate-too-low { + type uint32; + description + "Counter that indicates the number of times the receiving rate is below the low threshold"; + } + } + grouping etht-svc-instance_config { description "Configuraiton parameters for Ethernet services."; @@ -383,21 +442,30 @@ module ietf-eth-tran-service { "Name of the p2p ETH transport service."; } - uses te-topology-identifier; + leaf etht-svc-descr { + type string; + description + "Description of the ETH transport service."; + } - leaf admin-status { - type identityref { - base te-types:state-type; - } - default te-types:state-up; - description "ETH service administrative state."; - } + leaf etht-svc-type { + type etht-types:service-type; + description + "Type of Ethernet service (p2p, mp2mp or rmp)."; + /* Add default as p2p */ + } + + uses te-topology-identifier; list etht-svc-access-ports { key access-port-id; min-elements "1"; - /* to be updated if extended to mp services */ - max-elements "2"; +/* + Open Issue: + Is it possible to limit the max-elements only for p2p services? + + max-elements "2"; +*/ description "List of the ETH trasport services access port instances."; @@ -416,24 +484,54 @@ module ietf-eth-tran-service { uses etht-svc-tunnel-parameters; } - } + container pm-config { + description + "ETH service performance monitoring"; + + leaf pm-enable { + type boolean; + description + "Boolean value indicating whether PM is enabled."; + } + uses etht-svc-pm-threshold_config; + } + leaf admin-status { + type identityref { + base te-types:tunnel-state-type; + } + default te-types:tunnel-state-up; + description "ETH service administrative state."; + } + } grouping etht-svc-instance_state { description "State parameters for Ethernet services."; leaf operational-state { - type identityref { - base te-types:state-type; + type identityref { + base te-types:tunnel-state-type; } - description "ETH service operational state."; + default te-types:tunnel-state-up; + description "ETH service operational state."; } leaf provisioning-state { type identityref { - base te-types:prov-state-type; + base te-types:lsp-state-type; } description "ETH service provisioning state."; } + leaf creation-time { + type yang:date-and-time; + description + "Time of ETH service creation."; + } + leaf last-updated-time { + type yang:date-and-time; + description + "Time of ETH service last update."; + } + uses etht-svc-pm-stats; } /* @@ -445,6 +543,8 @@ module ietf-eth-tran-service { "ETH transport services."; container globals { + description + "ETH profile information."; list etht-svc-bandwidth-profiles { key bandwidth-profile-name; description @@ -460,26 +560,13 @@ module ietf-eth-tran-service { description "The list of p2p ETH transport service instances"; - leaf etht-svc-name { - type leafref { - path "../config/etht-svc-name"; - } - description - "ID of the p2p ETH transport service instance."; - } - container config { - description - "Configuration of intended parameters."; - - uses etht-svc-instance_config; - } + uses etht-svc-instance_config; container state { config false; description - "Configuration of applied parameters and states."; + "Ethernet Service states."; - uses etht-svc-instance_config; uses etht-svc-instance_state; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2017-09-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2017-09-12.yang deleted file mode 100644 index bc3a7a13f..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2017-09-12.yang +++ /dev/null @@ -1,255 +0,0 @@ -module ietf-eth-tran-types { - /* TODO: FIXME */ - yang-version 1.1; - - namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-types"; - - prefix "etht-types"; - - organization - "Internet Engineering Task Force (IETF) CCAMP WG"; - contact - " - WG List: - - ID-draft editor: - Haomian Zheng (zhenghaomian@huawei.com); - Italo Busi (italo.busi@huawei.com); - Aihua Guo (aihuaguo@huawei.com); - Yunbin Xu (xuyunbin@ritt.cn); - Yang Zhao (zhaoyangyjy@chinamobile.com); - Xufeng Liu (Xufeng_Liu@jabil.com); - Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); - "; - - description - "This module defines the ETH transport types."; - - revision 2017-09-12 { - description - "Updeated version: - - Added bandwidth-profile-type - "; - } - - revision 2017-08-10 { - description - "Initial version"; - } - - /* - Identities - */ - - identity eth-vlan-tag-type { - description - "ETH VLAN tag type."; - } - - identity c-vlan-tag-type { - base eth-vlan-tag-type; - description - "802.1Q Customer VLAN"; - } - - identity s-vlan-tag-type { - base eth-vlan-tag-type; - description - "802.1Q Service VLAN (QinQ)"; - } - - identity service-classification-type { - description - "Service classification."; - } - - identity port-classification { - base service-classification-type; - description - "Port classification."; - } - - identity vlan-classification { - base service-classification-type; - description - "VLAN classification."; - } - - identity eth-vlan-tag-classify { - description - "VLAN tag classification."; - } - - identity classify-c-vlan { - base eth-vlan-tag-classify; - description - "Classify 802.1Q Customer VLAN tag. - Only C-tag type is accepted"; - } - - identity classify-s-vlan { - base eth-vlan-tag-classify; - description - "Classify 802.1Q Service VLAN (QinQ) tag. - Only S-tag type is accepted"; - } - - identity classify-s-or-c-vlan { - base eth-vlan-tag-classify; - description - "Classify S-VLAN or C-VLAN tag-classify. - Either tag is accepted"; - } - - identity bandwidth-profile-type { - description - "Bandwidth Profile Types"; - } - - identity mef-10-bwp { - base bandwidth-profile-type; - description - "MEF 10 Bandwidth Profile"; - } - - identity rfc-2697-bwp { - base bandwidth-profile-type; - description - "RFC 2697 Bandwidth Profile"; - } - - identity rfc-2698-bwp { - base bandwidth-profile-type; - description - "RFC 2698 Bandwidth Profile"; - } - - identity rfc-4115-bwp { - base bandwidth-profile-type; - description - "RFC 4115 Bandwidth Profile"; - } - - /* - Type Definitions - */ - - typedef eth-tag-type { - type identityref { - base eth-vlan-tag-type; - } - description - "Identifies a specific ETH VLAN tag type."; - } - - typedef eth-tag-classify { - type identityref { - base eth-vlan-tag-classify; - } - description - "Identifies a specific VLAN tag classification."; - } - - typedef vlanid { - type uint16 { - range "1..4094"; - } - description - "The 12-bit VLAN-ID used in the VLAN Tag header."; - } - - typedef vid-range-type { - type string { - pattern "([1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?" + - "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)"; - } - description - "A list of VLAN Ids, or non overlapping VLAN ranges, in - ascending order, between 1 and 4094. - - This type is used to match an ordered list of VLAN Ids, or - contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the - range 1 to 4094, and included in the list in non overlapping - ascending order. - - For example: 1,10-100,50,500-1000"; - } - - typedef bandwidth-profile-type { - type identityref { - base bandwidth-profile-type; - } - description - "Identifies a specific Bandwidth Profile type."; - } - - /* - Grouping Definitions - */ - grouping etht-bandwidth-profiles { - description - "Bandwidth profile configuration paramters."; - - leaf bandwidth-profile-name { - type string; - description - "Name of the bandwidth profile."; - } - leaf bandwidth-profile-type { - type etht-types:bandwidth-profile-type; - description - "The type of bandwidth profile."; - } - leaf CIR { - type uint64; - description - "Committed Information Rate in Kbps"; - } - leaf CBS { - type uint64; - description - "Committed Burst Size in in KBytes"; - } - leaf EIR { - type uint64; - /* - Need to indicate that EIR is not supported by RFC 2697 - - must - '../bw-profile-type = "mef-10-bwp" or ' + - '../bw-profile-type = "rfc-2698-bwp" or ' + - '../bw-profile-type = "rfc-4115-bwp"' - - must - '../bw-profile-type != "rfc-2697-bwp"' - */ - description - "Excess Information Rate in Kbps - In case of RFC 2698, PIR = CIR + EIR"; - } - leaf EBS { - type uint64; - description - "Excess Burst Size in KBytes. - In case of RFC 2698, PBS = CBS + EBS"; - } - leaf color-aware { - type boolean; - description - "Indicates weather the color-mode is - color-aware or color-blind."; - } - leaf coupling-flag { - type boolean; - /* - Need to indicate Coupling Flag is defined only for MEF 10 - - must - '../bw-profile-type = "mef-10-bwp"' - */ - description - "Coupling Flag."; - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2018-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2018-03-01.yang new file mode 100644 index 000000000..d6e125665 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-eth-tran-types@2018-03-01.yang @@ -0,0 +1,275 @@ +module ietf-eth-tran-types { + + namespace "urn:ietf:params:xml:ns:yang:ietf-eth-tran-types"; + + prefix "etht-types"; + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + " + WG List: + + ID-draft editor: + Haomian Zheng (zhenghaomian@huawei.com); + Italo Busi (italo.busi@huawei.com); + Aihua Guo (aihuaguo@huawei.com); + Yunbin Xu (xuyunbin@ritt.cn); + Yang Zhao (zhaoyangyjy@chinamobile.com); + Xufeng Liu (Xufeng_Liu@jabil.com); + Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); + "; + + description + "This module defines the ETH transport types."; + + revision 2018-03-01 { + description + "Initial revision"; + reference + "draft-zheng-ccamp-otn-client-signal-yang"; + } + + /* + Identities + */ + + identity eth-vlan-tag-type { + description + "ETH VLAN tag type."; + } + + identity c-vlan-tag-type { + base eth-vlan-tag-type; + description + "802.1Q Customer VLAN"; + } + + identity s-vlan-tag-type { + base eth-vlan-tag-type; + description + "802.1Q Service VLAN (QinQ)"; + } + + identity service-classification-type { + description + "Service classification."; + } + + identity port-classification { + base service-classification-type; + description + "Port classification."; + } + + identity vlan-classification { + base service-classification-type; + description + "VLAN classification."; + } + + identity eth-vlan-tag-classify { + description + "VLAN tag classification."; + } + + identity classify-c-vlan { + base eth-vlan-tag-classify; + description + "Classify 802.1Q Customer VLAN tag. + Only C-tag type is accepted"; + } + + identity classify-s-vlan { + base eth-vlan-tag-classify; + description + "Classify 802.1Q Service VLAN (QinQ) tag. + Only S-tag type is accepted"; + } + + identity classify-s-or-c-vlan { + base eth-vlan-tag-classify; + description + "Classify S-VLAN or C-VLAN tag-classify. + Either tag is accepted"; + } + + identity bandwidth-profile-type { + description + "Bandwidth Profile Types"; + } + + identity mef-10-bwp { + base bandwidth-profile-type; + description + "MEF 10 Bandwidth Profile"; + } + + identity rfc-2697-bwp { + base bandwidth-profile-type; + description + "RFC 2697 Bandwidth Profile"; + } + + identity rfc-2698-bwp { + base bandwidth-profile-type; + description + "RFC 2698 Bandwidth Profile"; + } + + identity rfc-4115-bwp { + base bandwidth-profile-type; + description + "RFC 4115 Bandwidth Profile"; + } + + identity service-type { + description + "Type of Ethernet service."; + } + + identity p2p-svc { + base service-type; + description + "Ethernet point-to-point service (EPL, EVPL)."; + } + + identity rmp-svc { + base service-type; + description + "Ethernet rooted-multitpoint service (E-TREE, EP-TREE)."; + } + + identity mp2mp-svc { + base service-type; + description + "Ethernet multipoint-to-multitpoint service (E-LAN, EP-LAN)."; + } + + /* + Type Definitions + */ + typedef eth-tag-type { + type identityref { + base eth-vlan-tag-type; + } + description + "Identifies a specific ETH VLAN tag type."; + } + + typedef eth-tag-classify { + type identityref { + base eth-vlan-tag-classify; + } + description + "Identifies a specific VLAN tag classification."; + } + + typedef vlanid { + type uint16 { + range "1..4094"; + } + description + "The 12-bit VLAN-ID used in the VLAN Tag header."; + } + + typedef vid-range-type { + type string { + pattern "([1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?" + + "(,[1-9][0-9]{0,3}(-[1-9][0-9]{0,3})?)*)"; + } + description + "A list of VLAN Ids, or non overlapping VLAN ranges, in + ascending order, between 1 and 4094. + + This type is used to match an ordered list of VLAN Ids, or + contiguous ranges of VLAN Ids. Valid VLAN Ids must be in the + range 1 to 4094, and included in the list in non overlapping + ascending order. + + For example: 1,10-100,50,500-1000"; + } + + typedef bandwidth-profile-type { + type identityref { + base bandwidth-profile-type; + } + description + "Identifies a specific Bandwidth Profile type."; + } + typedef service-type { + type identityref { + base service-type; + } + description + "Identifies the type of Ethernet service."; + } + + /* + Grouping Definitions + */ + grouping etht-bandwidth-profiles { + description + "Bandwidth profile configuration paramters."; + + leaf bandwidth-profile-name { + type string; + description + "Name of the bandwidth profile."; + } + leaf bandwidth-profile-type { + type etht-types:bandwidth-profile-type; + description + "The type of bandwidth profile."; + } + leaf CIR { + type uint64; + description + "Committed Information Rate in Kbps"; + } + leaf CBS { + type uint64; + description + "Committed Burst Size in in KBytes"; + } + leaf EIR { + type uint64; + /* + Need to indicate that EIR is not supported by RFC 2697 + + must + '../bw-profile-type = "mef-10-bwp" or ' + + '../bw-profile-type = "rfc-2698-bwp" or ' + + '../bw-profile-type = "rfc-4115-bwp"' + + must + '../bw-profile-type != "rfc-2697-bwp"' + */ + description + "Excess Information Rate in Kbps + In case of RFC 2698, PIR = CIR + EIR"; + } + leaf EBS { + type uint64; + description + "Excess Burst Size in KBytes. + In case of RFC 2698, PBS = CBS + EBS"; + } + leaf color-aware { + type boolean; + description + "Indicates weather the color-mode is color-aware or color-blind."; + } + leaf coupling-flag { + type boolean; + /* + Need to indicate that Coupling Flag is defined only for MEF 10 + + must + '../bw-profile-type = "mef-10-bwp"' + */ + description + "Coupling Flag."; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ethertypes@2018-03-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-ethertypes@2018-03-15.yang new file mode 100644 index 000000000..82ceb59e3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-ethertypes@2018-03-15.yang @@ -0,0 +1,359 @@ +module ietf-ethertypes { + namespace "urn:ietf:params:xml:ns:yang:ietf-ethertypes"; + prefix ethertypes; + + organization + "IETF NETMOD (NETCONF Data Modeling Language)"; + + contact + "WG Web: + WG List: + + Editor: Mahesh Jethanandani + "; + + description + "This module contains the common definitions for the + Ethertype used by different modules. It is a + placeholder module, till such time that IEEE + starts a project to define these Ethertypes + and publishes a standard. + + At that time this module can be deprecated."; + + revision 2018-03-15 { + description + "Initial revision."; + reference + "RFC XXXX: IETF Ethertype YANG Data Module."; + } + + typedef ethertype { + type union { + type uint16; + type enumeration { + enum ipv4 { + value 2048; + description + "Internet Protocol version 4 (IPv4) with a + hex value of 0x0800."; + reference + "RFC 791: Internet Protocol."; + } + enum arp { + value 2054; + description + "Address Resolution Protocol (ARP) with a + hex value of 0x0806."; + reference + "RFC 826: An Ethernet Address Resolution Protocol."; + } + enum wlan { + value 2114; + description + "Wake-on-LAN. Hex value of 0x0842."; + } + enum trill { + value 8947; + description + "Transparent Interconnection of Lots of Links. + Hex value of 0x22F3."; + reference + "RFC 6325 Routing Bridges (RBridges): Base Protocol + Specification."; + } + enum srp { + value 8938; + description + "Stream Reservation Protocol. Hex value of + 0x22EA."; + reference + "IEEE 801.1Q-2011."; + } + enum decnet { + value 24579; + description + "DECnet Phase IV. Hex value of 0x6003."; + } + enum rarp { + value 32821; + description + "Reverse Address Resolution Protocol. + Hex value 0x8035."; + reference + "RFC 903. A Reverse Address Resolution Protocol."; + } + enum appletalk { + value 32923; + description + "Appletalk (Ethertalk). Hex value 0x809B."; + } + enum aarp { + value 33011; + description + "Appletalk Address Resolution Protocol. Hex value + of 0x80F3."; + } + enum vlan { + value 33024; + description + "VLAN-tagged frame (802.1Q) and Shortest Path + Bridging IEEE 802.1aq with NNI compatibility. + Hex value 0x8100."; + reference + "802.1Q."; + } + enum ipx { + value 33079; + description + "Internetwork Packet Exchange (IPX). Hex value + of 0x8137."; + } + enum qnx { + value 33284; + description + "QNX Qnet. Hex value of 0x8204."; + } + enum ipv6 { + value 34525; + description + "Internet Protocol Version 6 (IPv6). Hex value + of 0x86DD."; + reference + "RFC 8200: IPv6 + RFC 8201: Path MTU Discovery for IPv6."; + } + enum efc { + value 34824; + description + "Ethernet flow control using pause frames. + Hex value of 0x8808"; + reference + "IEEE Std. 802.1Qbb."; + } + enum esp { + value 34825; + description + "Ethernet Slow Protocol. Hex value of 0x8809."; + reference + "IEEE Std. 802.3-2015"; + } + enum cobranet { + value 34841; + description + "CobraNet. Hex value of 0x"; + } + enum mpls-unicast { + value 34887; + description + "MultiProtocol Label Switch (MPLS) unicast traffic. + Hex value of 0x8847."; + reference + "RFC 3031: MPLS Architecture."; + } + enum mpls-multicast { + value 34888; + description + "MultiProtocol Label Switch (MPLS) multicast traffic. + Hex value of 0x8848."; + reference + "RFC 3031: MPLS Architecture."; + } + enum pppoe-discovery { + value 34915; + description + "Point-to-Point Protocol over Ethernet. Used during + the discovery process. Hex value of 0x8863."; + reference + "RFC 2516: A method for Transmitting PPPoE."; + } + enum pppoe-session { + value 34916; + description + "Point-to-Point Protocol over Ethernet. Used during + session stage. Hex value of 0x8864."; + reference + "RFC 2516: A method for Transmitting PPPoE."; + } + enum intel-ans { + value 34925; + description + "Intel Advanced Networking Services. Hex value of + 0x886D."; + } + enum jumbo-frames { + value 34928; + description + "Jumbo frames or Ethernet frames with more than + 1500 bytes of payload, upto 9000 bytes."; + } + enum homeplug { + value 34939; + description + "Family name for the various power line + communications. Hex value of 0x887B."; + } + enum eap { + value 34958; + description + "Ethernet Access Protocol (EAP) over LAN. Hex value + of 0x888E."; + reference + "IEEE 802.1X"; + } + enum profinet { + value 34962; + description + "PROcess FIeld Net (PROFINET). Hex value of 0x8892."; + } + enum hyperscsi { + value 34970; + description + "SCSI over Ethernet. Hex value of 0x889A"; + } + enum aoe { + value 34978; + description + "Advanced Technology Advancement (ATA) over Ethernet. + Hex value of 0x88A2."; + } + enum ethercat { + value 34980; + description + "Ethernet for Control Automation Technology (EtherCAT). + Hex value of 0x88A4."; + } + enum provider-bridging { + value 34984; + description + "Provider Bridging (802.1ad) and Shortest Path Bridging + (801.1aq). Hex value of 0x88A8."; + reference + "IEEE 802.1ad, IEEE 802.1aq)."; + } + enum ethernet-powerlink { + value 34987; + description + "Ethernet Powerlink. Hex value of 0x88AB."; + } + enum goose { + value 35000; + description + "Generic Object Oriented Substation Event (GOOSE). + Hex value of 0x88B8."; + reference + "IEC/ISO 8802-2 and 8802-3."; + } + enum gse { + value 35001; + description + "Generic Substation Events. Hex value of 88B9."; + reference + "IEC 61850."; + } + enum sv { + value 35002; + description + "Sampled Value Transmission. Hex value of 0x88BA."; + reference + "IEC 61850."; + } + enum lldp { + value 35020; + description + "Link Layer Discovery Protocol (LLDP). Hex value of + 0x88CC."; + reference + "IEEE 802.1AB."; + } + enum sercos { + value 35021; + description + "Sercos Interface. Hex value of 0x88CD."; + } + enum wsmp { + value 35036; + description + "WAVE Short Message Protocl (WSMP). Hex value of + 0x88DC."; + } + enum homeplug-av-mme { + value 35041; + description + "HomePlug AV MME. Hex value of 88E1."; + } + enum mrp { + value 35043; + description + "Media Redundancy Protocol (MRP). Hex value of + 0x88E3."; + reference + "IEC62439-2."; + } + enum macsec { + value 35045; + description + "MAC Security. Hex value of 0x88E5."; + reference + "IEEE 802.1AE."; + } + enum pbb { + value 35047; + description + "Provider Backbone Bridges (PBB). Hex value of + 0x88E7."; + reference + "IEEE 802.1ah."; + } + enum cfm { + value 35074; + description + "Connectivity Fault Management (CFM). Hex value of + 0x8902."; + reference + "IEEE 802.1ag."; + } + enum fcoe { + value 35078; + description + "Fiber Channel over Ethernet (FCoE). Hex value of + 0x8906."; + reference + "T11 FC-BB-5."; + } + enum fcoe-ip { + value 35092; + description + "FCoE Initialization Protocol. Hex value of 0x8914."; + } + enum roce { + value 35093; + description + "RDMA over Converged Ethernet (RoCE). Hex value of + 0x8915."; + } + enum tte { + value 35101; + description + "TTEthernet Protocol Control Frame (TTE). Hex value + of 0x891D."; + reference + "SAE AS6802."; + } + enum hsr { + value 35119; + description + "High-availability Seamless Redundancy (HSR). Hex + value of 0x892F."; + reference + "IEC 62439-3:2016."; + } + } + } + description + "The uint16 type placeholder is defined to enable + users to manage their own ethertypes not + covered by the module. Otherwise the module contains + enum definitions for the more commonly used ethertypes."; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2017-03-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2018-03-06.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2017-03-06.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2018-03-06.yang index 8eda7d850..6b1ed6150 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2017-03-06.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ext-xponder-wdm-if@2018-03-06.yang @@ -30,6 +30,14 @@ module ietf-ext-xponder-wdm-if { 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)."; + + revision "2018-03-06" { + description + "Revision 1.1"; + reference + ""; + } + revision "2017-03-06" { description "Revision 1.0"; @@ -260,7 +268,6 @@ module ietf-ext-xponder-wdm-if { type uint32; description " This parameter the bits per symbol for this mode."; - } leaf symbols-index { type uint32; @@ -498,7 +505,6 @@ module ietf-ext-xponder-wdm-if { } uses opt-if-och-fec; uses opt-if-och-lane-param; - } grouping opt-if-och-mode-list { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-foo@2016-03-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-foo@2016-03-20.yang index a979886f5..8e0e3e871 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-foo@2016-03-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-foo@2016-03-20.yang @@ -6,7 +6,7 @@ module ietf-foo { description "..."; revision 2016-03-20 { description "Latest revision"; - reference "RFC XXXX"; + reference "RFC XXXX: Foo Protocol"; } // ... more statements } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-forwarding-policy@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-forwarding-policy@2018-03-05.yang new file mode 100644 index 000000000..8ef17cd9b --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-forwarding-policy@2018-03-05.yang @@ -0,0 +1,97 @@ +module ietf-forwarding-policy { + yang-version "1.1"; + namespace "urn:ietf:params:xml:ns:yang:ietf-forwarding-policy"; + prefix "fwd"; + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-network-instance { + prefix "ni"; + } + + import ietf-qos-policy { + prefix "pol"; + } + + organization ""; + contact ""; + description ""; + + revision 2018-03-05 { + description "Initial version"; + reference ""; + } + + identity forwarding-policy { + base pol:policy-type; + description "Forwarding policy type"; + } + + identity redirect-action { + base pol:action-type; + description "Redirect action type"; + } + + augment "/pol:policies" + + "/pol:policy-entry" + + "/pol:classifier-entry" + + "/pol:classifier-action-entry-cfg" + + "/pol:action-cfg-params" { + when "../../pol:policy-type = 'fwd:forwarding-policy'" { + description "Forwarding policy's action augmentation"; + } + description "Forwarding policy's action parameters"; + case drop { + description "Drop action choice"; + container drop-actions { + description "Redirect action that are drop actions"; + leaf drop { + type empty; + description "Redirect packet such that it is dropped"; + } + } + } + case redirect-to-ipv4-nexthops { + container redirect-to-ipv4-nexthops-actions { + description "Actions to redirect to a list of nexthops"; + list ipv4-nexthop { + key "address"; + leaf address { + type inet:ipv4-address; + description "The IPv4 address"; + } + description "A list of IPv4 nexthops"; + } + leaf network-instance { + type leafref { + path "/ni:network-instances/ni:network-instance/ni:name"; + } + description "The routing instance in which the addresses " + + "reside"; + } + } + } + case redirect-to-ipv6-nexthops { + container redirect-to-ipv6-nexthops { + description "Redirect actions to IPv6 nexthops"; + list ipv6-nexthop { + key "address"; + leaf address { + type inet:ipv6-address; + description "The IPv6 address"; + } + description "A list of IPv6 nexthop addresses"; + } + leaf network-instance { + type leafref { + path "/ni:network-instances/ni:network-instance/ni:name"; + } + description "The routing instance in which the addresses " + + "reside"; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-28.yang similarity index 82% rename from experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-28.yang index b0b8b62ba..8a18c6479 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-gnca@2018-02-28.yang @@ -7,6 +7,7 @@ module ietf-gnca { import ietf-yang-types { prefix "yang"; } + organization "IETF Network Configuration (NETCONF) Working Group"; @@ -26,7 +27,7 @@ module ietf-gnca { description "Event Condition Action (ECA) model."; - revision 2018-02-20 { + revision 2018-02-28 { description "Initial revision"; reference "RFC XXXX"; } @@ -111,7 +112,7 @@ module ietf-gnca { type string; description "A XPath string, referencing a schema node, whose - type is used as the type of the policy variable"; + type is used as the type of the policy variable."; } } } @@ -349,71 +350,88 @@ module ietf-gnca { "A string name to uniquely identify an ECA Condition globally."; } - leaf logical-operation-type { - type identityref { - base logical-operation-type; - } - description - "The logical operation type used to combine the results - from the list comparison-operation and the list - sub-condition, defined below."; - } - list comparison-operation { - key name; + choice expression-choice { description - "A list of comparison oprations, each of them defines a - comparison in the form of , - where and are policy arguments, while - is the comparison-type, which can be - ==, !=, >, <, >=, <="; - leaf name { - type string; - description - "A string name to uniquely identify a comparison - operation."; - } - leaf comparision-type { - type identityref { - base comparison-type; + "The choices of expression format to specify a condition, + which can be either a XPath string or a YANG logical + operation structure."; + case logical-operation { + leaf logical-operation-type { + type identityref { + base logical-operation-type; + } + description + "The logical operation type used to combine the + results from the list comparison-operation and the + list sub-condition, defined below."; } - description - "The comparison operation applied to the two arguments - arg1 and arg2 defined blow."; - } - container arg1 { - description - "The policy argument used as the first parameter of - the comparison opration. - A policy argument represents either a constant, PV or - data store value pointed by XPath."; - uses policy-argument; - } - container arg2 { - description - "The policy argument used as the secone parameter of - the comparison opration. - A policy argument represents either a constant, PV or - data store value pointed by XPath."; - uses policy-argument; - } - } - list sub-condition { - key name; - description - "A list of sub conditions applied by the - logical-operation-type. This list of sub conditions - provides the capability of hierarchically combining - conditions."; - leaf name { - type leafref { - path "/gnca/conditions/condition/name"; + list comparison-operation { + key name; + description + "A list of comparison oprations, each of them defines + a comparison in the form of , + where and are policy arguments, while + is the comparison-type, which can be + ==, !=, >, <, >=, <="; + leaf name { + type string; + description + "A string name to uniquely identify a comparison + operation."; + } + leaf comparision-type { + type identityref { + base comparison-type; + } + description + "The comparison operation applied to the two + arguments arg1 and arg2 defined blow."; + } + container arg1 { + description + "The policy argument used as the first parameter of + the comparison opration. + A policy argument represents either a constant, PV + or data store value pointed by XPath."; + uses policy-argument; + } + container arg2 { + description + "The policy argument used as the secone parameter + of the comparison opration. + A policy argument represents either a constant, PV + or data store value pointed by XPath."; + uses policy-argument; + } } - description - "A reference to a defined condition, which is used - as a sub-condition for the logical operation at this - hierarchy level."; - } - } // sub-condition + list sub-condition { + key name; + description + "A list of sub conditions applied by the + logical-operation-type. This list of sub conditions + provides the capability of hierarchically combining + conditions."; + leaf name { + type leafref { + path "/gnca/conditions/condition/name"; + } + description + "A reference to a defined condition, which is used + as a sub-condition for the logical operation at + this hierarchy level."; + } + } // sub-condition + } // logical-operation + case xpath { + leaf condition-xpath { + type string; + description + "A XPath string, representing a logical expression, + which can contain comparisons of datastore values + and logical operations in the XPath format."; + } + } // xpath + } // expression-choice } // condition } // conditions diff --git a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2017-10-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2018-03-05.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2017-10-30.yang rename to experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2018-03-05.yang index 73eee8df2..6794f880c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2017-10-30.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-capability@2018-03-05.yang @@ -34,7 +34,7 @@ module ietf-i2nsf-capability { "This module describes a capability model for I2NSF devices."; - revision "2017-10-30"{ + revision "2018-03-05"{ description "The fourth revision"; reference "draft-ietf-i2nsf-capability-00"; @@ -184,21 +184,6 @@ module ietf-i2nsf-capability { "nsc-capabilities-name"; } - container time-zone { - description - "This can be used to apply rules according to time"; - leaf start-time { - type boolean; - description - "This is start time for time zone"; - } - leaf end-time { - type boolean; - description - "This is end time for time zone"; - } - } - leaf rule-description { type boolean; description @@ -215,6 +200,41 @@ module ietf-i2nsf-capability { "This is rule-priority"; } + container time-zone { + description + "This can be used to apply rules according to time zone"; + container absolute-time-zone { + description + "This can be used to apply rules according to + absolute time zone"; + leaf time { + type boolean; + description + "This is time for absolute time zone"; + } + leaf date { + type boolean; + description + "This is date for absolute time zone"; + } + } + container periodic-time-zone { + description + "This can be used to apply rules according to + periodic time zone"; + leaf day { + type boolean; + description + "This is day for periodic time zone"; + } + leaf month { + type boolean; + description + "This is month for periodic time zone"; + } + } + } + container event { description " This is abstract. An event is defined as any important @@ -482,6 +502,7 @@ module ietf-i2nsf-capability { "If devSecEventType is environmental error alarm"; } + } container dev-sec-event-type-severity { @@ -557,7 +578,6 @@ module ietf-i2nsf-capability { "This is a mandatory uint 8 enumerated integer, which is used to specify the data type of the sysSecEventContent attribute."; - leaf unknown { type boolean; description @@ -846,7 +866,6 @@ module ietf-i2nsf-capability { a specific ip option is set. Ipopts has to be used at the beginning of a rule."; } - leaf pkt-sec-cond-ipv4-sameip { type boolean; description @@ -866,6 +885,7 @@ module ietf-i2nsf-capability { uses GeoIP API with MaxMind database format."; } } + container packet-security-ipv6-condition { description "The purpose of this Class is to represent packet @@ -949,6 +969,20 @@ module ietf-i2nsf-capability { Actions in this ECA Policy Rule should be executed or not."; + leaf pkt-sec-cond-tcp-src-port { + type boolean; + description + "This is a mandatory string attribute, and + defines the Source Port number (16 bits)."; + } + + leaf pkt-sec-cond-tcp-dest-port { + type boolean; + description + "This is a mandatory string attribute, and + defines the Destination Port number (16 bits)."; + } + leaf pkt-sec-cond-tcp-seq-num { type boolean; description @@ -989,6 +1023,20 @@ module ietf-i2nsf-capability { of a test to determine if the set of Policy Actions in this ECA Policy Rule should be executed or not."; + leaf-list pkt-sec-cond-udp-src-port { + type boolean; + description + "This is a mandatory string attribute, and + defines the UDP Source Port number (16 bits)."; + } + + leaf-list pkt-sec-cond-udp-dest-port { + type boolean; + description + "This is a mandatory string attribute, and + defines the UDP Destination Port number (16 bits)."; + } + leaf pkt-sec-cond-udp-length { type boolean; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2017-10-29.yang deleted file mode 100644 index 83dbb55f1..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2017-10-29.yang +++ /dev/null @@ -1,1401 +0,0 @@ -module ietf-i2nsf-nsf-monitoring-dm { - namespace - "urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring-dm"; - prefix - monitoring-information; - import ietf-inet-types{ - prefix inet; - } - import ietf-yang-types { - prefix yang; - } - organization - "IETF I2NSF (Interface to Network Security Functions) - Working Group"; - - contact - "WG Web: - WG List: - - WG Chair: Linda Dunbar - - - Editor: Dongjin Hong - - - Editor: Jaehoon Paul Jeong - "; - description - "This module defines a YANG data module for monitoring NSFs."; - - revision "2017-10-29" { - description "Initial revision"; - reference - "draft-zhang-i2nsf-info-model-monitoring-04"; - } - - typedef severity { - type enumeration { - enum high { - description - "high-level"; - } - enum middle { - description - "middle-level"; - } - enum low { - description - "low-level"; - } - } - description - "This is used for indicating the severity"; - } - typedef all-action { - type enumeration { - enum allow { - description - "TBD"; - } - enum alert { - description - "TBD"; - } - enum block { - description - "TBD"; - } - enum discard { - description - "TBD"; - } - enum declare { - description - "TBD"; - } - enum block-ip { - description - "TBD"; - } - enum block-service{ - description - "TBD"; - } - } - description - "This is used for protocol"; - } - typedef dpi-type{ - type enumeration { - enum file-blocking{ - description - "TBD"; - } - enum data-filtering{ - description - "TBD"; - } - enum application-behavior-control{ - description - "TBD"; - } - } - description - "This is used for dpi type"; - } - typedef operation-type{ - type enumeration { - enum login{ - description - "TBD"; - } - enum logout{ - description - "TBD"; - } - enum configuration{ - description - "TBD"; - } - } - description - "This is used for operation type"; - } - typedef login-mode{ - type enumeration { - enum root{ - description - "TBD"; - } - enum user{ - description - "TBD"; - } - enum guest{ - description - "TBD"; - } - } - description - "This is used for login mode"; - } - grouping protocol { - description - "A set of protocols"; - container protocol { - description - "Protocol types: - TCP, UDP, ICMP, ICMPv6, IP, HTTP, FTP and etc."; - leaf tcp { - type boolean; - description - "TCP protocol type."; - } - leaf udp { - type boolean; - description - "UDP protocol type."; - } - leaf icmp { - type boolean; - description - "ICMP protocol type."; - } - leaf icmpv6 { - type boolean; - description - "ICMPv6 protocol type."; - } - leaf ip { - type boolean; - description - "IP protocol type."; - } - leaf http { - type boolean; - description - "HTTP protocol type."; - } - leaf ftp { - type boolean; - description - "ftp protocol type."; - } - } - } - grouping traffic-rates { - description - "A set of traffic rates - for statistics data"; - leaf total-traffic { - type uint32; - description - "Total traffic"; - } - leaf in-traffic-ave-rate { - type uint32; - description - "Inbound traffic average rate in pps"; - } - leaf in-traffic-peak-rate { - type uint32; - description - "Inbound traffic peak rate in pps"; - } - leaf in-traffic-ave-speed { - type uint32; - description - "Inbound traffic average speed in bps"; - } - leaf in-traffic-peak-speed { - type uint32; - description - "Inbound traffic peak speed in bps"; - } - leaf out-traffic-ave-rate { - type uint32; - description - "Outbound traffic average rate in pps"; - } - leaf out-traffic-peak-rate { - type uint32; - description - "Outbound traffic peak rate in pps"; - } - leaf out-traffic-ave-speed { - type uint32; - description - "Outbound traffic average speed in bps"; - } - leaf out-traffic-peak-speed { - type uint32; - description - "Outbound traffic peak speed in bps"; - } - } - grouping i2nsf-system-event-type-content { - description - "A set of system event type contents"; - leaf group { - type string; - mandatory true; - description - "Group to which a user belongs."; - } - leaf login-ip { - type inet:ipv4-address; - mandatory true; - description - "Login IP address of a user."; - } - container authentication-mode { - description - "User authentication mode. e.g., Local Authentication, - Third-Party Server Authentication, - Authentication Exemption, SSO Authentication."; - leaf local-authentication { - type boolean; - mandatory true; - description - "Authentication-mode : local authentication."; - } - leaf third-part-server-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - leaf exemption-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - leaf sso-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - } - } - grouping i2nsf-nsf-event-type-content { - description - "A set of nsf event type contents"; - leaf message { - type string; - description - "The message for nsf events"; - } - leaf src-ip { - type inet:ipv4-address; - description - "The source IP address of the packet"; - } - leaf dst-ip { - type inet:ipv4-address; - description - "The destination IP address of the packet"; - } - leaf src-port { - type inet:port-number; - description - "The source port of the packet"; - } - leaf dst-port { - type inet:port-number; - description - "The destination port of the packet"; - } - leaf src-zone { - type string; - description - "The source security zone of the packet"; - } - leaf dst-zone { - type string; - description - "The destination security zone of the packet"; - } - leaf rule-id { - type uint8; - mandatory true; - description - "The ID of the rule being triggered"; - } - leaf rule-name { - type string; - mandatory true; - description - "The name of the rule being triggered"; - } - leaf profile { - type string; - description - "Security profile that traffic matches."; - } - leaf raw-info { - type string; - description - "The information describing the packet - triggering the event."; - } - } - grouping i2nsf-system-counter-type-content{ - description - "A set of system counter type contents"; - leaf interface-name { - type string; - description - "Network interface name configured in NSF"; - } - leaf in-total-traffic-pkts { - type uint32; - description - "Total inbound packets"; - } - leaf out-total-traffic-pkts { - type uint32; - description - "Total outbound packets"; - } - leaf in-total-traffic-bytes { - type uint32; - description - "Total inbound bytes"; - } - leaf out-total-traffic-bytes { - type uint32; - description - "Total outbound bytes"; - } - leaf in-drop-traffic-pkts { - type uint32; - description - "Total inbound drop packets"; - } - leaf out-drop-traffic-pkts { - type uint32; - description - "Total outbound drop packets"; - } - leaf in-drop-traffic-bytes { - type uint32; - description - "Total inbound drop bytes"; - } - leaf out-drop-traffic-bytes { - type uint32; - description - "Total outbound drop bytes"; - } - uses traffic-rates; - } - grouping i2nsf-nsf-counters-type-content{ - description - "A set of nsf counters type contents"; - leaf src-ip { - type inet:ipv4-address; - description - "The source IP address of the packet"; - } - leaf dst-ip { - type inet:ipv4-address; - description - "The destination IP address of the packet"; - } - leaf src-port { - type inet:port-number; - description - "The source port of the packet"; - } - leaf dst-port { - type inet:port-number; - description - "The destination port of the packet"; - } - leaf src-zone { - type string; - description - "The source security zone of the packet"; - } - leaf dst-zone { - type string; - description - "The destination security zone of the packet"; - } - leaf src-region { - type string; - description - "Source region of the traffic"; - } - leaf dst-region{ - type string; - description - "Destination region of the traffic"; - } - leaf policy-id { - type uint8; - mandatory true; - description - "The ID of the policy being triggered"; - } - leaf policy-name { - type string; - mandatory true; - description - "The name of the policy being triggered"; - } - leaf src-user{ - type string; - description - "User who generates traffic"; - } - uses protocol; - uses traffic-rates; - } - - container monitoring-message { - description - "The message for monitoring information"; - list monitoring-messages { - key message-id; - description - "The messages according to monitoring information"; - leaf message-id { - type uint8; - mandatory true; - description - "This is message ID - This is key for monitoring messages"; - } - leaf message-version { - type uint8; - mandatory true; - description - "The version of message"; - } - choice message-type { - description - "The type of message"; - case event { - description - "If the message type is event"; - leaf event-name { - type string; - mandatory true; - description - "The name of the event"; - } - choice event-type { - description - "This is event type such as system event - and nsf event."; - case system-event { - description - "If the event type is system event"; - container access-violation { - description - "If the system event is - access violation"; - uses i2nsf-system-event-type-content; - } - container config-change { - description - "If the system event is - config change violation"; - uses i2nsf-system-event-type-content; - } - } - case nsf-event { - description - "If the event type is nsf event"; - leaf user-name { - type string; - description - "This is user name for NSF event"; - } - container ddos-event { - description - "If the event type is DDoS event"; - uses i2nsf-nsf-event-type-content; - container ddos-attack-type{ - description - "Type of DDoS attack"; - leaf syn-flood{ - type boolean; - description - "If the DDoS attack is - syn flood"; - } - leaf ack-flood{ - type boolean; - description - "If the DDoS attack is - ack flood"; - } - leaf syn-ack-flood{ - type boolean; - description - "If the DDoS attack is - syn ack flood"; - } - leaf fin-rst-flood{ - type boolean; - description - "If the DDoS attack is - fin rst flood"; - } - leaf tcp-connection-flood{ - type boolean; - description - "If the DDoS attack is - tcp connection flood"; - } - leaf udp-flood{ - type boolean; - description - "If the DDoS attack is - udp flood"; - } - leaf icmp-flood{ - type boolean; - description - "If the DDoS attack is - icmp flood"; - } - leaf https-flood{ - type boolean; - description - "If the DDoS attack is - https flood"; - } - leaf http-flood{ - type boolean; - description - "If the DDoS attack is - http flood"; - } - leaf dns-reply-flood{ - type boolean; - description - "If the DDoS attack is - dns reply flood"; - } - leaf dns-query-flood{ - type boolean; - description - "If the DDoS attack is - dns query flood"; - } - leaf sip-flood{ - type boolean; - description - "If the DDoS attack is - sip flood"; - } - } - leaf start-time { - type yang:date-and-time; - mandatory true; - description - "The time stamp indicating - when the attack started"; - } - leaf end-time { - type yang:date-and-time; - mandatory true; - description - "The time stamp indicating - when the attack ended"; - } - leaf attack-rate { - type uint32; - description - "The PPS of attack traffic"; - } - leaf attack-speed { - type uint32; - description - "the bps of attack traffic"; - } - } - container session-table-event { - description - "If the event type is session - table event"; - leaf current-session { - type uint8; - description - "The number of concurrent - sessions"; - } - leaf maximum-session { - type uint8; - description - "The maximum number of sessions - that the session table can - support"; - } - leaf threshold { - type uint8; - description - "The threshold triggering - the event"; - } - leaf message { - type string; - description - "The number of session table - exceeded the threshold"; - } - } - container virus-event { - description - "If the event type is virus event"; - uses i2nsf-nsf-event-type-content; - container virus-type { - description - "The type of virus"; - leaf trajan { - type boolean; - description - "If the virus type is trajan"; - } - leaf worm { - type boolean; - description - "If the virus type is worm"; - } - leaf macro { - type boolean; - description - "If the virus type is macro"; - } - } - leaf virus-name { - type string; - description - "The name of virus"; - } - leaf file-type { - type string; - description - "The type of file"; - } - leaf file-name { - type string; - description - "The name of file"; - } - } - container intrusion-event { - description - "If the event type is intrusion event"; - uses i2nsf-nsf-event-type-content; - uses protocol; - container intrusion-attack-type { - description - "The attack type of intrusion"; - leaf brutal-force { - type boolean; - description - "The intrusion type is - brutal force"; - } - leaf buffer-overflow { - type boolean; - description - "The intrusion type is - buffer overflow"; - } - } - } - container botnet-event { - description - "If the event type is botnet event"; - uses i2nsf-nsf-event-type-content; - uses protocol; - leaf botnet-name { - type string; - description - "The name of the detected botnet"; - } - leaf role { - type string; - description - "The role of the communicating - parties within the botnet"; - } - } - container web-attack-event { - description - "If the event type is web - attack event"; - uses i2nsf-nsf-event-type-content; - container web-attack-type { - description - "To determine the attack - type"; - leaf sql-injection { - type boolean; - description - "If the web attack type is - sql injection"; - } - leaf command-injection { - type boolean; - description - "If the web attack type is - command injection"; - } - leaf xss { - type boolean; - description - "If the web attack type is - xss injection"; - } - leaf csrf { - type boolean; - description - "If the web attack type is - csrf injection"; - } - } - container req-method { - description - "The method of requirement. - For instance, PUT or GET - in HTTP"; - leaf put{ - type boolean; - description - "If req method is PUT"; - } - leaf get { - type boolean; - description - "If req method is GET"; - } - } - leaf req-url { - type string; - description - "Requested URL"; - } - leaf url-category { - type string; - description - "Matched URL category"; - } - container filtering-type { - description - "URL filtering type, - e.g., Blacklist, Whitelist, - User-Defined, Predefined, - Malicious Category, Unknown"; - leaf blacklist { - type boolean; - description - "The filtering type is - blacklist"; - } - leaf whitelist { - type boolean; - description - "The filtering type is - whitelist"; - } - leaf user-defined { - type boolean; - description - "The filtering type is - user defined"; - } - leaf balicious-category{ - type boolean; - description - "The filtering type is - balicious category"; - } - leaf unknown { - type boolean; - description - "The filtering type is - unknown"; - } - } - } - } - } - } - case log { - description - "If the message type is log"; - choice log-type { - description - "The type of log"; - case system-log{ - description - "If the log type is system log"; - container access-logs { - description - "If the log is access logs - in system log"; - leaf login-ip { - type inet:ipv4-address; - mandatory true; - description - "Login IP address of a user."; - } - leaf administartor { - type string; - description - "Administrator that - operates on the device"; - } - leaf login-mode { - type login-mode; - description - "Specifies the - administrator logs in mode"; - } - leaf operation-type { - type operation-type; - description - "The operation type that - the administrator execute"; - } - leaf result { - type string; - description - "Command execution result"; - } - leaf content { - type string; - description - "Operation performed by - an administrator after login."; - } - } - container resource-utiliz-logs { - description - "If the log is resource utilize - logs in system log"; - leaf system-status { - type string; - description - "TBD"; - } - leaf cpu-usage { - type uint8; - description - "specifies the amount of - cpu usage"; - } - leaf memory-usage { - type uint8; - description - "specifies the amount of - memory usage"; - } - leaf disk-usage { - type uint8; - description - "specifies the amount of - disk usage"; - } - leaf disk-left { - type uint8; - description - "specifies the amount of - disk left"; - } - leaf session-num { - type uint8; - description - "The total number of - sessions"; - } - leaf process-num { - type uint8; - description - "The total number of - process"; - } - leaf in-traffic-rate { - type uint32; - description - "The total inbound - traffic rate in pps"; - } - leaf out-traffic-rate { - type uint32; - description - "The total outbound - traffic rate in pps"; - } - leaf in-traffic-speed { - type uint32; - description - "The total inbound - traffic speed in bps"; - } - leaf out-traffic-speed { - type uint32; - description - "The total outbound - traffic speed in bps"; - } - } - container user-activity-logs { - description - "If the log is user activity - logs in system log"; - leaf user { - type string; - mandatory true; - description - "Name of a user"; - } - leaf group { - type string; - mandatory true; - description - "Group to which a user belongs."; - } - leaf login-ip { - type inet:ipv4-address; - mandatory true; - description - "Login IP address of a user."; - } - container authentication-mode { - description - "User authentication mode. e.g., - Local Authentication, - Third-Party Server Authentication, - Authentication Exemption, SSO Authentication."; - leaf local-authentication { - type boolean; - mandatory true; - description - "Authentication-mode : local authentication."; - } - leaf third-part-server-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - leaf exemption-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - leaf sso-authentication { - type boolean; - mandatory true; - description - "TBD"; - } - } - container access-mode { - description - "TBD"; - leaf ppp{ - type boolean; - description - "TBD"; - } - leaf svn{ - type boolean; - description - "TBD"; - } - leaf local{ - type boolean; - description - "TBD"; - } - } - leaf online-duration { - type string; - description - "TBD"; - } - leaf logout-duration { - type string; - description - "TBD"; - } - leaf addtional-info { - type string; - description - "TBD"; - } - } - } - case nsf-log{ - description - "If the log type is nsf log"; - container ddos-logs { - description - "If the log is DDoS logs - in nsf log"; - leaf attack-type{ - type string; - description - "DDoS"; - } - leaf attack-ave-rate { - type uint32; - description - "The ave PPS of - attack traffic"; - } - leaf attack-ave-speed { - type uint32; - description - "the ave bps of - attack traffic"; - } - leaf attack-pkt-num{ - type uint32; - description - "the number of - attack packets"; - } - leaf attack-src-ip { - type inet:ipv4-address; - description - "TBD"; - } - leaf action { - type all-action; - description - "TBD"; - } - leaf os { - type string; - description - "simple os information"; - } - } - container virus-logs { - description - "If the log is virus logs - in nsf log"; - uses protocol; - leaf attack-type{ - type string; - description - "Virus"; - } - leaf action{ - type all-action; - description - "TBD"; - } - leaf os{ - type string; - description - "simple os information"; - } - leaf time { - type yang:date-and-time; - mandatory true; - description - "Indicate the time when the - message is generated"; - } - } - container intrusion-logs { - description - "If the log is intrusion logs - in nsf log"; - leaf attack-type{ - type string; - description - "Intrusion"; - } - leaf action{ - type all-action; - description - "TBD"; - } - leaf time { - type yang:date-and-time; - mandatory true; - description - "Indicate the time when the - message is generated"; - } - leaf attack-rate { - type uint32; - description - "The PPS of attack traffic"; - } - leaf attack-speed { - type uint32; - description - "the bps of attack traffic"; - } - } - container botnet-logs { - description - "If the log is botnet logs - in nsf log"; - leaf attack-type{ - type string; - description - "Botnet"; - } - leaf botnet-pkt-num{ - type uint8; - description - "The number of the packets - sent to or from the - detected botnet"; - } - leaf action{ - type all-action; - description - "TBD"; - } - leaf os{ - type string; - description - "simple os information"; - } - } - container dpi-logs { - description - "If the log is dpi logs - in nsf log"; - leaf dpi-type{ - type dpi-type; - description - "The type of dpi"; - } - leaf src-ip { - type inet:ipv4-address; - description - "The source IP address of the packet"; - } - leaf dst-ip { - type inet:ipv4-address; - description - "The destination IP address of the packet"; - } - leaf src-port { - type inet:port-number; - description - "The source port of the packet"; - } - leaf dst-port { - type inet:port-number; - description - "The destination port of the packet"; - } - leaf src-zone { - type string; - description - "The source security zone of the packet"; - } - leaf dst-zone { - type string; - description - "The destination security zone of the packet"; - } - leaf src-region { - type string; - description - "Source region of the traffic"; - } - leaf dst-region{ - type string; - description - "Destination region of the traffic"; - } - leaf policy-id { - type uint8; - mandatory true; - description - "The ID of the policy being triggered"; - } - leaf policy-name { - type string; - mandatory true; - description - "The name of the policy being triggered"; - } - leaf src-user{ - type string; - description - "User who generates traffic"; - } - uses protocol; - leaf file-type { - type string; - description - "The type of file"; - } - leaf file-name { - type string; - description - "The name of file"; - } - } - list vulnerability-scanning-logs { - key vulnerability-id; - description - "If the log is vulnerability - scanning logs in nsf log"; - leaf vulnerability-id{ - type uint8; - description - "The vulnerability id"; - } - leaf victim-ip { - type inet:ipv4-address; - description - "IP address of the victim - host which has vulnerabilities"; - } - uses protocol; - leaf port-num{ - type inet:port-number; - description - "The port number"; - } - leaf level{ - type severity; - description - "The vulnerability severity"; - } - leaf os{ - type string; - description - "simple os information"; - } - leaf addtional-info{ - type string; - description - "TBD"; - } - } - container web-attack-logs { - description - "If the log is web attack - logs in nsf log"; - leaf attack-type{ - type string; - description - "Web Attack"; - } - leaf rsp-code{ - type string; - description - "Response code"; - } - leaf req-clientapp{ - type string; - description - "The client application"; - } - leaf req-cookies{ - type string; - description - "Cookies"; - } - leaf req-host{ - type string; - description - "The domain name of the - requested host"; - } - leaf raw-info{ - type string; - description - "The information describing - the packet triggering the - event."; - } - } - } - } - } - case counters { - description - "If the message type is counters"; - choice counter-type { - description - "The type of counter"; - case system-counter { - container interface-counters { - description - "The system counter type is - interface counter"; - uses i2nsf-system-counter-type-content; - } - } - case nsf-counter{ - container firewall-counters { - description - "The nsf counter type is - firewall counter"; - uses i2nsf-nsf-counters-type-content; - container bound{ - description - "Inbound or Outbound"; - leaf in-interface { - type boolean; - description - "If the bound is inbound"; - } - leaf out-interface { - type boolean; - description - "If the bound is outbound"; - } - } - } - } - container policy-hit-counters { - description - "The counters of policy hit"; - uses i2nsf-nsf-counters-type-content; - leaf hit-times{ - type uint32; - description - "The hit times for policy"; - } - } - } - } - } - leaf message { - type string; - mandatory true; - description - "This is a message for monitoring information"; - } - leaf time-stamp { - type yang:date-and-time; - mandatory true; - description - "Indicate the time when the message is generated"; - } - leaf severity { - type severity; - mandatory true; - description - "The severity of the alarm such as - critical, high, middle, low."; - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2018-03-05.yang new file mode 100644 index 000000000..3e181462e --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-nsf-monitoring-dm@2018-03-05.yang @@ -0,0 +1,1474 @@ +module ietf-i2nsf-nsf-monitoring-dm { + namespace + "urn:ietf:params:xml:ns:yang:ietf-i2nsf-nsf-monitoring-dm"; + prefix + monitoring-information; + import ietf-inet-types{ + prefix inet; + } + import ietf-yang-types { + prefix yang; + } + organization + "IETF I2NSF (Interface to Network Security Functions) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Linda Dunbar + + + Editor: Dongjin Hong + + + Editor: Jaehoon Paul Jeong + "; + + description + "This module defines a YANG data module for monitoring NSFs."; + + revision "2018-03-05" { + description "Third revision"; + reference + "draft-zhang-i2nsf-info-model-monitoring-05"; + } + + typedef severity { + type enumeration { + enum high { + description + "high-level"; + } + enum middle { + description + "middle-level"; + } + enum low { + description + "low-level"; + } + } + description + "An indicator representing severity"; + } + typedef log-action { + type enumeration { + enum allow { + description + "If action is allow"; + } + enum alert { + description + "If action is alert"; + } + enum block { + description + "If action is block"; + } + enum discard { + description + "If action is discard"; + } + enum declare { + description + "If action is declare"; + } + enum block-ip { + description + "If action is block-ip"; + } + enum block-service{ + description + "If action is block-service"; + } + } + description + "This is used for protocol"; + } + typedef dpi-type{ + type enumeration { + enum file-blocking{ + description + "DPI for blocking file"; + } + enum data-filtering{ + description + "DPI for filtering data"; + } + enum application-behavior-control{ + description + "DPI for controlling application behavior"; + } + } + description + "This is used for dpi type"; + } + typedef operation-type{ + type enumeration { + enum login{ + description + "Login operation"; + } + enum logout{ + description + "Logout operation"; + } + enum configuration{ + description + "Configuration operation"; + } + } + description + "An indicator representing operation-type"; + } + typedef login-mode{ + type enumeration { + enum root{ + description + "Root login-mode"; + } + enum user{ + description + "User login-mode"; + } + enum guest{ + description + "Guest login-mode"; + } + } + description + "An indicater representing login-mode"; + } + identity authentication-mode { + description + "User authentication mode types: e.g., Local Authentication, + Third-Party Server Authentication, + Authentication Exemption, or SSO Authentication."; + } + identity local-authentication { + base authentication-mode; + description + "Authentication-mode : local authentication."; + } + identity third-party-server-authentication { + base authentication-mode; + description + "If authentication-mode is + third-part-server-authentication"; + } + identity exemption-authentication { + base authentication-mode; + description + "If authentication-mode is + exemption-authentication"; + } + identity sso-authentication { + base authentication-mode; + description + "If authentication-mode is + sso-authentication"; + } + identity alarm-type { + description + "Base identity for detectable alarm types"; + } + identity memory-alarm { + base alarm-type; + description + "A memory alarm is alerted"; + } + identity cpu-alarm { + base alarm-type; + description + "A cpu alarm is alerted"; + } + identity disk-alarm { + base alarm-type; + description + "A disk alarm is alerted"; + } + identity hardware-alarm { + base alarm-type; + description + "A hardware alarm is alerted"; + } + identity interface-alarm { + base alarm-type; + description + "An interface alarm is alerted"; + } + identity flood-type { + description + "Base identity for detectable flood types"; + } + identity syn-flood { + base flood-type; + description + "A SYN flood is detected"; + } + identity ack-flood { + base flood-type; + description + "An ACK flood is detected"; + } + identity syn-ack-flood { + base flood-type; + description + "An SYN-ACK flood is detected"; + } + identity fin-rst-flood { + base flood-type; + description + "A FIN-RST flood is detected"; + } + identity tcp-con-flood { + base flood-type; + description + "A TCP connection flood is detected"; + } + identity udp-flood { + base flood-type; + description + "A UDP flood is detected"; + } + identity icmp-flood { + base flood-type; + description + "An ICMP flood is detected"; + } + identity https-flood { + base flood-type; + description + "A HTTPS flood is detected"; + } + identity http-flood { + base flood-type; + description + "A HTTP flood is detected"; + } + identity dns-reply-flood { + base flood-type; + description + "A DNS reply flood is detected"; + } + identity dns-query-flood { + base flood-type; + description + "A DNS query flood is detected"; + } + identity sip-flood { + base flood-type; + description + "A SIP flood is detected"; + } + identity attack-type { + description + "The root ID of attack based notification + in the notification taxonomy"; + } + identity system-attack-type { + base attack-type; + description + "This ID is intended to be used + in the context of system events"; + } + identity nsf-attack-type { + base attack-type; + description + "This ID is intended to be used in the context of nsf event"; + } + identity botnet-attack-type { + base nsf-attack-type; + description + "This is a ID stub limited to indicating + that this attack type is botnet. + The usual semantic/taxonomy is missing + and name is used."; + } + identity virus-type { + base nsf-attack-type; + description + "The type of virus. Can be multiple types at once. This attack + type is associated with a detected system-log virus-attack"; + } + identity trojan { + base virus-type; + description + "The detected virus type is trojan"; + } + identity worm { + base virus-type; + description + "The detected virus type is worm"; + } + identity macro { + base virus-type; + description + "The detected virus type is macro"; + } + identity intrusion-attack-type { + base nsf-attack-type; + description + "The attack type is associatied with + a detectedsystem-log intrusion"; + } + identity brute-force { + base intrusion-attack-type; + description + "The intrusion type is brute-force"; + } + identity buffer-overflow { + base intrusion-attack-type; + description + "The intrusion type is buffer-overflow"; + } + identity web-attack-type { + base nsf-attack-type; + description + "The attack type associated with + a detected system-log web-attack"; + } + identity command-injection { + base web-attack-type; + description + "The detected web attack type is command injection"; + } + identity xss { + base web-attack-type; + description + "The detected web attack type is XSS"; + } + identity csrf { + base web-attack-type; + description + "The detected web attack type is CSRF"; + } + identity ddos-attack-type { + base nsf-attack-type; + description + "The attack type is associated with a detected nsf-log event"; + } + + identity req-method { + description + "A set of request types (if applicable). + For instance, PUT or GET in HTTP"; + } + identity put-req { + base req-method; + description + "The detected request type is PUT"; + } + identity get-req { + base req-method; + description + "The detected request type is GET"; + } + + identity filter-type { + description + "The type of filter used to detect, for example, + a web-attack. Can be applicable to more than + web-attacks. Can be more than one type."; + } + identity whitelist { + base filter-type; + description + "The applied filter type is whitelist"; + } + identity blacklist { + base filter-type; + description + "The applied filter type is blacklist"; + } + identity user-defined { + base filter-type; + description + "The applied filter type is user-defined"; + } + identity balicious-category { + base filter-type; + description + "The applied filter is balicious category"; + } + identity unknown-filter { + base filter-type; + description + "The applied filter is unknown"; + } + + identity access-mode { + description + "TBD"; + } + identity ppp { + base access-mode; + description + "Access-mode : ppp"; + } + identity svn { + base access-mode; + description + "Access-mode : svn"; + } + identity local { + base access-mode; + description + "Access-mode : local"; + } + + grouping protocol { + description + "A set of protocols"; + container protocol { + description + "Protocol types: + TCP, UDP, ICMP, ICMPv6, IP, HTTP, FTP and etc."; + leaf tcp { + type boolean; + description + "TCP protocol type."; + } + leaf udp { + type boolean; + description + "UDP protocol type."; + } + leaf icmp { + type boolean; + description + "ICMP protocol type."; + } + leaf icmpv6 { + type boolean; + description + "ICMPv6 protocol type."; + } + leaf ip { + type boolean; + description + "IP protocol type."; + } + leaf http { + type boolean; + description + "HTTP protocol type."; + } + leaf ftp { + type boolean; + description + "ftp protocol type."; + } + } + } + grouping common-notification-content { + description + "TBD"; + leaf message { + type string; + mandatory true; + description + "This is a freetext annotation of + monitoring notification content"; + } + leaf time-stamp { + type yang:date-and-time; + mandatory true; + description + "Indicates the time of message generation"; + } + leaf severity { + type severity; + mandatory true; + description + "The severity of the alarm such + asvcritical, high, middle, low."; + } + } + grouping common-nsf-notification-content { + description + "TBD"; + leaf vendor-name { + type string; + description + "The name of the NSF vendor"; + } + leaf nsf-name { + type string; + description + "The name (or IP) of the NSF + generating the message"; + } + } + grouping i2nsf-system-alarm-type-content { + description + "A set of system alarm type contents"; + leaf usage { + type uint8; + description + "specifies the amount of usage"; + } + leaf threshold { + type uint8; + description + "The threshold triggering the alarm or the event"; + } + } + grouping i2nsf-system-event-type-content { + description + "System event metadata associated with system events caused + by user activity."; + leaf group { + type string; + mandatory true; + description + "Group to which a user belongs."; + } + leaf login-ip-addr { + type inet:ipv4-address; + mandatory true; + description + "Login IP address of a user."; + } + leaf authentication { + type identityref { + base authentication-mode; + } + description + "TBD"; + } + } + + grouping i2nsf-nsf-event-type-content { + description + "A set of common IPv4-related NSF event + content elements"; + leaf event-message { + type string; + description + "The message for nsf events"; + } + leaf src-ip { + type inet:ipv4-address; + description + "The source IP address of the packet"; + } + leaf dst-ip { + type inet:ipv4-address; + description + "The destination IP address of the packet"; + } + leaf src-port { + type inet:port-number; + description + "The source port of the packet"; + } + leaf dst-port { + type inet:port-number; + description + "The destination port of the packet"; + } + leaf src-zone { + type string; + description + "The source security zone of the packet"; + } + leaf dst-zone { + type string; + description + "The destination security zone of the packet"; + } + leaf rule-id { + type uint8; + mandatory true; + description + "The ID of the rule being triggered"; + } + leaf rule-name { + type string; + mandatory true; + description + "The name of the rule being triggered"; + } + leaf profile { + type string; + description + "Security profile that traffic matches."; + } + leaf raw-info { + type string; + description + "The information describing the packet + triggering the event."; + } + } + grouping traffic-rates { + description + "A set of traffic rates + for statistics data"; + leaf total-traffic { + type uint32; + description + "Total traffic"; + } + leaf in-traffic-ave-rate { + type uint32; + description + "Inbound traffic average rate in pps"; + } + leaf in-traffic-peak-rate { + type uint32; + description + "Inbound traffic peak rate in pps"; + } + leaf in-traffic-ave-speed { + type uint32; + description + "Inbound traffic average speed in bps"; + } + leaf in-traffic-peak-speed { + type uint32; + description + "Inbound traffic peak speed in bps"; + } + leaf out-traffic-ave-rate { + type uint32; + description + "Outbound traffic average rate in pps"; + } + leaf out-traffic-peak-rate { + type uint32; + description + "Outbound traffic peak rate in pps"; + } + leaf out-traffic-ave-speed { + type uint32; + description + "Outbound traffic average speed in bps"; + } + leaf out-traffic-peak-speed { + type uint32; + description + "Outbound traffic peak speed in bps"; + } + } + grouping i2nsf-system-counter-type-content{ + description + "A set of system counter type contents"; + leaf interface-name { + type string; + description + "Network interface name configured in NSF"; + } + leaf in-total-traffic-pkts { + type uint32; + description + "Total inbound packets"; + } + leaf out-total-traffic-pkts { + type uint32; + description + "Total outbound packets"; + } + leaf in-total-traffic-bytes { + type uint32; + description + "Total inbound bytes"; + } + leaf out-total-traffic-bytes { + type uint32; + description + "Total outbound bytes"; + } + leaf in-drop-traffic-pkts { + type uint32; + description + "Total inbound drop packets"; + } + leaf out-drop-traffic-pkts { + type uint32; + description + "Total outbound drop packets"; + } + leaf in-drop-traffic-bytes { + type uint32; + description + "Total inbound drop bytes"; + } + leaf out-drop-traffic-bytes { + type uint32; + description + "Total outbound drop bytes"; + } + uses traffic-rates; + } + grouping i2nsf-nsf-counters-type-content{ + description + "A set of nsf counters type contents"; + leaf src-ip { + type inet:ipv4-address; + description + "The source IP address of the packet"; + } + leaf dst-ip { + type inet:ipv4-address; + description + "The destination IP address of the packet"; + } + leaf src-port { + type inet:port-number; + description + "The source port of the packet"; + } + leaf dst-port { + type inet:port-number; + description + "The destination port of the packet"; + } + leaf src-zone { + type string; + description + "The source security zone of the packet"; + } + leaf dst-zone { + type string; + description + "The destination security zone of the packet"; + } + leaf src-region { + type string; + description + "Source region of the traffic"; + } + leaf dst-region{ + type string; + description + "Destination region of the traffic"; + } + leaf policy-id { + type uint8; + description + "The ID of the policy being triggered"; + } + leaf policy-name { + type string; + description + "The name of the policy being triggered"; + } + leaf src-user{ + type string; + description + "User who generates traffic"; + } + uses protocol; + uses traffic-rates; + } + + notification system-detection-alarm { + description + "TBD"; + leaf alarm-catagory { + type identityref { + base alarm-type; + } + description + "TBD"; + } + uses i2nsf-system-alarm-type-content; + uses common-notification-content; + } + notification system-detection-access-violation { + description + "This notification is sent, when a security-sensitive + authentication action fails."; + uses i2nsf-system-event-type-content; + uses common-notification-content; + } + notification system-detection-config-change { + description + "This notification is sent, + when an unauthorized confinguration + change action is detected."; + uses i2nsf-system-event-type-content; + uses common-notification-content; + } + notification nsf-detection-flood { + description + "This notification is sent, + when a specific flood type is detected"; + uses i2nsf-nsf-event-type-content; + leaf flood-catagory { + type identityref { + base flood-type; + } + description + "TBD"; + } + leaf start-time { + type yang:date-and-time; + mandatory true; + description + "The time stamp indicating when the attack started"; + } + leaf end-time { + type yang:date-and-time; + mandatory true; + description + "The time stamp indicating when the attack ended"; + } + leaf attack-rate { + type uint32; + description + "The PPS rate of attack traffic"; + } + leaf attack-speed { + type uint32; + description + "The BPS speed of attack traffic"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-detection-session-table { + description + "This notification is sent, when an a session table event + is deteced"; + leaf current-session { + type uint8; + description + "The number of concurrent sessions"; + } + leaf maximum-session { + type uint8; + description + "The maximum number of sessions that the session + table can support"; + } + leaf threshold { + type uint8; + description + "The threshold triggering the event"; + } + leaf table-indentifier { + type string; + description + "The number of session table exceeded the threshold"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-detection-virus { + description + "This notification is sent, when a virus is detected"; + uses i2nsf-nsf-event-type-content; + leaf virus { + type identityref { + base virus-type; + } + description + "TBD"; + } + leaf virus-name { + type string; + description + "The name of the detected virus"; + } + leaf file-type { + type string; + description + "The type of file virus code is found in (if appicable)."; + } + leaf file-name { + type string; + description + "The name of file virus code is found in (if appicable)."; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-detection-intrusion { + description + "This notification is send, when an intrusion event + is detected."; + uses i2nsf-nsf-event-type-content; + uses protocol; + leaf intrusion { + type identityref { + base intrusion-attack-type; + } + description + "TBD"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-detection-botnet { + description + "This notification is send, when a botnet event is + detected"; + uses i2nsf-nsf-event-type-content; + leaf attack-type { + type identityref { + base botnet-attack-type; + } + description + "TBD"; + } + uses protocol; + leaf botnet-name { + type string; + description + "The name of the detected botnet"; + } + leaf role { + type string; + description + "The role of the communicating + parties within the botnet"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-detection-web-attack { + description + "This notification is send, when an attack event is + detected"; + uses i2nsf-nsf-event-type-content; + leaf web-attack { + type identityref { + base web-attack-type; + } + description + "TBD"; + } + uses protocol; + leaf request { + type identityref { + base req-method; + } + description + "TBD"; + } + leaf req-uri { + type string; + description + "Requested URI"; + } + leaf uri-category { + type string; + description + "Matched URI category"; + } + leaf-list filter { + type identityref { + base filter-type; + } + description + "TBD"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification system-log-access-event { + description + "The notification is send, if there is + a new system log entry about + a system access event"; + leaf login-ip { + type inet:ipv4-address; + mandatory true; + description + "Login IP address of a user"; + } + leaf administrator { + type string; + description + "Administrator that maintains the device"; + } + leaf login-mode { + type login-mode; + description + "Specifies the administrator log-in mode"; + } + leaf operation-type { + type operation-type; + description + "The operation type that the administrator execute"; + } + leaf result { + type string; + description + "Command execution result"; + } + leaf content { + type string; + description + "The Operation performed by an administrator after login"; + } + uses common-nsf-notification-content; + } + notification system-log-res-util-report { + description + "This notification is send, if there is + a new log entry representing ressource + utiliztation updates."; + leaf system-status { + type string; + description + "The current systems + running status"; + } + leaf cpu-usage { + type uint8; + description + "Specifies the relative amount of + cpu usage wrt plattform ressources"; + } + leaf memory-usage { + type uint8; + description + "Specifies the amount of memory usage"; + } + leaf disk-usage { + type uint8; + description + "Specifies the amount of disk usage"; + } + leaf disk-left { + type uint8; + description + "Specifies the amount of disk left"; + } + leaf session-num { + type uint8; + description + "The total number of sessions"; + } + leaf process-num { + type uint8; + description + "The total number of process"; + } + leaf in-traffic-rate { + type uint32; + description + "The total inbound traffic rate in pps"; + } + leaf out-traffic-rate { + type uint32; + description + "The total outbount traffic rate in pps"; + } + leaf in-traffic-speed { + type uint32; + description + "The total inbound traffic speed in bps"; + } + leaf out-traffic-speed { + type uint32; + description + "The total outbound traffic speed in bps"; + } + uses common-nsf-notification-content; + } + notification system-log-user-activity-event { + description + "This notification is send, if there is + a new user activity log entry"; + leaf user { + type string; + mandatory true; + description + "Name of a user"; + } + leaf group { + type string; + mandatory true; + description + "Group to which a user belongs."; + } + leaf login-ip { + type inet:ipv4-address; + mandatory true; + description + "Login IP address of a user."; + } + leaf authentication { + type identityref { + base authentication-mode; + } + description + "TBD"; + } + leaf accese { + type identityref { + base access-mode; + } + description + "TBD"; + } + leaf online-duration { + type string; + description + "Online duration"; + } + leaf logout-duration { + type string; + description + "Lockout duration"; + } + leaf addtional-info { + type string; + description + "User activities. e.g., Successful + User Login, Failed Login attempts, + User Logout, Successful User + Password Change, Failed User + Password Change, User Lockout, + User Unlocking, Unknown"; + } + uses common-nsf-notification-content; + } + notification nsf-log-ddos { + description + "This notification is send, if there is + a new DDoS event log entry in the nsf log"; + leaf attack-type { + type identityref { + base ddos-attack-type; + } + description + "TBD"; + } + leaf attack-ave-rate { + type uint32; + description + "The ave PPS of attack traffic"; + } + leaf attack-ave-speed { + type uint32; + description + "the ave bps of attack traffic"; + } + leaf attack-pkt-num { + type uint32; + description + "the number of attack packets"; + } + leaf attack-src-ip { + type inet:ipv4-address; + description + "The source IP addresses of attack + traffics. If there are a large + amount of IP addresses, then + pick a certain number of resources + according to different rules."; + } + leaf action { + type log-action; + description + "Action type: allow, alert, + block, discard, declare, + block-ip, block-service"; + } + leaf os { + type string; + description + "simple os information"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-virus { + description + "This notification is send, If there is + a new virus event log enry in the nsf log"; + leaf attack-type { + type identityref { + base virus-type; + } + description + "TBD"; + } + leaf action { + type log-action; + description + "Action type: allow, alert, + block, discard, declare, + block-ip, block-service"; + } + leaf os{ + type string; + description + "simple os information"; + } + leaf time { + type yang:date-and-time; + mandatory true; + description + "Indicate the time when the message is generated"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-intrusion { + description + "This notification is send, if there is + a new intrusion event log entry in the nsf log"; + leaf attack-type { + type identityref { + base intrusion-attack-type; + } + description + "TBD"; + } + leaf action { + type log-action; + description + "Action type: allow, alert, + block, discard, declare, + block-ip, block-service"; + } + leaf time { + type yang:date-and-time; + mandatory true; + description + "Indicate the time when the message is generated"; + } + leaf attack-rate { + type uint32; + description + "The PPS of attack traffic"; + } + leaf attack-speed { + type uint32; + description + "the bps of attack traffic"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-botnet { + description + "This noticiation is send, if there is + a new botnet event log in the nsf log"; + leaf attack-type { + type identityref { + base botnet-attack-type; + } + description + "TBD"; + } + leaf action { + type log-action; + description + "Action type: allow, alert, + block, discard, declare, + block-ip, block-service"; + } + leaf botnet-pkt-num{ + type uint8; + description + "The number of the packets sent to + or from the detected botnet"; + } + leaf os{ + type string; + description + "simple os information"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-dpi { + description + "This notification is send, if there is + a new dpi event in the nsf log"; + leaf attack-type { + type dpi-type; + description + "The type of the dpi"; + } + leaf src-ip { + type inet:ipv4-address; + description + "The source IP address of the packet"; + } + leaf dst-ip { + type inet:ipv4-address; + description + "The destination IP address of the packet"; + } + leaf src-port { + type inet:port-number; + description + "The source port of the packet"; + } + leaf dst-port { + type inet:port-number; + description + "The destination port of the packet"; + } + leaf src-zone { + type string; + description + "The source security zone of the packet"; + } + leaf dst-zone { + type string; + description + "The destination security zone of the packet"; + } + leaf src-region { + type string; + description + "Source region of the traffic"; + } + leaf dst-region{ + type string; + description + "Destination region of the traffic"; + } + leaf policy-id { + type uint8; + mandatory true; + description + "The ID of the policy being triggered"; + } + leaf policy-name { + type string; + mandatory true; + description + "The name of the policy being triggered"; + } + leaf src-user{ + type string; + description + "User who generates traffic"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-vuln-scan { + description + "This notification is send, if there is + a new vulnerability-scan report in the nsf log"; + leaf vulnerability-id { + type uint8; + description + "The vulnerability id"; + } + leaf victim-ip { + type inet:ipv4-address; + description + "IP address of the victim host which has vulnerabilities"; + } + uses protocol; + leaf port-num { + type inet:port-number; + description + "The port number"; + } + leaf level { + type severity; + description + "The vulnerability severity"; + } + leaf os { + type string; + description + "simple os information"; + } + leaf addtional-info { + type string; + description + "TBD"; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + notification nsf-log-web-attack { + description + "This notificatio is send, if there is + a new web-attack event in the nsf log"; + leaf attack-type { + type identityref { + base web-attack-type; + } + description + "TBD"; + } + leaf rsp-code { + type string; + description + "Response code"; + } + leaf req-clientapp { + type string; + description + "The client application"; + } + leaf req-cookies { + type string; + description + "Cookies"; + } + leaf req-host { + type string; + description + "The domain name of the requested host"; + } + leaf raw-info { + type string; + description + "The information describing + the packet triggering the event."; + } + uses common-nsf-notification-content; + uses common-notification-content; + } + container counters { + description + "This is probably better covered by an import + as this will not be notifications. + Counter are not very suitable as telemetry, maybe + via periodic subscriptions, which would still + violate principle of least surprise."; + container system-interface { + description + "The system counter type is interface counter"; + uses i2nsf-system-counter-type-content; + } + container nsf-firewall { + description + "The nsf counter type is firewall counter"; + uses i2nsf-nsf-counters-type-content; + container diretcions { + description + "Inbound or Outbound"; + leaf in-interface { + type boolean; + description + "If the bound is inbound"; + } + leaf out-interface { + type boolean; + description + "If the bound is outbound"; + } + } + } + container nsf-policy-hits { + description + "The counters of policy hit"; + uses i2nsf-nsf-counters-type-content; + leaf hit-times { + type uint32; + description + "The hit times for policy"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-policy-rule-for-nsf@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-policy-rule-for-nsf@2018-03-05.yang new file mode 100644 index 000000000..0d906f2ba --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-policy-rule-for-nsf@2018-03-05.yang @@ -0,0 +1,1473 @@ +module ietf-i2nsf-policy-rule-for-nsf { + yang-version 1.1; + namespace + "urn:ietf:params:xml:ns:yang:ietf-i2nsf-policy-rule-for-nsf"; + prefix + policy-rule-for-nsf; + + import ietf-inet-types{ + prefix inet; + } + import ietf-yang-types{ + prefix yang; + } + + organization + "IETF I2NSF (Interface to Network Security Functions) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Adrian Farrel + + + WG Chair: Linda Dunbar + + + Editor: Jingyong Tim Kim + + + Editor: Jaehoon Paul Jeong + + + Editor: Susan Hares + "; + + description + "This module defines a YANG data module for network security + functions."; + revision "2018-03-05"{ + description "The fourth revision"; + reference + "draft-ietf-i2nsf-capability-00"; + } + + typedef sec-event-format { + type enumeration { + enum unknown { + description + "If SecEventFormat is unknown"; + } + enum guid { + description + "If SecEventFormat is GUID + (Generic Unique IDentifier)"; + } + enum uuid { + description + "If SecEventFormat is UUID + (Universal Unique IDentifier)"; + } + enum uri { + description + "If SecEventFormat is URI + (Uniform Resource Identifier)"; + } + enum fqdn { + description + "If SecEventFormat is FQDN + (Fully Qualified Domain Name)"; + } + enum fqpn { + description + "If SecEventFormat is FQPN + (Fully Qualified Path Name)"; + } + } + description + "This is used for SecEventFormat."; + } + + typedef ingress-action { + type enumeration { + enum pass { + description + "If ingress action is pass"; + } + enum drop { + description + "If ingress action is drop"; + } + enum reject { + description + "If ingress action is reject"; + } + enum alert { + description + "If ingress action is alert"; + } + enum mirror { + description + "If ingress action is mirror"; + } + } + description + "This is used for ingress action."; + } + + typedef egress-action { + type enumeration { + enum invoke-signaling { + description + "If egress action is invoke signaling"; + } + enum tunnel-encapsulation { + description + "If egress action is tunnel encapsulation"; + } + enum forwarding { + description + "If egress action is forwarding"; + } + enum redirection { + description + "If egress action is redirection"; + } + } + description + "This is used for egress action."; + } + + identity ECA-OBJECT-TYPE { + description "TBD"; + } + + identity ECA-EVENT-TYPE { + base ECA-OBJECT-TYPE; + description "TBD"; + } + + identity ECA-CONDITION-TYPE { + base ECA-OBJECT-TYPE; + description "TBD"; + } + + identity ECA-ACTION-TYPE { + base ECA-OBJECT-TYPE; + description "TBD"; + } + + identity EVENT-USER-TYPE { + base ECA-EVENT-TYPE; + description "TBD"; + } + + identity EVENT-DEV-TYPE { + base ECA-EVENT-TYPE; + description "TBD"; + } + + identity EVENT-SYS-TYPE { + base ECA-EVENT-TYPE; + description "TBD"; + } + + identity EVENT-TIME-TYPE { + base ECA-EVENT-TYPE; + description "TBD"; + } + + grouping i2nsf-eca-object-type { + leaf entity-class { + type identityref { + base ECA-OBJECT-TYPE; + } + description "TBD"; + } + leaf eca-object-id { + type string; + description "TBD"; + } + description "TBD"; + } + + grouping i2nsf-event-type { + description "TBD"; + leaf manual { + type string; + description + "This is manual for event. + Vendors can write instructions for event + that vendor made"; + } + + leaf sec-event-content { + type string; + mandatory true; + description + "This is a mandatory string that contains the content + of the SecurityEvent. The format of the content + is specified in the SecEventFormat class + attribute, and the type of event is defined in the + SecEventType class attribute. An example of the + SecEventContent attribute is a string hrAdmin, + with the SecEventFormat set to 1 (GUID) and the + SecEventType attribute set to 5 (new logon)."; + } + + leaf sec-event-format { + type sec-event-format; + mandatory true; + description + "This is a mandatory uint 8 enumerated integer, which + is used to specify the data type of the + SecEventContent attribute. The content is + specified in the SecEventContent class attribute, + and the type of event is defined in the + SecEventType class attribute. An example of the + SecEventContent attribute is string hrAdmin, + with the SecEventFormat attribute set to 1 (GUID) + and the SecEventType attribute set to 5 + (new logon)."; + } + + leaf sec-event-type { + type string; + mandatory true; + description + "This is a mandatory uint 8 enumerated integer, which + is used to specify the type of event that involves + this user. The content and format are specified in + the SecEventContent and SecEventFormat class + attributes, respectively. An example of the + SecEventContent attribute is string hrAdmin, + with the SecEventFormat attribute set to 1 (GUID) + and the SecEventType attribute set to 5 + (new logon)."; + } + } + + list i2nsf-security-policy { + key "policy-name"; + description + "policy is a list + including a set of security rules according to certain logic, + i.e., their similarity or mutual relations, etc. The network + security policy is able to apply over both the unidirectional + and bidirectional traffic across the NSF."; + + leaf policy-name { + type string; + mandatory true; + description + "The name of the policy. + This must be unique."; + } + + list eca-policy-rules { + key "rule-id"; + description + "This is a rule for network security functions."; + + leaf rule-id { + type uint8; + mandatory true; + description + "The id of the rule. + This must be unique."; + } + + leaf rule-description { + type string; + description + "This description gives more information about + rules."; + } + + leaf rule-rev { + type uint8; + description + "This shows rule version."; + } + + leaf rule-priority { + type uint8; + description + "The priority keyword comes with a mandatory + numeric value which can range from 1 till 255."; + } + leaf-list policy-event-clause-agg-ptr { + type instance-identifier; + must 'derived-from-or-self (/event-clause-container/ + event-clause-list/entity-class, "ECA-EVENT-TYPE")'; + description + "TBD"; + } + leaf-list policy-condition-clause-agg-ptr { + type instance-identifier; + must 'derived-from-or-self (/condition-clause-container/ + condition-clause-list/entity-class, "ECA-CONDITION-TYPE")'; + description + "TBD"; + } + leaf-list policy-action-clause-agg-ptr { + type instance-identifier; + must 'derived-from-or-self (/action-clause-container/ + action-clause-list/entity-class, "ECA-ACTION-TYPE")'; + description + "TBD"; + } + + container time-zone { + description + "This can be used to apply rules according to time-zone"; + container absolute-time-zone { + description + "This can be used to apply rules according to + absolute-time"; + container time { + description + "This can be used to apply rules according to time"; + leaf start-time { + type yang:date-and-time; + description + "This is start time for time zone"; + } + leaf end-time { + type yang:date-and-time; + description + "This is end time for time zone"; + } + } + container date { + description + "This can be used to apply rules according to date"; + leaf absolute-date { + type yang:date-and-time; + description + "This is absolute date for time zone"; + } + } + } + container periodic-time-zone { + description + "This can be used to apply rules according to + periodic-time-zone"; + container day { + description + "This can be used to apply rules according + to periodic day"; + leaf sunday { + type boolean; + description + "This is sunday for periodic day"; + } + leaf monday { + type boolean; + description + "This is monday for periodic day"; + } + leaf tuesday { + type boolean; + description + "This is tuesday for periodic day"; + } + leaf wednesday { + type boolean; + description + "This is wednesday for periodic day"; + } + leaf thursday { + type boolean; + description + "This is thursday for periodic day"; + } + leaf friday { + type boolean; + description + "This is friday for periodic day"; + } + leaf saturday { + type boolean; + description + "This is saturday for periodic day"; + } + } + container month { + description + "This can be used to apply rules according + to periodic month"; + leaf january { + type boolean; + description + "This is january for periodic month"; + } + leaf february { + type boolean; + description + "This is february for periodic month"; + } + leaf march { + type boolean; + description + "This is march for periodic month"; + } + leaf april { + type boolean; + description + "This is april for periodic month"; + } + leaf may { + type boolean; + description + "This is may for periodic month"; + } + leaf june { + type boolean; + description + "This is june for periodic month"; + } + leaf july { + type boolean; + description + "This is july for periodic month"; + } + leaf august { + type boolean; + description + "This is august for periodic month"; + } + leaf september { + type boolean; + description + "This is september for periodic month"; + } + leaf october { + type boolean; + description + "This is october for periodic month"; + } + leaf november { + type boolean; + description + "This is november for periodic month"; + } + leaf december { + type boolean; + description + "This is december for periodic month"; + } + } + } + } + } + + container resolution-strategy { + description + "The resolution strategies can be used to + specify how to resolve conflicts that occur between + the actions of the same or different policy rules that + are matched and contained in this particular NSF"; + + choice resolution-strategy-type { + description + "Vendors can use YANG data model to configure rules"; + + case fmr { + leaf first-matching-rule { + type boolean; + description + "If the resolution strategy is first matching rule"; + } + } + case lmr { + leaf last-matching-rule { + type boolean; + description + "If the resolution strategy is last matching rule"; + } + } + + } + } + + container default-action { + description + "This default action can be used to specify a predefined + action when no other alternative action was matched + by the currently executing I2NSF Policy Rule. An analogy + is the use of a default statement in a C switch statement."; + + leaf default-action-type { + type ingress-action; + description + "Ingress action type: permit, deny, and mirror."; + } + } + } + + container event-clause-container { + description "TBD"; + list event-clause-list { + key eca-object-id; + uses i2nsf-eca-object-type { + refine entity-class { + default ECA-EVENT-TYPE; + } + } + + description + " This is abstract. An event is defined as any important + occurrence in time of a change in the system being + managed, and/or in the environment of the system being + managed. When used in the context of policy rules for + a flow-based NSF, it is used to determine whether the + Condition clause of the Policy Rule can be evaluated + or not. Examples of an I2NSF event include time and + user actions (e.g., logon, logoff, and actions that + violate any ACL.)."; + + uses i2nsf-event-type; + } + } + container condition-clause-container { + description "TBD"; + list condition-clause-list { + key eca-object-id; + uses i2nsf-eca-object-type { + refine entity-class { + default ECA-CONDITION-TYPE; + } + } + description + " This is abstract. A condition is defined as a set + of attributes, features, and/or values that are to be + compared with a set of known attributes, features, + and/or values in order to determine whether or not the + set of Actions in that (imperative) I2NSF Policy Rule + can be executed or not. Examples of I2NSF Conditions + include matching attributes of a packet or flow, and + comparing the internal state of an NSF to a desired + state."; + + container packet-security-condition { + description + "TBD"; + leaf packet-manual { + type string; + description + "This is manual for packet condition. + Vendors can write instructions for packet condition + that vendor made"; + } + + container packet-security-mac-condition { + description + "The purpose of this Class is to represent packet MAC + packet header information that can be used as part of + a test to determine if the set of Policy Actions in + this ECA Policy Rule should be execute or not."; + + leaf-list pkt-sec-cond-mac-dest { + type yang:phys-address; + description + "The MAC destination address (6 octets long)."; + } + + leaf-list pkt-sec-cond-mac-src { + type yang:phys-address; + description + "The MAC source address (6 octets long)."; + } + + leaf-list pkt-sec-cond-mac-8021q { + type string; + description + "This is an optional string attribute, and defines + The 802.1Q tab value (2 octets long)."; + } + + leaf-list pkt-sec-cond-mac-ether-type { + type string; + description + "The EtherType field (2 octets long). Values up to + and including 1500 indicate the size of the + payload in octets; values of 1536 and above + define which protocol is encapsulated in the + payload of the frame."; + } + + leaf-list pkt-sec-cond-mac-tci { + type string; + description + "This is an optional string attribute, and defines + the Tag Control Information. This consists of a 3 + bit user priority field, a drop eligible indicator + (1 bit), and a VLAN identifier (12 bits)."; + } + } + + container packet-security-ipv4-condition { + description + "The purpose of this Class is to represent IPv4 + packet header information that can be used as + part of a test to determine if the set of Policy + Actions in this ECA Policy Rule should be executed + or not."; + + leaf-list pkt-sec-cond-ipv4-header-length { + type uint8; + description + "The IPv4 packet header consists of 14 fields, + of which 13 are required."; + } + + leaf-list pkt-sec-cond-ipv4-tos { + type uint8; + description + "The ToS field could specify a datagram's priority + and request a route for low-delay, + high-throughput, or highly-reliable service.."; + } + + leaf-list pkt-sec-cond-ipv4-total-length { + type uint16; + description + "This 16-bit field defines the entire packet size, + including header and data, in bytes."; + } + + leaf-list pkt-sec-cond-ipv4-id { + type uint8; + description + "This field is an identification field and is + primarily used for uniquely identifying + the group of fragments of a single IP datagram."; + } + + leaf-list pkt-sec-cond-ipv4-fragment { + type uint8; + description + "IP fragmentation is an Internet Protocol (IP) + process that breaks datagrams into smaller pieces + (fragments), so that packets may be formed that + can pass through a link with a smaller maximum + transmission unit (MTU) than the original + datagram size."; + } + + leaf-list pkt-sec-cond-ipv4-fragment-offset { + type uint16; + description + "Fragment offset field along with Don't Fragment + and More Fragment flags in the IP protocol + header are used for fragmentation and reassembly + of IP datagrams."; + } + + leaf-list pkt-sec-cond-ipv4-ttl { + type uint8; + description + "The ttl keyword is used to check for a specific + IP time-to-live value in the header of + a packet."; + } + + leaf-list pkt-sec-cond-ipv4-protocol { + type uint8; + description + "Internet Protocol version 4(IPv4) is the fourth + version of the Internet Protocol (IP)."; + } + + leaf-list pkt-sec-cond-ipv4-src { + type inet:ipv4-address; + description + "Defines the IPv4 Source Address."; + } + + leaf-list pkt-sec-cond-ipv4-dest { + type inet:ipv4-address; + description + "Defines the IPv4 Destination Address."; + } + + leaf pkt-sec-cond-ipv4-ipopts { + type string; + description + "With the ipopts keyword you can check if + a specific ip option is set. Ipopts has + to be used at the beginning of a rule."; + } + + leaf pkt-sec-cond-ipv4-sameip { + type boolean; + description + "Every packet has a source IP-address and + a destination IP-address. It can be that + the source IP is the same as + the destination IP."; + } + + leaf-list pkt-sec-cond-ipv4-geoip { + type string; + description + "The geoip keyword enables you to match on + the source, destination or source and destination + IP addresses of network traffic and to see to + which country it belongs. To do this, Suricata + uses GeoIP API with MaxMind database format."; + } + } + + container packet-security-ipv6-condition { + description + "The purpose of this Class is to represent packet + IPv6 packet header information that can be used as + part of a test to determine if the set of Policy + Actions in this ECA Policy Rule should be executed + or not."; + + leaf-list pkt-sec-cond-ipv6-dscp { + type string; + description + "Differentiated Services Code Point (DSCP) + of ipv6."; + } + + leaf-list pkt-sec-cond-ipv6-ecn { + type string; + description + "ECN allows end-to-end notification of network + congestion without dropping packets."; + } + + leaf-list pkt-sec-cond-ipv6-traffic-class { + type uint8; + description + "The bits of this field hold two values. The 6 + most-significant bits are used for + differentiated services, which is used to + classify packets."; + } + + leaf-list pkt-sec-cond-ipv6-flow-label { + type uint32; + description + "The flow label when set to a non-zero value + serves as a hint to routers and switches + with multiple outbound paths that these + packets should stay on the same path so that + they will not be reordered."; + } + + leaf-list pkt-sec-cond-ipv6-payload-length { + type uint16; + description + "The size of the payload in octets, + including any extension headers."; + } + + leaf-list pkt-sec-cond-ipv6-next-header { + type uint8; + description + "Specifies the type of the next header. + This field usually specifies the transport + layer protocol used by a packet's payload."; + } + + leaf-list pkt-sec-cond-ipv6-hop-limit { + type uint8; + description + "Replaces the time to live field of IPv4."; + } + + leaf-list pkt-sec-cond-ipv6-src { + type inet:ipv6-address; + description + "The IPv6 address of the sending node."; + } + + leaf-list pkt-sec-cond-ipv6-dest { + type inet:ipv6-address; + description + "The IPv6 address of the destination node(s)."; + } + } + + container packet-security-tcp-condition { + description + "The purpose of this Class is to represent packet + TCP packet header information that can be used as + part of a test to determine if the set of Policy + Actions in this ECA Policy Rule should be executed + or not."; + + leaf-list pkt-sec-cond-tcp-src-port { + type inet:port-number; + description + "This is a mandatory string attribute, and + defines the Source Port number (16 bits)."; + } + + leaf-list pkt-sec-cond-tcp-dest-port { + type inet:port-number; + description + "This is a mandatory string attribute, and + defines the Destination Port number (16 bits)."; + } + + leaf-list pkt-sec-cond-tcp-seq-num { + type uint32; + description + "If the SYN flag is set (1), then this is the + initial sequence number."; + } + + leaf-list pkt-sec-cond-tcp-ack-num { + type uint32; + description + "If the ACK flag is set then the value of this + field is the next sequence number that the sender + is expecting."; + } + + leaf-list pkt-sec-cond-tcp-window-size { + type uint16; + description + "The size of the receive window, which specifies + the number of windows size units + (by default,bytes) (beyond the segment + identified by the sequence number in the + acknowledgment field) that the sender of this + segment is currently willing to recive."; + } + + leaf-list pkt-sec-cond-tcp-flags { + type uint8; + description + "This is a mandatory string attribute, and defines + the nine Control bit flags (9 bits)."; + } + } + + container packet-security-udp-condition { + description + "The purpose of this Class is to represent packet UDP + packet header information that can be used as part + of a test to determine if the set of Policy Actions + in this ECA Policy Rule should be executed or not."; + + leaf-list pkt-sec-cond-udp-src-port { + type inet:port-number; + description + "This is a mandatory string attribute, and + defines the UDP Source Port number (16 bits)."; + } + + leaf-list pkt-sec-cond-udp-dest-port { + type inet:port-number; + description + "This is a mandatory string attribute, and + defines the UDP Destination Port number (16 bits)."; + } + + leaf-list pkt-sec-cond-udp-length { + type string; + description + "This is a mandatory string attribute, and defines + the length in bytes of the UDP header and data + (16 bits)."; + } + } + + container packet-security-icmp-condition { + description + "The internet control message protocol condition."; + + leaf-list pkt-sec-cond-icmp-type { + type uint8; + description + "ICMP type, see Control messages."; + } + + leaf-list pkt-sec-cond-icmp-code { + type uint8; + description + "ICMP subtype, see Control messages."; + } + + leaf-list pkt-sec-cond-icmp-seg-num { + type uint32; + description + "The icmp Sequence Number."; + } + } + } + + container packet-payload-condition { + description + "TBD"; + leaf packet-payload-manual { + type string; + description + "This is manual for payload condition. + Vendors can write instructions for payload condition + that vendor made"; + } + leaf-list pkt-payload-content { + type string; + description + "The content keyword is very important in + signatures. Between the quotation marks you + can write on what you would like the + signature to match."; + } + } + container target-condition { + description + "TBD"; + leaf target-manual { + type string; + description + "This is manual for target condition. + Vendors can write instructions for target condition + that vendor made"; + } + + container device-sec-context-cond { + description + "The device attribute that can identify a device, + including the device type (i.e., router, switch, + pc, ios, or android) and the device's owner as + well."; + + leaf pc { + type boolean; + description + "If type of a device is PC."; + } + + leaf mobile-phone { + type boolean; + description + "If type of a device is mobile-phone."; + } + + leaf voip-volte-phone { + type boolean; + description + "If type of a device is voip-volte-phone."; + } + + leaf tablet { + type boolean; + description + "If type of a device is tablet."; + } + + leaf iot { + type boolean; + description + "If type of a device is Internet of Things."; + } + + leaf vehicle { + type boolean; + description + "If type of a device is vehicle."; + } + } + } + container users-condition { + description + "TBD"; + leaf users-manual { + type string; + description + "This is manual for user condition. + Vendors can write instructions for user condition + that vendor made"; + } + + container user{ + description + "The user (or user group) information with which + network flow is associated: The user has many + attributes such as name, id, password, type, + authentication mode and so on. Name/id is often + used in the security policy to identify the user. + Besides, NSF is aware of the IP address of the + user provided by a unified user management system + via network. Based on name-address association, + NSF is able to enforce the security functions + over the given user (or user group)"; + + choice user-name { + description + "The name of the user. + This must be unique."; + + case tenant { + description + "Tenant information."; + + leaf tenant { + type uint8; + mandatory true; + description + "User's tenant information."; + } + } + + case vn-id { + description + "VN-ID information."; + + leaf vn-id { + type uint8; + mandatory true; + description + "User's VN-ID information."; + } + } + } + } + container group { + description + "The user (or user group) information with which + network flow is associated: The user has many + attributes such as name, id, password, type, + authentication mode and so on. Name/id is often + used in the security policy to identify the user. + Besides, NSF is aware of the IP address of the + user provided by a unified user management system + via network. Based on name-address association, + NSF is able to enforce the security functions + over the given user (or user group)"; + + choice group-name { + description + "The name of the user. + This must be unique."; + + case tenant { + description + "Tenant information."; + + leaf tenant { + type uint8; + mandatory true; + description + "User's tenant information."; + } + } + + case vn-id { + description + "VN-ID information."; + + leaf vn-id { + type uint8; + mandatory true; + description + "User's VN-ID information."; + } + } + } + } + + } + container context-condition { + description + "TBD"; + leaf context-manual { + type string; + description + "This is manual for context condition. + Vendors can write instructions for context condition + that vendor made"; + } + } + container gen-context-condition { + description + "TBD"; + leaf gen-context-manual { + type string; + description + "This is manual for generic context condition. + Vendors can write instructions for generic context + condition that vendor made"; + } + + container geographic-location { + description + "The location where network traffic is associated + with. The region can be the geographic location + such as country, province, and city, + as well as the logical network location such as + IP address, network section, and network domain."; + + leaf-list src-geographic-location { + type uint32; + description + "This is mapped to ip address. We can acquire + source region through ip address stored the + database."; + } + leaf-list dest-geographic-location { + type uint32; + description + "This is mapped to ip address. We can acquire + destination region through ip address stored + the database."; + } + } + } + } + } + container action-clause-container { + description "TBD"; + list action-clause-list { + key eca-object-id; + uses i2nsf-eca-object-type { + refine entity-class { + default ECA-ACTION-TYPE; + } + } + description + "An action is used to control and monitor aspects of + flow-based NSFs when the event and condition clauses + are satisfied. NSFs provide security functions by + executing various Actions. Examples of I2NSF Actions + include providing intrusion detection and/or protection, + web and flow filtering, and deep packet inspection + for packets and flows."; + + container ingress-action { + description + "TBD"; + leaf ingress-manual { + type string; + description + "This is manual for ingress action. + Vendors can write instructions for ingress action + that vendor made"; + } + leaf ingress-action-type { + type ingress-action; + description + "Ingress action type: permit, deny, and mirror."; + } + } + container egress-action { + description + "TBD"; + leaf egress-manual { + type string; + description + "This is manual for egress action. + Vendors can write instructions for egress action + that vendor made"; + } + leaf egress-action-type { + type egress-action; + description + "Egress-action-type: invoke-signaling, + tunnel-encapsulation, and forwarding."; + } + } + container apply-profile { + description + "TBD"; + leaf profile-manual { + type string; + description + "This is manual for apply profile action. + Vendors can write instructions for apply + profile action that vendor made"; + } + + container content-security-control { + description + "Content security control is another category of + security capabilities applied to application layer. + Through detecting the contents carried over the + traffic in application layer, these capabilities + can realize various security purposes, such as + defending against intrusion, inspecting virus, + filtering malicious URL or junk email, and blocking + illegal web access or data retrieval."; + + container content-security-control-types { + description + "Content Security types: Antivirus, IPS, IDS, + url-filtering, data-filtering, mail-filtering, + file-blocking, file-isolate, pkt-capture, + application-control, and voip-volte."; + + leaf antivirus { + type boolean; + description + "Additional inspection of antivirus."; + } + + leaf ips { + type boolean; + description + "Additional inspection of IPS."; + } + + leaf ids { + type boolean; + description + "Additional inspection of IDS."; + } + + leaf url-filtering { + type boolean; + description + "Additional inspection of URL filtering."; + } + + leaf data-filtering { + type boolean; + description + "Additional inspection of data filtering."; + } + + leaf mail-filtering { + type boolean; + description + "Additional inspection of mail filtering."; + } + + leaf file-blocking { + type boolean; + description + "Additional inspection of file blocking."; + } + leaf file-isolate { + type boolean; + description + "Additional inspection of file isolate."; + } + + leaf pkt-capture { + type boolean; + description + "Additional inspection of packet capture."; + } + + leaf application-control { + type boolean; + description + "Additional inspection of app control."; + } + + leaf voip-volte { + type boolean; + description + "Additional inspection of VoIP/VoLTE."; + } + } + } + + container attack-mitigation-control { + description + "This category of security capabilities is + specially used to detect and mitigate various + types of network attacks."; + + container ddos-attack { + description + "A distributed-denial-of-service (DDoS) is + where the attack source is more than one, + often thousands of unique IP addresses."; + + container ddos-attack-type { + description + "DDoS-attack types: Network Layer + DDoS Attacks and Application Layer + DDoS Attacks."; + + container network-layer-ddos-attack { + description + "Network layer DDoS-attack."; + container network-layer-ddos-attack-type { + description + "Network layer DDoS attack types: + Syn Flood Attack, UDP Flood Attack, + ICMP Flood Attack, IP Fragment Flood, + IPv6 Related Attacks, and etc"; + + leaf syn-flood { + type boolean; + description + "Additional Inspection of + Syn Flood Attack."; + } + + leaf udp-flood { + type boolean; + description + "Additional Inspection of + UDP Flood Attack."; + } + + leaf icmp-flood { + type boolean; + description + "Additional Inspection of + ICMP Flood Attack."; + } + + leaf ip-frag-flood { + type boolean; + description + "Additional Inspection of + IP Fragment Flood."; + } + + leaf ipv6-related { + type boolean; + description + "Additional Inspection of + IPv6 Related Attacks."; + } + } + } + + container app-layer-ddos-attack { + description + "Application layer DDoS-attack."; + + container app-ddos-attack-types { + description + "Application layer DDoS-attack types: + Http Flood Attack, Https Flood Attack, + DNS Flood Attack, and + DNS Amplification Flood Attack, + SSL DDoS Attack, and etc."; + + leaf http-flood { + type boolean; + description + "Additional Inspection of + Http Flood Attack."; + } + + leaf https-flood { + type boolean; + description + "Additional Inspection of + Https Flood Attack."; + } + + leaf dns-flood { + type boolean; + description + "Additional Inspection of + DNS Flood Attack."; + } + + leaf dns-amp-flood { + type boolean; + description + "Additional Inspection of + DNS Amplification Flood Attack."; + } + + leaf ssl-ddos { + type boolean; + description + "Additional Inspection of + SSL Flood Attack."; + } + } + } + } + } + + container single-packet-attack { + description + "Single Packet Attacks."; + container single-packet-attack-type { + description + "DDoS-attack types: Scanning Attack, + Sniffing Attack, Malformed Packet Attack, + Special Packet Attack, and etc."; + + container scan-and-sniff-attack { + description + "Scanning and Sniffing Attack."; + container scan-and-sniff-attack-types { + description + "Scanning and sniffing attack types: + IP Sweep attack, Port Scanning, + and etc."; + + leaf ip-sweep { + type boolean; + description + "Additional Inspection of + IP Sweep Attack."; + } + + leaf port-scanning { + type boolean; + description + "Additional Inspection of + Port Scanning Attack."; + } + } + } + + container malformed-packet-attack { + description + "Malformed Packet Attack."; + container malformed-packet-attack-types { + description + "Malformed packet attack types: + Ping of Death Attack, Teardrop Attack, + and etc."; + + leaf ping-of-death { + type boolean; + description + "Additional Inspection of + Ping of Death Attack."; + } + + leaf teardrop { + type boolean; + description + "Additional Inspection of + Teardrop Attack."; + } + } + } + + container special-packet-attack { + description + "special Packet Attack."; + container special-packet-attack-types { + description + "Special packet attack types: + Oversized ICMP Attack, Tracert Attack, + and etc."; + + leaf oversized-icmp { + type boolean; + description + "Additional Inspection of + Oversize ICMP Attack."; + } + + leaf tracert { + type boolean; + description + "Additional Inspection of + Tracrt Attack."; + } + } + } + } + } + } + } + } + } + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-regs-interface@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-regs-interface@2018-03-05.yang new file mode 100644 index 000000000..09a5a8ecf --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-i2nsf-regs-interface@2018-03-05.yang @@ -0,0 +1,204 @@ +module ietf-i2nsf-regs-interface { + namespace + "urn:ietf:params:xml:ns:yang:ietf-i2nsf-regs-interface"; + prefix + regs-interface; + + import ietf-inet-types{ + prefix inet; + } + + organization + "IETF I2NSF (Interface to Network Security Functions) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Adrian Farrel + + + WG Chair: Linda Dunbar + + + Editor: Sangwon Hyun + + + Editor: Taekyun Roh + + + Editor: Sarang Wi + + + Editor: Jaehoon Paul Jeong + + + Editor: Jung-Soo Park + "; + + description + "It defines a YANG data module for Registration Interface."; + revision "2018-03-05"{ + description "The second revision"; + reference + "draft-hares-i2nsf-capability-data-model-03 + draft-hyun-i2nsf-registration-interface-im-04"; + } + + grouping i2nsf-nsf-performance-caps { + description + "NSF performance capailities"; + container processing{ + description + "processing info"; + leaf processing-average{ + type uint16; + description + "processing-average"; + } + leaf processing-peak{ + type uint16; + description + "processing peak"; + } + } + + container bandwidth{ + description + "bandwidth info"; + container inbound{ + description + "inbound"; + leaf inbound-average{ + type uint16; + description + "inbound-average"; + } + leaf inbound-peak{ + type uint16; + description + "inbound-peak"; + } + } + + container outbound{ + description + "outbound"; + leaf outbound-average{ + type uint16; + description + "outbound-average"; + } + leaf outbound-peak{ + type uint16; + description + "outbound-peak"; + } + } + } + } + + grouping i2nsf-nsf-capability-information { + description + "Detail information of an NSF"; + container performance-capability { + uses i2nsf-nsf-performance-caps; + description + "performance-capability"; + } + + container i2nsf-capability { + description + "It refers draft-hares-i2nsf-capability-data-model-04.txt + later"; + } + } + + grouping ietf-netmod-acl-model { + description + "Detail information"; + container role-based-acl { + description + "It refers draft-ietf-netmod-acl-model-15.txt + later"; + } + } + + grouping i2nsf-nsf-access-info { + description + "NSF access information"; + leaf nsf-address { + type inet:ipv4-address; + mandatory true; + description + "nsf-address"; + } + + leaf nsf-port-address { + type inet:port-number; + description + "nsf-port-address"; + } + } + + grouping i2nsf-regs-req { + description + "The capability information of newly + created NSF to notify its + capability to Security Controller"; + container nsf-capability-information { + description + "nsf-capability-information"; + uses i2nsf-nsf-capability-information; + } + + container nsf-access-info { + description + "nsf-access-info"; + uses i2nsf-nsf-access-info; + } + } + + grouping i2nsf-instance-mgnt-req { + description + "Required information for instanceiation-request and + deinstanciation-request"; + leaf req-level { + type uint16; + description + "req-level"; + } + + leaf req-id { + type uint64; + mandatory true; + description + "req-id"; + } + + choice req-type { + description + "req-type"; + case instanciation-request { + description + "instanciation-request"; + container nsf-capability-information { + description + "nsf-capability-information"; + uses i2nsf-nsf-capability-information; + } + } + + case deinstanciation-request { + description + "deinstanciation-request"; + container nsf-access-info { + description + "nsf-access-info"; + uses i2nsf-nsf-access-info; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-igmp-mld-snooping@2018-02-26.yang b/experimental/ietf-extracted-YANG-modules/ietf-igmp-mld-snooping@2018-02-26.yang new file mode 100644 index 000000000..10d876419 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-igmp-mld-snooping@2018-02-26.yang @@ -0,0 +1,1431 @@ +module ietf-igmp-mld-snooping { + namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; + // replace with IANA namespace when assigned + prefix ims; + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-yang-types { + prefix "yang"; + } + + import ietf-interfaces { + prefix "if"; + } + + import ietf-l2vpn { + prefix "l2vpn"; + } + + import ietf-network-instance { + prefix "ni"; + } + + organization + "IETF PIM Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Stig Venaas + + + WG Chair: Mike McBride + + + Editors: Hongji Zhao + + + Xufeng Liu + + + Yisong Liu + + Anish Peter + + + Mahesh Sivakumar + + + "; + + description + "The module defines a collection of YANG definitions common for + IGMP and MLD Snooping."; + + revision 2018-02-26 { + description + "augment /if:interfaces/if:interface"; + reference + "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; + } + + revision 2017-10-24 { + description + "Change model definition to fit NMDA standard."; + reference + "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; + } + + revision 2017-08-14 { + description + "using profile to cooperate with ieee-dot1Q-bridge module"; + reference + "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; + } + + revision 2017-06-28 { + description + "augment /rt:routing/rt:control-plane-protocols + augment /rt:routing-state/rt:control-plane-protocols"; + reference + "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; + } + + revision 2017-02-05 { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; + } + + /* + * Features + */ + + feature admin-enable { + description + "Support configuration to enable or disable IGMP and MLD +Snooping."; + } + + feature immediate-leave { + description + "Support configuration of immediate-leave."; + } + + feature join-group { + description + "Support configuration of join-group."; + } + + feature require-router-alert { + description + "Support configuration of require-router-alert."; + } + + feature static-l2-multicast-group { + description + "Support configuration of L2 multicast static-group."; + } + + feature static-mrouter-interface { + description + "Support configuration of mrouter interface."; + } + + feature per-instance-config { + description + "Support configuration of each VLAN or l2vpn instance or EVPN +instance."; + } + + feature rpc-clear-groups { + description + "Support to clear statistics by RPC for IGMP and MLD +Snooping."; + } + + feature explicit-tracking { + description + "Support configuration of per instance explicit-tracking +hosts."; + } + + feature exclude-lite { + description + "Support configuration of per instance exclude-lite."; + } + + /* + * Typedefs + */ + typedef name-type { + type string { + length "0..32"; + } + description + "A text string of up to 32 characters, of locally determined + significance."; + } + typedef vlan-index-type { + type uint32 { + range "1..4094 | 4096..4294967295"; + } + description + "A value used to index per-VLAN tables. Values of 0 and 4095 + are not permitted. The range of valid VLAN indices. If the + value is greater than 4095, then it represents a VLAN with + scope local to the particular agent, i.e., one without a + global VLAN-ID assigned to it. Such VLANs are outside the + scope of IEEE 802.1Q, but it is convenient to be able to + manage them in the same way using this YANG module."; + reference + "IEEE Std 802.1Q-2014: Virtual Bridged Local Area Networks."; + } + + typedef igmp-snooping-instance-ref { + type leafref { + path "/igmp-snooping-instances/igmp-snooping-instance/name"; + } + description + "This type is used by data models that need to reference igmp +snooping instance."; + } + + typedef mld-snooping-instance-ref { + type leafref { + path "/mld-snooping-instances/mld-snooping-instance/name"; + } + description + "This type is used by data models that need to reference mld +snooping instance."; + } + + typedef l2vpn-instance-ac-ref { + type leafref { + path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; + + } + description "l2vpn-instance-ac-ref"; + } + + typedef l2vpn-instance-pw-ref { + type leafref { + path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name"; + } + description "l2vpn-instance-pw-ref"; + } + + typedef source-ipv4-addr-type { + type union { + type enumeration { + enum '*' { + description + "Any source address."; + } + } + type inet:ipv4-address; + } + description + "Multicast source IP address type."; + } // source-ipv4-addr-type + + typedef source-ipv6-addr-type { + type union { + type enumeration { + enum '*' { + description + "Any source address."; + } + } + type inet:ipv6-address; + } + description + "Multicast source IP address type."; + } // source-ipv6-addr-type + /* + * Identities + */ + + /* + * Groupings + */ + + grouping general-state-attributes { + + description "General State attributes"; + + container received { + config false; + description "Statistics of received IGMP and MLD Snooping +related packets."; + uses general-statistics-sent-received; + } + container sent { + config false; + description "Statistics of sent IGMP and MLD Snooping related +packets."; + uses general-statistics-sent-received; + } + + } // general-state-attributes + + grouping instance-config-attributes-igmp-snooping { + description "IGMP snooping configuration for each VLAN or l2vpn +instance or EVPN instance."; + + uses instance-config-attributes-igmp-mld-snooping; + + leaf querier-source { + type inet:ipv4-address; + description "Use the IGMP snooping querier to support IGMP +snooping in a VLAN where PIM and IGMP are not configured. + The IP address is used as the source address in +messages."; + } + + list static-l2-multicast-group { + if-feature static-l2-multicast-group; + key "group source-addr"; + description + "A static multicast route, (*,G) or (S,G)."; + leaf group { + type inet:ipv4-address; + description + "Multicast group IP address"; + } + + leaf source-addr { + type source-ipv4-addr-type; + description + "Multicast source IP address."; + } + + leaf-list bridge-outgoing-interface { + when "../../type = 'bridge'"; + type if:interface-ref; + description "Outgoing interface in bridge fowarding"; + + } + + leaf-list l2vpn-outgoing-ac { + when "../../type = 'l2vpn'"; + type l2vpn-instance-ac-ref; + description "Outgoing ac in l2vpn fowarding"; + + } + + leaf-list l2vpn-outgoing-pw { + when "../../type = 'l2vpn'"; + type l2vpn-instance-pw-ref; + description "Outgoing pw in l2vpn fowarding"; + + } + + } // static-l2-multicast-group + + } // instance-config-attributes-igmp-snooping + + grouping instance-config-attributes-igmp-mld-snooping { + description + "IGMP and MLD Snooping configuration of each VLAN."; + + leaf enable { + if-feature admin-enable; + type boolean; + description + "Set the value to true to enable IGMP and MLD Snooping in +the VLAN instance."; + } + leaf forwarding-mode { + type enumeration { + enum "mac" { + description + ""; + } + enum "ip" { + description + ""; + } + } + description "The default forwarding mode for IGMP and MLD +Snooping is ip. + cisco command is as below + Router(config-vlan-config)# multicast snooping lookup +{ ip | mac } "; + } + + leaf explicit-tracking { + if-feature explicit-tracking; + type boolean; + description "Tracks IGMP & MLD Snooping v3 membership reports +from individual hosts for each port of each VLAN or VSI."; + } + + leaf exclude-lite { + if-feature exclude-lite; + type boolean; + description + "lightweight IGMPv3 and MLDv2 protocols, which simplify the + standard versions of IGMPv3 and MLDv2."; + reference "RFC5790"; + } + + leaf send-query { + type boolean; + default true; + description "Enable quick response for topo changes. + To support IGMP snooping in a VLAN where PIM and IGMP are +not configured. + It cooperates with param querier-source. "; + } + + /** + leaf mrouter-aging-time { + type uint16 ; + default 180; + description "Aging time for mrouter interface"; + } + **/ + + leaf immediate-leave { + if-feature immediate-leave; + type empty; + description + "When fast leave is enabled, the IGMP software assumes that +no more than one host is present on each VLAN port."; + } + + leaf last-member-query-interval { + type uint16 { + range "1..65535"; + } + units seconds; + default 1; + description + "Last Member Query Interval, which may be tuned to modify +the + leave latency of the network."; + reference "RFC3376. Sec. 8.8."; + } + + leaf query-interval { + + type uint16; + units seconds; + default 125; + description + "The Query Interval is the interval between General +Queries + sent by the Querier."; + reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; + } + + leaf query-max-response-time { + + type uint16; + units seconds; + default 10; + description + "Query maximum response time specifies the maximum time + allowed before sending a responding report."; + reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; + + } + + leaf require-router-alert { + if-feature require-router-alert; + type boolean; + default false; + description + "When the value is true, router alert exists in the IP head +of IGMP or MLD packet."; + } + + leaf robustness-variable { + type uint8 { + range "2..7"; + } + default 2; + description + "Querier's Robustness Variable allows tuning for the +expected + packet loss on a network."; + reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; + } + + leaf version { + type uint8 { + range "1..3"; + } + description "IGMP and MLD Snooping version."; + } + + leaf-list static-bridge-mrouter-interface { + + when "../type = 'bridge'"; + if-feature static-mrouter-interface; + type if:interface-ref; + description "static mrouter interface in bridge fowarding"; + + } + + leaf-list static-l2vpn-mrouter-interface-ac { + + when "../type = 'l2vpn'"; + if-feature static-mrouter-interface; + type if:interface-ref; + description "static mrouter interface whose type is interface +in l2vpn forwarding"; + + } + + leaf-list static-l2vpn-mrouter-interface-pw { + + when "../type = 'l2vpn'"; + if-feature static-mrouter-interface; + type l2vpn-instance-pw-ref; + description "static mrouter interface whose type is pw in l2vpn +forwarding"; + + } + + } // instance-config-attributes-igmp-mld-snooping + + grouping instance-config-attributes-mld-snooping { + description "MLD snooping configuration of each VLAN."; + + uses instance-config-attributes-igmp-mld-snooping; + + leaf querier-source { + type inet:ipv6-address; + description + "Use the MLD snooping querier to support MLD snooping where PIM +and MLD are not configured. + The IP address is used as the source address in messages."; + } + + list static-l2-multicast-group { + if-feature static-l2-multicast-group; + key "group source-addr"; + description + "A static multicast route, (*,G) or (S,G)."; + + leaf group { + type inet:ipv6-address; + description + "Multicast group IP address"; + } + + leaf source-addr { + type source-ipv6-addr-type; + description + "Multicast source IP address."; + } + + leaf-list bridge-outgoing-interface { + when "../../type = 'bridge'"; + type if:interface-ref; + description "Outgoing interface in bridge fowarding"; + + } + + leaf-list l2vpn-outgoing-ac { + when "../../type = 'l2vpn'"; + type l2vpn-instance-ac-ref; + description "Outgoing ac in l2vpn fowarding"; + } + + leaf-list l2vpn-outgoing-pw { + when "../../type = 'l2vpn'"; + type l2vpn-instance-pw-ref; + description "Outgoing pw in l2vpn fowarding"; + + } + + } // static-l2-multicast-group + + } // instance-config-attributes-mld-snooping + + grouping instance-state-group-attributes-igmp-mld-snooping { + description + "Attributes for both IGMP and MLD snooping groups."; + + leaf mac-address { + type yang:phys-address; + description "Destination mac address for L2 multicast +forwarding."; + } + + leaf expire { + type uint32; + units seconds; + description + "The time left before multicast group timeout."; + } + + leaf up-time { + type uint32; + units seconds; + description + "The time after the device created L2 multicast record."; + } + + } // instance-state-group-attributes-igmp-mld-snooping + + grouping instance-state-attributes-igmp-snooping { + + description + "State attributes for IGMP snooping for each VLAN or l2vpn +instance or EVPN instance."; + + uses instance-state-attributes-igmp-mld-snooping; + list group { + + key "address"; + + config false; + + description "IGMP snooping information"; + + leaf address { + type inet:ipv4-address; + description + "Multicast group IP address"; + } + + uses instance-state-group-attributes-igmp-mld-snooping; + + leaf last-reporter { + type inet:ipv4-address; + description + "The last host address which has sent the + report to join the multicast group."; + } + + list source { + key "address"; + description "Source IP address for multicast stream"; + leaf address { + type inet:ipv4-address; + description "Source IP address for multicast stream"; + } + + uses instance-state-source-attributes-igmp-mld-snooping; + + leaf last-reporter { + type inet:ipv4-address; + description + "The last host address which has sent the + report to join the multicast source and group."; + } + + list host { + if-feature explicit-tracking; + key "host-address"; + description + "List of multicast membership hosts + of the specific multicast source-group."; + + leaf host-address { + type inet:ipv4-address; + description + "Multicast membership host address."; + } + leaf host-filter-mode { + type enumeration { + enum "include" { + description + "In include mode"; + } + enum "exclude" { + description + "In exclude mode."; + } + } + description + "Filter mode for a multicast membership + host may be either include or exclude."; + } + }// list host + + } // list source + } // list group + + } // instance-state-attributes-igmp-snooping + + grouping instance-state-attributes-igmp-mld-snooping { + + description + "State attributes for both IGMP and MLD Snooping of each +VLAN or l2vpn instance or EVPN instance."; + + leaf entries-count { + type uint32; + config false; + description + "The number of L2 multicast entries in IGMP and MLD +Snooping."; + } + + leaf-list bridge-mrouter-interface { + + when "../type = 'bridge'"; + type if:interface-ref; + config false; + description " mrouter interface in bridge fowarding"; + + } + + leaf-list l2vpn-mrouter-interface-ac { + when "../type = 'l2vpn'"; + type if:interface-ref; + config false; + description " mrouter interface whose type is interface in +l2vpn fowarding"; + + } + + leaf-list l2vpn-mrouter-interface-pw { + + when "../type = 'l2vpn'"; + type l2vpn-instance-pw-ref; + config false; + description " mrouter interface whose type is pw in l2vpn +fowarding"; + + } + + } // instance-config-attributes-igmp-mld-snooping + + grouping instance-state-attributes-mld-snooping { + description + "State attributes for MLD snooping of each VLAN."; + + uses instance-state-attributes-igmp-mld-snooping; + + list group { + + key "address"; + + config false; + + description "MLD snooping statistics information"; + + leaf address { + type inet:ipv6-address; + description + "Multicast group IP address"; + } + + uses instance-state-group-attributes-igmp-mld-snooping; + + leaf last-reporter { + type inet:ipv6-address; + description + "The last host address which has sent the + report to join the multicast group."; + } + list source { + key "address"; + description "Source IP address for multicast stream"; + + leaf address { + type inet:ipv6-address; + description "Source IP address for multicast stream"; + } + + uses instance-state-source-attributes-igmp-mld-snooping; + + leaf last-reporter { + type inet:ipv6-address; + description + "The last host address which has sent the report to join +the multicast source and group."; + } + + list host { + if-feature explicit-tracking; + key "host-address"; + description + "List of multicast membership hosts + of the specific multicast source-group."; + + leaf host-address { + type inet:ipv6-address; + description + "Multicast membership host address."; + } + leaf host-filter-mode { + type enumeration { + enum "include" { + description + "In include mode"; + } + enum "exclude" { + description + "In exclude mode."; + } + } + description + "Filter mode for a multicast membership + host may be either include or exclude."; + } + }// list host + + } // list source + } // list group + } // instance-state-attributes-mld-snooping + + grouping instance-state-source-attributes-igmp-mld-snooping { + description + "State attributes for both IGMP and MLD Snooping of each VLAN +or l2vpn instance or EVPN instance."; + + leaf-list bridge-outgoing-interface { + when "../../../type = 'bridge'"; + type if:interface-ref; + description "Outgoing interface in bridge fowarding"; + + } + + leaf-list l2vpn-outgoing-ac { + when "../../../type = 'l2vpn'"; + type l2vpn-instance-ac-ref; + description "Outgoing ac in l2vpn fowarding"; + + } + + leaf-list l2vpn-outgoing-pw { + when "../../../type = 'l2vpn'"; + type l2vpn-instance-pw-ref; + description "Outgoing pw in l2vpn fowarding"; + + } + + leaf up-time { + type uint32; + units seconds; + description "The time after the device created L2 multicast +record"; + } + + leaf expire { + type uint32; + units seconds; + description + "The time left before multicast group timeout."; + } + + leaf host-count { + if-feature explicit-tracking; + type uint32; + description + "The number of host addresses."; + } + } // instance-state-source-attributes-igmp-mld-snooping + + grouping general-statistics-error { + description + "A grouping defining statistics attributes for errors."; + + leaf checksum { + type yang:counter64; + description + "The number of checksum errors."; + } + leaf too-short { + type yang:counter64; + description + "The number of messages that are too short."; + } + } // general-statistics-error + + grouping general-statistics-sent-received { + description + "A grouping defining statistics attributes."; + + leaf query { + type yang:counter64; + description + "The number of query messages."; + } + leaf membership-report-v1 { + type yang:counter64; + description + "The number of membership report v1 messages."; + } + leaf membership-report-v2 { + type yang:counter64; + description + "The number of membership report v2 messages."; + } + leaf membership-report-v3 { + type yang:counter64; + description + "The number of membership report v3 messages."; + } + leaf leave { + type yang:counter64; + description + "The number of leave messages."; + } + leaf non-member-leave { + type yang:counter64; + description + "The number of non member leave messages."; + } + leaf pim { + type yang:counter64; + description + "The number of pim hello messages."; + } + } // general-statistics-sent-received + + grouping interface-endpoint-attributes-igmp-snooping { + + description "interface attributes for igmp snooping"; + + list host { + + if-feature explicit-tracking; + + key "host-address"; + + config false; + + description + "List of multicast membership hosts + of the specific multicast source-group."; + + leaf host-address { + type inet:ipv4-address; + description + "Multicast membership host address."; + } + leaf host-filter-mode { + type enumeration { + enum "include" { + description + "In include mode"; + } + enum "exclude" { + description + "In exclude mode."; + } + } + description + "Filter mode for a multicast membership + host may be either include or exclude."; + } + }// list host + } // interface-endpoint-attributes-igmp-snooping + grouping interface-endpoint-attributes-mld-snooping { + + description "interface endpoint attributes mld snooping"; + + list host { + + if-feature explicit-tracking; + + key "host-address"; + + config false; + + description + "List of multicast membership hosts + of the specific multicast source-group."; + + leaf host-address { + type inet:ipv6-address; + description + "Multicast membership host address."; + } + leaf host-filter-mode { + type enumeration { + enum "include" { + description + "In include mode"; + } + enum "exclude" { + description + "In exclude mode."; + } + } + description + "Filter mode for a multicast membership + host may be either include or exclude."; + } + }// list host + } // interface-endpoint-attributes-mld-snooping + + /* + * igmp-snooping-instance + */ + container igmp-snooping-instances { + description + "igmp-snooping-instance list"; + + list igmp-snooping-instance { + key "name"; + description + "IGMP Snooping instance to configure the igmp- +snooping."; + + leaf name { + type string; + description + "Name of the igmp-snooping-instance to configure the igmp +snooping."; + } + + leaf type { + type enumeration { + enum "bridge" { + description "bridge"; + } + enum "l2vpn" { + description "l2vpn"; + } + } + description "The type indicates bridge or l2vpn."; + } + + uses instance-config-attributes-igmp-snooping { + if-feature per-instance-config; + } + + uses instance-state-attributes-igmp-snooping; + + } //igmp-snooping-instance + } //igmp-snooping-instances + + /* + * mld-snooping-instance + */ + container mld-snooping-instances { + description + "mld-snooping-instance list"; + + list mld-snooping-instance { + key "name"; + description + "MLD Snooping instance to configure the mld-snooping."; + + leaf name { + type string; + description + "Name of the mld-snooping-instance to configure the mld +snooping."; + } + + leaf type { + type enumeration { + enum "bridge" { + description "bridge"; + } + enum "l2vpn" { + description "l2vpn"; + } + } + description "The type indicates bridge or l2vpn."; + } + + uses instance-config-attributes-mld-snooping { + if-feature per-instance-config; + } + + uses instance-state-attributes-mld-snooping; + + } //mld-snooping-instance + } //mld-snooping-instances + + container bridges { + description + "Apply igmp-mld-snooping instance in the bridge scenario"; + + list bridge { + key name; + + description + "bridge list"; + + leaf name { + type name-type; + description + "bridge name"; + + } + leaf igmp-snooping-instance { + type igmp-snooping-instance-ref; + description "Configure igmp-snooping instance under the +bridge view"; + } + leaf mld-snooping-instance { + type mld-snooping-instance-ref; + description "Configure mld-snooping instance under the +bridge view"; + } + list component { + key "name"; + description + " "; + + leaf name { + type string; + description + "The name of the Component."; + } + container bridge-vlan { + description "bridge vlan"; + list vlan { + key "vid"; + description + ""; + + leaf vid { + type vlan-index-type; + description + "The VLAN identifier to which this entry +applies."; + + } + leaf igmp-snooping-instance { + type igmp-snooping-instance-ref; + description "Configure igmp-snooping instance +under the vlan view"; + } + leaf mld-snooping-instance { + type mld-snooping-instance-ref; + description "Configure mld-snooping instance +under the vlan view"; + } + + }//vlan + }//bridge-vlan + }//component + }//bridge + } //bridges + + container l2vpn-instances { + description "Apply igmp-mld-snooping instance in the l2vpn +scenario"; + + list l2vpn-instance { + key "name"; + description "An l2vpn service instance"; + + leaf name { + type string; + description "Name of l2vpn service instance"; + } + + leaf igmp-snooping-instance { + type igmp-snooping-instance-ref; + description "Configure igmp-snooping instance under the +l2vpn-instance view"; + } + leaf mld-snooping-instance { + type mld-snooping-instance-ref; + description "Configure mld-snooping instance under the +l2vpn-instance view"; + } + + } + } + + /* augments */ + + augment "/if:interfaces/if:interface" { + description "Augment interface for referencing attributes which +only fit for interface view."; + + container igmp-mld-snooping { + description + "igmp-mld-snooping related attributes under interface view"; + + leaf enable { + if-feature admin-enable; + type boolean; + description + "Set the value to true to enable IGMP and MLD Snooping in +the VLAN instance."; + } + + leaf version { + type uint8 { + range "1..3"; + } + description "IGMP and MLD Snooping version."; + } + + leaf type { + type enumeration { + enum "bridge" { + description "bridge"; + } + enum "l2vpn" { + description "l2vpn"; + } + } + description "The type indicates bridge or l2vpn."; + } + + container static-mrouter-interface { + description + "Container for choice static-mrouter-interface"; + + choice static-mrouter-interface { + description + "Configure static multicast router interface under the +interface view"; + + case bridge { + when "type = 'bridge'" { + description + "Applies to bridge scenario."; + } + description + "Applies to bridge scenario."; + + leaf bridge-name { + type string; + description + "bridge name."; + + } + leaf-list vlan-id { + type uint32; + description + "vlan id."; + } + + } + case l2vpn { + when "type = 'l2vpn'" { + description + "Applies to l2vpn scenario."; + } + description + "Applies to l2vpn scenario."; + + leaf l2vpn-instance-name { + type string; + description + "The l2vpn instance name applied in the +interface"; + + } + } + + } // choice static-mrouter-interface + } // container static-mrouter-interface + + container static-l2-multicast-group { + description + "Container for static-l2-multicast-group"; + + choice static-l2-multicast-group { + description + "Configure static l2 multicast group under the +interface view"; + + case bridge { + when "type = 'bridge'" { + description + "Applies to bridge scenario."; + } + description + "Applies to bridge scenario."; + + leaf bridgename { + type string; + description + "bridge name."; + + } + + list bridge-group-v4 { + + key "address"; + + description ""; + + leaf address { + type inet:ipv4-address; + description + "Multicast group IPV4 address"; + } + + leaf-list source { + type inet:ipv4-address; + description "Source IPV4 address for multicast +stream"; + } + + leaf-list vlan-id { + type uint32; + description + "vlan id."; + } + + } + + list bridge-group-v6 { + key "address"; + description ""; + leaf address { + type inet:ipv6-address; + description + "Multicast group IPv6 address"; + } + + leaf-list source { + type inet:ipv6-address; + description "Source IPv6 address for multicast +stream"; + } + + leaf-list vlan-id { + type uint32; + description + "vlan id."; + } + + } + + } + case l2vpn { + + when "type = 'l2vpn'" { + description + "Applies to l2vpn scenario."; + } + description + "Applies to l2vpn scenario."; + + list l2vpn-group-v4 { + key "address"; + description ""; + leaf address { + type inet:ipv4-address; + description + "Multicast group IP address"; + } + + leaf-list source { + type inet:ipv4-address; + description "Source IP address for multicast +stream"; + } + + leaf l2vpn-instance-name { + type string; + description + "The l2vpn instance name applied in the +interface"; + + } + } + list l2vpn-group-v6 { + key "address"; + description ""; + + leaf address { + type inet:ipv6-address; + description + "Multicast group IP address"; + } + + leaf-list source { + type inet:ipv6-address; + description "Source IP address for multicast +stream"; + } + + leaf l2vpn-instance-name { + type string; + description + "The l2vpn instance name applied in the +interface"; + + } + } + } + + } //choice static-l2-multicast-group + } // container static-l2-multicast-group + + container statistics { + config false; + description + "A collection of interface-related statistics objects."; + + uses general-state-attributes; + + } + + } + + } + + /* RPCs */ + + rpc clear-igmp-snooping-groups { + if-feature rpc-clear-groups; + description + "Clears the specified IGMP Snooping cache tables."; + + input { + + leaf name { + type string; + description + "Name of the igmp-snooping-instance"; + } + + leaf group { + type inet:ipv4-address; + description + "Multicast group IPv4 address. + If it is not specified, all IGMP snooping group tables +are + cleared."; + } + + leaf source { + type inet:ipv4-address; + description + "Multicast source IPv4 address. + If it is not specified, all IGMP snooping source-group +tables are + cleared."; + } + } + } // rpc clear-igmp-snooping-groups + + rpc clear-mld-snooping-groups { + if-feature rpc-clear-groups; + description + "Clears the specified MLD Snooping cache tables."; + + input { + leaf name { + type string; + description + "Name of the mld-snooping-instance"; + } + + leaf group { + type inet:ipv6-address; + description + "Multicast group IPv6 address. + If it is not specified, all MLD snooping group tables are + cleared."; + } + + leaf source { + type inet:ipv6-address; + description + "Multicast source IPv6 address. + If it is not specified, all MLD snooping source-group +tables are + cleared."; + } + } + } // rpc clear-mld-snooping-groups +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2017-10-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2018-03-03.yang similarity index 65% rename from experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2017-10-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2018-03-03.yang index b8477f974..24898dd33 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2017-10-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-interface-protection@2018-03-03.yang @@ -5,6 +5,9 @@ module ietf-interface-protection { import ietf-interfaces { prefix if; + reference "RFC7223bis"; + // RFC Ed.: replace 7223bis with actual RFC number and remove + // this note } organization @@ -12,23 +15,38 @@ module ietf-interface-protection { contact "WG List: - ID-draft authors: + ID-draft editors: Jonas Ahlberg (jonas.ahlberg@ericsson.com); Min Ye (amy.yemin@huawei.com); Xi Li (Xi.Li@neclab.eu); - Koji Kawada (k-kawada@ah.jp.nec.com) - Carlos J. Bernardos (cjbc@it.uc3m.es) Daniela Spreafico (daniela.spreafico@nokia.com) Marko Vaupotic (Marko.Vaupotic@aviatnet.com)"; description "This is a module for the entities in - a generic interface protection mechanism."; + a generic interface protection mechanism. - revision 2017-10-19 { - description - "Draft revision."; - reference ""; + 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 + (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. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved."; + + revision 2018-03-03 { + description "Initial revision."; + reference "RFC XXXX: A YANG Data Model for Microwave Radio Link"; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note } /* @@ -38,14 +56,15 @@ module ietf-interface-protection { identity protection-architecture-type { description "protection architecture type"; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } + identity one-plus-one-type { base protection-architecture-type; description "1+1, One interface protects another one interface."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity one-to-n-type { @@ -53,8 +72,8 @@ module ietf-interface-protection { description "1:N, One interface protects n other interfaces."; - reference "ITU-T Rec. G.808.1"; - } + reference "ITU-T G.808.1"; + } /* * Protection states identities @@ -63,97 +82,97 @@ module ietf-interface-protection { identity protection-states { description "Identities describing the status of the protection, - in a group of interfaces configured in + in a group of interfaces configured in a protection mode."; } identity unprotected { base protection-states; description "Not protected"; - } + } identity protected { base protection-states; description "Protected"; - } + } identity unable-to-protect { base protection-states; description "Unable to protect"; - } + } /* * protection-external-commands identities */ - identity protection-external-commands{ description "Protection external commands for trouble shooting purpose."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } + identity manual-switch-working{ base protection-external-commands; description "A switch action initiated by an operator command. - It switches normal traffic signal to the working + It switches normal traffic signal to the working transport entity."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity manual-switch-protection{ base protection-external-commands; description "A switch action initiated by an operator command. - It switches normal traffic signal to the protection + It switches normal traffic signal to the protection transport entity."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity forced-switch{ base protection-external-commands; description - "A switch action initiated by an operator command. + "A switch action initiated by an operator command. It switches normal traffic signal to the protection - transport entity and forces it to remain on that - entity even when criteria for switching back to - the orignal entity are fulfilled."; - reference "ITU-T Rec. G.808.1"; + transport entity and forces it to remain on that + entity even when criteria for switching back to + the original entity are fulfilled."; + reference "ITU-T G.808.1"; } identity lockout-of-protection{ base protection-external-commands; description - "A switch action temporarily disables access to the + "A switch action temporarily disables access to the protection transport entity for all signals."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity freeze{ base protection-external-commands; description - "A switch action temporarily prevents any switch action - to be taken and, as such, freezes the current state. - Until the freeze is cleared, additional near-end external - commands are rejected and fault condition changes and + "A switch action temporarily prevents any switch action + to be taken and, as such, freezes the current state. + Until the freeze is cleared, additional near-end external + commands are rejected and fault condition changes and received APS messages are ignored.."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity exercise{ base protection-external-commands; description - "A switch action to test if the APS communication is - operating correctly. It is lower priority than any 'real' + "A switch action to test if the APS communication is + operating correctly. It is lower priority than any 'real' switch request.."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } identity clear{ base protection-external-commands; description - "A action clears all switch commands."; - reference "ITU-T Rec. G.808.1"; + "An action clears all switch commands."; + reference "ITU-T G.808.1"; } /* @@ -182,14 +201,14 @@ module ietf-interface-protection { type identityref{ base protection-architecture-type; } - default "one-plus-one-type"; + default "ifprot:one-plus-one-type"; description "The type of protection architecture used, e.g. one interface protecting one or several other interfaces."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } - leaf-list protection-members { + leaf-list members { type if:interface-ref; min-elements 2; description @@ -197,31 +216,31 @@ module ietf-interface-protection { protection and used by a higher-layer-interface."; } - leaf protection-operation-type { + leaf operation-type { type enumeration { enum "non-revertive" { description "In non revertive operation, the traffic does not return to the working interface if the switch requests are terminated."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } enum "revertive" { description - "In revertive operation, the traffic always + "In revertive operation, the traffic always returns to (or remains on) the working interface if the switch requests are terminated."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } } default "non-revertive"; - description + description "The type of protection operation, i.e. revertive or non-revertive operation."; } leaf-list working-entity { - when "../protection-operation-type = 'revertive'"; + when "../operation-type = 'revertive'"; type if:interface-ref; min-elements 1; description @@ -229,44 +248,44 @@ module ietf-interface-protection { be transported over when there is no need to use the protecting interface."; } - leaf revertive-wait-to-restore { - when "../protection-operation-type = 'revertive'"; + when "../operation-type = 'revertive'"; type uint16; units "seconds"; default "0"; description "The time to wait before switching back to the working - interface if protection-operation-type is revertive."; - reference "ITU-T Rec. G.808.1"; + interface if operation-type is revertive."; + reference "ITU-T G.808.1"; } + leaf hold-off-timer { type uint16; units "milliseconds"; default "0"; description - "Time interval after the detection of a fault and its - confirmation as a condition requiring the protection + "Time interval after the detection of a fault and its + confirmation as a condition requiring the protection switching procedure."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } - leaf protection-status { + leaf status { type identityref { base protection-states; } description "Status of the protection, in a group of interfaces configured in a protection mode."; - reference "ITU-T Rec. G.808.1"; + reference "ITU-T G.808.1"; } - action protection-external-commands { + action external-commands { input { - leaf protection-external-command { + leaf external-command { type identityref { base protection-external-commands; - } + } description "Execution of protection external commands for trouble shooting purpose."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ioam@2018-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-ioam@2018-03-04.yang new file mode 100644 index 000000000..9ed2278fd --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-ioam@2018-03-04.yang @@ -0,0 +1,418 @@ +module ietf-ioam { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-ioam"; + prefix "ioam"; + + import ietf-pot-profile { + prefix "pot"; + } + + import ietf-access-control-list { + prefix "acl"; + } + + organization + "IETF IPPM (IP Performance Metrics) Working Group"; + + contact + "WG Web: + WG List: + Editor: zhoutianran@huawei.com"; + + description + "This YANG module specifies a vendor-independent data + model for the in Situ OAM (iOAM)."; + + revision 2018-03-04 { + description "Initial revision."; + reference "draft-song-ippm-ioam-yang"; + } + + identity base-filter { + description + "Base identity to represent a filter. A filter is used to + specify the flow to apply the iOAM profile. "; + } + identity acl-filter { + base base-filter; + description + "Apply ACL rule to specify the flow."; + } + + identity base-protocol { + description + "Base identity to represent the carrier protocol. It's used to + indicate what layer and protocol the iOAM data is embedded."; + } + + identity ipv6-protocol { + base base-protocol; + description + "The described iOAM data is embedded in ipv6 protocol."; + } + + identity base-node-action { + description + "Base identity to represent the node actions. It's used to + indicate what action the node will take."; + } + + identity encapsulate { + base base-node-action; + description + "indicate the node is to encapsulate the iOAM packet"; + } + + identity transit { + base base-node-action; + description + "indicate the node is to transit the iOAM packet"; + } + + identity decapsulate { + base base-node-action; + description + "indicate the node is to decapsulate the iOAM packet"; + } + + typedef ioam-filter-type { + type identityref { + base base-filter; + } + description + "Specifies a known type of filter."; + } + + typedef ioam-protocol-type { + type identityref { + base base-protocol; + } + description + "Specifies a known type of carrier protocol for the iOAM data."; + } + + typedef ioam-node-action { + type identityref { + base base-node-action; + } + description + "Specifies a known type of node action."; + } + + typedef ioam-trace-types { + type bits { + bit ioam-hop-lim-node-id { + position 0; + description + "When set indicates presence of Hop_Lim and node_id in the + node data."; + } + bit ioam-if-id { + position 1; + description + "When set indicates presence of ingress_if_id and + egress_if_id in the node data."; + } + bit ioam-timestamp-seconds { + position 2; + description + "When set indicates presence of time stamp seconds in the + node data."; + } + bit ioam-timestamp-nanoseconds { + position 3; + description + "When set indicates presence of time stamp nanoseconds in + the node data."; + } + bit ioam-transit-delay { + position 4; + description + "When set indicates presence of transit delay in the node + data."; + } + bit ioam-app-data { + position 5; + description + "When set indicates presence of app_data in the node data."; + } + bit ioam-queue-depth { + position 6; + description + "When set indicates presence of queue depth in the node + data."; + } + bit ioam-opaque-state-snapshot { + position 7; + description + "When set indicates presence of variable length Opaque + State Snapshot field."; + } + bit ioam-hop-lim-node-id-wide { + position 8; + description + "When set indicates presence of Hop_Lim and node_id wide + in the node data."; + } + bit ioam-if-id-wide { + position 9; + description + "When set indicates presence of ingress_if_id and + egress_if_id wide in the node data."; + } + bit app-data-wide { + position 10; + description + "When set indicates presence of app_data wide in the node + data."; + } + } + description + "A 16-bit identifier which specifies which data types are used + in this node data list."; + } + + typedef ioam-pot-types { + type bits { + bit ioam-bytes-16 { + position 0; + description + "POT data is a 16 Octet field"; + } + } + description + "7-bit identifier of a particular POT variant that dictates + the POT data that is included."; + } + + typedef ioam-e2e-types { + type bits { + bit ioam-seq-num { + position 0; + description + "A 64-bit sequence number added to a specific tube which is + used to identify packet loss and reordering for that + tube."; + } + } + description + "8-bit identifier of a particular in situ OAM E2E variant."; + } + + grouping ioam-filter { + description "A grouping for iOAM filter definition"; + + leaf filter-type { + type ioam-filter-type; + description "filter type"; + } + + leaf acl-name { + when "../filter-type = 'acl-filter'"; + type leafref { + path "/acl:access-lists/acl:acl/acl:name"; + } + description "Access Control List name."; + } + } + + grouping ioam-incremental-tracing-profile { + description + "A grouping for incremental tracing profile."; + + leaf node-action { + type ioam-node-action; + description "node action"; + } + + leaf trace-type { + when "../node-action = 'encapsulate'"; + type ioam-trace-types; + description + "The trace type is only defined at the encapsulation node."; + } + + leaf enable-loopback-mode { + when "../node-action = 'encapsulate'"; + type boolean; + default false; + description + "Loopback mode is used to send a copy of a packet back towards + the source. The loopback mode is only defined at the + encapsulation node."; + } + + leaf max-length { + when "../node-action = 'encapsulate'"; + type uint32; + description + "This field specifies the maximum length of the node data list + in octets. The max-length is only defined at the + encapsulation node. And it's only used for the incremental + tracing mode."; + } + } + + grouping ioam-preallocated-tracing-profile { + description + "A grouping for incremental tracing profile."; + + leaf node-action { + type ioam-node-action; + description "node action"; + } + + leaf trace-type { + when "../node-action = 'encapsulate'"; + type ioam-trace-types; + description + "The trace type is only defined at the encapsulation node."; + } + + leaf enable-loopback-mode { + when "../node-action = 'encapsulate'"; + type boolean; + default false; + description + "Loopback mode is used to send a copy of a packet back towards + the source. The loopback mode is only defined at the + encapsulation node."; + } + } + + grouping ioam-e2e-profile { + description + "A grouping for tracing profile."; + + leaf node-action { + type ioam-node-action; + description + "indicate how the node act for this profile"; + } + + leaf e2e-type { + when "../node-action = 'encapsulate'"; + type ioam-e2e-types; + description + "The e2e type is only defined at the encapsulation node."; + } + } + + grouping ioam-admin-config { + description + "IOAM top-level administrative configuration."; + + leaf enabled { + type boolean; + default false; + description + "When true, IOAM configuration is enabled for the system."; + } + } + + container ioam { + description "iOAM top level container"; + + container ioam-profiles { + description + "Contains a list of iOAM profiles."; + + uses ioam-admin-config; + + list ioam-profile { + key "profile-name"; + ordered-by user; + description + "A list of iOAM profiles that configured on the node."; + + leaf profile-name { + type string; + description + "Unique identifier for each iOAM profile"; + } + + container filter { + uses ioam-filter; + description + "The filter which is used to indicate the flow to apply + iOAM."; + } + + leaf protocol-type { + type ioam-protocol-type; + description + "This item is used to indicate the carrier protocol where + the iOAM is applied."; + } + + container incremental-tracing-profile { + description + "describe the profile for incremental tracing option"; + + leaf enabled { + type boolean; + default false; + description + "When true, apply incremental tracing option to the + specified flow identified by the filter."; + } + + uses ioam-incremental-tracing-profile; + } + + container preallocated-tracing-profile { + description + "describe the profile for preallocated tracing option"; + + leaf enabled { + type boolean; + default false; + description + "When true, apply preallocated tracing option to the + specified flow identified by the following filter."; + } + + uses ioam-preallocated-tracing-profile; + } + + container pot-profile { + description + "describe the profile for pot option"; + + leaf enabled { + type boolean; + default false; + description + "When true, apply Proof of Transit option to the + specified flow identified by the following filter."; + } + + leaf active-profile-index { + type pot:profile-index-range; + description + "Proof of transit profile index that is currently + active. Will be set in the first hop of the path + or chain. Other nodes will not use this field."; + } + + uses pot:pot-profile; + } + + container e2e-profile { + description + "describe the profile for e2e option"; + + leaf enabled { + type boolean; + default false; + description + "When true, apply End to end option to the + specified flow identified by the following filter."; + } + + uses ioam-e2e-profile; + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ipsec@2017-05-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-ipsec@2018-01-08.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-ipsec@2017-05-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ipsec@2018-01-08.yang index b2ee745e7..d6e6c7cee 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ipsec@2017-05-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ipsec@2018-01-08.yang @@ -27,7 +27,7 @@ module ietf-ipsec { description "Data model for IPSec"; - revision "2017-05-02" { + revision "2018-01-08" { description "Initial revision."; reference ""; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-l1csm@2017-10-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-l1csm@2018-03-05.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-l1csm@2017-10-27.yang rename to experimental/ietf-extracted-YANG-modules/ietf-l1csm@2018-03-05.yang index 97b505743..d9073c8cf 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-l1csm@2017-10-27.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-l1csm@2018-03-05.yang @@ -23,7 +23,7 @@ module ietf-l1csm { "this module describes Layer 1 connectivity service model for subscriber Layer 1 Connectivity Services and Attributes"; - revision 2017-10-27 { + revision 2018-03-05 { description "Initial revision."; reference "to add the draft name"; @@ -315,27 +315,27 @@ and SDH */ identity One-way-Delay { base performance-metriclist; - description "One-way-Delay"; + description "one-way-delay"; } identity One-way-Errored-Second { base performance-metriclist; - description "One-way-Errored-Second"; + description "one-way-errored-second"; } identity One-way-Severely-Errored-Second { base performance-metriclist; - description "One-way-Severely-Errored-Second"; + description "one-way-severely-errored-second"; } identity One-way-Unavailable-Second { base performance-metriclist; - description "One-way-Unavailable-Second"; + description "one-way-unavailable-second"; } identity One-way-Availability { base performance-metriclist; - description "One-way-Availability"; + description "one-way-availability"; } grouping protocol-coding-optical_interface { @@ -408,7 +408,7 @@ Attribute."; leaf performance-metric { type identityref { - base performance-metriclist; + base performance-metriclist; } description "list of performance metric"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-l2-topology-state@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-l2-topology-state@2018-03-05.yang new file mode 100644 index 000000000..ee0032ebb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-l2-topology-state@2018-03-05.yang @@ -0,0 +1,190 @@ +module ietf-l2-topology-state { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology-state"; + prefix "l2t-s"; + + import ietf-network-state { + prefix "nw-s"; + } + + import ietf-network-topology-state { + prefix "nt-s"; + } + + import ietf-l2-topology { + prefix "l2t"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + contact + "WG Web: + WG List: + Editor: Jie Dong + + Editor: Xiugang Wei + "; + + description + "This module defines a basic model for + the layer-2 topology of a network. + + 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of + draft-ietf-i2rs-yang-l2-network-topo-04; + see the RFC itself for full legal notices."; + revision "2018-03-05" { + description "Initial revision"; + reference "draft-ietf-i2rs-l2-network-topology-04"; + } + + /* + * Features + */ + + feature VLAN { + description + "Indicates that the system supports the + vlan functions"; + } + + feature QinQ { + description + "Indicates that the system supports the + qinq functions"; + } + + feature PBB { + description + "Indicates that the device supports the + provider-backbone-bridging functions"; + } + + feature VPLS { + description + "Indicates that the device supports the + VPLS functions"; + reference "RFC 4761, RFC 4762"; + } + + feature TRILL { + description + "Indicates that the device supports the + TRILL functions"; + reference "RFC 6325"; + } + + feature VXLAN { + description + "Indicates that the device supports the + VXLAN functions"; + reference "RFC 7348"; + } + + /* + * Data nodes + */ + + augment "/nw-s:networks/nw-s:network/nw-s:network-types" { + description + "Introduce new network type for L2 topology"; + uses l2t:l2-network-type; + } + + augment "/nw-s:networks/nw-s:network" { + when "/nw-s:networks/nw-s:network/nw-s:network-types/"+ + "l2t-s:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Configuration parameters for the L2 network + as a whole"; + uses l2t:l2-network-attributes; + } + + augment "/nw-s:networks/nw-s:network/nw-s:node" { + when "/nw-s:networks/nw-s:network/nw-s:network-types/"+ + "l2t-s:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Configuration parameters for L2 at the node + level"; + uses l2t:l2-node-attributes; + } + + augment "/nw-s:networks/nw-s:network/nt-s:link" { + when "/nw-s:networks/nw-s:network/nw-s:network-types/"+ + "l2t-s:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description "Augment L2 topology link information"; + uses l2t:l2-link-attributes; + } + + augment "/nw-s:networks/nw-s:network/nw-s:node/"+ + "nt-s:termination-point" { + when "/nw-s:networks/nw-s:network/nw-s:network-types/"+ + "l2t-s:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Augment L2 topology termination point information"; + uses l2t:l2-termination-point-attributes; + } + + /* + * Notifications + */ + + notification l2-node-event { + description "Notification event for L2 node"; + leaf event-type { + type l2t:l2-network-event-type; + description "Event type"; + } + uses nw-s:node-ref; + uses l2t:l2-network-type; + uses l2t:l2-node-attributes; + } + + notification l2-link-event { + description "Notification event for L2 link"; + leaf event-type { + type l2t:l2-network-event-type; + description "Event type"; + } + uses nt-s:link-ref; + uses l2t:l2-network-type; + uses l2t:l2-link-attributes; + } + + notification l2-termination-point-event { + description "Notification event for L2 termination point"; + leaf event-type { + type l2t:l2-network-event-type; + description "Event type"; + } + uses nt-s:tp-ref; + uses l2t:l2-network-type; + uses l2t:l2-termination-point-attributes; + } + +} // module l2-topology-state diff --git a/experimental/ietf-extracted-YANG-modules/ietf-l2-topology@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-l2-topology@2018-03-05.yang new file mode 100644 index 000000000..523283bba --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-l2-topology@2018-03-05.yang @@ -0,0 +1,543 @@ +module ietf-l2-topology { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-l2-topology"; + prefix "l2t"; + + import ietf-network { + prefix "nw"; + } + + import ietf-network-topology { + prefix "nt"; + } + + import ietf-inet-types { + prefix "inet"; + reference "RFC 6991"; + } + + import ietf-yang-types { + prefix "yang"; + reference "RFC 6991"; + } + + organization + "IETF I2RS (Interface to the Routing System) Working Group"; + contact + "WG Web: + WG List: + Editor: Jie Dong + + + Editor: Xiugang Wei + "; + + description + "This module defines a basic model for + the layer-2 topology of a network. + + 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 + (http://trustee.ietf.org/license-info). + + This version of this YANG module is part of + draft-ietf-i2rs-yang-l2-network-topo-04; + see the RFC itself for full legal notices."; + + revision "2018-03-05" { + description "Initial revision"; + reference "draft-ietf-i2rs-l2-network-topology-04"; + } + + /* + * Typedefs + */ + + typedef vlan { + type uint16 { + range "0..4095"; + } + description "VLAN ID"; + } + + typedef trill-nickname { + type uint16; + description "TRILL Nickname"; + } + + typedef vni { + type uint32 { + range "1..16777215"; + } + description "VxLAN Network Identifier"; + } + + typedef flag-type { + type identityref { + base "flag-identity"; + } + description "Base type for flags"; + } + + typedef l2-network-event-type { + type enumeration { + enum "add" { + value 0; + description "An L2 node or link or termination-point + has been added"; + } + enum "remove" { + value 1; + description "An L2 node or link or termination-point + has been removed"; + } + enum "update" { + value 2; + description "An L2 node or link or termination-point + has been updated"; + } + } + description "l2 network event type for notifications"; + } // l2-topology-event-type + + /* + * Features + */ + + feature VLAN { + description + "Indicates that the system supports the + vlan functions"; + } + + feature QinQ { + description + "Indicates that the system supports the + qinq functions"; + } + + feature PBB { + description + "Indicates that the device supports the + provider-backbone-bridging functions"; + } + + feature VPLS { + description + "Indicates that the device supports the + VPLS functions"; + reference "RFC 4761, RFC 4762"; + } + + feature TRILL { + description + "Indicates that the device supports the + TRILL functions"; + reference "RFC 6325"; + } + + feature VXLAN { + description + "Indicates that the device supports the + VXLAN functions"; + reference "RFC 7348"; + } + + /* + * Identities + */ + + identity flag-identity { + description "Base type for flags"; + } + + identity encapsulation-type { + description + "Base identity from which specific encapsulation + types are derived."; + } + + identity eth-encapsulation-type { + base encapsulation-type; + description + "Base identity from which specific ethernet + encapsulation types are derived."; + + } + + identity ethernet { + base eth-encapsulation-type; + description + "native ethernet encapsulation"; + } + + identity vlan { + base eth-encapsulation-type; + description + "vlan encapsulation"; + } + + identity qinq { + base eth-encapsulation-type; + description + "qinq encapsulation"; + } + + identity pbb { + base eth-encapsulation-type; + description + "pbb encapsulation"; + } + + identity trill { + base eth-encapsulation-type; + description + "trill encapsulation"; + } + + identity vpls { + base eth-encapsulation-type; + description + "vpls encapsulation"; + } + + identity vxlan { + base eth-encapsulation-type; + description + "vxlan encapsulation"; + } + + identity frame-relay { + base encapsulation-type; + description + "Frame Relay encapsulation"; + } + + identity ppp { + base encapsulation-type; + description + "PPP encapsulation"; + } + + identity hdlc { + base encapsulation-type; + description + "HDLC encapsulation"; + } + + identity atm { + base encapsulation-type; + description + "Base identity from which specific ATM + encapsulation types are derived."; + + } + + identity pwe3 { + base encapsulation-type; + description + "Base identity from which specific pw + encapsulation types are derived."; + } + + /* + * Groupings + */ + + grouping l2-network-type { + description "Identify the topology type to be L2."; + container l2-network { + presence "indicates L2 Network"; + description + "The presence of the container node indicates + L2 Topology"; + } + } + + grouping l2-network-attributes { + description "L2 Topology scope attributes"; + container l2-network-attributes { + description "Containing L2 network attributes"; + leaf name { + type string; + description "Name of the L2 network"; + } + + leaf-list flag { + type flag-type; + description "L2 network flags"; + } + } + } + + grouping l2-node-attributes { + description "L2 node attributes"; + container l2-node-attributes { + description "Containing L2 node attributes"; + leaf name { + type string; + description "Node name"; + } + leaf description { + type string; + description "Node description"; + } + leaf-list management-address { + type inet:ip-address; + description "System management address"; + } + leaf sys-mac-address { + type yang:mac-address; + description "System MAC-address"; + } + leaf management-vid { + if-feature VLAN; + type vlan; + description "System management VID"; + } + leaf-list nick-name { + if-feature TRILL; + type trill-nickname; + description "Nickname of the RBridge"; + } + leaf-list vn-id { + if-feature VXLAN; + type vni; + description "VNI of the VxLAN"; + } + leaf-list flag { + type flag-type; + description "Node operational flags"; + } + } + } // grouping l2-node-attributes + + grouping l2-link-attributes { + description "L2 link attributes"; + container l2-link-attributes { + description "Containing L2 link attributes"; + leaf name { + type string; + description "Link name"; + } + leaf-list flag { + type flag-type; + description "Link flags"; + } + leaf rate { + type decimal64 { + fraction-digits 2; + } + description "Link rate"; + + } + leaf delay { + type uint32; + description "Link delay in microseconds"; + } + leaf-list srlg { + type uint32; + description + "List of Shared Risk Link Groups + this link belongs to."; + } + } + } // grouping l2-link-attributes + grouping l2-termination-point-attributes { + description "L2 termination point attributes"; + container l2-termination-point-attributes { + description "Containing L2 TP attributes"; + leaf description { + type string; + description "Port description"; + } + + leaf maximum-frame-size { + type uint32; + description "Maximum frame size"; + } + + choice l2-termination-point-type { + description + "Indicates termination-point type + specific attributes"; + case ethernet { + leaf mac-address { + type yang:mac-address; + description "Interface MAC address"; + } + + leaf eth-encapsulation { + type identityref { + base eth-encapsulation-type; + } + description + "Encapsulation type of this + ternimation point."; + } + + leaf port-vlan-id { + if-feature VLAN; + type vlan; + description "Port VLAN ID"; + } + + list vlan-id-name { + if-feature VLAN; + key "vlan-id"; + description "Interface configured VLANs"; + leaf vlan-id { + type vlan; + description "VLAN ID"; + } + leaf vlan-name { + type string; + description "VLAN Name"; + } + } + } //case ethernet + + case legacy { + leaf layer-2-address { + type yang:phys-address; + description "Interface Layer 2 address"; + } + + leaf encapsulation { + type identityref { + base encapsulation-type; + } + description + "Encapsulation type of this termination point."; + } + } //case legacy + + } //choice termination-point-type + + leaf tp-state { + type enumeration { + enum in-use { + value 0; + description + "the termination point is in forwarding state"; + } + enum blocking { + value 1; + description + "the termination point is in blocking state"; + } + enum down { + value 2; + description + "the termination point is in down state"; + } + enum others { + value 3; + description + "the termination point is in other state"; + } + } + config false; + description "State of the termination point"; + } + } + } // grouping l2-termination-point-attributes + + /* + * Data nodes + */ + + augment "/nw:networks/nw:network/nw:network-types" { + description + "Introduce new network type for L2 topology"; + uses l2-network-type; + } + + augment "/nw:networks/nw:network" { + when "/nw:networks/nw:network/nw:network-types/l2t:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Configuration parameters for the L2 network + as a whole"; + uses l2-network-attributes; + } + + augment "/nw:networks/nw:network/nw:node" { + when "/nw:networks/nw:network/nw:network-types/l2t:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Configuration parameters for L2 at the node + level"; + uses l2-node-attributes; + } + + augment "/nw:networks/nw:network/nt:link" { + when "/nw:networks/nw:network/nw:network-types/l2t:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description "Augment L2 topology link information"; + uses l2-link-attributes; + } + augment "/nw:networks/nw:network/nw:node/nt:termination-point" { + when "/nw:networks/nw:network/nw:network-types/l2t:l2-network" { + description + "Augmentation parameters apply only for networks + with L2 topology"; + } + description + "Augment L2 topology termination point information"; + uses l2-termination-point-attributes; + } + + /* + * Notifications + */ + + notification l2-node-event { + description "Notification event for L2 node"; + leaf event-type { + type l2-network-event-type; + description "Event type"; + } + uses nw:node-ref; + uses l2-network-type; + uses l2-node-attributes; + } + + notification l2-link-event { + description "Notification event for L2 link"; + leaf event-type { + type l2-network-event-type; + description "Event type"; + } + uses nt:link-ref; + uses l2-network-type; + uses l2-link-attributes; + } + + notification l2-termination-point-event { + description "Notification event for L2 termination point"; + leaf event-type { + type l2-network-event-type; + description "Event type"; + } + uses nt:tp-ref; + uses l2-network-type; + uses l2-termination-point-attributes; + } + +} // module l2-topology diff --git a/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2017-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2018-02-28.yang similarity index 64% rename from experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2017-07-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2018-02-28.yang index a7e98329f..a585f8a68 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2017-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology-state@2018-02-28.yang @@ -7,10 +7,10 @@ module ietf-l3-te-topology-state { prefix "l3tet"; } import ietf-network-state { - prefix "nd-s"; + prefix "nw-s"; } import ietf-network-topology-state { - prefix "lnk-s"; + prefix "nt-s"; } import ietf-l3-unicast-topology-state { prefix "l3t-s"; @@ -20,51 +20,54 @@ module ietf-l3-te-topology-state { contact "TBD"; description "L3 TE Topology model"; - revision 2017-07-03 { + revision 2018-02-28 { description "Initial revision"; reference "TBD"; } - augment "/nd-s:networks/nd-s:network/nd-s:network-types/" + augment "/nw-s:networks/nw-s:network/nw-s:network-types/" + "l3t-s:l3-unicast-topology" { description "Defines the L3 TE topology type."; uses l3tet:l3-te-topology-type; } - augment "/nd-s:networks/nd-s:network/" + augment "/nw-s:networks/nw-s:network/" + "l3t-s:l3-topology-attributes" { - when "../nd-s:network-types/l3t-s:l3-unicast-topology/l3-te" { + when "../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "l3tet-s:l3-te" { description "Augment only for L3 TE topology"; } description "Augment topology configuration"; uses l3tet:l3-te-topology-attributes; } - augment "/nd-s:networks/nd-s:network/nd-s:node/" + augment "/nw-s:networks/nw-s:network/nw-s:node/" + "l3t-s:l3-node-attributes" { - when "../../nd-s:network-types/l3t-s:l3-unicast-topology/l3-te" { + when "../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "l3tet-s:l3-te" { description "Augment only for L3 TE topology"; } description "Augment node configuration"; uses l3tet:l3-te-node-attributes; } - augment "/nd-s:networks/nd-s:network/nd-s:node/" - + "lnk-s:termination-point/" + augment "/nw-s:networks/nw-s:network/nw-s:node/" + + "nt-s:termination-point/" + "l3t-s:l3-termination-point-attributes" { - when "../../../nd-s:network-types/l3t-s:l3-unicast-topology/" - + "l3-te" { + when "../../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "l3tet-s:l3-te" { description "Augment only for L3 TE topology"; } description "Augment termination point configuration"; uses l3tet:l3-te-tp-attributes; } - augment "/nd-s:networks/nd-s:network/lnk-s:link/" + augment "/nw-s:networks/nw-s:network/nt-s:link/" + "l3t-s:l3-link-attributes" { - when "../../nd-s:network-types/l3t-s:l3-unicast-topology/l3-te" { + when "../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "l3tet-s:l3-te" { description "Augment only for L3 TE topology"; } description "Augment link configuration"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2017-07-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2018-02-28.yang similarity index 70% rename from experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2017-07-03.yang rename to experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2018-02-28.yang index 3b82b70c2..42635febc 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2017-07-03.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-l3-te-topology@2018-02-28.yang @@ -3,10 +3,10 @@ module ietf-l3-te-topology { namespace "urn:ietf:params:xml:ns:yang:ietf-l3-te-topology"; prefix "l3tet"; import ietf-network { - prefix "nd"; + prefix "nw"; } import ietf-network-topology { - prefix "lnk"; + prefix "nt"; } import ietf-l3-unicast-topology { prefix "l3t"; @@ -19,7 +19,7 @@ module ietf-l3-te-topology { contact "TBD"; description "L3 TE Topology model"; - revision 2017-07-03 { + revision 2018-02-28 { description "Initial revision"; reference "TBD"; @@ -35,41 +35,43 @@ module ietf-l3-te-topology { } } - augment "/nd:networks/nd:network/nd:network-types/" + augment "/nw:networks/nw:network/nw:network-types/" + "l3t:l3-unicast-topology" { description "Defines the L3 TE topology type."; uses l3-te-topology-type; } - augment "/nd:networks/nd:network/l3t:l3-topology-attributes" { - when "../nd:network-types/l3t:l3-unicast-topology/l3-te" { + augment "/nw:networks/nw:network/l3t:l3-topology-attributes" { + when "../nw:network-types/l3t:l3-unicast-topology/l3tet:l3-te" { description "Augment only for L3 TE topology"; } description "Augment topology configuration"; uses l3-te-topology-attributes; } - augment "/nd:networks/nd:network/nd:node/l3t:l3-node-attributes" { - when "../../nd:network-types/l3t:l3-unicast-topology/l3-te" { + augment "/nw:networks/nw:network/nw:node/l3t:l3-node-attributes" { + when "../../nw:network-types/l3t:l3-unicast-topology/" + + "l3tet:l3-te" { description "Augment only for L3 TE topology"; } description "Augment node configuration"; uses l3-te-node-attributes; } - augment "/nd:networks/nd:network/nd:node/lnk:termination-point/" + augment "/nw:networks/nw:network/nw:node/nt:termination-point/" + "l3t:l3-termination-point-attributes" { - when "../../../nd:network-types/l3t:l3-unicast-topology/" - + "l3-te" { + when "../../../nw:network-types/l3t:l3-unicast-topology/" + + "l3tet:l3-te" { description "Augment only for L3 TE topology"; } description "Augment termination point configuration"; uses l3-te-tp-attributes; } - augment "/nd:networks/nd:network/lnk:link/l3t:l3-link-attributes" { - when "../../nd:network-types/l3t:l3-unicast-topology/l3-te" { + augment "/nw:networks/nw:network/nt:link/l3t:l3-link-attributes" { + when "../../nw:network-types/l3t:l3-unicast-topology/" + + "l3tet:l3-te" { description "Augment only for L3 TE topology"; } description "Augment link configuration"; @@ -79,8 +81,8 @@ module ietf-l3-te-topology { grouping l3-te-topology-attributes { description "L3 TE topology scope attributes"; container l3-te-topology-attributes { - must "/nd:networks/nd:network" - + "[nd:network-id = current()/network-ref]/nd:network-types/" + must "/nw:networks/nw:network" + + "[nw:network-id = current()/network-ref]/nw:network-types/" + "tet:te-topology" { error-message "The referenced network must be a TE topology."; @@ -88,15 +90,15 @@ module ietf-l3-te-topology { "The referenced network must be a TE topology."; } description "Containing TE topology references"; - uses nd:network-ref; + uses nw:network-ref; } // l3-te-topology-attributes } // l3-te-topology-attributes grouping l3-te-node-attributes { description "L3 TE node scope attributes"; container l3-te-node-attributes { - must "/nd:networks/nd:network" - + "[nd:network-id = current()/network-ref]/nd:network-types/" + must "/nw:networks/nw:network" + + "[nw:network-id = current()/network-ref]/nw:network-types/" + "tet:te-topology" { error-message "The referenced network must be a TE topology."; @@ -104,15 +106,15 @@ module ietf-l3-te-topology { "The referenced network must be a TE topology."; } description "Containing TE node references"; - uses nd:node-ref; + uses nw:node-ref; } // l3-te } // l3-te-node-attributes grouping l3-te-tp-attributes { description "L3 TE termination point scope attributes"; container l3-te-tp-attributes { - must "/nd:networks/nd:network" - + "[nd:network-id = current()/network-ref]/nd:network-types/" + must "/nw:networks/nw:network" + + "[nw:network-id = current()/network-ref]/nw:network-types/" + "tet:te-topology" { error-message "The referenced network must be a TE topology."; @@ -120,15 +122,15 @@ module ietf-l3-te-topology { "The referenced network must be a TE topology."; } description "Containing TE termination point references"; - uses lnk:tp-ref; + uses nt:tp-ref; } // l3-te } // l3-te-tp-attributes grouping l3-te-link-attributes { description "L3 TE link scope attributes"; container l3-te-link-attributes { - must "/nd:networks/nd:network" - + "[nd:network-id = current()/network-ref]/nd:network-types/" + must "/nw:networks/nw:network" + + "[nw:network-id = current()/network-ref]/nw:network-types/" + "tet:te-topology" { error-message "The referenced network must be a TE topology."; @@ -136,7 +138,7 @@ module ietf-l3-te-topology { "The referenced network must be a TE topology."; } description "Containing TE link references"; - uses lnk:link-ref; + uses nt:link-ref; } } // l3-te-link-attributes } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2015-11-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2018-03-05.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2015-11-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2018-03-05.yang index e2fc1a176..1afb78860 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2015-11-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-address-types@2018-03-05.yang @@ -12,13 +12,23 @@ module ietf-lisp-address-types { organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact - "lisp@ietf.org"; + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; description "This YANG module defines the LISP Canonical Address Formats (LCAF) for LISP. The module can be extended by vendors to define vendor-specific parameters. - Copyright (c) 2014 IETF Trust and the persons identified as + 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 @@ -28,11 +38,15 @@ module ietf-lisp-address-types { Relating to IETF Documents (http://trustee.ietf.org/license-info). - This version of this YANG module is part of RFC 6338; see + This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - revision 2015-11-05 { + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; + + revision 2018-03-05 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2017-07-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2018-03-05.yang similarity index 89% rename from experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2017-07-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2018-03-05.yang index 76eb32323..0bfb2f05a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2017-07-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-etr@2018-03-05.yang @@ -13,13 +13,23 @@ module ietf-lisp-etr { organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact - "lisp@ietf.org"; + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; description "This YANG module defines the generic parameters for a LISP ETR. The module can be extended by vendors to define vendor-specific parameters and policies. - Copyright (c) 2015 IETF Trust and the persons identified as + 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 @@ -29,10 +39,14 @@ module ietf-lisp-etr { Relating to IETF Documents (http://trustee.ietf.org/license-info). - This version of this YANG module is part of RFC 6338; see + This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - revision 2017-07-01 { + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; + + revision 2018-03-05 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2018-03-05.yang new file mode 100644 index 000000000..0ef554821 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-itr@2018-03-05.yang @@ -0,0 +1,127 @@ +module ietf-lisp-itr { + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-itr"; + prefix lisp-itr; + import ietf-lisp { + prefix lisp; + } + import ietf-inet-types { + prefix inet; + } + organization + "IETF LISP (Locator/ID Separation Protocol) Working Group"; + contact + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; + description + "This YANG module defines the generic parameters for a LISP + ITR. The module can be extended by vendors to define + vendor-specific parameters and policies. + + 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 + (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. + "; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; + + revision 2018-03-05 { + description + "Initial revision."; + reference + "https://tools.ietf.org/html/rfc6830"; + } + augment "/lisp:lisp/lisp:lisp-router-instances/lisp:lisp-router-instance" { + when "lisp:lisp-role/lisp:lisp-role-type = 'lisp:itr' or + lisp:lisp-role/lisp:lisp-role-type = 'lisp:pitr'" { + description + "Augment is valid when LISP role type is ITR or PITR."; + } + description + "This augments LISP devices list with (P)ITR specific + parameters."; + container itr { + presence "LISP (P)ITR operation enabled"; + description + "ITR parameters"; + container rloc-probing { + presence "RLOC probing active"; + description + "RLOC-probing parameters"; + leaf interval { + type uint16; + units "seconds"; + description + "Interval in seconds for resending the probes"; + } + leaf retries { + type uint8; + description + "Number of retries for sending the probes"; + } + leaf retries-interval { + type uint16; + units "seconds"; + description + "Interval in seconds between retries when sending probes. + The action taken if all retries fail to receive is + impementation specific."; + } + } + leaf itr-rlocs { + type leafref { + path "/lisp:lisp/lisp:locator-sets/lisp:locator-set/" + + "lisp:locator-set-name"; + } + description + "Reference to a locator set that the (P)ITR includes in + Map-Requests"; + } + container map-resolvers { + description + "Map-Resolvers that the (P)ITR uses."; + leaf-list map-resolver { + type inet:ip-address; + min-elements 1; + description + "Each Map-Resolver within the list of Map-Resolvers."; + } + } + container proxy-etrs { + when "../../lisp:lisp-role/lisp:lisp-role-type = 'lisp:itr'" { + description + "Container exists only when LISP role type is ITR"; + } + description + "Proxy ETRs that the ITR uses."; + leaf-list proxy-etr-address{ + type inet:ip-address; + description + "Proxy ETR RLOC address."; + } + } + container map-cache{ + uses lisp:mappings; + description + "EID to RLOCs mappings cache."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2017-07-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2018-05-03.yang similarity index 78% rename from experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2017-07-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2018-05-03.yang index 49dcff2de..df5af1b89 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2017-07-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapresolver@2018-05-03.yang @@ -11,15 +11,24 @@ module ietf-lisp-mapresolver { organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact - "lisp@ietf.org"; + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; description "This YANG module defines the generic parameters for a LISP Map-Resolver. The module can be extended by vendors to define vendor-specific parameters and policies. - Copyright (c) 2015 IETF Trust and the persons identified as + 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 @@ -27,10 +36,14 @@ module ietf-lisp-mapresolver { Relating to IETF Documents (http://trustee.ietf.org/license-info). - This version of this YANG module is part of RFC 6338; see + This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; - revision 2017-07-01 { + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; + + revision 2018-05-03 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapserver@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapserver@2018-03-05.yang new file mode 100644 index 000000000..96698855a --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp-mapserver@2018-03-05.yang @@ -0,0 +1,255 @@ +module ietf-lisp-mapserver { + namespace "urn:ietf:params:xml:ns:yang:ietf-lisp-mapserver"; + prefix lisp-ms; + import ietf-lisp { + prefix lisp; + } + import ietf-lisp-address-types { + prefix lcaf; + } + import ietf-yang-types { + prefix yang; + revision-date 2013-07-15; + } + + organization + "IETF LISP (Locator/ID Separation Protocol) Working Group"; + contact + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; + description + "This YANG module defines the generic parameters for a LISP + Map-Server. The module can be extended by vendors to define + vendor-specific parameters and policies. + + 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 + (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. + "; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; + + revision 2018-03-05 { + description + "Initial revision."; + reference + "https://tools.ietf.org/html/rfc6833"; + } + + identity ms { + base lisp:lisp-role; + description + "LISP Map-Server."; + } + + grouping ms-counters { + description "Group that defines map-server counters."; + container counters { + config false; + description "Container for the counters"; + leaf map-registers-in { + type yang:counter64; + description "Number of incoming Map-Register messages"; + } + + leaf map-registers-in-auth-failed { + type yang:counter64; + description + "Number of incoming Map-Register messages failed + authentication"; + } + + leaf map-notify-records-out { + type yang:counter64; + description + "Number of outgoing Map-Notify records"; + } + + leaf proxy-reply-records-out { + type yang:counter64; + description + "Number of outgoing proxy Map-Reply records"; + } + + leaf map-requests-forwarded-out { + type yang:counter64; + description + "Number of outgoing Map-Requests forwarded to ETR"; + } + } + } + + augment "/lisp:lisp/lisp:lisp-router-instances" + + "/lisp:lisp-router-instance" { + when "lisp:lisp-role/lisp:lisp-role-type = 'lisp-ms:ms'" { + description + "Augment is valid when LISP device type is Map-Server."; + } + description + "This augments LISP devices list with Map-Server specific + parameters."; + container map-server { + presence "LISP Map-Server operation enabled"; + description + "Map-Server parameters."; + container sites{ + description + "Sites to accept registrations from."; + list site { + key site-id; + description + "Site that can send registrations."; + leaf site-id { + type uint64; + description "Site ID"; + } + container auth-key { + description + "Site authentication key."; + leaf auth-key-value { + type string; + description + "Clear text authentication key"; + } + leaf-list auth-key-type { + type lisp:auth-key-type; + description + "Authentication key type."; + } + } + } + } + container virtual-network-ids { + description + "Sites for which the Map-Server accepts registrations."; + list virtual-network-identifier { + key "vni"; + description + "Virtual network instances in the Map-Server."; + leaf vni { + type lcaf:instance-id-type; + description + "Virtual network identifier."; + } + container mappings { + description + "EIDs registered by device."; + list mapping { + key "eid-id"; + description + "List of EIDs registered by device."; + leaf eid-id { + type lisp:eid-id; + description + "Id of the EID registered."; + } + container eid-address { + uses lcaf:lisp-address; + description + "EID in generic LISP address format registered + with the Map-Server."; + } + leaf-list site-id { + type uint64; + description "Site ID"; + } + leaf more-specifics-accepted { + type boolean; + default "false"; + description + "Flag indicating if more specific prefixes + can be registered."; + } + leaf mapping-expiration-timeout { + type int16; + units "seconds"; + default "180"; //3 times the mapregister int + description + "Time before mapping is expired if no new + registrations are received."; + } + container mapping-records { + description + "Datastore of registered mappings."; + list mapping-record{ + key xtr-id; + description + "Registered mapping."; + leaf xtr-id { + type lisp:xtr-id-type; + description "xTR ID"; + } + leaf site-id { + type uint64; + description "Site ID"; + } + uses lisp:mapping; + } + } + } + } + uses ms-counters; + } + } + leaf mapping-system-type { + type lisp:mapping-system-ref; + description + "A reference to the mapping system"; + } + + container summary { + config false; + description "Summary state information"; + + leaf number-configured-sites { + type uint32; + description "Number of configured LISP sites"; + } + leaf number-registered-sites { + type uint32; + description "Number of registered LISP sites"; + } + container af-datum { + description "Number of configured EIDs per each AF"; + + list af-data { + key "address-type"; + description "Number of configured EIDs for this AF"; + leaf address-type { + type lcaf:lisp-address-family-ref; + description "AF type"; + } + leaf number-configured-eids { + type uint32; + description "Number of configured EIDs for this AF"; + } + leaf number-registered-eids { + type uint32; + description "Number of registered EIDs for this AF"; + } + } + } + } + uses ms-counters; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lisp@2017-07-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-lisp@2018-03-05.yang similarity index 94% rename from experimental/ietf-extracted-YANG-modules/ietf-lisp@2017-07-01.yang rename to experimental/ietf-extracted-YANG-modules/ietf-lisp@2018-03-05.yang index e563cdd78..c908ef720 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lisp@2017-07-01.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lisp@2018-03-05.yang @@ -13,13 +13,23 @@ module ietf-lisp { organization "IETF LISP (Locator/ID Separation Protocol) Working Group"; contact - "lisp@ietf.org"; + "WG Web: + WG List: + + Editor: Vina Ermagan + + + Editor: Alberto Rodriguez-Natal + + + Editor: Reshad Rahman + "; description "This YANG module defines the generic parameters for LISP. The module can be extended by vendors to define vendor-specific LISP parameters and policies. - Copyright (c) 2014 IETF Trust and the persons identified as + 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 @@ -29,11 +39,14 @@ module ietf-lisp { Relating to IETF Documents (http://trustee.ietf.org/license-info). - This version of this YANG module is part of RFC 6338; see + This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices. "; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + reference "RFC XXXX"; - revision 2017-07-01 { + revision 2018-03-05 { description "Initial revision."; reference @@ -218,6 +231,7 @@ module ietf-lisp { uses locator-properties; } } + grouping mapping { description "Group that defines a LISP mapping."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-lspping@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-lspping@2018-03-01.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-lspping@2017-10-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-lspping@2018-03-01.yang index 33e04a987..8bf4f2b47 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-lspping@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-lspping@2018-03-01.yang @@ -10,12 +10,12 @@ module ietf-lspping { prefix yang; } - organization "IETF Multiprotocl Label Switching Working Group"; + organization "IETF Multiprotocol Label Switching Working Group"; contact "draft-zheng-mpls-lsp-ping-yang-cfg"; description "MPLS LSP-Ping YANG Module"; - revision "2017-10-29" { - description "06 version, refine the target fec type, - as per RFC8029"; + revision "2018-03-01" { + description "07 version, refine the target fec type, + as per RFC8029 and update Security Considerations section"; reference "draft-zheng-mpls-lsp-ping-yang-cfg"; } @@ -113,7 +113,7 @@ module ietf-lspping { type enumeration { enum success { value "1"; - description "The test probe is successed."; + description "The test probe is successful."; } enum fail { value "2"; @@ -160,7 +160,11 @@ module ietf-lspping { } case rsvp { leaf tunnel-interface { - type uint32; + type union { + type uint32; + + type string; + } description "Tunnel interface"; } } @@ -435,7 +439,7 @@ module ietf-lspping { leaf sum-of-squares { type uint32; description "The sum of the squares for all - replys received."; + replies received."; } leaf last-good-probe { type yang:date-and-time; @@ -450,23 +454,28 @@ module ietf-lspping { description "Result info of each test probe."; leaf probe-index { type uint32; + config false; description "Probe index"; } leaf return-code { type uint8; + config false; description "The Return Code set in the echo reply."; } leaf return-sub-code { type uint8; + config false; description "The Return Sub-code set in the echo reply."; } leaf rtt { type uint32; + config false; description "The round-trip-time (RTT) received."; } leaf result-type { type result-type; + config false; description "The probe result type."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-microwave-radio-link@2018-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-microwave-radio-link@2018-03-03.yang new file mode 100644 index 000000000..c45d90ea7 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-microwave-radio-link@2018-03-03.yang @@ -0,0 +1,1168 @@ +module ietf-microwave-radio-link { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-microwave-radio-link"; + prefix mrl; + + import ietf-yang-types { + prefix yang; + reference "RFC 6991"; + } + + import ietf-interfaces { + prefix if; + reference "RFC 7223bis"; + // RFC Ed.: replace 7223bis with actual RFC number and remove + // this note + } + import ietf-interface-protection { + prefix ifprot; + reference "RFC XXXX"; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + } + + import iana-if-type { + prefix ianaift; + reference "RFC 7224"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + + contact + "WG List: + + ID-draft editors: + Jonas Ahlberg (jonas.ahlberg@ericsson.com); + Min Ye (amy.yemin@huawei.com); + Xi Li (Xi.Li@neclab.eu); + Daniela Spreafico (daniela.spreafico@nokia.com) + Marko Vaupotic (Marko.Vaupotic@aviatnet.com)"; + + description + "This is a module for the entities in + a generic microwave system. + + 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 + (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. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved."; + + revision 2018-03-03 { + description "Initial revision."; + reference "RFC XXXX: A YANG Data Model for Microwave Radio Link"; + // RFC Ed.: replace XXXX with actual RFC number and remove + // this note + } + /* + * Features + */ + + feature xpic { + description + "Indicates that the device supports XPIC."; + reference "ETSI TR 102 311"; + } + + feature mimo { + description + "Indicates that the device supports MIMO."; + reference "ETSI TR 102 311"; + } + + feature tdm { + description + "Indicates that the device supports TDM."; + } + + /* + * Interface identities + */ + + identity radio-link-terminal { + base ianaift:iana-interface-type; + description + "Interface identity for a radio link terminal."; + } + + identity carrier-termination { + base ianaift:iana-interface-type; + description + "Interface identity for a carrier termination."; + } + + /* + * Radio-link-terminal mode identities + */ + + identity rlt-mode { + description + "A description of the mode in which the radio link + terminal is configured. The format is X plus Y. + X represent the number of bonded carrier terminations. + Y represent the number of protecting carrier + terminations."; + } + + identity one-plus-zero { + base rlt-mode; + description + "1 carrier termination only."; + } + + identity one-plus-one { + base rlt-mode; + description + "1 carrier termination + and 1 protecting carrier termination."; + } + + identity two-plus-zero { + base rlt-mode; + description + "2 bonded carrier terminations."; + } + + /* + * Coding and modulation identities + */ + + identity coding-modulation { + description + "The coding and modulation schemes."; + } + + identity half-bpsk-strong { + base coding-modulation; + description + "Half BPSK strong coding and modulation scheme."; + } + + identity half-bpsk { + base coding-modulation; + description + "Half BPSK coding and modulation scheme."; + } + + identity half-bpsk-light { + base coding-modulation; + description + "Half BPSK light coding and modulation scheme."; + } + + identity bpsk-strong { + base coding-modulation; + description + "BPSK strong coding and modulation scheme."; + } + identity bpsk { + base coding-modulation; + description + "BPSK coding and modulation scheme."; + } + + identity bpsk-light { + base coding-modulation; + description + "BPSK light coding and modulation scheme."; + } + + identity qpsk { + base coding-modulation; + description + "QPSK coding and modulation scheme."; + } + + identity qam-4-strong { + base coding-modulation; + description + "4 QAM strong coding and modulation scheme."; + } + + identity qam-4 { + base coding-modulation; + description + "4 QAM coding and modulation scheme."; + } + + identity qam-4-light { + base coding-modulation; + description + "4 QAM light coding and modulation scheme."; + } + + identity qam-16-strong { + base coding-modulation; + description + "16 QAM strong coding and modulation scheme."; + } + + identity qam-16 { + base coding-modulation; + description + "16 QAM coding and modulation scheme."; + } + + identity qam-16-light { + base coding-modulation; + description + "16 QAM light coding and modulation scheme."; + } + + identity qam-32-strong { + base coding-modulation; + description + "32 QAM strong coding and modulation scheme."; + } + + identity qam-32 { + base coding-modulation; + description + "32 QAM coding and modulation scheme."; + } + + identity qam-32-light { + base coding-modulation; + description + "32 QAM light coding and modulation scheme."; + } + + identity qam-64-strong { + base coding-modulation; + description + "64 QAM strong coding and modulation scheme."; + } + + identity qam-64 { + base coding-modulation; + description + "64 QAM coding and modulation scheme."; + } + + identity qam-64-light { + base coding-modulation; + description + "64 QAM light coding and modulation scheme."; + } + + identity qam-128-strong { + base coding-modulation; + description + "128 QAM strong coding and modulation scheme."; + } + + identity qam-128 { + base coding-modulation; + description + "128 QAM coding and modulation scheme."; + } + + identity qam-128-light { + base coding-modulation; + description + "128 QAM light coding and modulation scheme."; + } + + identity qam-256-strong { + base coding-modulation; + description + "256 QAM strong coding and modulation scheme."; + } + + identity qam-256 { + base coding-modulation; + description + "256 QAM coding and modulation scheme."; + } + + identity qam-256-light { + base coding-modulation; + description + "256 QAM light coding and modulation scheme."; + } + + identity qam-512-strong { + base coding-modulation; + description + "512 QAM strong coding and modulation scheme."; + } + + identity qam-512 { + base coding-modulation; + description + "512 QAM coding and modulation scheme."; + } + + identity qam-512-light { + base coding-modulation; + description + "512 QAM light coding and modulation scheme."; + } + + identity qam-1024-strong { + base coding-modulation; + description + "1024 QAM strong coding and modulation scheme."; + } + + identity qam-1024 { + base coding-modulation; + description + "1024 QAM coding and modulation scheme."; + } + + identity qam-1024-light { + base coding-modulation; + description + "1024 QAM light coding and modulation scheme."; + } + + identity qam-2048-strong { + base coding-modulation; + description + "2048 QAM strong coding and modulation scheme."; + } + + identity qam-2048 { + base coding-modulation; + description + "2048 QAM coding and modulation scheme."; + } + + identity qam-2048-light { + base coding-modulation; + description + "2048 QAM light coding and modulation scheme."; + } + + identity qam-4096-strong { + base coding-modulation; + description + "4096 QAM strong coding and modulation scheme."; + } + + identity qam-4096 { + base coding-modulation; + description + "4096 QAM coding and modulation scheme."; + } + + identity qam-4096-light { + base coding-modulation; + description + "4096 QAM light coding and modulation scheme."; + } + + /* + * TDM-type identities + */ + + identity tdm-type { + description + "A description of the type of TDM connection, + also indicating the supported capacity of the + connection."; + } + + identity E1 { + base tdm-type; + description + "E1 connection, 2,048 Mbit/s."; + } + + identity STM-1 { + base tdm-type; + description + "STM-1 connection, 155,52 Mbit/s."; + } + + /* + * Typedefs + */ + + typedef power { + type decimal64 { + fraction-digits 1; + } + description + "Type used for power values, selected and measured."; + } + + /* + * Radio Link Terminal (RLT) + */ + + augment "/if:interfaces/if:interface" { + when "if:type = 'mrl:radio-link-terminal'"; + description + "Addition of data nodes for radio link terminal to + the standard Interface data model, for interfaces of + the type 'radio-link-terminal'."; + leaf id { + type string; + default ""; + description + "ID of the radio link terminal. Used by far-end when + checking that it's connected to the correct RLT."; + } + + leaf mode { + type identityref { + base rlt-mode; + } + mandatory true; + description + "A description of the mode in which the radio link + terminal is configured. The format is X plus Y. + X represent the number of bonded carrier terminations. + Y represent the number of protecting carrier + terminations."; + } + + leaf-list carrier-terminations { + type if:interface-ref; + must "/if:interfaces/if:interface[if:name = current()]" + + "/if:type = 'mrl:carrier-termination'" { + description + "The type of interface must be + 'carrier-termination'."; + } + min-elements 1; + description + "A list of references to carrier terminations + included in the radio link terminal."; + } + + leaf-list rlp-groups { + type leafref { + path "/mrl:radio-link-protection-groups/" + + "mrl:protection-group/mrl:name"; + } + description + "A list of references to the carrier termination + groups configured for radio link protection in this + radio link terminal."; + } + + leaf-list xpic-pairs { + if-feature xpic; + type leafref { + path "/mrl:xpic-pairs/mrl:xpic-pair/mrl:name"; + } + description + "A list of references to the XPIC pairs used in this + radio link terminal. One pair can be used by two + terminals."; + reference "ETSI TR 102 311"; + } + + leaf-list mimo-groups { + if-feature mimo; + type leafref { + path "/mrl:mimo-groups/mrl:mimo-group/mrl:name"; + } + description + "A reference to the MIMO group used in this + radio link terminal. One group can be used by more + than one terminal."; + reference "ETSI TR 102 311"; + } + + list tdm-connections { + if-feature tdm; + key "tdm-type"; + description + "A list stating the number of active TDM connections + of a specified tdm-type that is configured to be + supported by the RLT."; + leaf tdm-type { + type identityref { + base tdm-type; + } + description + "The type of TDM connection, which also indicates + the supported capacity."; + } + leaf tdm-connections { + type uint16; + mandatory true; + description + "Number of connections of the specified type."; + } + } + } + + /* + * Carrier Termination + */ + augment "/if:interfaces/if:interface" { + when "if:type = 'mrl:carrier-termination'"; + description + "Addition of data nodes for carrier termination to + the standard Interface data model, for interfaces + of the type 'carrier-termination'."; + + leaf carrier-id { + type string; + default "A"; + description + "ID of the carrier. (e.g. A, B, C or D) + Used in XPIC & MIMO configurations to check that + the carrier termination is connected to the correct + far-end carrier termination. Should be the same + carrier ID on both sides of the hop. + Defaulted when not MIMO or XPIC."; + } + + leaf tx-enabled { + type boolean; + default "false"; + description + "Disables (false) or enables (true) the transmitter. + Only applicable when the interface is enabled + (interface:enabled = true) otherwise it's always + disabled."; + } + + leaf tx-oper-status { + type enumeration { + enum "off" { + description "Transmitter is off."; + } + enum "on" { + description "Transmitter is on."; + } + enum "standby" { + description "Transmitter is in standby."; + } + } + config false; + description + "Shows the operative status of the transmitter."; + } + + leaf tx-frequency { + type uint32; + units "kHz"; + mandatory true; + description + "Selected transmitter frequency."; + } + + leaf rx-frequency { + type uint32; + units "kHz"; + description + "Selected receiver frequency. + Overrides existing value in duplex-distance. + Calculated from tx-frequency and duplex-distance if + only duplex-distance is configured. + Must match duplex-distance if both leaves are + configured in a single operation."; + } + + leaf duplex-distance { + type uint32; + units "kHz"; + description + "Distance between Tx & Rx frequencies. + Used to calculate rx-frequency when + rx-frequency is not specifically configured. + Overrides existing value in rx-frequency. + Calculated from tx-frequency and rx-frequency if only + rx-frequency is configured. + Must match rx-frequency if both leaves are configured + in a single operation."; + } + + leaf channel-separation { + type uint32; + units "kHz"; + mandatory true; + description + "The amount of bandwidth allocated to a carrier. The distance + between adjacent channels in a radio frequency channels + arrangement"; + reference "ETSI EN 302 217-1"; + } + + leaf polarization { + type enumeration { + enum "horizontal" { + description "Horizontal polarization."; + } + enum "vertical" { + description "Vertical polarization."; + } + enum "not-specified" { + description "Polarization not specified."; + } + } + default "not-specified"; + description + "Polarization - A textual description for info only."; + } + + leaf power-mode { + type enumeration { + enum rtpc { + description + "Remote Transmit Power Control (RTPC)."; + reference "ETSI EN 302 217-1"; + } + + enum atpc { + description + "Automatic Transmit Power Control (ATPC)."; + reference "ETSI EN 302 217-1"; + } + } + mandatory true; + description + "A choice of Remote Transmit Power Control (RTPC) + or Automatic Transmit Power Control (ATPC)."; + } + + leaf maximum-nominal-power { + type power { + range "-99..40"; + } + units "dBm"; + mandatory true; + description + "Selected output power in RTPC mode and selected + maximum output power in ATPC mode. Minimum output + power in ATPC mode is the same as the system + capability, available-min-output-power."; + reference "ETSI EN 302 217-1"; + } + leaf atpc-lower-threshold { + when "../power-mode = 'atpc'"; + type power { + range "-99..-30"; + } + units "dBm"; + mandatory true; + description + "The lower threshold for the input power at far-end + used in the ATPC mode."; + reference "ETSI EN 302 217-1"; + } + + leaf atpc-upper-threshold { + when "../power-mode = 'atpc'"; + type power { + range "-99..-30"; + } + units "dBm"; + mandatory true; + description + "The upper threshold for the input power at far-end + used in the ATPC mode."; + reference "ETSI EN 302 217-1"; + } + + leaf actual-transmitted-level { + type power { + range "-99..40"; + } + units "dBm"; + config false; + description + "Actual transmitted power level (0.1 dBm resolution)."; + reference "ETSI EN 301 129"; + } + + leaf actual-received-level { + type power { + range "-99..-20"; + } + units "dBm"; + config false; + description + "Actual received power level (0.1 dBm resolution)."; + reference "ETSI EN 301 129"; + } + + leaf coding-modulation-mode { + type enumeration { + enum single { + description "a single modulation order only."; + reference "ETSI EN 302 217-1"; + } + enum adaptive { + description "Adaptive coding/modulation."; + reference "ETSI EN 302 217-1"; + } + } + mandatory true; + description + "A selection of single or + adaptive coding/modulation mode."; + } + + leaf selected-cm { + when "../coding-modulation-mode = 'single'"; + type identityref { + base coding-modulation; + } + mandatory true; + description + "Selected the single coding/modulation."; + } + + leaf selected-min-acm { + when "../coding-modulation-mode = 'adaptive'"; + type identityref { + base coding-modulation; + } + mandatory true; + description + "Selected minimum coding/modulation. + Adaptive coding/modulation shall not go + below this value."; + } + + leaf selected-max-acm { + when "../coding-modulation-mode = 'adaptive'"; + type identityref { + base coding-modulation; + } + mandatory true; + description + "Selected maximum coding/modulation. + Adaptive coding/modulation shall not go + above this value."; + } + leaf actual-tx-cm { + type identityref { + base coding-modulation; + } + config false; + description + "Actual coding/modulation in transmitting direction."; + } + + leaf actual-snir { + type decimal64 { + fraction-digits 1; + range "0..99"; + } + units "dB"; + config false; + description + "Actual signal to noise plus interference ratio. + (0.1 dB resolution)."; + } + + leaf actual-xpi { + if-feature xpic; + type decimal64 { + fraction-digits 1; + range "0..99"; + } + units "dB"; + config false; + description + "The actual carrier to cross-polar interference. + Only valid if XPIC is enabled. (0.1 dB resolution)."; + reference "ETSI TR 102 311"; + } + + container ct-performance-thresholds { + description + "Specification of thresholds for when alarms should + be sent and cleared for various performance counters."; + + leaf received-level-alarm-threshold { + type power { + range "-99..-30"; + } + units "dBm"; + default "-99"; + description + "An alarm is sent when the received power level is + below the specified threshold."; + reference "ETSI EN 301 129"; + } + leaf transmitted-level-alarm-threshold { + type power { + range "-99..40"; + } + units "dBm"; + default "-99"; + description + "An alarm is sent when the transmitted power level + is below the specified threshold."; + reference "ETSI EN 301 129"; + } + + leaf ber-alarm-threshold { + type enumeration { + enum "10e-9" { + description "Threshold at 10e-9."; + } + enum "10e-8" { + description "Threshold at 10e-8."; + } + enum "10e-7" { + description "Threshold at 10e-7."; + } + enum "10e-6" { + description "Threshold at 10e-6."; + } + enum "10e-5" { + description "Threshold at 10e-5."; + } + enum "10e-4" { + description "Threshold at 10e-4."; + } + enum "10e-3" { + description "Threshold at 10e-3."; + } + enum "10e-2" { + description "Threshold at 10e-2."; + } + enum "10e-1" { + description "Threshold at 10e-1."; + } + } + default "10e-6"; + description + "Specification of at which BER an alarm should + be raised."; + reference "ETSI EN 302 217-1"; + } + } + + leaf if-loop { + type enumeration { + enum disabled { + description "Disables the IF Loop."; + } + enum client { + description + "Loops the signal back to the client side."; + } + enum radio { + description + "Loops the signal back to the radio side."; + } + } + default "disabled"; + description + "Enable (client/radio) or disable (disabled) + the IF loop, which loops the signal back to + the client side or the radio side."; + } + + leaf rf-loop { + type enumeration { + enum disabled { + description "Disables the RF Loop."; + } + enum client { + description + "Loops the signal back to the client side."; + } + enum radio { + description + "Loops the signal back to the radio side."; + } + } + default "disabled"; + description + "Enable (client/radio) or disable (disabled) + the RF loop, which loops the signal back to + the client side or the radio side."; + } + + container capabilities { + config false; + description + "Capabilities of the installed equipment and + some selected configurations."; + + leaf min-tx-frequency { + type uint32; + units "kHz"; + description + "Minimum Tx frequency possible to use."; + } + + leaf max-tx-frequency { + type uint32; + units "kHz"; + description + "Maximum Tx frequency possible to use."; + } + + leaf min-rx-frequency { + type uint32; + units "kHz"; + description + "Minimum Rx frequency possible to use."; + } + + leaf max-rx-frequency { + type uint32; + units "kHz"; + description + "Maximum Tx frequency possible to use."; + } + + leaf minimum-power { + type power; + units "dBm"; + description + "The minimum output power supported."; + reference "ETSI EN 302 217-1"; + } + + leaf maximum-available-power { + type power; + units "dBm"; + description + "The maximum output power supported."; + reference "ETSI EN 302 217-1"; + } + + leaf available-min-acm { + type identityref { + base coding-modulation; + } + description + "Minimum coding-modulation possible to use."; + } + leaf available-max-acm { + type identityref { + base coding-modulation; + } + description + "Maximum coding-modulation possible to use."; + } + } + + container error-performance-statistics { + config false; + description + "ITU-T G.826 error performance statistics relevant for + a microwave/millimeter wave carrier."; + + leaf bbe { + type yang:counter32; + units "number of block errors"; + description + "Number of Background Block Errors (BBE) during the + interval. A BBE is an errored block not occurring as + part of an SES."; + reference "ITU-T G.826"; + } + + leaf es { + type yang:counter32; + units "seconds"; + description + "Number of Errored Seconds (ES) since last reset. + An ES is a one-second period with one or more errored + blocks or at least one defect."; + reference "ITU-T G.826"; + } + + leaf ses { + type yang:counter32; + units "seconds"; + description + "Number of Severely Errored Seconds (SES) during the + interval. SES is a one-second period which contains + equal or more than 30% errored blocks or at least + one defect. SES is a subset of ES."; + reference "ITU-T G.826"; + } + + leaf uas { + type yang:counter32; + units "seconds"; + description + "Number of Unavailable Seconds (UAS), that is, the + total time that the node has been unavailable during + a fixed measurement interval."; + reference "ITU-T G.826"; + } + } + + container radio-performance-statistics { + config false; + description + "ETSI EN 301 129 radio physical interface statistics relevant + for a carrier termination."; + + leaf min-rltm { + type power { + range "-99..-20"; + } + units "dBm"; + description + "Minimum received power level since last reset."; + reference "ETSI EN 301 129"; + } + + leaf max-rltm { + type power { + range "-99..-20"; + } + units "dBm"; + description + "Maximum received power level since last reset."; + reference "ETSI EN 301 129"; + } + + leaf min-tltm { + type power { + range "-99..40"; + } + units "dBm"; + description + "Minimum transmitted power level since last reset."; + reference "ETSI EN 301 129"; + } + + leaf max-tltm { + type power { + range "-99..40"; + } + units "dBm"; + description + "Maximum transmitted power level since last reset."; + reference "ETSI EN 301 129"; + } + } + } + + /* + * Radio Link Protection Groups + */ + + container radio-link-protection-groups { + description + "Configuration of radio link protected groups (1+1) of + carrier terminations in a radio link. More than one + protected group per radio-link-terminal is allowed."; + + uses ifprot:protection-groups { + + refine protection-group/members { + must "/if:interfaces/if:interface[if:name = current()]" + + "/if:type = 'mrl:carrier-termination'" { + description + "The type of a protection member must be + 'carrier-termination'."; + } + } + + refine protection-group/working-entity { + must "/if:interfaces/if:interface[if:name = current()]" + + "/if:type = 'mrl:carrier-termination'" { + description + "The type of a working-entity must be + 'carrier-termination'."; + } + } + } + } + + /* + * XPIC & MIMO groups - Configuration data nodes + */ + + container xpic-pairs { + if-feature xpic; + description + "Configuration of carrier termination pairs + for operation in XPIC mode."; + reference "ETSI TR 102 311"; + + list xpic-pair { + key "name"; + description + "List of carrier termination pairs in XPIC mode."; + + leaf name { + type string; + description + "Name used for identification of the XPIC pair."; + } + + leaf enabled { + type boolean; + default "false"; + description + "Enable(true)/disable(false) XPIC"; + } + + leaf-list members { + type if:interface-ref; + must "/if:interfaces/if:interface[if:name = current()]" + + "/if:type = 'mrl:carrier-termination'" { + description + "The type of a member must be 'carrier-termination'."; + } + min-elements 2; + max-elements 2; + description + "Association to XPIC pairs used in the radio link + terminal."; + } + } + } + + container mimo-groups { + if-feature mimo; + description + "Configuration of carrier terminations + for operation in MIMO mode."; + reference "ETSI TR 102 311"; + + list mimo-group { + key "name"; + description + "List of carrier terminations in MIMO mode."; + leaf name { + type string; + description + "Name used for identification of the MIMO group."; + } + + leaf enabled { + type boolean; + default "false"; + description + "Enable(true)/disable(false) MIMO"; + } + + leaf-list members { + type if:interface-ref; + must "/if:interfaces/if:interface[if:name = current()]" + + "/if:type = 'mrl:carrier-termination'" { + description + "The type of a member must be 'carrier-termination'."; + } + min-elements 2; + description + "Association to a MIMO group if used in the radio + link terminal."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-microwave-topology@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-microwave-topology@2018-03-05.yang new file mode 100644 index 000000000..40905d52e --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-microwave-topology@2018-03-05.yang @@ -0,0 +1,121 @@ +module ietf-microwave-topology { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-microwave-topology"; + + prefix "mwtopo"; + + import ietf-network { + prefix "nw"; + } + + import ietf-network-topology { + prefix "nt"; + } + + import ietf-te-topology { + prefix "tet"; + } + + import ietf-routing-types { + prefix "rt-types"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + " + WG List: + + ID-draft authors: + Min Ye (amy.yemin@huawei.com); + Aihua Guo (aihuaguo@huawei.com); + Jonas Ahlberg (jonas.ahlberg@ericsson.com); + Xi Li (Xi.Li@neclab.eu); + Daniela Spreafico (daniela.spreafico@nokia.com) + "; + + description + "This is a module for microwave topology."; + + revision 2018-03-05 { + description + "Initial version."; + reference ""; + } + + /* + * Groupings + */ + grouping mw-link-attributes { + description "Microwave link attributes"; + + leaf mw-link-frequency { + type uint32; + units "kHz"; + description "Frequency of the link"; + } + + leaf mw-link-channel-separation { + type uint32; + units "kHz"; + description "The distance + between adjacent channels in a radio frequency channel + arrangement used in this link"; + reference "ETSI EN 302 217-1"; + } + + leaf mw-link-nominal-bandwidth { + type rt-types:bandwidth-ieee-float32; + units "Mbps"; + description "The nominal bandwidth of the link"; + } + + leaf mw-link-current-bandwidth { + type rt-types:bandwidth-ieee-float32; + units "Mbps"; + description "The current bandwidth of the link"; + } + + list mw-link-availability{ + key "availability"; + description "List of availability and its corresponding + link bandwidth"; + + leaf availability { + type rt-types:percentage; + description "availability level of the link"; + } + + leaf mw-link-bandwidth { + type rt-types:bandwidth-ieee-float32; + units "Mbps"; + description "the bandwidth corresponding to the + availability level"; + } + } + } + + /* + * Data nodes + */ + augment "/nw:networks/nw:network/nw:network-types/" + + "tet:te-topology" { + container mw-topology { + presence "indicates a topology type of microwave."; + description "microwave topology type"; + } + description "augment network types to include microwave network"; + } + + augment "/nw:networks/nw:network/nt:link/tet:te/" + + "tet:te-link-attributes" { + when "../../../nw:network-types/tet:te-topology/" + + "mwtopo:mw-topology" { + description "This augment is only valid for microwave."; + } + description "Microwave link augmentation"; + + uses mw-link-attributes; + } + + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2017-10-25.yang b/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2017-10-25.yang deleted file mode 100644 index d9eaf369e..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2017-10-25.yang +++ /dev/null @@ -1,94 +0,0 @@ -module ietf-module-tags { - yang-version "1"; - namespace "urn:ietf:params:xml:ns:yang:ietf-module-tags"; - prefix "mtags"; - - import ietf-yang-types { - prefix yang; - } - - import ietf-yang-library { - prefix yanglib; - } - - // meta - organization "IETF NetMod Working Group (NetMod)"; - - contact - "NetMod Working Group - "; - description - "This module describes a tagging mechanism for yang module. - Tags may be IANA assigned or privately defined types."; - - revision "2017-10-25" { - description - "Initial revision."; - reference "TBD"; - } - - grouping module-tags { - description - "A grouping that may be used to classify a module."; - - leaf-list tags { - type string; - - description - "The module associated tags. See the IANA 'YANG Module Tag - Prefix' registry for reserved prefixes and the IANA 'YANG - Module IETF Tag' registry for IETF standard tags"; - } - } - - grouping yanglib-common-leafs { - description - "Common parameters for YANG modules and submodules. - This definition extract from RFC7895 as it is defined as - a grouping within a grouping. - - TBD is there a legal way to use a grouping defined within - another grouping without using the parent? If so, should change - to that."; - - leaf name { - type yang:yang-identifier; - mandatory true; - description - "The YANG module or submodule name."; - } - leaf revision { - type union { - type yanglib:revision-identifier; - type string { length 0; } - } - mandatory true; - 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."; - } - } - - list module-tags { - key "name revision"; - description - "A list of modules and their tags"; - uses yanglib-common-leafs; // uses yanglib:common-leafs; - uses module-tags; - } - - rpc reset-tags { - description - "Reset a list of tags for a given module to the list of module - and implementation time defiend tags. It provides the list of - tags associated with the module post reset."; - - input { - uses yanglib-common-leafs; // uses yanglib:common-leafs; - } - - output { - uses module-tags; - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2018-03-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2018-03-06.yang new file mode 100644 index 000000000..9f0de11d6 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-module-tags@2018-03-06.yang @@ -0,0 +1,62 @@ +module ietf-module-tags { + yang-version "1"; + namespace "urn:ietf:params:xml:ns:yang:ietf-module-tags"; + prefix "mtags"; + + import ietf-yang-types { + prefix yang; + } + + organization "IETF NetMod Working Group (NetMod)"; + + contact + "NetMod Working Group - "; + + description + "This module describes a tagging mechanism for yang module. + Tags may be IANA assigned or privately defined types."; + + revision "2018-03-06" { + description + "Initial revision."; + reference "TBD"; + } + + list module-tags { + key "name"; + + description + "A list of modules and their associated tags"; + + leaf name { + type yang:yang-identifier; + mandatory true; + description + "The YANG module or submodule name."; + } + + leaf-list tag { + type string; + + description + "A tag associated with the module. See the IANA 'YANG Module + Tag Prefix' registry for reserved prefixes and the IANA + 'YANG Module IETF Tag' registry for IETF standard tags. + + The operational view of this list will contain all + user-configured tags as well as any predefined tags that + have not been masked by the user using the masked-tag leaf + list below."; + } + + leaf-list masked-tag { + type string; + + description + "The list of tags that should not be associated with this + module. This user can remove (mask) predefined tags by + adding them to this list. It is not an error to add tags to + this list that are not predefined for the module."; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2018-02-28.yang similarity index 77% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2017-10-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2018-02-28.yang index 1ebda8153..567f64c54 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp-extended@2018-02-28.yang @@ -28,15 +28,6 @@ module ietf-mpls-ldp-extended { "WG Web: WG List: - WG Chair: Loa Andersson - - - WG Chair: Ross Callon - - - WG Chair: George Swallow - - Editor: Kamran Raza @@ -56,12 +47,25 @@ module ietf-mpls-ldp-extended { "; description - "This YANG module defines the essential components for the + "This YANG module defines the extended components for the management of Multi-Protocol Label Switching (MPLS) Label - Distribution Protocol (LDP). It is also the base model to - be augmented for Multipoint LDP (mLDP)."; + Distribution Protocol (LDP). It is also the model to + be augmented for extended Multipoint LDP (mLDP). + + 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 + (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 2017-10-29 { + revision 2018-02-28 { description "Initial revision."; reference @@ -71,6 +75,11 @@ module ietf-mpls-ldp-extended { /* * Features */ + feature dual-stack-transport-pereference { + description + "This feature indicates that the system allows to configure + the transport connection pereference in a dual-stack setup."; + } feature capability-end-of-lib { description "This feature indicates that the system allows to configure @@ -88,6 +97,7 @@ module ietf-mpls-ldp-extended { "This feature indicates that the system allows to configure LDP upstream label assignment capability."; } + feature forwarding-nexthop-config { description "This feature indicates that the system allows to configure @@ -100,12 +110,24 @@ module ietf-mpls-ldp-extended { restart helper mode."; } + feature key-chain { + description + "This feature indicates that the system supports keychain for + authentication."; + } + feature per-interface-timer-config { description "This feature indicates that the system allows to configure interface hello timers at the per-interface level."; } + feature per-peer-admin-down { + description + "This feature indicates that the system allows to + administratively disable a peer."; + } + feature per-peer-graceful-restart-config { description "This feature indicates that the system allows to configure @@ -136,6 +158,7 @@ module ietf-mpls-ldp-extended { policies to control the acceptance of targeted neighbor discovery hello messages."; } + feature session-downstream-on-demand-config { description "This feature indicates that the system allows to configure @@ -191,17 +214,21 @@ module ietf-mpls-ldp-extended { leaf transport-address { type inet:ipv4-address; description - "The transport address advertised in LDP Hello messages."; + "The transport address advertised in LDP Hello messages. + If this value is not specified, the LDP LSR ID is used as + the transport address."; + reference + "RFC5036. Sec. 3.5.2."; } } // address-family-ipv4-augment grouping authentication-keychain-augment { description "Augmentation to authentication to add keychain."; - leaf key-chain { type key-chain:key-chain-ref; description - "key-chain name."; + "key-chain name. + If not specified, no key chain is used."; } } // authentication-keychain-augment @@ -214,6 +241,7 @@ module ietf-mpls-ldp-extended { "Configure end-of-lib capability."; leaf enable { type boolean; + default false; description "Enable end-of-lib capability."; } @@ -224,6 +252,7 @@ module ietf-mpls-ldp-extended { "Configure typed-wildcard-fec capability."; leaf enable { type boolean; + default false; description "Enable typed-wildcard-fec capability."; } @@ -234,6 +263,7 @@ module ietf-mpls-ldp-extended { "Configure upstream label assignment capability."; leaf enable { type boolean; + default false; description "Enable upstream label assignment."; } @@ -242,17 +272,18 @@ module ietf-mpls-ldp-extended { grouping global-augment { description "Augmentation to global attributes."; - leaf igp-synchronization-delay { type uint16 { - range 3..60; + range "0 | 3..300"; } units seconds; + default 0; description "Sets the interval that the LDP waits before notifying the Interior Gateway Protocol (IGP) that label exchange is completed so that IGP can start advertising the normal - metric for the link."; + metric for the link. + If the value is not specified, there is no delay."; } } // global-augment @@ -272,7 +303,7 @@ module ietf-mpls-ldp-extended { list interface { key "name"; description - "List of LDP interfaces."; + "List of LDP interfaces used for LDP Basic Discovery."; uses ldp:ldp-interface-ref; list address-family { key "afi"; @@ -285,8 +316,9 @@ module ietf-mpls-ldp-extended { } leaf ldp-disable { type boolean; + default false; description - "Disable LDP forwarding on the interface."; + "'true' to disable LDP forwarding on the interface."; } } // address-family } // list interface @@ -300,6 +332,7 @@ module ietf-mpls-ldp-extended { leaf helper-enable { if-feature graceful-restart-helper-mode; type boolean; + default false; description "Enable or disable graceful restart helper mode."; } @@ -311,6 +344,11 @@ module ietf-mpls-ldp-extended { leaf transport-address { type union { type enumeration { + enum "use-global-transport-address" { + description + "Use the transport address set at the global level + common for all interfaces for this address family."; + } enum "use-interface-address" { description "Use interface address as the transport address."; @@ -318,6 +356,7 @@ module ietf-mpls-ldp-extended { } type inet:ipv4-address; } + default "use-global-transport-address"; description "IP address to be advertised as the LDP transport address."; } @@ -329,6 +368,11 @@ module ietf-mpls-ldp-extended { leaf transport-address { type union { type enumeration { + enum "use-global-transport-address" { + description + "Use the transport address set at the global level + common for all interfaces for this address family."; + } enum "use-interface-address" { description "Use interface address as the transport address."; @@ -336,6 +380,7 @@ module ietf-mpls-ldp-extended { } type inet:ipv6-address; } + default "use-global-transport-address"; description "IP address to be advertised as the LDP transport address."; } @@ -350,15 +395,16 @@ module ietf-mpls-ldp-extended { leaf igp-synchronization-delay { if-feature per-interface-timer-config; type uint16 { - range 3..60; + range "0 | 3..300"; } units seconds; + default 0; description - "Sets the interval that the LDP waits before - notifying the Interior Gateway Protocol (IGP) - that label exchange is completed so that IGP - can start advertising the normal metric for - the link."; + "Sets the interval that the LDP waits before notifying the + Interior Gateway Protocol (IGP) that label exchange is + completed so that IGP can start advertising the normal + metric for the link. + If the value is not specified, there is no delay."; } } // interface-augment @@ -374,8 +420,10 @@ module ietf-mpls-ldp-extended { leaf prefix-list { type prefix-list-ref; description - "Applies the prefix list to outgoing label - advertisements."; + "Applies the prefix list to filter outgoing label + advertisements. + If the value is not specified, no prefix filter + is applied."; } } container accept { @@ -384,8 +432,10 @@ module ietf-mpls-ldp-extended { leaf prefix-list { type prefix-list-ref; description - "Applies the prefix list to incoming label - advertisements."; + "Applies the prefix list to filer incoming label + advertisements. + If the value is not specified, no prefix filter + is applied."; } } // accept } // label-policy @@ -395,6 +445,7 @@ module ietf-mpls-ldp-extended { description "Augmentation to each peer list entry."; leaf admin-down { + if-feature per-peer-admin-down; type boolean; default false; description @@ -419,13 +470,53 @@ module ietf-mpls-ldp-extended { "Session downstream-on-demand attributes."; leaf enable { type boolean; + default false; description "'true' if session downstream-on-demand is enabled."; } leaf peer-list { type peer-list-ref; description - "The name of a peer ACL."; + "The name of a peer ACL, to be applied to the + downstream-on-demand sessions. + If this value is not specified, no filter is applied to + any downstream-on-demand sessions."; + } + } + container dual-stack-transport-pereference { + if-feature dual-stack-transport-pereference; + description + "The settings of peers to establish TCP connection in a + dual-stack setup."; + leaf max-wait { + type uint16 { + range "0..60"; + } + default 30; + description + "The maximum wait time in seconds for preferred transport + connection establishment. 0 indicates no preference."; + } + container prefer-ipv4 { + presence + "Present if IPv4 is prefered for transport connection + establishment, subject to the 'peer-list' in this + container."; + description + "Uses IPv4 as the prefered address family for transport + connection establishment, subject to the 'peer-list' in + this container. + If this container is not present, as a default, IPv6 is + the prefered address family for transport connection + establishment."; + leaf peer-list { + type peer-list-ref; + description + "The name of a peer ACL, to be applied to the IPv4 + transport connections. + If this value is not specified, no filter is applied, + and the IPv4 is prefered for all peers."; + } } } } // peers-augment @@ -447,6 +538,7 @@ module ietf-mpls-ldp-extended { penultimate hop router."; leaf enable { type boolean; + default false; description "'true' to enable explicit null."; } @@ -454,8 +546,10 @@ module ietf-mpls-ldp-extended { leaf prefix-list { type prefix-list-ref; description - "Applies the prefix list to outgoing label - advertisements."; + "Applies the prefix list to filter outgoing label + advertisements. + If the value is not specified, no prefix filter + is applied."; } } // advertise container accept { @@ -464,8 +558,10 @@ module ietf-mpls-ldp-extended { leaf prefix-list { type prefix-list-ref; description - "Applies the prefix list to incoming label - advertisements."; + "Applies the prefix list to filter incoming label + advertisements. + If the value is not specified, no prefix filter + is applied."; } } // accept container assign { @@ -478,7 +574,11 @@ module ietf-mpls-ldp-extended { leaf prefix-list { type prefix-list-ref; description - "Assign labels according to certain prefixes."; + "Assign labels according to certain prefixes. + If the value is not specified, no prefix filter + is applied (labels are assigned to all learned + routes)."; + } } // independent-mode container ordered-mode { @@ -516,7 +616,7 @@ module ietf-mpls-ldp-extended { "Present if IPv6 is enabled, unless the 'enable' leaf is set to 'false'"; description - "IPv6 address family."; + "Containing data related to the IPv6 address family."; leaf enable { type boolean; @@ -542,7 +642,7 @@ module ietf-mpls-ldp-extended { } enum ordered { description - "Ordered Label Distribution Control."; + "Ordered label distribution control."; } } config false; @@ -560,22 +660,26 @@ module ietf-mpls-ldp-extended { list address { key "address"; description - "List of address bindings."; + "List of address bindings learned by LDP."; leaf address { type inet:ipv6-address; description - "Binding address."; + "The IPv6 address learned from an Address + message received from or advertised to a peer."; } uses ldp:binding-address-state-attributes; } // binding-address + list fec-label { key "fec"; description - "List of label bindings."; + "List of FEC-label bindings learned by LDP."; leaf fec { type inet:ipv6-prefix; description - "Prefix FEC."; + "The prefix FEC value in the FEC-label binding, + learned in a Label Mapping message received from + or advertised to a peer."; } uses ldp:binding-label-state-attributes; } // fec-label @@ -621,15 +725,7 @@ module ietf-mpls-ldp-extended { } uses ldp:adjacency-state-attributes; - - leaf peer { - type leafref { - path "../../../../../../../../ldp:peers/ldp:peer/" - + "ldp:lsr-id"; - } - description - "LDP peer from this adjacency."; - } + uses ldp:ldp-peer-ref-container; } // hello-adjacency } // hello-adjacencies } // ipv6 @@ -668,15 +764,7 @@ module ietf-mpls-ldp-extended { } uses ldp:adjacency-state-attributes; - - leaf peer { - type leafref { - path "../../../../../../../ldp:peers/ldp:peer/" - + "ldp:lsr-id"; - } - description - "LDP peer from this adjacency."; - } + uses ldp:ldp-peer-ref-container; } // hello-adjacency } // hello-adjacencies @@ -694,13 +782,17 @@ module ietf-mpls-ldp-extended { } leaf enable { type boolean; + default true; description "Enable the target."; } leaf local-address { type inet:ipv6-address; description - "The local address."; + "The local address used as the source address to send + targeted Hello messages. + If the value is not specified, the transport-address + is used as the source address."; } } // target } // ipv6 @@ -756,7 +848,6 @@ module ietf-mpls-ldp-extended { description "Graceful restart augmentation."; uses global-augment; } - augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" + "ldp:global/ldp:capability" { description "Capability augmentation."; @@ -802,7 +893,10 @@ module ietf-mpls-ldp-extended { if-feature policy-targeted-discovery-config; type neighbor-list-ref; description - "The name of a peer ACL."; + "The name of a neighbor ACL, to accept Hello messages from + LDP peers as permitted by the neighbor-list policy. + If this value is not specified, targeted Hello messages from + any source are accepted."; } } @@ -814,6 +908,7 @@ module ietf-mpls-ldp-extended { augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" + "ldp:peers/ldp:authentication/ldp:auth-type-selection" { + if-feature key-chain; description "Peers authentication augmentation."; case auth-key-chain { uses authentication-keychain-augment; @@ -829,6 +924,7 @@ module ietf-mpls-ldp-extended { augment "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" + "ldp:peers/ldp:peer/ldp:authentication/" + "ldp:auth-type-selection" { + if-feature key-chain; description "Peer list entry authentication augmentation."; case auth-key-chain { uses authentication-keychain-augment; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2018-02-28.yang similarity index 72% rename from experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2017-10-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2018-02-28.yang index bca1900f5..81dc7ae22 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mpls-ldp@2018-02-28.yang @@ -9,7 +9,6 @@ module ietf-mpls-ldp { import ietf-yang-types { prefix "yang"; } - import ietf-routing { prefix "rt"; } @@ -32,15 +31,6 @@ module ietf-mpls-ldp { "WG Web: WG List: - WG Chair: Loa Andersson - - - WG Chair: Ross Callon - - - WG Chair: George Swallow - - Editor: Kamran Raza @@ -52,6 +42,7 @@ module ietf-mpls-ldp { Editor: Santosh Esale + Editor: Xia Chen @@ -62,9 +53,21 @@ module ietf-mpls-ldp { "This YANG module defines the essential components for the management of Multi-Protocol Label Switching (MPLS) Label Distribution Protocol (LDP). It is also the base model to - be augmented for Multipoint LDP (mLDP)."; + be augmented for Multipoint LDP (mLDP). + + 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 + (http://trustee.ietf.org/license-info). - revision 2017-10-29 { + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; + + revision 2018-02-28 { description "Initial revision."; reference @@ -150,7 +153,6 @@ module ietf-mpls-ldp { } description "Operational status event type for notifications."; } - /* * Identities */ @@ -159,13 +161,13 @@ module ietf-mpls-ldp { } identity adjacency-flag-active { - base "adjacency-flag-base"; + base adjacency-flag-base; description "This adjacency is configured and actively created."; } identity adjacency-flag-passive { - base "adjacency-flag-base"; + base adjacency-flag-base; description "This adjacency is not configured and passively accepted."; } @@ -176,37 +178,47 @@ module ietf-mpls-ldp { grouping adjacency-state-attributes { description - "Adjacency state attributes."; + "The operational state attributes of an LDP hello adjacency, + which can used for basic and extended discoveris, in IPv4 and + IPv6 address families."; leaf-list flag { type identityref { - base "adjacency-flag-base"; + base adjacency-flag-base; } - description "Adjacency flags."; + description + "On or more flags to indicate whether the adjacency is + actively created, passively accepted, or both."; } container hello-holdtime { - description "Hello holdtime state."; + description + "Containing hello holdtime state information."; leaf adjacent { type uint16; units seconds; - description "Peer holdtime."; + description + "The holdtime value learned from the adjacent LSR."; } leaf negotiated { type uint16; units seconds; - description "Negotiated holdtime."; + description + "The holdtime negotiated between this LSR and the adjacent + LSR."; } leaf remaining { type uint16; units seconds; - description "Remaining holdtime."; + description + "The time remaining until the holdtime timer expires."; } } leaf next-hello { type uint16; units seconds; - description "Time to send the next hello message."; + description + "The time when the next Hello message will be sent."; } container statistics { @@ -228,19 +240,20 @@ module ietf-mpls-ldp { leaf hello-received { type yang:counter64; description - "The number of hello messages received."; + "The number of Hello messages received."; } leaf hello-dropped { type yang:counter64; description - "The number of hello messages dropped."; + "The number of Hello messages dropped."; } } // statistics } // adjacency-state-attributes - grouping basic-discovery-timers { description - "Basic discovery timer attributes."; + "The timer attributes for basic discovery, used in the + per-interface setting and in the all-interface setting."; + leaf hello-holdtime { type uint16 { range 15..3600; @@ -266,40 +279,39 @@ module ietf-mpls-ldp { grouping binding-address-state-attributes { description - "Address binding attributes"; + "Operational state attributes of an address binding, used in + IPv4 and IPv6 address families."; + leaf advertisement-type { type advertised-received; description "Received or advertised."; } - leaf peer { - type leafref { - path "../../../../../../ldp:peers/ldp:peer/ldp:lsr-id"; - } - must "../advertisement-type = 'received'" { + container peer { + when "../advertisement-type = 'received'" { description "Applicable for received address."; } description "LDP peer from which this address is received."; - } // peer + uses ldp-peer-ref; + } } // binding-address-state-attributes - grouping binding-label-state-attributes { description - "Label binding attributes"; + "Operational state attributes for a FEC-label binding, used in + IPv4 and IPv6 address families."; + list peer { - key "lsr-id advertisement-type"; + key "lsr-id label-space-id advertisement-type"; description "List of advertised and received peers."; - leaf lsr-id { - type leafref { - path "../../../../../../../ldp:peers/ldp:peer/" - + "ldp:lsr-id"; - } + uses ldp-peer-ref { description - "LDP peer from which this binding is received, - or to which this binding is advertised."; + "The LDP peer from which this binding is received, or to + which this binding is advertised. + The peer is identified by its LDP ID, which consists of + the LSR ID and the Label Space ID."; } leaf advertisement-type { type advertised-received; @@ -320,107 +332,19 @@ module ietf-mpls-ldp { } // peer } // binding-label-state-attributes - grouping extended-discovery-policy-attributes { - description - "LDP policy to control the acceptance of extended neighbor - discovery hello messages."; - container hello-accept { - description - "Extended discovery acceptance policies."; - - leaf enable { - type boolean; - description - "'true' to accept; 'false' to deny."; - } - } // hello-accept - } // extended-discovery-policy-attributes - - grouping extended-discovery-timers { - description - "Extended discovery timer attributes."; - leaf hello-holdtime { - type uint16 { - range 15..3600; - } - units seconds; - default 45; - description - "The time interval for which LDP targeted Hello adjacency - - is maintained in the absence of targeted Hello messages - from an LDP neighbor."; - } - leaf hello-interval { - type uint16 { - range 5..3600; - } - units seconds; - default 15; - description - "The interval between consecutive LDP targeted Hello - messages used in extended LDP discovery."; - } - } // extended-discovery-timers - - grouping global-attributes { - description "Configuration attributes at global level."; - - uses instance-attributes; - } // global-attributes - - grouping graceful-restart-attributes { - description - "Graceful restart configuration attributes."; - container graceful-restart { - description - "Attributes for graceful restart."; - leaf enable { - type boolean; - description - "Enable or disable graceful restart."; - } - leaf reconnect-time { - type uint16 { - range 10..1800; - } - units seconds; - description - "Specifies the time interval that the remote LDP peer - must wait for the local LDP peer to reconnect after the - remote peer detects the LDP communication failure."; - } - leaf recovery-time { - type uint16 { - range 30..3600; - } - units seconds; - description - "Specifies the time interval, in seconds, that the remote - LDP peer preserves its MPLS forwarding state after - receiving the Initialization message from the restarted - local LDP peer."; - } - leaf forwarding-holdtime { - type uint16 { - range 30..3600; - } - units seconds; - description - "Specifies the time interval, in seconds, before the - termination of the recovery phase."; - } - } // graceful-restart - } // graceful-restart-attributes - grouping graceful-restart-attributes-per-peer { description - "Per peer graceful restart configuration attributes."; + "Per peer graceful restart attributes. + On the local side, these attributes are configuration and + operational state data. One the peer side, these attributes + are operational state data reveiced from the peer."; + container graceful-restart { description "Attributes for graceful restart."; leaf enable { type boolean; + default false; description "Enable or disable graceful restart."; } @@ -429,6 +353,7 @@ module ietf-mpls-ldp { range 10..1800; } units seconds; + default 120; description "Specifies the time interval that the remote LDP peer must wait for the local LDP peer to reconnect after the @@ -439,6 +364,7 @@ module ietf-mpls-ldp { range 30..3600; } units seconds; + default 120; description "Specifies the time interval, in seconds, that the remote LDP peer preserves its MPLS forwarding state after @@ -448,75 +374,6 @@ module ietf-mpls-ldp { } // graceful-restart } // graceful-restart-attributes-per-peer - grouping instance-attributes { - description "Configuration attributes at instance level."; - - container capability { - description "Configure capability."; - } // capability - - uses graceful-restart-attributes; - - leaf lsr-id { - type yang:dotted-quad; - description - "Specify the value to act as the LDP LSR ID. - If this attribute is not specified, LDP uses the router - ID as determined by the system."; - } - } // instance-attributes - - grouping ldp-adjacency-ref { - description - "An absolute reference to an LDP adjacency."; - choice hello-adjacency-type { - description - "Interface or targeted adjacency."; - case targeted { - container targeted { - description "Targeted adjacency."; - leaf target-address { - type inet:ip-address; - description - "The target address."; - } - } // targeted - } - case link { - container link { - description "Link adjacency."; - leaf next-hop-interface { - type if:interface-ref; - description - "Interface connecting to next-hop."; - } - leaf next-hop-address { - type inet:ip-address; - must "../next-hop-interface" { - description - "Applicable when interface is specified."; - - } - description - "IP address of next-hop."; - } - } // link - } - } - } // ldp-adjacency-ref - - grouping ldp-fec-event { - description - "The event attributes for a change of FEC - (Forwarding Equivalence Class) status."; - leaf prefix { - type inet:ip-prefix; - description - "The address prefix element of the FEC whose status - has changed."; - } - } // ldp-fec-event - grouping ldp-interface-ref { description "Defining a reference to LDP interface."; @@ -536,25 +393,51 @@ module ietf-mpls-ldp { grouping ldp-peer-ref { description - "An absolute reference to an LDP peer."; - leaf peer-ref { + "An absolute reference to an LDP peer, by the LDP ID, which + consists of the LSR ID and the Label Space ID."; + + leaf lsr-id { + type leafref { + path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" + + "ldp:peers/ldp:peer/ldp:lsr-id"; + } + description + "The LSR ID of the peer, as a portion of the peer LDP ID."; + } + leaf label-space-id { type leafref { - path "/rt:routing/rt:control-plane-protocols/mpls-ldp/" - + "peers/peer/lsr-id"; + path "/rt:routing/rt:control-plane-protocols/ldp:mpls-ldp/" + + "ldp:peers/ldp:peer/ldp:label-space-id"; } description - "Reference to an LDP peer."; + "The Label Space ID of the peer, as a portion of the peer + LDP ID."; } } // ldp-peer-ref + grouping ldp-peer-ref-container { + description + "A container containing an absolute reference to an LDP peer."; + + container peer { + description + "Reference to an LDP peer, by the LDP ID, which consists of + the LSR ID and the Label Space ID."; + uses ldp-peer-ref; + } // peer + } // ldp-peer-ref + grouping peer-attributes { - description "Peer configuration attributes."; + description + "Peer configuration attributes, used in the per-peer setting + can in the all-peer setting."; leaf session-ka-holdtime { type uint16 { range 45..3600; } units seconds; + default 180; description "The time interval after which an inactive LDP session terminates and the corresponding TCP session closes. @@ -566,6 +449,7 @@ module ietf-mpls-ldp { range 15..1200; } units seconds; + default 60; description "The interval between successive transmissions of keepalive packets. Keepalive packets are only sent in the absence of @@ -575,19 +459,12 @@ module ietf-mpls-ldp { grouping peer-authentication { description - "Peer authentication container."; -/* - leaf session-authentication-md5-password { - type string { - length "1..80"; - } - description - "Assigns an encrypted MD5 password to an LDP - peer"; - } // md5-password -*/ + "Peer authentication container, used in the per-peer setting + can in the all-peer setting."; + container authentication { - description "Containing authentication information."; + description + "Containing authentication information."; choice auth-type-selection { description "Options for expressing authentication setting."; @@ -603,7 +480,9 @@ module ietf-mpls-ldp { } // peer-authentication grouping peer-state-derived { - description "Peer derived state attributes."; + description + "The peer state information derived from the LDP protocol + operatoins."; container label-advertisement-mode { config false; @@ -631,15 +510,10 @@ module ietf-mpls-ldp { description "Time to send the next KeepAlive message."; } - leaf peer-ldp-id { - type yang:dotted-quad; - config false; - description "Peer LDP ID."; - } - container received-peer-state { config false; - description "Peer features."; + description + "Operational state information learned from the peer."; uses graceful-restart-attributes-per-peer; @@ -715,7 +589,9 @@ module ietf-mpls-ldp { } config false; description - "Representing the operational status."; + "Representing the operational status of the LDP session."; + reference + "RFC5036, Sec. 2.5.4."; } container tcp-connection { @@ -727,7 +603,7 @@ module ietf-mpls-ldp { } leaf local-port { type inet:port-number; - description "Local port."; + description "Local port number."; } leaf remote-address { type inet:ip-address; @@ -735,7 +611,7 @@ module ietf-mpls-ldp { } leaf remote-port { type inet:port-number; - description "Remote port."; + description "Remote port number."; } } // tcp-connection @@ -863,25 +739,87 @@ module ietf-mpls-ldp { description "LDP augmentation."; container mpls-ldp { - presence "Container for LDP protocol."; + presence + "Enables the LDP protocol."; description - "Container for LDP protocol."; + "Containing configuration and operational data for the LDP + protocol."; container global { description "Global attributes for LDP."; - uses global-attributes; + container capability { + description + "Containing the LDP capability data. The container is + used for augmentations."; + reference + "RFC5036: Sec. 1.5."; + } // capability + + container graceful-restart { + description + "Attributes for graceful restart."; + leaf enable { + type boolean; + default false; + description + "Enable or disable graceful restart."; + } + leaf reconnect-time { + type uint16 { + range 10..1800; + } + units seconds; + default 120; + description + "Specifies the time interval that the remote LDP peer + must wait for the local LDP peer to reconnect after + the remote peer detects the LDP communication + failure."; + } + leaf recovery-time { + type uint16 { + range 30..3600; + } + units seconds; + default 120; + description + "Specifies the time interval, in seconds, that the + remote LDP peer preserves its MPLS forwarding state + after receiving the Initialization message from the + restarted local LDP peer."; + } + leaf forwarding-holdtime { + type uint16 { + range 30..3600; + } + units seconds; + default 180; + description + "Specifies the time interval, in seconds, before the + termination of the recovery phase."; + } + } // graceful-restart + + leaf lsr-id { + type rt-types:router-id; + description + "Specify the value to act as the LDP LSR ID. + If this attribute is not specified, LDP uses the router + ID as determined by the system."; + } container address-families { description - "Container for address families."; + "Per address family confgiration and operational state. + The address family can be either IPv4 or IPv6."; container ipv4 { presence "Present if IPv4 is enabled, unless the 'enable' leaf is set to 'false'"; description - "IPv4 address family."; + "Containing data related to the IPv4 address family."; leaf enable { type boolean; @@ -896,9 +834,9 @@ module ietf-mpls-ldp { description "Independent label distribution control."; } - enum Ordered { + enum ordered { description - "Ordered Label Distribution Control."; + "Ordered label distribution control."; } } config false; @@ -916,11 +854,12 @@ module ietf-mpls-ldp { list address { key "address"; description - "List of address bindings."; + "List of address bindings learned by LDP."; leaf address { type inet:ipv4-address; description - "Binding address."; + "The IPv4 address learned from an Address + message received from or advertised to a peer."; } uses binding-address-state-attributes; } // binding-address @@ -928,11 +867,13 @@ module ietf-mpls-ldp { list fec-label { key "fec"; description - "List of label bindings."; + "List of FEC-label bindings learned by LDP."; leaf fec { type inet:ipv4-prefix; description - "Prefix FEC."; + "The prefix FEC value in the FEC-label binding, + learned in a Label Mapping message received from + or advertised to a peer."; } uses binding-label-state-attributes; } // fec-label @@ -943,18 +884,20 @@ module ietf-mpls-ldp { container discovery { description - "Neibgbor discovery configuration."; + "Neibgbor discovery configuration and operational state."; container interfaces { description - "A list of interfaces for basic descovery."; + "A list of interfaces for LDP Basic Descovery."; + reference + "RFC5036: LDP Specification. Sec 2.4.1."; uses basic-discovery-timers; list interface { key "name"; description - "List of LDP interfaces."; + "List of LDP interfaces used for LDP Basic Discovery."; uses ldp-interface-ref; leaf next-hello { type uint16; @@ -998,15 +941,7 @@ module ietf-mpls-ldp { } uses adjacency-state-attributes; - - leaf peer { - type leafref { - path "../../../../../../../../" - + "peers/peer/lsr-id"; - } - description - "LDP peer from this adjacency."; - } + uses ldp-peer-ref-container; } // hello-adjacency } // hello-adjacencies } // ipv4 @@ -1019,8 +954,40 @@ module ietf-mpls-ldp { description "A list of targeted neighbors for extended discovery."; - uses extended-discovery-timers; - uses extended-discovery-policy-attributes; + leaf hello-holdtime { + type uint16 { + range 15..3600; + } + units seconds; + default 45; + description + "The time interval for which LDP targeted Hello + adjacency is maintained in the absence of targeted + Hello messages from an LDP neighbor."; + } + leaf hello-interval { + type uint16 { + range 5..3600; + } + units seconds; + default 15; + description + "The interval between consecutive LDP targeted Hello + messages used in extended LDP discovery."; + } + + container hello-accept { + description + "LDP policy to control the acceptance of extended + neighbor discovery Hello messages."; + + leaf enable { + type boolean; + default false; + description + "'true' to accept; 'false' to deny."; + } + } // hello-accept container address-families { description @@ -1050,17 +1017,8 @@ module ietf-mpls-ldp { description "Neighbor address of the hello adjacency."; } - uses adjacency-state-attributes; - - leaf peer { - type leafref { - path "../../../../../../../peers/peer/" - + "lsr-id"; - } - description - "LDP peer from this adjacency."; - } + uses ldp-peer-ref-container; } // hello-adjacency } // hello-adjacencies @@ -1079,13 +1037,18 @@ module ietf-mpls-ldp { leaf enable { type boolean; + default true; description "Enable the target."; } leaf local-address { type inet:ipv4-address; description - "The local address."; + "The local address used as the source address to + send targeted Hello messages. + If the value is not specified, the + transport-address is used as the source + address."; } } // target } // ipv4 @@ -1101,13 +1064,29 @@ module ietf-mpls-ldp { uses peer-attributes; list peer { - key "lsr-id"; + key "lsr-id label-space-id"; description "List of peers."; leaf lsr-id { - type yang:dotted-quad; - description "LSR ID."; + type rt-types:router-id; + description + "The LSR ID of the peer, to identify the globally + unique LSR. This is the first four octets of the LDP + ID. This leaf is used together with the leaf + 'label-space-id' to form the LDP ID."; + reference + "RFC5036. Sec 2.2.2."; + } + leaf label-space-id { + type uint16; + description + "The Label Space ID of the peer, to identify a specific + label space within the LSR. This is the last two + octets of the LDP ID. This leaf is used together with + the leaf 'lsr-id' to form the LDP ID."; + reference + "RFC5036. Sec 2.2.2."; } uses peer-authentication; @@ -1169,14 +1148,12 @@ module ietf-mpls-ldp { description "Clears the session to the peer."; input { - leaf lsr-id { - type union { - type yang:dotted-quad; - type uint32; - } + uses ldp-peer-ref { description - "LSR ID of peer to be cleared. If this is not provided - then all peers are cleared"; + "The LDP peer to be cleared. If this is not provided + then all peers are cleared. + The peer is identified by its LDP ID, which consists of + the LSR ID and the Label Space ID."; } } } @@ -1241,15 +1218,13 @@ module ietf-mpls-ldp { "Clears protocol statistics (e.g. sent and received counters)."; input { - leaf lsr-id { - type union { - type yang:dotted-quad; - type uint32; - } + uses ldp-peer-ref { description - "LSR ID of peer whose statistic are to be cleared. - If this is not provided then all peers statistics are - cleared"; + "The LDP peer whose statistics are to be cleared. + If this is not provided then all peers' statistics are + cleared. + The peer is identified by its LDP ID, which consists of + the LSR ID and the Label Space ID."; } } } @@ -1266,7 +1241,7 @@ module ietf-mpls-ldp { type oper-status-event-type; description "Event type."; } - uses ldp-peer-ref; + uses ldp-peer-ref-container; } notification mpls-ldp-hello-adjacency-event { @@ -1277,7 +1252,43 @@ module ietf-mpls-ldp { type oper-status-event-type; description "Event type."; } - uses ldp-adjacency-ref; + choice hello-adjacency-type { + description + "Interface or targeted adjacency."; + case targeted { + container targeted { + description + "Targeted adjacency through LDP extended discovery."; + leaf target-address { + type inet:ip-address; + description + "The target adjacent address learned."; + } + } // targeted + } + case link { + container link { + description + "Link adjacency through LDP basic discovery."; + leaf next-hop-interface { + type if:interface-ref; + description + "The interface connecting to the adjacent next hop."; + } + leaf next-hop-address { + type inet:ip-address; + must "../next-hop-interface" { + description + "Applicable when interface is specified."; + + } + description + "IP address of the next hop. This can be IPv4 or IPv6 + address."; + } + } // link + } + } } notification mpls-ldp-fec-event { @@ -1287,6 +1298,11 @@ module ietf-mpls-ldp { type oper-status-event-type; description "Event type."; } - uses ldp-fec-event; + leaf prefix { + type inet:ip-prefix; + description + "The address prefix element of the FEC whose status + has changed."; + } } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-03-01.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-03-01.yang index bcc3beb3b..cabf6be4b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mud-detext-example@2018-03-01.yang @@ -24,7 +24,7 @@ module ietf-mud-detext-example { "Sample extension to a MUD module to indicate a need for DETNET support."; - revision 2018-02-20 { + revision 2018-03-01 { description "Initial revision."; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-mud@2018-02-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-mud@2018-03-01.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-mud@2018-02-20.yang rename to experimental/ietf-extracted-YANG-modules/ietf-mud@2018-03-01.yang index c405353b8..2b35f4532 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-mud@2018-02-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-mud@2018-03-01.yang @@ -47,7 +47,7 @@ module ietf-mud { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2018-02-20 { + revision 2018-03-01 { description "Initial proposed standard."; reference @@ -281,7 +281,7 @@ module ietf-mud { } } augment "/acl:access-lists/acl:acl/acl:aces/" + - "acl:ace/acl:matches/acl:l4/acl:tcp" { + "acl:ace/acl:matches/acl:l4/acl:tcp/acl:tcp" { description "add direction-initiated"; leaf direction-initiated { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-28.yang similarity index 72% rename from experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-28.yang index cff30548b..472d82e77 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-nmda@2018-02-28.yang @@ -5,21 +5,29 @@ module ietf-netconf-nmda { 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; + // RFC Ed.: update the reference below with the actual RFC number + reference "RFC XXXX: Network Management Datastore Architecture."; } import ietf-origin { prefix or; + // RFC Ed.: update the reference below with the actual RFC number + reference "RFC XXXX: Network Management Datastore Architecture."; } import ietf-netconf { prefix nc; + reference "RFC 6241: Network Configuration Protocol (NETCONF)"; } import ietf-netconf-with-defaults { prefix ncwd; + reference "RFC 6243: With-defaults Capability for NETCONF."; } organization @@ -61,7 +69,11 @@ module ietf-netconf-nmda { (http://www.rfc-editor.org/info/rfcxxxx); see the RFC itself for full legal notices."; - revision 2018-02-05 { + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + revision 2018-02-28 { description "Initial revision."; reference @@ -76,6 +88,18 @@ module ietf-netconf-nmda { "RFC XXXX: Network Management Datastore Architecture"; } + feature with-defaults { + description + "NETCONF :with-defaults capability; If the server advertises + the :with-defaults capability for a session, then this + feature must also be enabled for that session. Otherwise, + this feature must not be enabled."; + reference + "RFC 6243: With-defaults Capability for NETCONF, section 4; and + RFC XXXX: NETCONF Extensions to Support the Network Management + Datastore Architecture, section 3.1.1.1."; + } + rpc get-data { description "Retrieve data from an NMDA datastore. The content returned @@ -87,10 +111,12 @@ module ietf-netconf-nmda { then the server MUST return an element with an value of 'invalid-value'. - The 'with-defaults' parameter does not apply to operational - datastores. If the 'with-defaults' parameter is present in a - request to an operational datastore, then the server MUST - return an element with an value of + The 'with-defaults' parameter only applies to the operational + datastore if the NETCONF :with-defaults and + :with-operational-defaults capabilities are both advertised. + If the 'with-defaults' parameter is present in a request for + which it is not supported, then the server MUST return an + element with an value of 'invalid-value'."; input { leaf datastore { @@ -150,16 +176,26 @@ module ietf-netconf-nmda { "Filter for nodes with the given value for their 'config' property."; } - leaf-list origin-filter { - when 'derived-from-or-self(../datastore, "ds:operational")'; + choice origin-filters { + when 'derived-from-or-self(datastore, "ds:operational")'; if-feature origin; - type identityref { - base or:origin; - } description - "Filter based on 'origin' annotation. A node matches the - filter if its 'origin' annotation is derived from or - equal to any of the given filter values."; + "Filters based on the 'origin' annotation."; + + leaf-list origin-filter { + type or:origin-ref; + description + "Filter based on the 'origin' annotation. A node matches + the filter if its 'origin' annotation is derived from or + equal to any of the given filter values."; + } + leaf-list negated-origin-filter { + type or:origin-ref; + description + "Filter based on the 'origin' annotation. A node matches + the filter if its 'origin' annotation is not derived + from and not equal to all of the given filter values."; + } } leaf max-depth { @@ -189,8 +225,9 @@ module ietf-netconf-nmda { the 'origin' annotation for the nodes that has one."; } - uses ncwd:with-defaults-parameters; - + uses ncwd:with-defaults-parameters { + if-feature with-defaults; + } } output { @@ -206,10 +243,17 @@ module ietf-netconf-nmda { rpc edit-data { description - "Edit data in an NMDA datastore."; + "Edit data in an NMDA datastore. + + If an error condition occurs such that an error severity + element is generated, the server will stop + processing the operation and restore the + specified configuration to its complete state at + the start of this operation."; input { leaf datastore { type ds:datastore-ref; + mandatory true; description "Datastore which is the target of the edit-data operation. @@ -269,6 +313,8 @@ module ietf-netconf-nmda { description "Datastore to lock. + The lock operation is only supported on writable datastores. + If the lock operation is not supported by the server on the specified target datastore, then the server MUST return an element with an value of @@ -282,10 +328,12 @@ module ietf-netconf-nmda { type ds:datastore-ref; description "Datastore to unlock. + The unlock operation is only supported on writable + datastores. - If the unlock operation is not supported by the server on the - specified target datastore, then the server MUST return an - element with an value of + If the unlock operation is not supported by the server on + the specified target datastore, then the server MUST return + an element with an value of 'invalid-value'."; } } @@ -303,6 +351,9 @@ module ietf-netconf-nmda { description "Datastore to validate. + The validate operation is supported only on configuration + datastores. + If the validate operation is not supported by the server on the specified target datastore, then the server MUST return an element with an value of diff --git a/experimental/ietf-extracted-YANG-modules/ietf-netconf-notifications-nmda@2018-02-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-netconf-notifications-nmda@2018-02-01.yang new file mode 100644 index 000000000..c0b051036 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-netconf-notifications-nmda@2018-02-01.yang @@ -0,0 +1,168 @@ +module ietf-netconf-notifications-nmda { + namespace "urn:ietf:params:xml:ns:yang:ietf-netconf-notifications-nmda"; + prefix ncdn; + + import ietf-netconf { + prefix nc; + } + import ietf-datastores { + prefix ds; + } + import ietf-origin { + prefix or; + } + import ietf-netconf-notifications { + prefix ncn; + } + + organization + "IETF NETCONF (Network Configuration Protocol) Working Group"; + contact + "WG Web: + WG List: + + WG Chair: Kent Watsen + + + WG Chair: Mahesh Jethanandani + + + Editor: Qin Wu + + + Editor: Xiaojian Ding + "; + description + "This module defines a YANG data model for use with the + NETCONF protocol that allows the NETCONF client to + receive additional common NETCONF base event notifications + related to NMDA. + + Copyright (c) 2012 IETF Trust and the persons identified as + the document authors. 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 2018-02-01 { + description + "Initial version."; + reference "RFC xxx: NETCONF Base Notifications for NMDA"; + } + identity change-phase { + description + "Base identity for change phanse."; + } + + identity inactive { + base change-phase; + description + "Identity for inactive data.It is referred to as + configuration that is not currently used."; + } + + identity in-use { + base change-phase; + description + "Identity for the in use data. It is referred to as + configuration that is actively used."; + } + + identity Remnant { + base in-use; + description + "Identity for the remnant configuration. It indicates that + both the previous and current configuration coexist."; + } + + identity miss-resource { + base in-use; + description + "Identity for the missing resource.It indicates that + Configuration in can refer to resources that are not + available or otherwise not physically present and parts of + are not applied."; + } + + identity sys-resource { + base in-use; + description + "Identity for the system congtrolled resource.It indicates that + a system controlled resource has matching configuration in + ."; + } + notification netconf-data-change { + description + "Generated when the NETCONF server detects that the + datastore or conventional configuration datastore + has been changed by a management session. + The notification summarizes the edits that + have been detected. + + The server MAY choose to also generate this + notification while loading a datastore during the + boot process for the device."; + uses ncn:changed-by-parms; + leaf datastore { + type identityref { + base ds:datastore; + } + default "ds:operational"; + description + "Indicates which datastore has changed or which datastore is + target of edit-data operation."; + } + + list edit { + description + "An edit record SHOULD be present for each distinct + edit operation that the server has detected on + the target datastore. This list MAY be omitted + if the detailed edit operations are not known. + The server MAY report entries in this list for + changes not made by a NETCONF session (e.g., CLI)."; + leaf target { + type instance-identifier; + description + "Topmost node associated with the configuration change. + A server SHOULD set this object to the node within + the datastore that is being altered. A server MAY + set this object to one of the ancestors of the actual + node that was changed, or omit this object, if the + exact node is not known."; + } + leaf origin { + type identityref { + base or:origin; + } + description + "Indicate origin that most accurately reflects the source of the + configuration that is in use by the system."; + } + leaf current-phase { + type identityref { + base change-phase; + } + description + "Indicate the current phase of the datastore or + conventional configuration datastore change, e.g.,the intended + datastore is validating, the intended datastore is validated, + the configuration is applying, the configuration is applied."; + } + leaf operation { + type nc:edit-operation-type; + description + "Type of edit operation performed. + A server MUST set this object to the NETCONF edit + operation performed on the target datastore."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ntp@2017-10-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-ntp@2018-03-05.yang similarity index 77% rename from experimental/ietf-extracted-YANG-modules/ietf-ntp@2017-10-28.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ntp@2018-03-05.yang index 4b9689a16..ed65f442e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ntp@2017-10-28.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ntp@2018-03-05.yang @@ -17,7 +17,7 @@ module ietf-ntp { } import iana-crypt-hash { - prefix ianach; + prefix "ianach"; } import ietf-key-chain { @@ -27,7 +27,6 @@ module ietf-ntp { import ietf-access-control-list { prefix "acl"; } - import ietf-routing-types { prefix "rt-types"; } @@ -38,8 +37,6 @@ module ietf-ntp { contact "WG Web: WG List: Editor: Eric Wu Editor: Anil Kumar S N @@ -54,7 +51,7 @@ module ietf-ntp { "This YANG module defines essential components for the management of a routing subsystem. - Copyright (c) 2017 IETF Trust and the persons identified + 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, @@ -67,7 +64,7 @@ module ietf-ntp { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2017-10-28 { + revision 2018-03-05 { description "Updated revision."; reference @@ -173,7 +170,6 @@ module ietf-ntp { description "This defines NTP unicast mode of operation."; } - typedef association-modes { type enumeration { enum client { @@ -277,6 +273,16 @@ module ietf-ntp { "This defines NTP clock sync states."; } + /* feature */ + feature ntp-port { + description + "Indicates that the device supports the configuration of + the port for NTP. + + This is a 'feature', since many implementations do not + support any port other than the default port."; + } + /* Groupings */ grouping authentication-key { description @@ -362,6 +368,7 @@ module ietf-ntp { "The maximul poll interval used in this association."; } leaf port { + if-feature ntp-port; type uint16 { range "123 | 1025..max"; } @@ -397,11 +404,12 @@ module ietf-ntp { } leaf associations-isConfigured { type leafref { - path "/ntp:ntp/ntp:associations/ntp:isConfigured"; + path "/ntp:ntp/ntp:associations/" + + "ntp:isConfigured"; } description - "Indicates the association was configured or dynamic - which result in clock synchronization."; + "Indicates the association was configured or + dynamic which result in clock synchronization."; } } @@ -412,6 +420,7 @@ module ietf-ntp { description "Configuration parameters for NTP."; leaf port { + if-feature ntp-port; type uint16 { range "123 | 1025..max"; } @@ -419,180 +428,179 @@ module ietf-ntp { description "Specify the port used to send NTP packets."; } - - container refclock-master { - presence - "NTP master clock is enable"; - description - "Configures the device as NTP server."; + container refclock-master { + presence + "NTP master clock is enable"; + description + "Configures the device as NTP server."; leaf master-stratum { type ntp-stratum; default "16"; description "Stratum level from which NTP clients get their time synchronized."; - } - } - container authentication { - description - "Configuration of authentication."; - leaf auth-enabled { - type boolean; - default false; - description - "Controls whether NTP authentication is enabled - or disabled on this device."; } - list trusted-keys { - key "key-id"; - description - "List of keys trusted by NTP."; - leaf key-id { - type leafref { - path "/ntp:ntp/ntp:authentication/" - + "ntp:authentication-keys/ntp:key-id"; - } + } + container authentication { + description + "Configuration of authentication."; + leaf auth-enabled { + type boolean; + default false; description - "The key trusted by NTP."; + "Controls whether NTP authentication is enabled + or disabled on this device."; } - } - list authentication-keys { - key "key-id"; - uses authentication-key; - description - "List of authentication key."; - } - } - - container access-rules { - description - "Configuration of access rules."; - list access-rule { - key "access-mode"; - description - "List of access rules."; - leaf access-mode { - type access-modes; + list trusted-keys { + key "key-id"; description - "NTP access mode."; - } - leaf acl { - type leafref { - path "/acl:access-lists/acl:acl/acl:acl-name"; + "List of keys trusted by NTP."; + leaf key-id { + type leafref { + path "/ntp:ntp/ntp:authentication/" + + "ntp:authentication-keys/ntp:key-id"; + } + description + "The key trusted by NTP."; } + } + list authentication-keys { + key "key-id"; + uses authentication-key; description - "NTP ACL."; - } - } - } - - container clock-state { - config "false"; - description - "Operational state of the NTP."; + "List of authentication key."; + } + } - container system-status { + container access-rules { description - "System status of NTP."; - leaf clock-state { - type ntp-clock-status; - mandatory true; - description "Indicates the state of system clock."; - } - leaf clock-stratum { - type ntp-stratum; - mandatory true; - description - "Indicates the stratum of the reference clock."; - } - leaf clock-refid { - type union { - type inet:ipv4-address; - type binary { - length "4"; - } - type string { - length "4"; - } + "Configuration of access rules."; + list access-rule { + key "access-mode"; + description + "List of access rules."; + leaf access-mode { + type access-modes; + description + "NTP access mode."; + } + leaf acl { + type leafref { + path "/acl:access-lists/acl:acl/acl:name"; + } + description + "NTP ACL."; + } } - mandatory true; - description - "IPv4 address or first 32 bits of the MD5 hash of - the IPv6 address or reference clock of the peer to - which clock is synchronized."; - } - uses association-ref { + } + + container clock-state { + config "false"; + description + "Operational state of the NTP."; + + container system-status { description - "Reference to Association node"; - } - leaf nominal-freq { - type decimal64 { - fraction-digits 4; - } - mandatory true; - description - "Indicates the nominal frequency of the - local clock, in Hz."; - } - leaf actual-freq { - type decimal64 { - fraction-digits 4; - } + "System status of NTP."; + leaf clock-state { + type ntp-clock-status; mandatory true; + description "Indicates the state of system clock."; + } + leaf clock-stratum { + type ntp-stratum; + mandatory true; + description + "Indicates the stratum of the reference clock."; + } + leaf clock-refid { + type union { + type inet:ipv4-address; + type binary { + length "4"; + } + type string { + length "4"; + } + } + mandatory true; + description + "IPv4 address or first 32 bits of the MD5 hash of + the IPv6 address or reference clock of the peer to + which clock is synchronized."; + } + + uses association-ref { description - "Indicates the actual frequency of the - local clock, in Hz."; - } - leaf clock-precision { - type uint8; + "Reference to Association node"; + } + leaf nominal-freq { + type decimal64 { + fraction-digits 4; + } + mandatory true; + description + "Indicates the nominal frequency of the + local clock, in Hz."; + } + leaf actual-freq { + type decimal64 { + fraction-digits 4; + } + mandatory true; + description + "Indicates the actual frequency of the + local clock, in Hz."; + } + leaf clock-precision { + type uint8; + mandatory true; + description + "Precision of the clock of this system + in Hz.(prec=2^(-n))"; + } + leaf clock-offset { + type decimal64 { + fraction-digits 4; + } + description + "Offset of clock to synchronized peer, + in milliseconds."; + } + leaf root-delay { + type decimal64 { + fraction-digits 2; + } + description + "Total delay along path to root clock, + in milliseconds."; + } + leaf root-dispersion { + type decimal64 { + fraction-digits 2; + } + description + "Indicates the dispersion between the local clock + and the master reference clock, in milliseconds."; + } + leaf reference-time { + type yang:date-and-time; + description + "Indicates reference timestamp."; + } + leaf sync-state { + type ntp-sync-state; mandatory true; description - "Precision of the clock of this system - in Hz.(prec=2^(-n))"; - } - leaf clock-offset { - type decimal64 { - fraction-digits 4; - } - description - "Offset of clock to synchronized peer, - in milliseconds."; - } - leaf root-delay { - type decimal64 { - fraction-digits 2; - } - description - "Total delay along path to root clock, - in milliseconds."; - } - leaf root-dispersion { - type decimal64 { - fraction-digits 2; - } - description - "Indicates the dispersion between the local clock - and the master reference clock, in milliseconds."; - } - leaf reference-time { - type yang:date-and-time; - description - "Indicates reference timestamp."; - } - leaf sync-state { - type ntp-sync-state; - mandatory true; - description - "Indicates the synchronization status of - the local clock."; + "Indicates the synchronization status of + the local clock."; + } } } - } - - list unicast { + list unicast-configuration { key "address type"; description - "list of unicast configuration."; + "list of unicast-configuration."; leaf address { type inet:host; description @@ -638,10 +646,10 @@ module ietf-ntp { } uses comman-attributes { description - "Common attribute like port, version, min and max poll."; + "Common attribute like port, version, min and max + poll."; } } - list associations { key "address local-mode isConfigured"; config "false"; @@ -660,7 +668,8 @@ module ietf-ntp { leaf isConfigured { type boolean; description - "Whether this association is configured or dynamically learnt."; + "Whether this association is configured or + dynamically learnt."; } leaf stratum { type ntp-stratum; @@ -701,7 +710,8 @@ module ietf-ntp { } uses comman-attributes { description - "Common attribute like port, version, min and max poll."; + "Common attribute like port, version, min and + max poll."; } leaf reach { type uint8; @@ -812,7 +822,8 @@ module ietf-ntp { } uses comman-attributes { description - "Common attribute like port, version, min and max poll."; + "Common attribute like port, version, min and + max poll."; } } @@ -845,7 +856,8 @@ module ietf-ntp { } uses comman-attributes { description - "Common attribute like port, version, min and max poll."; + "Common attribute like port, version, min and + max poll."; } } list multicast-client { @@ -855,7 +867,8 @@ module ietf-ntp { leaf address { type rt-types:ip-multicast-group-address; description - "The IP address of the multicast group to join."; + "The IP address of the multicast group to + join."; } } list manycast-server { @@ -910,21 +923,20 @@ module ietf-ntp { } uses comman-attributes { description - "Common attribute like port, version, min and max poll."; + "Common attribute like port, version, min and + max poll."; } } } } - /* Operational state data */ - - container ntp-statistics { - config "false"; - description - "Total NTP packet statistic."; - uses statistics { - description - "NTP send and receive packet statistic."; - } + container ntp-statistics { + config "false"; + description + "Total NTP packet statistic."; + uses statistics { + description + "NTP send and receive packet statistic."; } } } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2016-10-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2016-10-30.yang deleted file mode 100644 index 2e76b76c1..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2016-10-30.yang +++ /dev/null @@ -1,179 +0,0 @@ -module ietf-opt-parameters-wdm { - namespace "urn:ietf:params:xml:ns:yang:ietf-opt-parameters-wdm"; - prefix iietf-opt-parameters-wdm; - - import ietf-interfaces { - prefix if; - } - - import iana-if-type { - prefix ianaift; - } - - organization - "IETF CCAMP - Working Group"; - - contact - "WG Web: - WG List: - - Editor: Gabriele Galimberti - "; - - description - "This module contains a collection of YANG definitions for - collecting and configuring Optical Parameters - in Optical Networks and calculate the circuit feasibility. - - 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)."; - - revision "2016-10-30" { - description - "Initial revision."; - reference - "RFC XXXX: A YANG Data Model for Optical Paramenters - of DWDM Networks - "; - } - - typedef tilt-t { - type decimal64 { - fraction-digits 2; - range "-5..5"; - } - description "Tilt Type"; - } - - typedef signal-output-power-t { - type decimal64 { - fraction-digits 2; - range "-10..30"; - } - description " - Amplifier Power provisioning "; - } - - typedef active-channel-t { - type union { - type uint8 { - range "0..200"; - } - } - description " - Number of channels active on a span - and on an amplifier"; - } - - typedef dbm-t { - type decimal64 { - fraction-digits 2; - range "-50..-30 | -10..5 | 10000000"; - } - description " - Amplifier Power in dBm "; - } - - typedef attenuator-t { - type decimal64 { - fraction-digits 2; - range "-15..-5"; - } - description " - Attenuation value (attenuator) applied after the Amplifier"; - } - - augment "/if:interfaces/if:interface" { - when "if:type = 'ianaift:opticalTransport'" { - description "Specific optical-transport Interface Data"; - } - description "Specific optical-transport Interface Data"; - container optical-transport { - description "Specific optical-transport Data"; - - leaf attenuator-value { - type attenuator-t; - description "External attenuator value "; - } - - leaf offset { - type decimal64 { - fraction-digits 2; - range "-30..30"; - } - description "Raman and power amplifiers offset"; - } - - leaf channel-power-ref { - type decimal64 { - fraction-digits 2; - range "-10..15"; - } - description "Optical power per channel"; - } - - leaf tilt-calibration { - type tilt-t; - description "Amplifier Tilt tuning"; - } - } - } - - grouping opwr-threshold-warning-grp { - description " - Minimum Optical Power threshold - - this is used to rise Power alarm "; - - leaf opwr-min { - type dbm-t; - units "dBm"; - default -1; - description "Minimum Power Value"; - } - - leaf opwr-min-clear { - type dbm-t; - units "dBm"; - default -1; - description "threshold to clear Minimum Power value Alarm"; - } - - leaf opwr-max { - type dbm-t; - units "dBm"; - default 1; - description " - Maximum Optical Power threshold - - this is used to rise Power alarm "; - } - } - - grouping gain-degrade-alarm-grp { - description " - Low Optical Power gain threshold - - this is used to rise Power alarm "; - - leaf gain-degrade-low { - type dbm-t; - units "dBm"; - default -1; - description "Low Gain Degrade Value"; - } - } - - leaf gain-degrade-high { - type dbm-t; - units "dBm"; - default 1; - description " - High Optical Power gain threshold - - this is used to rise Power alarm "; - } - } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2018-03-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2018-03-06.yang new file mode 100644 index 000000000..48b3a661c --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-opt-parameters-wdm@2018-03-06.yang @@ -0,0 +1,507 @@ +module ietf-opt-parameters-wdm { + namespace "urn:ietf:params:xml:ns:yang:ietf-opt-parameters-wdm"; + prefix iietf-opt-parameters-wdm; + + import ietf-interfaces { + prefix if; + } + + import iana-if-type { + prefix ianaift; + } + + organization + "IETF CCAMP + Working Group"; + + contact + "WG Web: + WG List: + + Editor: Gabriele Galimberti + "; + + description + "This module contains a collection of YANG definitions for + collecting and configuring Optical Parameters + in Optical Networks and calculate the circuit feasibility. + + 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)."; + + revision "2018-03-06" { + description + "Revision 1.0"; + reference + ""; + } + revision "2016-10-30" { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for Optical Paramenters + of DWDM Networks + "; + } + + typedef tilt-t { + type decimal64 { + fraction-digits 2; + range "-5..5"; + } + description "Tilt Type"; + } + + typedef signal-output-power-t { + type decimal64 { + fraction-digits 2; + range "-10..30"; + } + description " + Amplifier Power provisioning "; + } + + typedef active-channel-t { + type union { + type uint8 { + range "0..200"; + } + } + description " + Number of channels active on a span - and on an amplifier"; + } + + typedef dbm-t { + type decimal64 { + fraction-digits 2; + range "-50..-30 | -10..5 | 10000000"; + } + description " + Amplifier Power in dBm "; + } + + typedef attenuator-t { + type decimal64 { + fraction-digits 2; + range "-15..-5"; + } + description " + Attenuation value (attenuator) applied after the Amplifier"; + } + + typedef ch-noise-figure-point { + type decimal64 { + fraction-digits 2; + range "-15..-5"; + } + description " + Amplifier noise figure of point power"; + } + + typedef ch-isolation-cross { + type decimal64 { + fraction-digits 2; + range "-15..-5"; + } + description " + cross channel isolation value"; + } + + grouping opwr-threshold-warning-grp { + description " + Minimum Optical Power threshold + - this is used to rise Power alarm "; + + leaf opwr-min { + type dbm-t; + units "dBm"; + default -1; + description "Minimum Power Value"; + } + + leaf opwr-min-clear { + type dbm-t; + units "dBm"; + default -1; + description "threshold to clear Minimum Power value Alarm"; + } + + leaf opwr-max { + type dbm-t; + units "dBm"; + default 1; + description " + Maximum Optical Power threshold + - this is used to rise Power alarm "; + } + } + + grouping gain-degrade-alarm-grp { + description " + Low Optical Power gain threshold + - this is used to rise Power alarm "; + + leaf gain-degrade-low { + type dbm-t; + units "dBm"; + default -1; + description "Low Gain Degrade Value"; + } + + leaf gain-degrade-high { + type dbm-t; + units "dBm"; + default 1; + description " + High Optical Power gain threshold + - this is used to rise Power alarm "; + } + } + + grouping power-degrade-high-alarm-grp { + description " + High Optical Power gain alarm "; + + leaf gain-degrade-high { + type dbm-t; + units "dBm"; + default 1; + description "Low Gain Degrade Value"; + } + } + + grouping power-degrade-low-alarm-grp { + description " + Low Optical Power gain alarm "; + + leaf power-degrade-low { + type dbm-t; + units "dBm"; + default -1; + config false; + description "High Gain Degrade Value"; + } + } + + grouping noise-grp { + description "Noise feasibility"; + leaf noise { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "Noise feasibility - reference ITU-T G.680 + OSNR added to the signal by the OMS. The noise is intended + per channel and is independent of the number of active + channels in OMS"; + } + } + + grouping noise-sigma-grp { + description "Noise sigma feasibility"; + leaf noise-sigma { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "Noise Sigma feasibility - accuracy of the + OSNR added to + the signal by the OMS"; + } + } + + grouping chromatic-dispersion-grp { + description "Chromatic Dispersion"; + leaf chromatic-dispersion { + type decimal64 { + fraction-digits 2; + } + units "ps/nm"; + description "Chromatic Dispersion (CD) related to the OMS"; + } + } + + grouping chromatic-dispersion-slope-grp { + description "Chromatic Dispersion slope"; + leaf chromatic-dispersion-slope { + type decimal64 { + fraction-digits 2; + } + units "ps/nm^2"; + description "Chromatic Dispersion (CD) Slope related to + the OMS"; + } + } + + grouping pmd-grp { + description "Polarization Mode Dispersion"; + leaf pmd { + type decimal64 { + fraction-digits 2; + } + units "ps"; + description "Polarization Mode Dispersion (PMD) related + to OMS"; + } + } + + grouping pdl-grp { + description "Polarization Dependent Loss"; + leaf pdl { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "Polarization Dependent Loss (PDL) related to + the OMS"; + } + } + + grouping drop-power-grp { + description "Drop power at DWDM if RX feasibility"; + leaf drop-power { + type decimal64 { + fraction-digits 2; + } + units "dBm"; + description "Drop Power value at the DWDM Transceiver RX + side"; + } + } + + grouping drop-power-sigma-grp { + description "Drop power sigma at DWDM if RX feasibility "; + leaf drop-power-sigma { + type decimal64 { + fraction-digits 2; + } + units "db"; + description "Drop Power Sigma value at the DWDM Transceiver + RX side"; + } + } + + grouping ripple-grp { + description "Channel Ripple"; + leaf ripple { + type decimal64 { + fraction-digits 2; + } + units "db"; + description "Channel Ripple"; + } + } + + grouping ch-noise-figure-grp { + list ch-noise-figure { + key "ch-noise-fig"; + description "Channel signal-spontaneous noise figure"; + + leaf ch-noise-fig { + type ch-noise-figure-point; + description "Channel signal-spontaneous noise + figure point"; + } + + leaf input-to-output { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "from input port to output port"; + } + leaf input-to-drop { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "from input port to drop port"; + } + + leaf add-to-output { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "from add port to output port"; + } + } + description "Channel signal-spontaneous noise figure"; + } + + grouping dgd-grp { + description "Differential Group Delay"; + leaf dgd { + type decimal64 { + fraction-digits 2; + } + units "db"; + description "differential group delay"; + } + } + + grouping ch-isolation-grp { + list ch-isolation { + key "ch-isolat"; + description "adjacent and not adjacent channel isolation"; + + leaf ch-isolat { + type ch-isolation-cross; + description "channel isolation from adjacent"; + } + + leaf ad-ch-isol { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "adjecent channel isolation"; + } + + leaf no-ad-ch-iso { + type decimal64 { + fraction-digits 2; + } + units "dB"; + description "non adjecent channel isolation"; + } + } + description "djacent and not adjacent channel isolation"; + } + + grouping ch-extinction-grp { + description "Channel Extinsion"; + leaf cer { + type decimal64 { + fraction-digits 2; + } + units "db"; + description "channel extinction"; + } + } + + grouping att-coefficient-grp { + description "Attenuation coefficient (for a fibre segment)"; + leaf att { + type decimal64 { + fraction-digits 2; + } + units "db"; + description "Attenuation coefficient (for a fibre segment)"; + } + } + + augment "/if:interfaces/if:interface" { + when "if:type = 'ianaift:opticalTransport'" { + description "Specific optical-transport Interface Data"; + } + description "Specific optical-transport Interface Data"; + container optical-transport { + description "Specific optical-transport Data"; + + leaf attenuator-value { + type attenuator-t; + description "External attenuator value "; + } + + leaf offset { + type decimal64 { + fraction-digits 2; + range "-30..30"; + } + description "Raman and power amplifiers offset"; + } + + leaf channel-power-ref { + type decimal64 { + fraction-digits 2; + range "-10..15"; + } + description "Optical power per channel"; + } + + leaf tilt-calibration { + type tilt-t; + description "Amplifier Tilt tuning"; + } + } + container opwr-threshold-warning { + description "Optical power threshold warning"; + uses opwr-threshold-warning-grp; + } + container gain-degrade-alarm { + description "Gain degrade alarm"; + uses gain-degrade-alarm-grp; + } + container power-degrade-high-alarm { + description "Power degrade high aparm"; + uses power-degrade-high-alarm-grp; + } + container power-degrade-low-alarm { + description "Power degrade low alarm"; + uses power-degrade-low-alarm-grp; + } + container noise { + description "Channel Noise feasibility"; + uses noise-grp; + } + container noise-sigma { + description "Channel Noise sigma feasibility"; + uses noise-grp; + } + container chromatic-dispersion { + description "Chromatic Dispersion"; + uses noise-sigma-grp; + } + container chromatic-dispersion-slope { + description "Chromatic Dispersion slope"; + uses chromatic-dispersion-slope-grp; + } + container pmd { + description "Polarization Mode Dispersion"; + uses pmd-grp; + } + container pdl { + description "Polarization Dependent Loss"; + uses pdl-grp; + } + container drop-power { + description "Drop power at DWDM if RX feasibility"; + uses drop-power-grp; + } + container drop-power-sigma { + description "Drop power sigma at DWDM if RX feasibility"; + uses noise-grp; + } + container ripple { + description "Channel Ripple"; + uses drop-power-sigma-grp; + } + container ch-noise-figure { + config false; + description "Channel signal-spontaneous noise figure"; + uses ch-noise-figure-grp; + } + container dgd { + description "Differential Group Delay"; + uses dgd-grp; + } + container ch-isolation { + config false; + description "adjacent and not adjacent channel isolation"; + uses ch-isolation-grp; + } + container ch-extinction { + description "Channel Extinsion"; + uses ch-extinction-grp; + } + + } + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2017-12-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2018-03-03.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2017-12-28.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2018-03-03.yang index ff64f36b1..d6528033c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2017-12-28.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr@2018-03-03.yang @@ -69,6 +69,13 @@ module ietf-ospf-sr { reference "RFC XXXX"; + revision 2018-03-03 { + description + "* Remove OSPF instance."; + reference + "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; + } + revision 2017-12-28 { description ""; @@ -84,7 +91,6 @@ module ietf-ospf-sr { reference "RFC XXXX: A YANG Data Model for OSPF Segment Routing."; } - revision 2017-03-12 { description "* Add p-flag in adj-sid sub-tlv."; @@ -304,9 +310,9 @@ module ietf-ospf-sr { /* Configuration */ augment "/rt:routing/rt:control-plane-protocols" - + "/rt:control-plane-protocol/ospf:ospf/ospf:instance" { - when "../../rt:type = 'ospf:ospfv2' or " - + "../../rt:type = 'ospf:ospfv3'" { + + "/rt:control-plane-protocol/ospf:ospf" { + when "../rt:type = 'ospf:ospfv2' or " + + "../rt:type = 'ospf:ospfv3'" { description "This augments the OSPF routing protocol when used."; } @@ -323,10 +329,10 @@ module ietf-ospf-sr { } augment "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + + "rt:control-plane-protocol/ospf:ospf/" + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { - when "../../../../../../rt:type = 'ospf:ospfv2' or " - + "../../../../../../rt:type = 'ospf:ospfv3'" { + when "../../../../../rt:type = 'ospf:ospfv2' or " + + "../../../../../rt:type = 'ospf:ospfv3'" { description "This augments the OSPF interface configuration when used."; @@ -339,11 +345,11 @@ module ietf-ospf-sr { } augment "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + + "rt:control-plane-protocol/ospf:ospf/" + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface/" + "ospf:fast-reroute" { - when "../../../../../../../rt:type = 'ospf:ospfv2' or " - + "../../../../../../../rt:type = 'ospf:ospfv3'" { + when "../../../../../../rt:type = 'ospf:ospfv2' or " + + "../../../../../../rt:type = 'ospf:ospfv3'" { description "This augments the OSPF routing protocol when used."; } @@ -366,13 +372,13 @@ module ietf-ospf-sr { /* Database */ augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + + "ospf:ospf/ospf:areas/ospf:area/" + "ospf:interfaces/ospf:interface/ospf:database/" + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { - when "../../../../../../../../../../../../../../../" + when "../../../../../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -385,13 +391,13 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:areas/" + + "ospf:ospf/ospf:areas/" + "ospf:area/ospf:database/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { - when "../../../../../../../../../../../../../" + when "../../../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -404,12 +410,12 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:database/" + + "ospf:ospf/ospf:database/" + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:extended-prefix-tlvs/ospf:extended-prefix-tlv" { - when "../../../../../../../../../../../" + when "../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -422,13 +428,13 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:areas/" + + "ospf:ospf/ospf:areas/" + "ospf:area/ospf:database/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque/" + "ospf:extended-link-tlvs/ospf:extended-link-tlv" { - when "../../../../../../../../../../../../../" + when "../../../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -542,12 +548,12 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:areas/ospf:area/" + + "ospf:ospf/ospf:areas/ospf:area/" + "ospf:interfaces/ospf:interface/ospf:database/" + "ospf:link-scope-lsa-type/ospf:link-scope-lsas/" + "ospf:link-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque" { - when "../../../../../../../../../../../../../" + when "../../../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -565,12 +571,12 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:areas/" + + "ospf:ospf/ospf:areas/" + "ospf:area/ospf:database/" + "ospf:area-scope-lsa-type/ospf:area-scope-lsas/" + "ospf:area-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque" { - when "../../../../../../../../../../../" + when "../../../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; @@ -588,11 +594,11 @@ module ietf-ospf-sr { augment "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol/" - + "ospf:ospf/ospf:instance/ospf:database/" + + "ospf:ospf/ospf:database/" + "ospf:as-scope-lsa-type/ospf:as-scope-lsas/" + "ospf:as-scope-lsa/ospf:version/ospf:ospfv2/" + "ospf:ospfv2/ospf:body/ospf:opaque" { - when "../../../../../../../../../" + when "../../../../../../../../" + "rt:type = 'ospf:ospfv2'" { description "This augmentation is only valid for OSPFv2."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ospf@2017-10-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-ospf@2018-03-03.yang similarity index 83% rename from experimental/ietf-extracted-YANG-modules/ietf-ospf@2017-10-30.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ospf@2018-03-03.yang index ee9f5c70e..2d9116975 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ospf@2017-10-30.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ospf@2018-03-03.yang @@ -1,33 +1,51 @@ module ietf-ospf { + yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-ospf"; - prefix ospf; import ietf-inet-types { prefix "inet"; + reference "RFC 6021 - Common YANG Data Types"; } import ietf-yang-types { prefix "yang"; + reference "RFC 6021 - Common YANG Data Types"; } import ietf-interfaces { prefix "if"; + reference "RFC XXXX - A YANG Data Model for Interface + Management (NDMA Version)"; } import ietf-routing-types { prefix "rt-types"; + reference "RFC 8291 - Common YANG Data Types for the + Routing Area"; } import iana-routing-types { prefix "iana-rt-types"; + reference "RFC 8291 - Common YANG Data Types for the + Routing Area"; } + import ietf-routing { prefix "rt"; + reference "RFC XXXX - A YANG Data Model for Routing + Management (NMDA Version)"; } import ietf-key-chain { prefix "key-chain"; + reference "RFC 8177 - YANG Data Model for Key Chains"; + } + + import ietf-bfd-types { + prefix "bfd-types"; + reference "RFC XXXX - YANG Data Model for Bidirectional + Forwarding Detection (BFD)"; } organization @@ -60,6 +78,9 @@ module ietf-ospf { OSPF configuration parameters and policies, for example route maps or route policies. + This YANG model conforms to the Network Management + Datastore Architecture (NDMA) as described in RFC XXXX. + Copyright (c) 2017 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -75,185 +96,7 @@ module ietf-ospf { reference "RFC XXXX"; - revision 2017-10-30 { - description - "* Address iana-routing-types address-family type change. - * Complete NMDA change for routing-state augmentation. - "; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2017-07-01 { - description - "* Restructure model to conform to NMDA. - * Remove features for instance, area and interface - inheritance. - * Update static neighbor identifier description to - allow for router-id, ipv4-address, and ipv6-address. - * Added spf-log and lsa-log. - * Use dotted-quad for OSPFv2 LSA ID. - * Fix virtual-link transit-area-id leafref path and - must statement. - "; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2017-03-12 { - description - "* Update authors information. - * Rename admin distance to preference. - * Rename network type to interface type. - * Add ietf-spf-delay as a feature. - * Add node-tag as a feature and update LSA - definition accordingly. - * Remove LDP IGP autoconfig. - * Add BFD as a feature instead of a separate module. - * Change TE router ID to support IPv4 and IPv6 router ID. - * Replace key-chain:crypto-algorithm-types with - key-chain:crypto-algorithm. - * Remove type ieee-bandwidth. - * Import ietf-routing-types and make use of - router-id, address-family and bandwidth-ieee-float32 - type definitions. - * Simplify notification header. - * Fix compilation issue in multiple must statements. - "; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2016-10-31 { - description - "* Update authors information. - * Rename candidate-disabled to candidiate-enable - and set the default value to TRUE. - * Rename node identifiers that end with - 'enabled' to 'enable'. - * Set the default value of - ospf/instance/areas/area/interfaces/interface/ - fast-reroute/lfa/enable (previously named 'enabled') - to FALSE. - * Set the default value of - ospf/instance/areas/area/interfaces/interface/ - fast-reroute/remote-lfa/enable (previously named 'enabled') - to FALSE. - * Rename - ospf/instance/areas/area/interfaces/interface/ - static-neighbors/neighbor/address to 'identifier' - with type inet:ip-address - * Add 'dead-timer' to - ospf-state/instance/areas/area/interfaces/interface/ - neighbors/neighbor. - * Remove 'mtu-ignore' and 'prefix-suppression' from - virtual-link configuration. - * Adjust range specifications from 'transmit-delay', - 'dead-interval', and 'retransmit-interval' in - ospf/instance/areas/area/interfaces/interface. - * Change the type of - ospf/instance/areas/area/interface/interface/dead-interval - to uint32 to match RFC2328 Appendix A.3.2. - * Change hello-timer and wait-timer unit to seconds. - * Update hello-timer, dead-timer and wait-timer descriptions. - * Add IEEE bandwidth type and update all TE bandwidth fields - to use it. - * Add Nt-bit to OSPFv2 router LSA. - * Remove L-bit from OSPFv2 router LSA. - "; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2016-07-07 { - description - "* Add ospfv3 AF bit. - * Add ospfv2 MT, L, O, DN bit. - * Add interface priority config. - * Change bdr-ip-address to type ip-address. - * Rename leaf interface to name. - * Rename rx-bad-packet to if-rx-bad-packet. - * Move virtual link placement to backbone area. - * Remove cost configuration from virtual link. - * Move if-feature multi-area-adj statement. - * Add type checksum16-type. - * Change LSA header checksum to use checksum16-type. - * Change routing-protocol to control-plane-protocol. - * Change import module name to ietf-key-chain."; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2016-03-20 { - description - "* Reorganize *-config and *-operation groupings. - * Use *-config under state tree for applied config. - * Rename config router-id to explicit-router-id. - * Rename feature router-id to explicit-router-id. - * Add OSPFv3 instance ID. - * Add OSPFv3 interface ID. - * Add ip-address for DR and BDR. - * Remove routing-instance. - * Change import module name to ietf-routing-key-chain."; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2015-10-19 { - description - "* Remove the abstract identity ospf. - * Make area-id-type dotted-quad only. - * Use area-id-type for all area-id leafs. - * Restructure notifications. - * Move BFD support to the new ietf-ospf-bfd module. - * Update author information. - * Editorial changes."; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2015-09-02 { - description - "* Author information update. - * Editorial changes"; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2015-07-06 { - description - "* Remove support for protocol-centric config. - * Enclose list in container, except for instance. - * Replace protocol-shutdown with admin-control. - * Add IP-FRR per-interface config. - * Reorganize max-path etc node. - * Add node-flag. - * Align config/operation hierarchy. - * Use relative path for reference to rib. - * Add ability to set single admin distance. - * Make unreserved bandwidth into list. - * Add F and T bit to OSPFv3 external LSA. - * Remove key statement inside LSA body. - * Add stub router support. - * Fix usage of af-area-config. - * Add statistics to operation data. - * Add local rib. - * Use dotted-quad for all router-id fields. - * Support more than one multi-area per interface. - * Use uint16 for LSA type. - * Update grouping notification-instance-hdr. - * Rework condition for opaque type and id in OSPFv2 LSA. - * Rename local-remote-ipv4-addr with remote-if-ipv4-addr. - * Add virtual-link/sham-link to operation state. - * Allow multiple link TLVs in one LSA. - * Fix bug in as-scope-lsas. - * Remove OSPFv3 restriction in link-scope-lsas. - * Editorial changes."; - reference - "RFC XXXX: A YANG Data Model for OSPF."; - } - - revision 2015-03-09 { + revision 2018-03-03 { description "Initial revision."; reference @@ -263,11 +106,13 @@ module ietf-ospf { feature multi-topology { description "Support Multiple-Topolgy Routing (MTR)."; + reference "RFC 4915 - Multi-Topology Routing"; } feature multi-area-adj { description "OSPF multi-area adjacency support as in RFC 5185."; + reference "RFC 5185 - Multi-Area Adjacency"; } feature explicit-router-id { description @@ -277,6 +122,7 @@ module ietf-ospf { feature demand-circuit { description "OSPF demand circuit support as in RFC 1793."; + reference "RFC 1793 - OSPF Demand Circuits"; } feature mtu-ignore { @@ -288,16 +134,20 @@ module ietf-ospf { feature lls { description "OSPF link-local signaling (LLS) as in RFC 5613."; + reference "RFC 5613 - OSPF Link-Local Signaling"; } feature prefix-suppression { description "OSPF prefix suppression support as in RFC 6860."; + reference "RFC 6860 - Hide Transit-Only Networks in OSPF"; } feature ttl-security { description "OSPF TTL security check."; + reference "RFC 5082 - The Generalized TTL Security + Mechanism (GTSM)"; } feature nsr { @@ -309,7 +159,10 @@ module ietf-ospf { description "Graceful OSPF Restart as defined in RFC 3623 and RFC 5187."; + reference "RFC 3630 - Graceful OSPF Restart + RFC 5187 - OSPFv3 Graceful Restart"; } + feature admin-control { description "Administrative control of the protocol state."; @@ -319,6 +172,7 @@ module ietf-ospf { description "Calculate OSPF interface cost according to reference bandwidth."; + reference "RFC 2328 - OSPF Version 2"; } feature max-ecmp { @@ -330,82 +184,115 @@ module ietf-ospf { description "Setting maximum number of LSAs the OSPF instance will accept."; + reference "RFC 1765 - OSPF Database Overload"; } feature te-rid { description "TE Router-ID."; + reference "RFC 3630 - Traffic Engineering (TE) Extensions + to OSPF Version 2 + RFC 5329 - Traffic Engineering (TE) Extensions + to OSPF Version 3"; } feature ldp-igp-sync { description "LDP IGP synchronization."; + reference "RFC 5443 - LDP IGP Synchronization"; } feature ospfv3-authentication-ipsec { description "Use IPsec for OSPFv3 authentication."; + reference "RFC 4552 - Authentication/Confidentiality + for OSPFv3"; } feature fast-reroute { description "Support of IP Fast Reroute (IP-FRR)."; + reference "RFC 5714 - IP Fast Rereoute Framework"; } feature node-flag { description "Support of node flag."; + reference "RFC 7684 - OSPFv2 Prefix/Link Advertisement"; } feature node-tag { description "Support of node tag."; + reference "RFC 7777 - Advertising Node Administrative + Tags in OSPF"; } feature lfa { description "Support of Loop Free Alternates (LFAs)."; + reference "RFC 5286 - Basic Specification for IP Fast + Reroute: Loop-Free Alternates"; } feature remote-lfa { description "Support of Remote Loop Free Alternates (R-LFA)."; + reference "RFC 7490 - Remote Loop-Free Alternate (LFA) + Fast Reroute (FRR)"; } - feature stub-router { description "Support of RFC 6987 OSPF Stub Router Advertisement."; + reference "RFC 6987 - OSPF Stub Router Advertisement"; } feature pe-ce-protocol { description "Support PE-CE protocol"; + reference "RFC 4577 - OSPF as the Provider/Customer Edge + Protocol for BGP/MPLS IP Virtual Private + Networks (VPNs) + RFC 6565 - OSPFv3 as a Provider Edge to Customer + Edge (PE-CE) Routing Protocol"; } feature ietf-spf-delay { description "Support of IETF SPF delay algorithm."; + reference "RFC XXXX - SPF Back-off algorithm for link + state IGPs"; } feature bfd { description "Support of BFD."; + reference "RFC 5880 - Bidirectional Forwarding Detection + (BFD) + RFC 5881 - Bidirectional Forwarding Detection + (BFD) for IPv4 and IPv6 (Single Hop)"; } - identity ospfv2 { + identity ospf-protocol { base "rt:routing-protocol"; - description "OSPFv2"; + description "Any version the OSPF protocol"; + } + + identity ospfv2 { + base "ospf-protocol"; + description "OSPFv2 protocol"; } identity ospfv3 { - base "rt:routing-protocol"; - description "OSPFv3"; + base "ospf-protocol"; + description "OSPFv3 protocol"; } identity operation-mode { description "OSPF operation mode."; } + identity ships-in-the-night { base operation-mode; description @@ -417,21 +304,183 @@ module ietf-ospf { description "Base identity for OSPF area type."; } - identity normal { + identity normal-area { base area-type; description "OSPF normal area."; } - identity stub { + identity stub-nssa-area { base area-type; + description "OSPF stub or NSSA area."; + } + + identity stub-area { + base stub-nssa-area; description "OSPF stub area."; } - identity nssa { - base area-type; + identity nssa-area { + base stub-nssa-area; description "OSPF NSSA area."; + reference "RFC 3101 - The OSPF Not-So-Stubby Area + (NSSA) Option"; + } + + identity ospf-lsa-type { + description + "Base identity for OSPFv3 and OSPFv3 LSA types"; + } + + identity ospfv2-lsa-type { + base ospf-lsa-type; + description + "OSPFv2 LSA types"; + } + + identity ospfv2-router-lsa { + base ospfv2-lsa-type; + description + "OSPFv2 Router LSA - Type 1"; + } + + identity ospfv2-network-lsa { + base ospfv2-lsa-type; + description + "OSPFv2 Network LSA - Type 2"; + } + + identity ospfv2-summary-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 Summary LSA types"; + } + + identity ospfv2-network-summary-lsa { + base ospfv2-summary-lsa-type; + description + "OSPFv2 Network Summary LSA - Type 3"; + } + + identity ospfv2-asbr-summary-lsa { + base ospfv2-summary-lsa-type; + description + "OSPFv2 AS Boundary Router (ASBR) Summary LSA - Type 4"; + } + + identity ospfv2-external-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 External LSA types"; + } + + identity ospfv2-as-external-lsa { + base ospfv2-external-lsa-type; + description + "OSPFv2 AS External LSA - Type 5"; + } + + identity ospfv2-nssa-lsa { + base ospfv2-external-lsa-type; + description + "OSPFv2 Not-So-Stubby-Area (NSSA) LSA - Type 7"; + } + + identity ospfv2-opaque-lsa-type { + base ospfv2-lsa-type; + description + "OSPFv2 Opaque LSA types"; + } + + identity ospfv2-link-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 Link-Scoped Opaque LSA - Type 9"; + } + + identity ospfv2-area-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 Area-Scoped Opaque LSA - Type 10"; + } + + identity ospfv2-as-scope-opaque-lsa { + base ospfv2-opaque-lsa-type; + description + "OSPFv2 AS-Scoped Opaque LSA - Type 11"; + } + + identity ospfv3-lsa-type { + base ospf-lsa-type; + description + "OSPFv3 LSA types."; } + identity ospfv3-router-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Router LSA - Type 0x2001"; + } + + identity ospfv3-network-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Network LSA - Type 0x2002"; + } + + identity ospfv3-summary-lsa-type { + base ospfv3-lsa-type; + description + "OSPFv3 Summary LSA types"; + } + + identity ospfv3-inter-area-prefix-lsa { + base ospfv3-summary-lsa-type; + description + "OSPFv3 Inter-area Prefix LSA - Type 0x2003"; + } + + identity ospfv3-inter-area-router-lsa { + base ospfv3-summary-lsa-type; + description + "OSPFv3 Inter-area Router LSA - Type 0x2004"; + } + + identity ospfv3-external-lsa-type { + base ospfv3-lsa-type; + description + "OSPFv3 External LSA types"; + } + + identity ospfv3-as-external-lsa { + base ospfv3-external-lsa-type; + description + "OSPFv3 AS-External LSA - Type 0x4005"; + } + + identity ospfv3-nssa-lsa { + base ospfv3-external-lsa-type; + description + "OSPFv3 Not-So-Stubby-Area (NSSA) LSA - Type 0x2007"; + } + + identity ospfv3-link-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Link LSA - Type 0x0008"; + } + + identity ospfv3-intra-area-prefix-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Intra-area Prefix LSA - Type 0x2009"; + } + + identity ospfv3-router-information-lsa { + base ospfv3-lsa-type; + description + "OSPFv3 Router Information LSA - Types 0x800C, + 0xA00C, and 0xC00C"; + } identity lsa-log-reason { description "Base identity for an LSA log reason."; @@ -499,37 +548,37 @@ module ietf-ospf { typedef if-state-type { type enumeration { - enum Down { + enum down { value "1"; description "Interface down state."; } - enum Loopback { + enum loopback { value "2"; description "Interface loopback state."; } - enum Waiting { + enum waiting { value "3"; description "Interface waiting state."; } - enum Point-to-Point { + enum point-to-point { value "4"; description "Interface point-to-point state."; } - enum DR { + enum dr { value "5"; description "Interface Designated Router (DR) state."; } - enum BDR { + enum bdr { value "6"; description "Interface Backup Designated Router (BDR) state."; } - enum DR-Other { + enum dr-other { value "7"; description "Interface Other Designated Router state."; @@ -541,42 +590,42 @@ module ietf-ospf { typedef nbr-state-type { type enumeration { - enum Down { + enum down { value "1"; description "Neighbor down state."; } - enum Attempt { + enum attempt { value "2"; description "Neighbor attempt state."; } - enum Init { + enum init { value "3"; description "Neighbor init state."; } - enum 2-Way { + enum 2-way { value "4"; description "Neighbor 2-Way state."; } - enum ExStart { + enum ex-start { value "5"; description "Neighbor exchange start state."; } - enum Exchange { + enum exchange { value "6"; description "Neighbor exchange state."; } - enum Loading { + enum loading { value "7"; description "Neighbor loading state."; } - enum Full { + enum full { value "8"; description "Neighbor full state."; @@ -588,12 +637,12 @@ module ietf-ospf { typedef restart-helper-status-type { type enumeration { - enum Not-Helping { + enum not-helping { value "1"; description "Restart helper status not helping."; } - enum Helping { + enum helping { value "2"; description "Restart helper status helping."; @@ -605,30 +654,30 @@ module ietf-ospf { typedef restart-exit-reason-type { type enumeration { - enum None { + enum none { value "1"; description - "Not attempted."; + "Restart not attempted."; } - enum InProgress { + enum in-progress { value "2"; description "Restart in progress."; } - enum Completed { + enum completed { value "3"; description - "Successfully completed."; + "Restart successfully completed."; } - enum TimedOut { + enum timed-out { value "4"; description - "Timed out."; + "Restart timed out."; } - enum TopologyChanged { + enum topology-changed { value "5"; description - "Aborted due to topology change."; + "Restart aborted due to topology change."; } } description @@ -639,27 +688,27 @@ module ietf-ospf { typedef packet-type { type enumeration { - enum Hello { + enum hello { value "1"; description "OSPF hello packet."; } - enum Database-Descripton { + enum database-descripton { value "2"; description "OSPF database description packet."; } - enum Link-State-Request { + enum link-state-request { value "3"; description "OSPF link state request packet."; } - enum Link-State-Update { + enum link-state-update { value "4"; description "OSPF link state update packet."; } - enum Link-State-Ack { + enum link-state-ack { value "5"; description "OSPF link state acknowlegement packet."; @@ -671,16 +720,16 @@ module ietf-ospf { typedef nssa-translator-state-type { type enumeration { - enum Enabled { + enum enabled { value "1"; description "NSSA translator enabled state."; } - enum Elected { + enum elected { description "NSSA translator elected state."; } - enum Disabled { + enum disabled { value "3"; description "NSSA translator disabled state."; @@ -692,16 +741,16 @@ module ietf-ospf { typedef restart-status-type { type enumeration { - enum Not-Restarting { + enum not-restarting { value "1"; description "Router is not restarting."; } - enum Planned-Restart { + enum planned-restart { description "Router is going through planned restart."; } - enum Unplanned-Restart { + enum unplanned-restart { value "3"; description "Router is going through unplanned restart."; @@ -711,14 +760,15 @@ module ietf-ospf { "OSPF graceful restart status type."; } - typedef checksum16-type { + typedef fletcher-checksum16-type { type string { pattern '(0x)?[0-9a-fA-F]{4}'; } - description - "16-bit checksum in hex-string format 0xXXXX."; + description + "Fletcher 16-bit checksum in hex-string format 0xXXXX."; + reference "RFC 905 - ISO Transport Protocol specification + ISO DP 8073"; } - grouping tlv { description "TLV"; @@ -728,7 +778,7 @@ module ietf-ospf { } leaf length { type uint16; - description "TLV length."; + description "TLV length (octets)."; } leaf value { type yang:hex-string; @@ -769,25 +819,26 @@ module ietf-ospf { type inet:ipv4-address; type yang:dotted-quad; } - description "Link ID."; + description "Router-LSA Link ID"; } leaf link-data { type union { type inet:ipv4-address; type uint32; } - description "Link data."; + description "Router-LSA Link data."; } leaf type { type uint8; - description "Link type."; + description "Router-LSA Link type."; } } grouping ospfv2-lsa-body { description "OSPFv2 LSA body."; container router { - when "../../header/type = 1" { + when "derived-from-or-self(../../header/type, " + + "'ospf:ospfv2-router-lsa')" { description "Only applies to Router LSAs."; } @@ -849,7 +900,8 @@ module ietf-ospf { } } container network { - when "../../header/type = 2" { + when "derived-from-or-self(../../header/type, " + + "'ospfv2-network-lsa')" { description "Only applies to Network LSAs."; } @@ -870,8 +922,8 @@ module ietf-ospf { } } container summary { - when "../../header/type = 3 or " - + "../../header/type = 4" { + when "derived-from(../../header/type, " + + "'ospfv2-summary-lsa-type')" { description "Only applies to Summary LSAs."; } @@ -901,8 +953,8 @@ module ietf-ospf { } } container external { - when "../../header/type = 5 or " - + "../../header/type = 7" { + when "derived-from(../../header/type, " + + "'ospfv2-external-lsa-type')" { description "Only applies to AS-external LSAs and NSSA LSAs."; } @@ -952,9 +1004,8 @@ module ietf-ospf { } } container opaque { - when "../../header/type = 9 or " - + "../../header/type = 10 or " - + "../../header/type = 11" { + when "derived-from(../../header/type, " + + "'ospfv2-opaque-lsa-type')" { description "Only applies to Opaque LSAs."; } @@ -982,6 +1033,7 @@ module ietf-ospf { "Router address."; } } + container link-tlvs { description "All link TLVs in the LSA."; list link-tlv { @@ -1053,7 +1105,6 @@ module ietf-ospf { uses unknown-tlvs; } } - container extended-prefix-tlvs { description "All extended prefix TLVs in the LSA."; list extended-prefix-tlv { @@ -1150,7 +1201,6 @@ module ietf-ospf { description "OSPFv3 LSA options."; } } - grouping ospfv3-lsa-prefix { description "OSPFv3 LSA prefix."; @@ -1247,7 +1297,8 @@ module ietf-ospf { grouping ospfv3-lsa-body { description "OSPFv3 LSA body."; container router { - when "../../header/type = 8193" { // 0x2001 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-router-lsa')" { description "Only applies to Router LSAs."; } @@ -1310,7 +1361,8 @@ module ietf-ospf { } } container network { - when "../../header/type = 8194" { // 0x2002 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-network-lsa')" { description "Only applies to Network LSA."; } @@ -1328,7 +1380,8 @@ module ietf-ospf { } } container inter-area-prefix { - when "../../header/type = 8195" { // 0x2003 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-inter-area-prefix-lsa')" { description "Only applies to Inter-Area-Prefix LSAs."; } @@ -1340,7 +1393,8 @@ module ietf-ospf { description "Inter-Area-Prefix LSA."; } container inter-area-router { - when "../../header/type = 8196" { // 0x2004 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-inter-area-router-lsa')" { description "Only applies to Inter-Area-Router LSAs."; } @@ -1357,7 +1411,8 @@ module ietf-ospf { description "Inter-Area-Router LSA."; } container as-external { - when "../../header/type = 16389" { // 0x4005 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-as-external-lsa')" { description "Only applies to AS-external LSAs."; } @@ -1367,7 +1422,8 @@ module ietf-ospf { description "AS-External LSA."; } container nssa { - when "../../header/type = 8199" { // 0x2007 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-nssa-lsa')" { description "Only applies to NSSA LSAs."; } @@ -1376,7 +1432,8 @@ module ietf-ospf { description "NSSA LSA."; } container link { - when "../../header/type = 8" { // 0x0008 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-link-lsa')" { description "Only applies to Link LSAs."; } @@ -1409,11 +1466,13 @@ module ietf-ospf { description "Link LSA."; } container intra-area-prefix { - when "../../header/type = 8201" { // 0x2009 + when "derived-from-or-self(../../header/type, " + + "'ospfv3-intra-area-prefix-lsa')" { description "Only applies to Intra-Area-Prefix LSA."; } description "Intra-Area-Prefix LSA."; + leaf referenced-ls-type { type uint16; description "Referenced Link State type."; @@ -1446,10 +1505,8 @@ module ietf-ospf { } } container router-information { - when "../../header/type = 32780 or " // 0x800C - + "../../header/type = 40972 or " // 0xA00C - + "../../header/type = 49164 or " // 0xC00C - + "../../header/type = 57356" { // 0xE00C + when "derived-from-or-self(../../header/type, " + + "'ospfv3-router-information-lsa')" { description "Only applies to Router Information LSAs (RFC7770)."; } @@ -1475,7 +1532,9 @@ module ietf-ospf { description "LSA age."; } leaf type { - type uint16; + type identityref { + base ospf-lsa-type; + } mandatory true; description "LSA type."; } @@ -1490,7 +1549,7 @@ module ietf-ospf { description "LSA sequence number."; } leaf checksum { - type checksum16-type; + type fletcher-checksum16-type; mandatory true; description "LSA checksum."; } @@ -1505,11 +1564,12 @@ module ietf-ospf { description "OSPFv2 LSA."; container header { - must "(type = 9 or type = 10 or type = 11) and " - + "opaque-id and opaque-type " - + "or (type != 9 and type != 10 and type != 11) " - + "and not(opaque-id) and " - + "not(opaque-type)" { + must "(derived-from-or-self(type, " + + "'ospfv2-opaque-lsa-type') and " + + "opaque-id and opaque-type) or " + + "(not(derived-from-or-self(type, " + + "'ospfv2-opaque-lsa-type')) " + + "and not(opaque-id) and not(opaque-type))" { description "Opaque type and ID only apply to Opaque LSAs."; } @@ -1589,7 +1649,7 @@ module ietf-ospf { leaf lsa-id { type uint32; mandatory true; - description "LSA ID."; + description "OSPFv3 LSA ID."; } uses lsa-header; } @@ -1601,7 +1661,7 @@ module ietf-ospf { } grouping lsa-common { description - "Common field for OSPF LSA represenation."; + "Common fields for OSPF LSA represenation."; leaf decoded-completed { type boolean; description @@ -1813,7 +1873,6 @@ module ietf-ospf { } } } - grouping interface-fast-reroute-config { description "This group defines interface configuration of IP-FRR."; @@ -1891,7 +1950,7 @@ module ietf-ospf { } units seconds; description - "Interval between hello packets in seconds."; + "Interval between hello packets (seconds)."; } leaf dead-interval { @@ -1907,7 +1966,7 @@ module ietf-ospf { } description "Interval after which a neighbor is - declared down in seconds."; + declared down (seconds)."; } leaf retransmit-interval { @@ -1917,7 +1976,7 @@ module ietf-ospf { units seconds; description "Interval between retransmitting unacknowledged Link - State Advertisements (LSAs) in seconds."; + State Advertisements (LSAs) (seconds)."; } leaf transmit-delay { @@ -1927,7 +1986,7 @@ module ietf-ospf { units seconds; description "Estimated time needed to transmit Link State Update - packets on the interface in seconds."; + packets on the interface (seconds)."; } leaf lls { @@ -1968,7 +2027,8 @@ module ietf-ospf { description "Options for expressing authentication setting."; case auth-ipsec { - when "../../../../../../../rt:type = 'ospf:ospfv3'" { + when "derived-from-or-self(../../../../../../rt:type, " + + "'ospf:ospfv3')" { description "Applied to OSPFv3 only."; } if-feature ospfv3-authentication-ipsec; @@ -2005,7 +2065,6 @@ module ietf-ospf { grouping interface-config { description "Configuration for real interfaces."; - leaf interface-type { type enumeration { enum "broadcast" { @@ -2096,7 +2155,7 @@ module ietf-ospf { range "1..65535"; } units seconds; - description "Neighbor poll interval in seconds."; + description "Neighbor poll interval (seconds)."; } leaf priority { type uint8 { @@ -2117,13 +2176,11 @@ module ietf-ospf { container bfd { if-feature bfd; - description "BFD configuration."; - leaf enable { - type boolean; - default false; - description - "True if BFD is enabled for the OSPF interface."; - } + description "BFD Client Configuration."; + uses bfd-types:client-cfg-parms; + reference "draft-ietf-bfd-yang-xx.txt: + YANG Data Model for Bidirectional Forwarding + Detection (BFD)"; } uses interface-fast-reroute-config; @@ -2134,6 +2191,7 @@ module ietf-ospf { grouping neighbor-state { description "OSPF neighbor operational state."; + leaf address { type inet:ip-address; config false; @@ -2151,7 +2209,6 @@ module ietf-ospf { config false; description "Neighbor's Designated Router (DR) IP address."; } - leaf bdr-router-id { type rt-types:router-id; config false; @@ -2277,14 +2334,16 @@ module ietf-ospf { uses lsa-key; uses lsa { refine "version/ospfv2/ospfv2" { - must "../../../../../../../../../../../" - + "rt:type = 'ospf:ospfv2'" { + must "derived-from-or-self( " + + "../../../../../../../../../../" + + "rt:type, 'ospf:ospfv2')" { description "OSPFv2 LSA."; } } refine "version/ospfv3/ospfv3" { - must "../../../../../../../../../../../" - + "rt:type = 'ospf:ospfv3'" { + must "derived-from-or-self( " + + "../../../../../../../../../../" + + "rt:type, 'ospf:ospfv3')" { description "OSPFv3 LSA."; } } @@ -2294,7 +2353,6 @@ module ietf-ospf { } // list link-scope-lsas } } // interface-common-state - grouping interface-state { description "OSPF interface operational state."; @@ -2343,7 +2401,6 @@ module ietf-ospf { grouping af-area-config { description "OSPF address-family specific area config state."; - container ranges { description "Container for summary ranges"; @@ -2378,8 +2435,7 @@ module ietf-ospf { "OSPF area common configuration state."; leaf summary { - when "../area-type = 'ospf:stub' or " - + "../area-type = 'ospf:nssa'" { + when "derived-from(../area-type,'ospf:stub-nssa-area')" { description "Summary advertisement into the stub/NSSA area."; } @@ -2389,8 +2445,7 @@ module ietf-ospf { NSSA area."; } leaf default-cost { - when "../area-type = 'ospf:stub' or " - + "../area-type = 'ospf:nssa'" { + when "derived-from(../area-type,'ospf:stub-nssa-area')" { description "Cost for LSA default route advertised into the stub or NSSA area."; @@ -2412,7 +2467,7 @@ module ietf-ospf { type identityref { base area-type; } - default normal; + default normal-area; description "Area type."; } @@ -2420,8 +2475,8 @@ module ietf-ospf { uses area-common-config; uses af-area-config { - when "../../../operation-mode = " - + "'ospf:ships-in-the-night'" { + when "derived-from-or-self(../../operation-mode, " + + "'ospf:ships-in-the-night')" { description "Ships in the night configuration."; } @@ -2458,14 +2513,16 @@ module ietf-ospf { uses lsa-key; uses lsa { refine "version/ospfv2/ospfv2" { - must "../../../../../../../../../" - + "rt:type = 'ospf:ospfv2'" { + must "derived-from-or-self( " + + "../../../../../../../../" + + "rt:type, 'ospf:ospfv2')" { description "OSPFv2 LSA."; } } refine "version/ospfv3/ospfv3" { - must "../../../../../../../../../" - + "rt:type = 'ospf:ospfv3'" { + must "derived-from-or-self( " + + "../../../../../../../../" + + "rt:type, 'ospf:ospfv3')" { description "OSPFv3 LSA."; } } @@ -2525,32 +2582,33 @@ module ietf-ospf { type uint16; units msec; description - "Delay used while in QUIET state."; + "Delay used while in QUIET state (milliseconds)."; } leaf short-delay { type uint16; units msec; description - "Delay used while in SHORT_WAIT state."; + "Delay used while in SHORT_WAIT state (milliseconds)."; } leaf long-delay { type uint16; units msec; description - "Delay used while in LONG_WAIT state."; + "Delay used while in LONG_WAIT state (milliseconds)."; } leaf hold-down { type uint16; units msec; description - "Timer used to consider an IGP stability period."; + "Timer used to consider an IGP stability period + (milliseconds)."; } leaf time-to-learn { type uint16; units msec; description "Duration used to learn all the IGP events - related to a single component failure."; + related to a single component failure (milliseconds)."; } description "Grouping for IETF SPF delay configuration."; @@ -2559,13 +2617,13 @@ module ietf-ospf { grouping ietf-spf-delay-state { leaf current-state { type enumeration { - enum "QUIET" { + enum "quiet" { description "QUIET state"; } - enum "SHORT_WAIT" { + enum "short-wait" { description "SHORT_WAIT state"; } - enum "LONG_WAIT" { + enum "long-wait" { description "LONG_WAIT state"; } } @@ -2651,7 +2709,7 @@ module ietf-ospf { leaf all { type uint8; description - "Preference for intra-area, inter-area and + "Preference for intra-area, inter-area, and external routes."; } } @@ -2705,6 +2763,7 @@ module ietf-ospf { if-feature graceful-restart; description "Graceful restart config state."; + reference "RFC3623 - OSPF Graceful Restart"; leaf enable { type boolean; description @@ -2724,8 +2783,8 @@ module ietf-ospf { units seconds; default "120"; // Default is defined in RFC 3623. description - "Interval in seconds to attempt graceful restart prior - to failing (RFC 3623 Section B.1)"; + "Interval to attempt graceful restart prior + to failing (RFC 3623 Section B.1) (seconds)"; } leaf helper-strict-lsa-checking { type boolean; @@ -2897,14 +2956,16 @@ module ietf-ospf { uses lsa-key; uses lsa { refine "version/ospfv2/ospfv2" { - must "../../../../../../../rt:type = " - + "'ospf:ospfv2'" { + must "derived-from-or-self( " + + "../../../../../../" + + "rt:type, 'ospf:ospfv2')" { description "OSPFv2 LSA."; } } refine "version/ospfv3/ospfv3" { - must "../../../../../../../rt:type = " - + "'ospf:ospfv3'" { + must "derived-from-or-self( " + + "../../../../../../" + + "rt:type, 'ospf:ospfv3')" { description "OSPFv3 LSA."; } } @@ -2916,7 +2977,6 @@ module ietf-ospf { uses spf-log; uses lsa-log; } - grouping ospf-config { description "OSPF top configuration state."; @@ -2941,10 +3001,9 @@ module ietf-ospf { description "OSPF multi-topology area common configuration state."; leaf summary { - when "../../../../../areas/area[area-id=current()/../area-id]/" - + "area-type = 'ospf:stub' or " + when "derived-from(" + "../../../../../areas/area[area-id=current()/../area-id]/" - + "area-type = 'ospf:nssa'" { + + "area-type, 'stub-nssa-area')" { description "Summary advertisement into the stub/NSSA area."; } @@ -2954,10 +3013,9 @@ module ietf-ospf { topology in the stub or NSSA area."; } leaf default-cost { - when "../../../../../areas/area[area-id=current()/../area-id]/" - + "area-type = 'ospf:stub' or " + when "derived-from(" + "../../../../../areas/area[area-id=current()/../area-id]/" - + "area-type = 'ospf:nssa'" { + + "area-type, 'stub-nssa-area')" { description "Cost for LSA default route advertised into the topology into the stub or NSSA area."; @@ -2978,8 +3036,8 @@ module ietf-ospf { uses multi-topology-area-common-config; uses af-area-config { - when "../../../../../operation-mode = " - + "'ospf:ships-in-the-night'" { + when "derived-from-or-self(../../../../operation-mode, " + + "'ospf:ships-in-the-night')" { description "Ships in the night configuration."; } @@ -3015,7 +3073,6 @@ module ietf-ospf { "Interface cost for this topology."; } } - grouping multi-topology-interface-state { /* All leaf/container must be config false. */ description @@ -3046,6 +3103,7 @@ module ietf-ospf { "OSPFv3 interface ID."; } } + grouping lsa-identifiers { description "The parameters that uniquely identify an LSA."; @@ -3197,7 +3255,7 @@ module ietf-ospf { augment "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol" { - when "rt:type = 'ospf:ospfv2' or rt:type = 'ospf:ospfv3'" { + when "derived-from(rt:type, 'ospf:ospf-protocol')" { description "This augmentation is only valid for a routing protocol instance of OSPF (type 'ospfv2' or 'ospfv3')."; @@ -3206,124 +3264,117 @@ module ietf-ospf { container ospf { description - "OSPF."; - + "OSPF protocol Instance"; uses ospf-config; uses ospf-state; - list instance { - key "af"; + leaf af { + type iana-rt-types:address-family; description - "An OSPF routing protocol instance."; - - leaf af { - type iana-rt-types:address-family; - description - "Address-family of the instance."; - } + "Address-family of the instance."; + } - uses instance-config; - uses instance-state; + uses instance-config; + uses instance-state; - container areas { - description "All areas."; - list area { - key "area-id"; + container areas { + description "All areas."; + list area { + key "area-id"; + description + "List of OSPF areas"; + leaf area-id { + type area-id-type; description - "List of OSPF areas"; - leaf area-id { - type area-id-type; - description - "Area ID."; - } + "Area ID"; + } - uses area-config; - uses area-state; + uses area-config; + uses area-state; - container virtual-links { - when "../area-id = '0.0.0.0' and " - + "../area-type = 'ospf:normal'" { - description - "Virtual links must be in backbone area."; - } - description "All virtual links."; - list virtual-link { - key "transit-area-id router-id"; - description - "OSPF virtual link"; - leaf transit-area-id { - type leafref { - path "../../../../area/area-id"; - } - must "../../../../area[area-id=current()]/" - + "area-id != '0.0.0.0' and " - + "../../../../area[area-id=current()]/" - + "area-type = 'ospf:normal'" { - error-message "Virtual link transit area must " - + "be non-zero."; - description - "Virtual-link trasit area must be - non-zero area."; - } - description - "Virtual link tranist area ID."; + container virtual-links { + when "derived-from-or-self(../area-type, 'normal-area') " + + "and ../area-id = '0.0.0.0'" { + description + "Virtual links must be in backbone area."; + } + description "All virtual links."; + list virtual-link { + key "transit-area-id router-id"; + description + "OSPF virtual link"; + leaf transit-area-id { + type leafref { + path "../../../../area/area-id"; } - leaf router-id { - type rt-types:router-id; + must "derived-from-or-self(" + + "../../../../area[area-id=current()]/area-type, " + + "'normal-area') and " + + "../../../../area[area-id=current()]/area-id != " + + "'0.0.0.0'" { + error-message "Virtual link transit area must " + + "be non-zero."; description - "Virtual Link remote endpoint router ID."; + "Virtual-link trasit area must be + non-zero area."; } - - uses virtual-link-config; - uses virtual-link-state; + description + "Virtual link tranist area ID."; } - } - container sham-links { - if-feature pe-ce-protocol; - description "All sham links."; - list sham-link { - key "local-id remote-id"; + leaf router-id { + type rt-types:router-id; description - "OSPF sham link"; - leaf local-id { - type inet:ip-address; - description - "Address of the local Sham Link endpoint."; - } - leaf remote-id { - type inet:ip-address; - description - "Address of the remote Sham Link endpoint."; - } - uses sham-link-config; - uses sham-link-state; + "Virtual Link remote endpoint router ID."; } + + uses virtual-link-config; + uses virtual-link-state; } - container interfaces { - description "All interfaces."; - list interface { - key "name"; + } + container sham-links { + if-feature pe-ce-protocol; + description "All sham links."; + list sham-link { + key "local-id remote-id"; + description + "OSPF sham link"; + leaf local-id { + type inet:ip-address; description - "List of OSPF interfaces."; - leaf name { - type if:interface-ref; - description - "Interface name."; - } - uses interface-config; - uses interface-state; - } // list of interfaces + "Address of the local Sham Link endpoint."; + } + leaf remote-id { + type inet:ip-address; + description + "Address of the remote Sham Link endpoint."; + } + uses sham-link-config; + uses sham-link-state; } - } // list of areas - } - } // list of instance - } // container ospf + } + container interfaces { + description "All interfaces."; + list interface { + key "name"; + description + "List of OSPF interfaces."; + leaf name { + type if:interface-ref; + description + "Interface name."; + } + uses interface-config; + uses interface-state; + } // list of interfaces + } + } // list of areas + } + } // OSPF instance } augment "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol/ospf:ospf/ospf:instance" { - when "../../rt:type = 'ospf:ospfv2' or - ../../rt:type = 'ospf:ospfv3'" { + + "rt:control-plane-protocol/ospf:ospf" { + when "derived-from(../rt:type, 'ospf:ospf-protocol')" { description "This augmentation is only valid for OSPF (type 'ospfv2' or 'ospfv3')."; @@ -3341,7 +3392,7 @@ module ietf-ospf { description "OSPF topology."; leaf name { type leafref { - path "../../../../../../../rt:ribs/rt:rib/rt:name"; + path "../../../../../../rt:ribs/rt:rib/rt:name"; } description "RIB"; } @@ -3369,9 +3420,10 @@ module ietf-ospf { } augment "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + + "rt:control-plane-protocol/ospf:ospf/" + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { - when "../../../../../../rt:type = 'ospf:ospfv2'" { + when "derived-from-or-self(../../../../../rt:type, " + + "'ospf:ospfv2')" { description "This augmentation is only valid for OSPFv2."; } @@ -3386,7 +3438,7 @@ module ietf-ospf { description "OSPF interface topology."; leaf name { type leafref { - path "../../../../../../../../../../../" + path "../../../../../../../../../../" + "rt:ribs/rt:rib/rt:name"; } description @@ -3400,9 +3452,10 @@ module ietf-ospf { } augment "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol/ospf:ospf/ospf:instance/" + + "rt:control-plane-protocol/ospf:ospf/" + "ospf:areas/ospf:area/ospf:interfaces/ospf:interface" { - when "../../../../../../rt:type = 'ospf:ospfv3'" { + when "derived-from-or-self(../../../../../rt:type, " + + "'ospf:ospfv3')" { description "This augmentation is only valid for OSPFv3."; } @@ -3430,9 +3483,9 @@ module ietf-ospf { description "OSPF route type"; } } + augment "/rt:routing/rt:ribs/rt:rib/rt:routes/rt:route" { - when "rt:source-protocol = 'ospf:ospfv2' or " - + "rt:source-protocol = 'ospf:ospfv3'" { + when "derived-from(rt:source-protocol, 'ospf:ospf-protocol')" { description "This augmentation is only valid for a routes whose source protocol is OSPF."; @@ -3526,12 +3579,10 @@ module ietf-ospf { path "/rt:routing/rt:control-plane-protocols/" + "rt:control-plane-protocol/rt:name"; } - must "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol[rt:name=current()]/" - + "rt:type = 'ospf:ospfv2' or " - + "/rt:routing/rt:control-plane-protocols/" - + "rt:control-plane-protocol[rt:name=current()]/" - + "rt:type = 'ospf:ospfv3'"; + must "derived-from( " + + "/rt:routing/rt:control-plane-protocols/" + + "rt:control-plane-protocol[rt:name=current()]/" + + "rt:type, 'ospf:ospf-protocol')"; description "OSPF routing protocol instance name."; } @@ -3541,7 +3592,7 @@ module ietf-ospf { path "/rt:routing/" + "rt:control-plane-protocols/rt:control-plane-protocol" + "[rt:name=current()/../routing-protocol-name]/" - + "ospf:ospf/ospf:instance/af"; + + "ospf:ospf/af"; } description "Address family of the OSPF instance."; @@ -3637,43 +3688,43 @@ module ietf-ospf { leaf error { type enumeration { - enum "badVersion" { + enum "bad-version" { description "Bad version."; } - enum "areaMismatch" { + enum "area-mismatch" { description "Area mistmatch."; } - enum "unknownNbmaNbr" { + enum "unknown-nbma-nbr" { description "Unknown NBMA neighbor."; } - enum "unknownVirtualNbr" { + enum "unknown-virtual-nbr" { description "Unknown virtual link neighbor."; } - enum "authTypeMismatch" { + enum "auth-type-mismatch" { description "Auth type mismatch."; } - enum "authFailure" { + enum "auth-failure" { description "Auth failure."; } - enum "netMaskMismatch" { + enum "net-mask-mismatch" { description "Network mask mismatch."; } - enum "helloIntervalMismatch" { + enum "hello-interval-mismatch" { description "Hello interval mismatch."; } - enum "deadIntervalMismatch" { + enum "dead-interval-mismatch" { description "Dead interval mismatch."; } - enum "optionMismatch" { + enum "option-mismatch" { description "Option mismatch."; } - enum "mtuMismatch" { + enum "mtu-mismatch" { description "MTU mismatch."; } - enum "duplicateRouterId" { + enum "duplicate-router-id" { description "Duplicate router ID."; } - enum "noError" { + enum "no-error" { description "No error."; } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-02-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-03-15.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-02-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-03-15.yang index 5c511f3a2..444cc3e95 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-02-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-packet-fields@2018-03-15.yang @@ -5,18 +5,24 @@ module ietf-packet-fields { import ietf-inet-types { prefix inet; + reference + "RFC 6991 - Common YANG Data Types."; } import ietf-yang-types { prefix yang; + reference + "RFC 6991 - Common YANG Data Types."; } import ietf-ethertypes { prefix eth; + reference + "RFC XXXX - Network ACL YANG Model."; } organization - "IETF NETMOD (NETCONF Data Modeling Language) Working + "IETF NETMOD (Network Modeling Language) Working Group"; contact @@ -50,7 +56,7 @@ module ietf-packet-fields { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2018-02-02 { + revision 2018-03-15 { description "Initial version."; reference @@ -139,7 +145,7 @@ module ietf-packet-fields { description "IP header fields common to ipv4 and ipv6"; reference - "RFC 791."; + "RFC 791: Internet Protocol."; leaf dscp { type inet:dscp; @@ -157,7 +163,7 @@ module ietf-packet-fields { description "Explicit Congestion Notification."; reference - "RFC 3168."; + "RFC 3168: Explicit Congestion Notification."; } leaf length { @@ -171,7 +177,8 @@ module ietf-packet-fields { Length, the length of the IPv6 payload, i.e. the rest of the packet following the IPv6 header, in octets."; reference - "RFC 719, RFC 2460"; + "RFC 791: Internet Protocol, + RFC 8200: IPv6."; } leaf ttl { @@ -179,10 +186,12 @@ module ietf-packet-fields { description "This field indicates the maximum time the datagram is allowed to remain in the internet system. If this field contains the - value zero, then the datagram must be destroyed. + value zero, then the datagram must be dropped. In IPv6, this field is known as the Hop Limit."; - reference "RFC 719, RFC 2460"; + reference + "RFC 791: Internet Protocol, + RFC 8200: IPv6."; } leaf protocol { @@ -190,7 +199,9 @@ module ietf-packet-fields { description "Internet Protocol number. Refers to the protocol of the payload. In IPv6, this field is known as 'next-header."; - reference "RFC 719, RFC 2460."; + reference + "RFC 791: Internet Protocol, + RFC 8200: IPv6."; } } @@ -397,12 +408,6 @@ module ietf-packet-fields { leaf flags { type bits { - bit ns { - position 0; - description - "ECN-nonce concealment protection"; - reference "RFC 3540"; - } bit cwr { position 1; description @@ -410,7 +415,8 @@ module ietf-packet-fields { the sending host to indicate that it received a TCP segment with the ECE flag set and had responded in congestion control mechanism."; - reference "RFC 3168"; + reference + "RFC 3168: Explicit Congestion Notification."; } bit ece { position 2; @@ -424,6 +430,8 @@ module ietf-packet-fields { (added to header by RFC 3168). This serves as an indication of network congestion (or impending congestion) to the TCP sender."; + reference + "RFC 3168: Explicit Congestion Notification."; } bit urg { position 3; @@ -465,16 +473,18 @@ module ietf-packet-fields { } description "Also known as Control Bits. Contains 9 1-bit flags."; + reference + "RFC 793: TCP."; } leaf window-size { type uint16; + units "bytes"; description "The size of the receive window, which specifies - the number of window size units (by default, - bytes) (beyond the segment identified by the - sequence number in the acknowledgment field) - that the sender of this segment is currently + the number of window size units beyond the segment + identified by the sequence number in the acknowledgment + field that the sender of this segment is currently willing to receive."; } @@ -538,7 +548,8 @@ module ietf-packet-fields { type uint8; description "Also known as Control messages."; - reference "RFC 792"; + reference + "RFC 792: ICMP."; } leaf code { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pcep-stats@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-pcep-stats@2018-03-05.yang new file mode 100644 index 000000000..5c0b7295c --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-pcep-stats@2018-03-05.yang @@ -0,0 +1,946 @@ +module ietf-pcep-stats { + + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-pcep-stats"; + + prefix ps; + + import ietf-pcep { + prefix p; + } + + import ietf-yang-types { + prefix "yang"; + } + + organization + "IETF PCE (Path Computation Element) Working Group"; + + contact + "WG Web: + WG List: + Editor: Dhruv Dhody + "; + + description + "The YANG module augments the PCEP yang operational + model with statistics, counters and telemetry data"; + + revision 2018-03-05 { + description "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for Path Computation + Element Communications Protocol + (PCEP)"; + } + + /* + * Groupings + */ + + grouping pcep-stats{ + description + "This grouping defines statistics for PCEP. It is used + for both peer and current session."; + leaf avg-rsp-time{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type uint32; + units "milliseconds"; + + description + "The average response time. + If an average response time has not been + calculated then this leaf has the value zero."; + } + + leaf lwm-rsp-time{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type uint32; + units "milliseconds"; + + description + "The smallest (low-water mark) response time seen. + If no responses have been received then this + leaf has the value zero."; + } + + leaf hwm-rsp-time{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type uint32; + units "milliseconds"; + + description + "The greatest (high-water mark) response time seen. + If no responses have been received then this object + has the value zero."; + } + + leaf num-pcreq-sent{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of PCReq messages sent."; + } + + leaf num-pcreq-rcvd{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of PCReq messages received."; + } + + leaf num-pcrep-sent{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + + type yang:counter32; + description + "The number of PCRep messages sent."; + } + + leaf num-pcrep-rcvd{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + + type yang:counter32; + description + "The number of PCRep messages received."; + } + + leaf num-pcerr-sent{ + type yang:counter32; + description + "The number of PCErr messages sent."; + } + + leaf num-pcerr-rcvd{ + type yang:counter32; + description + "The number of PCErr messages received."; + } + + leaf num-pcntf-sent{ + type yang:counter32; + description + "The number of PCNtf messages sent."; + } + + leaf num-pcntf-rcvd{ + type yang:counter32; + description + "The number of PCNtf messages received."; + } + + leaf num-keepalive-sent{ + type yang:counter32; + description + "The number of Keepalive messages sent."; + } + + leaf num-keepalive-rcvd{ + type yang:counter32; + description + "The number of Keepalive messages received."; + } + + leaf num-unknown-rcvd{ + type yang:counter32; + description + "The number of unknown messages received."; + } + + leaf num-corrupt-rcvd{ + type yang:counter32; + description + "The number of corrupted PCEP message received."; + } + + leaf num-req-sent{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests sent. A request corresponds + 1:1 with an RP object in a PCReq message. This might + be greater than num-pcreq-sent because multiple + requests can be batched into a single PCReq + message."; + } + + leaf num-req-sent-pend-rep{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that have been sent for + which a response is still pending."; + } + + leaf num-req-sent-ero-rcvd{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that have been sent for + which a response with an ERO object was received. + Such responses indicate that a path was + successfully computed by the peer."; + } + + leaf num-req-sent-nopath-rcvd{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that have been sent for + which a response with a NO-PATH object was + received. Such responses indicate that the peer + could not find a path to satisfy the + request."; + } + + leaf num-req-sent-cancel-rcvd{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that were cancelled with + a PCNtf message. + This might be different than num-pcntf-rcvd because + not all PCNtf messages are used to cancel requests, + and a single PCNtf message can cancel multiple + requests."; + } + + leaf num-req-sent-error-rcvd{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that were rejected with a + PCErr message. + This might be different than num-pcerr-rcvd because + not all PCErr messages are used to reject requests, + and a single PCErr message can reject multiple + requests."; + } + + leaf num-req-sent-timeout{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that have been sent to a peer + and have been abandoned because the peer has taken too + long to respond to them."; + } + + leaf num-req-sent-cancel-sent{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that were sent to the peer and + explicitly cancelled by the local PCEP entity sending + a PCNtf."; + } + + leaf num-req-rcvd{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests received. A request + corresponds 1:1 with an RP object in a PCReq + message. + This might be greater than num-pcreq-rcvd because + multiple requests can be batched into a single + PCReq message."; + } + + leaf num-req-rcvd-pend-rep{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests that have been received for + which a response is still pending."; + } + + leaf num-req-rcvd-ero-sent{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests that have been received for + which a response with an ERO object was sent. Such + responses indicate that a path was successfully + computed by the local PCEP entity."; + } + + leaf num-req-rcvd-nopath-sent{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests that have been received for + which a response with a NO-PATH object was sent. Such + responses indicate that the local PCEP entity could + not find a path to satisfy the request."; + } + + leaf num-req-rcvd-cancel-sent{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests received that were cancelled + by the local PCEP entity sending a PCNtf message. + This might be different than num-pcntf-sent because + not all PCNtf messages are used to cancel requests, + and a single PCNtf message can cancel multiple + requests."; + } + + leaf num-req-rcvd-error-sent{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests received that were cancelled + by the local PCEP entity sending a PCErr message. + This might be different than num-pcerr-sent because + not all PCErr messages are used to cancel requests, + and a single PCErr message can cancel multiple + requests."; + } + + leaf num-req-rcvd-cancel-rcvd{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests that were received from the + peer and explicitly cancelled by the peer sending + a PCNtf."; + } + leaf num-rep-rcvd-unknown{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of responses to unknown requests + received. A response to an unknown request is a + response whose RP object does not contain the + request ID of any request that is currently + outstanding on the session."; + } + + leaf num-req-rcvd-unknown{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of unknown requests that have been + received. An unknown request is a request + whose RP object contains a request ID of + zero."; + } + + container svec{ + if-feature p:svec; + description + "If synchronized path computation is supported"; + leaf num-svec-sent{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of SVEC objects sent in PCReq messages. + An SVEC object represents a set of synchronized + requests."; + } + + leaf num-svec-req-sent{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests sent that appeared in one + or more SVEC objects."; + } + + leaf num-svec-rcvd{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of SVEC objects received in PCReq + messages. An SVEC object represents a set of + synchronized requests."; + } + + leaf num-svec-req-rcvd{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests received that appeared + in one or more SVEC objects."; + } + } + container stateful{ + if-feature p:stateful; + description + "Stateful PCE related statistics"; + leaf num-pcrpt-sent{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of PCRpt messages sent."; + } + + leaf num-pcrpt-rcvd{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of PCRpt messages received."; + } + + leaf num-pcupd-sent{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of PCUpd messages sent."; + } + + leaf num-pcupd-rcvd{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of PCUpd messages received."; + } + + leaf num-rpt-sent{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of LSP Reports sent. A LSP report + corresponds 1:1 with an LSP object in a PCRpt + message. This might be greater than + num-pcrpt-sent because multiple reports can + be batched into a single PCRpt message."; + } + + leaf num-rpt-rcvd{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of LSP Reports received. A LSP report + corresponds 1:1 with an LSP object in a PCRpt + message. + This might be greater than num-pcrpt-rcvd because + multiple reports can be batched into a single + PCRpt message."; + } + + leaf num-rpt-rcvd-error-sent{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of reports of LSPs received that were + responded by the local PCEP entity by sending a + PCErr message."; + } + + leaf num-upd-sent{ + when "../../../p:role = 'pcc'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of LSP updates sent. A LSP update + corresponds 1:1 with an LSP object in a PCUpd + message. This might be greater than + num-pcupd-sent because multiple updates can + be batched into a single PCUpd message."; + } + + leaf num-upd-rcvd{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of LSP Updates received. A LSP update + corresponds 1:1 with an LSP object in a PCUpd + message. + This might be greater than num-pcupd-rcvd because + multiple updates can be batched into a single + PCUpd message."; + } + + leaf num-upd-rcvd-unknown{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of updates to unknown LSPs + received. An update to an unknown LSP is a + update whose LSP object does not contain the + PLSP-ID of any LSP that is currently + present."; + } + + leaf num-upd-rcvd-undelegated{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of updates to not delegated LSPs + received. An update to an undelegated LSP is a + update whose LSP object does not contain the + PLSP-ID of any LSP that is currently + delegated to current PCEP session."; + } + + leaf num-upd-rcvd-error-sent{ + when "../../../p:role = 'pce'" + + "or " + + "../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of updates to LSPs received that were + responded by the local PCEP entity by sending a + PCErr message."; + } + container initiation { + if-feature p:pce-initiated; + description + "PCE-Initiated related statistics"; + leaf num-pcinitiate-sent{ + when "../../../../p:role = 'pcc'" + + "or " + + "../../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of PCInitiate messages sent."; + } + + leaf num-pcinitiate-rcvd{ + when "../../../../p:role = 'pce'" + + "or " + + "../../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of PCInitiate messages received."; + } + + leaf num-initiate-sent{ + when "../../../../p:role = 'pcc'" + + "or " + + "../../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of LSP Initiation sent via PCE. + A LSP initiation corresponds 1:1 with an LSP + object in a PCInitiate message. This might be + greater than num-pcinitiate-sent because + multiple initiations can be batched into a + single PCInitiate message."; + } + + leaf num-initiate-rcvd{ + when "../../../../p:role = 'pce'" + + "or " + + "../../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of LSP Initiation received from + PCE. A LSP initiation corresponds 1:1 with + an LSP object in a PCInitiate message. This + might be greater than num-pcinitiate-rcvd + because multiple initiations can be batched + into a single PCInitiate message."; + } + + leaf num-initiate-rcvd-error-sent{ + when "../../../../p:role = 'pce'" + + "or " + + "../../../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of initiations of LSPs received + that were responded by the local PCEP entity + by sending a PCErr message."; + } + } + } + container path-key { + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + if-feature p:path-key; + description + "If Path-Key is supported"; + leaf num-unknown-path-key{ + type yang:counter32; + description + "The number of attempts to expand an unknown + path-key."; + } + leaf num-exp-path-key{ + type yang:counter32; + description + "The number of attempts to expand an expired + path-key."; + } + leaf num-dup-path-key{ + type yang:counter32; + description + "The number of duplicate attempts to expand same + path-key."; + } + leaf num-path-key-no-attempt{ + type yang:counter32; + description + "The number of expired path-keys with no attempt to + expand it."; + } + } + }//pcep-stats + + /* + * Augment modules to add statistics + */ + + augment "/p:pcep/p:entity/p:peers/p:peer" { + description + "Augmenting the statistics"; + leaf num-sess-setup-ok{ + type yang:counter32; + config false; + description + "The number of PCEP sessions successfully + successfully established with the peer, + including any current session. This + counter is incremented each time a + session with this peer is successfully + established."; + } + + leaf num-sess-setup-fail{ + type yang:counter32; + config false; + description + "The number of PCEP sessions with the peer + that have been attempted but failed + before being fully established. This + counter is incremented each time a + session retry to this peer fails."; + } + container pcep-stats { + config false; + description + "The container for all statistics at peer + level."; + uses pcep-stats{ + description + "Since PCEP sessions can be + ephemeral, the peer statistics tracks + a peer even when no PCEP session + currently exists to that peer. The + statistics contained are an aggregate + of the statistics for all successive + sessions to that peer."; + } + + leaf num-req-sent-closed{ + when "../../p:role = 'pce'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCE"; + } + type yang:counter32; + description + "The number of requests that were + sent to the peer and implicitly + cancelled when the session they were + sent over was closed."; + } + + leaf num-req-rcvd-closed{ + when "../../p:role = 'pcc'" + + "or " + + "../../p:role = 'pcc-and-pce'" + { + description + "Valid for PCEP Peer as PCC"; + } + type yang:counter32; + description + "The number of requests that were + received from the peer and + implicitly cancelled when the + session they were received over + was closed."; + } + }//pcep-stats + }//augment + + augment "/p:pcep/p:entity/p:peers/p:peer/" + + "p:sessions/p:session" { + description + "Augmenting the statistics"; + container pcep-stats { + description + "The container for all statistics + at session level."; + uses pcep-stats{ + description + "The statistics contained are + for the current sessions to + that peer. These are lost + when the session goes down. + "; + } + }//pcep-stats + }//augment + +}//module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-01-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-03-05.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-01-05.yang rename to experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-03-05.yang index aa42af998..98c63fd82 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-01-05.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-pcep@2018-03-05.yang @@ -43,12 +43,6 @@ module ietf-pcep { contact "WG Web: WG List: - WG Chair: JP Vasseur - - WG Chair: Julien Meuric - - WG Chair: Jonathan Hardwick - Editor: Dhruv Dhody "; @@ -57,7 +51,7 @@ module ietf-pcep { operational model for PCEP common across all of the vendor implementations."; - revision 2018-01-05 { + revision 2018-03-05 { description "Initial revision."; reference "RFC XXXX: A YANG Data Model for Path Computation @@ -1552,7 +1546,7 @@ module ietf-pcep { "An explicit-route hop action."; } - uses te-types:explicit-route-hop_config; + uses te-types:explicit-route-hop; } } leaf pcc-original { @@ -1974,7 +1968,6 @@ module ietf-pcep { entity will cease to be overloaded on this session."; } - leaf peer-overloaded { type boolean; description @@ -2599,7 +2592,6 @@ module ietf-pcep { uses notification-instance-hdr; uses notification-session-hdr; - leaf peer-overloaded { type boolean; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2017-12-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2017-12-08.yang deleted file mode 100644 index 8b712e218..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2017-12-08.yang +++ /dev/null @@ -1,888 +0,0 @@ -module ietf-pim-base { - namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; - prefix pim-base; - - import ietf-inet-types { - prefix "inet"; - } - - import ietf-yang-types { - prefix "yang"; - } - - import ietf-routing-types { - prefix "rt-types"; - } - - import ietf-interfaces { - prefix "if"; - } - - import ietf-routing { - prefix "rt"; - } - - import ietf-bfd-types { - prefix "bfd-types"; - } - - organization - "IETF PIM Working Group"; - - contact - "WG Web: - WG List: - - WG Chair: Stig Venaas - - - WG Chair: Mike McBride - - - Editor: Xufeng Liu - - - Editor: Pete McAllister - - - Editor: Anish Peter - - - Editor: Mahesh Sivakumar - - - Editor: Yisong Liu - - - Editor: Fangwei Hu - "; - - description - "The module defines a collection of YANG definitions common for - all PIM (Protocol Independent Multicast) modes."; - - revision 2017-12-08 { - description - "Initial revision."; - reference - "RFC XXXX: A YANG Data Model for PIM"; - } - - /* - * Features - */ - feature bfd { - description - "Support BFD (Bidirectional Forwarding Detection)."; - } - - feature global-graceful-restart { - description - "Global configuration for graceful restart support as per - RFC5306."; - } - - feature intf-dr-priority { - description - "Support configuration of interface DR (Designated Router) - priority."; - } - - feature intf-hello-holdtime { - description - "Support configuration of interface hello holdtime."; - } - - feature intf-hello-interval { - description - "Support configuration of interface hello interval."; - } - - feature intf-hello-multiplier { - description - "Support configuration of interface hello multiplier."; - } - - feature intf-jp-interval { - description - "Support configuration of interface join prune interval."; - } - - feature intf-jp-holdtime { - description - "Support configuration of interface join prune holdtime."; - } - - feature intf-jp-multiplier { - description - "Support configuration of interface join prune multiplier."; - } - - feature intf-propagation-delay { - description - "Support configuration of interface propagation delay."; - } - - feature intf-override-interval { - description - "Support configuration of interface override interval."; - } - - feature per-af-graceful-restart { - description - "Per address family configuration for graceful restart support - as per RFC5306."; - } - - /* - * Typedefs - */ - typedef interface-event-type { - type enumeration { - enum up { - description - "Neighbor status changed to up."; - } - enum down { - description - "Neighbor status changed to down."; - } - enum new-dr { - description - "A new DR (Designated Router) was elected on the connected - network."; - } - enum new-df { - description - "A new DF (Designated Forwarder) was elected on the - connected network."; - } - } - description "Operational status event type for notifications."; - } - - typedef neighbor-event-type { - type enumeration { - enum up { - description - "Neighbor status changed to up."; - } - enum down { - description - "Neighbor status changed to down."; - } - } - description "Operational status event type for notifications."; - } - - typedef pim-mode { - type enumeration { - enum none { - description - "PIM is not operating."; - } - enum ssm { - description - "PIM operates in the Sparse Mode with Source-Specific - Multicast (SSM)."; - } - enum asm { - description - "PIM operates in the Sparse Mode with Any Source Multicast - (ASM)."; - } - enum bidir { - description - "PIM operates in the Bidirectional Mode."; - } - enum dm { - description - "PIM operates in the Dense Mode (DM)."; - } - enum other { - description - "PIM operates in any other mode."; - } - } - description - "The PIM mode in which a group is operating."; - } - - typedef timer-value { - type rt-types:timer-value-seconds16; - description "Timer value type."; - } // timer-value - - /* - * Identities - */ - - /* - * Groupings - */ - grouping global-attributes { - description - "A Grouping defining global configuration attributes."; - uses graceful-restart-container { - if-feature global-graceful-restart; - } - } // global-attributes - - grouping graceful-restart-container { - description - "A grouping defining a container of graceful restart - attributes."; - container graceful-restart { - leaf enabled { - type boolean; - description - "Enable or disable graceful restart."; - } - leaf duration { - type uint16; - units seconds; - description - "Maximum time for graceful restart to finish."; - } - description - "Container of graceful restart attributes."; - } - } // graceful-restart-container - - grouping interface-config-attributes { - description - "A grouping defining interface attributes."; - container bfd { - if-feature bfd; - description - "BFD (Bidirectional Forwarding Detection) operation."; - uses bfd-types:client-cfg-parms; - } - leaf dr-priority { - if-feature intf-dr-priority; - type uint32; - description "DR (Designated Router) priority"; - } - leaf hello-interval { - if-feature intf-hello-interval; - type timer-value; - description "Hello interval"; - } - choice hello-holdtime-or-multiplier { - description "Use holdtime or multiplier"; - case holdtime { - if-feature intf-hello-holdtime; - leaf hello-holdtime { - type timer-value; - description "Hello holdtime"; - } - } - case multiplier { - if-feature intf-hello-multiplier; - leaf hello-multiplier { - type rt-types:timer-multiplier; - description - "Hello multiplier is the number by which the hello - interval is multplied to obtain the hold time"; - } - } - } - leaf jp-interval { - if-feature intf-jp-interval; - type timer-value; - description "Join prune interval"; - } - choice jp-holdtime-or-multiplier { - description "Use holdtime or multiplier"; - case holdtime { - if-feature intf-jp-holdtime; - leaf jp-holdtime { - type timer-value; - description "Join prune holdtime"; - } - } - case multiplier { - if-feature intf-jp-multiplier; - leaf jp-multiplier { - type rt-types:timer-multiplier; - description - "Join prune multiplier is the number by which the join - prune interval is multplied to obtain the hold time"; - } - } - } - leaf propagation-delay { - if-feature intf-propagation-delay; - type uint16; - units milliseconds; - description "Propagation description"; - } - leaf override-interval { - if-feature intf-override-interval; - type uint16; - units milliseconds; - description "Override interval"; - } - } // interface-config-attributes - - grouping interface-state-attributes { - description - "A grouping defining interface attributes."; - container ipv4 { - when "../address-family = 'rt:ipv4'" { - description - "Only applicable to IPv4 address family."; - } - config false; - description "Interface state attributes for IPv4."; - leaf-list address { - type inet:ipv4-address; - description "List of addresses."; - } - leaf dr-address { - type inet:ipv4-address; - description "DR (Designated Router) address."; - } - } - container ipv6 { - when "../address-family = 'rt:ipv6'" { - description - "Only applicable to IPv6 address family."; - } - config false; - description "Interface state attributes for IPv6."; - leaf-list address { - type inet:ipv6-address; - description "List of addresses."; - } - leaf dr-address { - type inet:ipv6-address; - description "DR (Designated Router) address."; - } - } - uses interface-state-af-attributes; - } // interface-state-attributes - - grouping interface-state-af-attributes { - description - "A grouping defining interface per address family attributes."; - - leaf oper-status { - type enumeration { - enum up { - description - "Ready to pass packets."; - } - enum down { - description - "The interface does not pass any packets."; - } - } - config false; - description "Operational status."; - } - - leaf hello-expiration { - type timer-value; - config false; - description "Hello interval expiration time."; - } - - list neighbor-ipv4 { - when "../address-family = 'rt:ipv4'" { - description - "Only applicable to IPv4 address family."; - } - key "address"; - config false; - description "Neighbor state information."; - leaf address { - type inet:ipv4-address; - description "Neighbor address."; - } - uses neighbor-state-af-attributes; - } // list neighbor-ipv4 - - list neighbor-ipv6 { - when "../address-family = 'rt:ipv6'" { - description - "Only applicable to IPv6 address family."; - } - key "address"; - config false; - description "Neighbor state information."; - leaf address { - type inet:ipv6-address; - description "Neighbor address."; - } - uses neighbor-state-af-attributes; - } // list neighbor-ipv6 - } // interface-state-af-attributes - - grouping multicast-route-attributes { - description - "A grouping defining multicast route attributes."; - - leaf expiration { - type timer-value; - description "When the route will expire."; - } - leaf incoming-interface { - type if:interface-ref; - description - "Reference to an entry in the global interface - list."; - } - leaf mode { - type pim-mode; - description "PIM mode."; - } - leaf msdp-learned { - type boolean; - description - "'true' if route is learned from MSDP (Multicast Source - Discovery Protocol)."; - } - leaf rp-address { - type inet:ip-address; - description "RP (Rendezvous Point) address."; - } - leaf rpf-neighbor { - type inet:ip-address; - description "RPF (Reverse Path Forwarding) neighbor address."; - } - leaf spt-bit { - type boolean; - description "'true' if SPT (Shortest Path Tree) bit is set."; - } - leaf up-time { - type uint32; - units seconds; - description "Up time duration."; - } - list outgoing-interface { - key "name"; - description - "A list of outgoing interfaces."; - - leaf name { - type if:interface-ref; - description - "Interface name."; - } - - leaf expiration { - type timer-value; - description "Expiring information."; - } - - leaf up-time { - type uint32; - units seconds; - description "Up time duration."; - } - - leaf jp-state { - type enumeration { - enum "no-info" { - description - "The interface has Join state and no timers running"; - } - enum "join" { - description - "The interface has Join state."; - } - enum "prune-pending" { - description - "The router has received a Prune on this interface from - a downstream neighbor and is waiting to see whether - the prune will be overridden by another downstream - router. For forwarding purposes, the Prune-Pending - state functions exactly like the Join state."; - } - } - description "Join-prune state."; - } - } - } // multicast-route-attributes - - grouping neighbor-state-af-attributes { - description - "A grouping defining neighbor per address family attributes."; - leaf bfd-status { - type enumeration { - enum up { - description - "BFD (Bidirectional Forwarding Detection) is up."; - } - enum down { - description - "BFD (Bidirectional Forwarding Detection) is down."; - } - } - description "BFD (Bidirectional Forwarding Detection) status."; - } - leaf expiration { - type timer-value; - description "Neighbor expiring information."; - } - leaf dr-priority { - type uint32; - description "DR (Designated Router) priority"; - } - leaf gen-id { - type uint32; - description "Generation ID."; - } - leaf up-time { - type uint32; - units seconds; - description "Up time duration."; - } - } // neighbor-state-af-attributes - - grouping per-af-attributes { - description - "A grouping defining per address family attributes."; - uses graceful-restart-container { - if-feature per-af-graceful-restart; - } - } // per-af-attributes - - grouping pim-instance-af-state-ref { - description - "An absolute reference to a PIM instance address family."; - leaf instance-af-ref { - type leafref { - path "/rt:routing/rt:control-plane-protocols/" - + "pim-base:pim/pim-base:address-family/" - + "pim-base:address-family"; - } - description - "Reference to a PIM instance address family."; - } - } // pim-instance-state-af-ref - - grouping pim-interface-state-ref { - description - "An absolute reference to a PIM interface state."; - leaf interface-ref { - type leafref { - path "/rt:routing/rt:control-plane-protocols/" - + "pim-base:pim/pim-base:interfaces/pim-base:interface/" - + "pim-base:interface"; - } - description - "Reference to a PIM interface."; - } - } // pim-interface-state-ref - - grouping pim-neighbor-state-ref { - description - "An absolute reference to a PIM neighbor state."; - uses pim-interface-state-ref; - leaf interface-af-ref { - type leafref { - path "/rt:routing/rt:control-plane-protocols/" - + "pim-base:pim/pim-base:interfaces/pim-base:interface" - + "[pim-base:interface = " - + "current()/../interface-ref]/" - + "pim-base:address-family/pim-base:address-family"; - } - description - "Reference to a PIM interface address family."; - } - leaf neighbor-ipv4-ref { - when "../interface-af-ref = 'rt:ipv4'" { - description "Only applicable to IPv4 address family."; - } - type leafref { - path "/rt:routing/rt:control-plane-protocols/" - + "pim-base:pim/pim-base:interfaces/pim-base:interface" - + "[pim-base:interface = " - + "current()/../interface-ref]/" - + "pim-base:address-family" - + "[pim-base:address-family = " - + "current()/../interface-af-ref]/" - + "pim-base:neighbor-ipv4/pim-base:address"; - } - description - "Reference to a PIM IPv4 neighbor."; - } - leaf neighbor-ipv6-ref { - when "../interface-af-ref = 'rt:ipv6'" { - description "Only applicable to IPv6 address family."; - } - type leafref { - path "/rt:routing/rt:control-plane-protocols/" - + "pim-base:pim/pim-base:interfaces/pim-base:interface" - + "[pim-base:interface = " - + "current()/../interface-ref]/" - + "pim-base:address-family" - + "[pim-base:address-family = " - + "current()/../interface-af-ref]/" - + "pim-base:neighbor-ipv6/pim-base:address"; - } - description - "Reference to a PIM IPv6 neighbor."; - } - } // pim-neighbor-state-ref - - grouping statistics-container { - description - "A container defining statistics attributes."; - container statistics { - config false; - description "A container defining statistics attributes."; - leaf discontinuity-time { - type yang:date-and-time; - description - "The time on the most recent occasion at which any one - or more of the statistic counters suffered a - discontinuity. If no such discontinuities have occurred - since the last re-initialization of the local - management subsystem, then this node contains the time - the local management subsystem re-initialized itself."; - } - container error { - description "Containing error statistics."; - uses statistics-error; - } - container queue { - description "Containing queue statistics."; - uses statistics-queue; - } - container received { - description "Containing statistics of received messages."; - uses statistics-sent-received; - } - container sent { - description "Containing statistics of sent messages."; - uses statistics-sent-received; - } - } - } // statistics-container - - grouping statistics-error { - description - "A grouping defining error statistics - attributes."; - uses statistics-sent-received; - } // statistics-error - - grouping statistics-queue { - description - "A grouping defining queue statistics - attributes."; - leaf size { - type uint32; - description - "The size of the input queue."; - } - leaf overflow { - type yang:counter32; - description - "The number of the input queue overflows."; - } - } // statistics-queue - - grouping statistics-sent-received { - description - "A grouping defining sent and received statistics - attributes."; - leaf assert { - type yang:counter64; - description - "The number of assert messages."; - } - leaf bsr { - type yang:counter64; - description - "The number of BSR (Bootstrap Router) messages."; - } - leaf candidate-rp-advertisement { - type yang:counter64; - description - "The number of Candidate-RP-advertisement messages."; - } - leaf df-election { - type yang:counter64; - description - "The number of DF (Designated Forwarder) election messages."; - } - leaf hello { - type yang:counter64; - description - "The number of hello messages."; - } - leaf join-prune { - type yang:counter64; - description - "The number of join/prune messages."; - } - leaf register { - type yang:counter64; - description - "The number of register messages."; - } - leaf register-stop { - type yang:counter64; - description - "The number of register stop messages."; - } - leaf state-refresh { - type yang:counter64; - description - "The number of state refresh messages."; - } - } // statistics-sent-received - - /* - * Configuration data nodes - */ - - augment "/rt:routing/rt:control-plane-protocols" { - description - "PIM augmentation to routing instance configuration."; - - container pim { - presence "Container for PIM protocol."; - description - "PIM configuration data."; - - uses global-attributes; - - list address-family { - key "address-family"; - description - "Each list entry for one address family."; - uses rt:address-family; - uses per-af-attributes; - - uses statistics-container; - container topology-tree-info { - config false; - description "Containing topology tree information."; - list ipv4-route { - when "../../address-family = 'rt:ipv4'" { - description - "Only applicable to IPv4 address family."; - } - key "group source-address is-rpt"; - description "A list of IPv4 routes."; - leaf group { - type rt-types:ipv4-multicast-group-address; - description "Group address."; - } - leaf source-address { - type rt-types:ipv4-multicast-source-address; - description "Source address."; - } - leaf is-rpt { - type boolean; - description - "'true' if the tree is RPT (Rendezvous-Point Tree)."; - } - - uses multicast-route-attributes; - } // ipv4-route - - list ipv6-route { - when "../../address-family = 'rt:ipv6'" { - description - "Only applicable to IPv6 address family."; - } - key "group source-address is-rpt"; - description "A list of IPv6 routes."; - leaf group { - type rt-types:ipv6-multicast-group-address; - description "Group address."; - } - leaf source-address { - type rt-types:ipv6-multicast-source-address; - description "Source address."; - } - leaf is-rpt { - type boolean; - description - "'true' if the tree is RPT (Rendezvous-Point Tree)."; - } - - uses multicast-route-attributes; - } // ipv6-route - } // topology-tree-info - } // address-family - - container interfaces { - description - "Containing a list of interfaces."; - list interface { - key "interface"; - description - "List of pim interfaces."; - leaf interface { - type if:interface-ref; - description - "Reference to an entry in the global interface - list."; - } - list address-family { - key "address-family"; - description - "Each list entry for one address family."; - uses rt:address-family; - uses interface-config-attributes; - uses interface-state-attributes; - } // address-family - } // interface - } // interfaces - } // pim - } // augment - - /* - * Notifications - */ - notification pim-neighbor-event { - description "Notification event for neighbor."; - leaf event-type { - type neighbor-event-type; - description "Event type."; - } - uses pim-neighbor-state-ref; - leaf up-time { - type uint32; - units seconds; - description "Up time duration."; - } - } - notification pim-interface-event { - description "Notification event for interface."; - leaf event-type { - type interface-event-type; - description "Event type."; - } - uses pim-interface-state-ref; - container ipv4 { - description "Containing IPv4 information."; - leaf-list address { - type inet:ipv4-address; - description "List of addresses."; - } - leaf dr-address { - type inet:ipv4-address; - description "DR (Designated Router) address."; - } - } - container ipv6 { - description "Containing IPv6 information."; - leaf-list address { - type inet:ipv6-address; - description "List of addresses."; - } - leaf dr-address { - type inet:ipv6-address; - description "DR (Designated Router) address."; - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2018-02-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2018-02-29.yang new file mode 100644 index 000000000..88fc0bdd3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-pim-base@2018-02-29.yang @@ -0,0 +1,1075 @@ +module ietf-pim-base { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-pim-base"; + prefix pim-base; + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-yang-types { + prefix "yang"; + } + + import ietf-routing-types { + prefix "rt-types"; + } + + import ietf-interfaces { + prefix "if"; + } + import ietf-routing { + prefix "rt"; + } + + import ietf-bfd-types { + prefix "bfd-types"; + } + + organization + "IETF PIM Working Group"; + + contact + "WG Web: + WG List: + + Editor: Xufeng Liu + + + Editor: Pete McAllister + + + Editor: Anish Peter + + + Editor: Mahesh Sivakumar + + + Editor: Yisong Liu + + + Editor: Fangwei Hu + "; + + description + "The module defines a collection of YANG definitions common for + all PIM (Protocol Independent Multicast) modes. + + 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 + (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 2018-02-29 { + description + "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for PIM"; + } + + /* + * Features + */ + feature bfd { + description + "Support BFD (Bidirectional Forwarding Detection)."; + reference + "RFC5880: Bidirectional Forwarding Detection (BFD)"; + } + + feature global-graceful-restart { + description + "Global configuration for graceful restart support as per + RFC5306."; + } + + feature intf-dr-priority { + description + "Support configuration of interface DR (Designated Router) + priority."; + reference + "RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.3.2."; + } + + feature intf-hello-holdtime { + description + "Support configuration of interface hello holdtime."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.3.3. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-hello-interval { + description + "Support configuration of interface hello interval."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-hello-multiplier { + description + "Support configuration of interface hello multiplier."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-jp-interval { + description + "Support configuration of interface join prune interval."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-jp-holdtime { + description + "Support configuration of interface join prune holdtime."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-jp-multiplier { + description + "Support configuration of interface join prune multiplier."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature intf-propagation-delay { + description + "Support configuration of interface propagation delay."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.3.5. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.3.3."; + } + + feature intf-override-interval { + description + "Support configuration of interface override interval."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.3.3. + RFC5015: Bidirectional Protocol Independent Multicast + (BIDIR-PIM). Sec. 3.6. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.11."; + } + + feature per-af-graceful-restart { + description + "Per address family configuration for graceful restart support + as per RFC5306."; + } + + /* + * Typedefs + */ + typedef interface-event-type { + type enumeration { + enum up { + description + "Neighbor status changed to up."; + } + enum down { + description + "Neighbor status changed to down."; + } + enum new-dr { + description + "A new DR (Designated Router) was elected on the connected + network."; + } + enum new-df { + description + "A new DF (Designated Forwarder) was elected on the + connected network."; + } + } + description "Operational status event type for notifications."; + } + + typedef neighbor-event-type { + type enumeration { + enum up { + description + "Neighbor status changed to up."; + } + enum down { + description + "Neighbor status changed to down."; + } + } + description "Operational status event type for notifications."; + } + + /* + * Identities + */ + identity pim-mode { + description + "The PIM mode in which a group is operating."; + } + identity pim-none { + base pim-mode; + description + "PIM is not operating."; + } + identity pim-bidir { + base pim-mode; + description + "PIM operates in the Bidirectional Mode."; + } + identity pim-dm { + base pim-mode; + description + "PIM operates in the Dense Mode (DM)."; + } + identity pim-sm { + base pim-mode; + description + "PIM operates in the Sparse Mode (SM)."; + } + identity pim-asm { + base pim-sm; + description + "PIM operates in the Sparse Mode with Any Source Multicast + (ASM)."; + } + identity pim-ssm { + base pim-sm; + description + "PIM operates in the Sparse Mode with Source-Specific + Multicast (SSM)."; + } + + /* + * Groupings + */ + grouping graceful-restart-container { + description + "A grouping defining a container of graceful restart + attributes."; + container graceful-restart { + leaf enabled { + type boolean; + default false; + description + "Enable or disable graceful restart."; + } + leaf duration { + type uint16; + units seconds; + default 60; + description + "Maximum time for graceful restart to finish."; + } + description + "Container of graceful restart attributes."; + } + } // graceful-restart-container + + grouping multicast-route-attributes { + description + "A grouping defining multicast route attributes."; + + leaf expiration { + type rt-types:timer-value-seconds16; + description "When the route will expire."; + } + leaf incoming-interface { + type if:interface-ref; + description + "Reference to an entry in the global interface + list."; + } + leaf is-spt { + type boolean; + description + "'true' if SPT (Shortest Path Tree) bit is set to indicate + forwarding is taking place on the (S,G) Shortest Path Tree + (SPT)."; + reference + "RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.1.3."; + } + leaf mode { + type identityref { + base pim-mode; + } + description "PIM mode."; + } + leaf msdp-learned { + type boolean; + description + "'true' if route is learned from MSDP (Multicast Source + Discovery Protocol)."; + } + leaf rp-address { + type inet:ip-address; + description "RP (Rendezvous Point) address."; + } + leaf rpf-neighbor { + type inet:ip-address; + description "RPF (Reverse Path Forwarding) neighbor address."; + } + leaf up-time { + type rt-types:timeticks64; + description + "The number of time ticks (hundredths of a second) since the + route last transitioned into the active state."; + } + list outgoing-interface { + key "name"; + description + "A list of outgoing interfaces."; + + leaf name { + type if:interface-ref; + description + "Interface name."; + } + + leaf expiration { + type rt-types:timer-value-seconds16; + description "Expiring time."; + } + + leaf up-time { + type rt-types:timeticks64; + description + "The number of time ticks (hundredths of a second) since + the oper-status of the interface was last changed to + 'up'."; + } + + leaf jp-state { + type enumeration { + enum "no-info" { + description + "The interface has no (*,G) Join state and no timers + running."; + } + enum "join" { + description + "The interface has Join state."; + } + enum "prune-pending" { + description + "The router has received a Prune on this interface from + a downstream neighbor and is waiting to see whether + the prune will be overridden by another downstream + router. For forwarding purposes, the Prune-Pending + state functions exactly like the Join state."; + } + } + description "Join-prune state."; + } + } + } // multicast-route-attributes + + grouping neighbor-state-af-attributes { + description + "A grouping defining neighbor per address family attributes."; + leaf bfd-state { + type bfd-types:state; + description "BFD (Bidirectional Forwarding Detection) status."; + } + leaf expiration { + type rt-types:timer-value-seconds16; + description "Neighbor expiring time."; + } + leaf dr-priority { + type uint32; + description + "DR (Designated Router) priority as the preference in the DR + election process."; + } + leaf gen-id { + type uint32; + description + "The value of the Generation ID in the last Hello message + from the neighbor."; + } + container lan-prune-delay { + description + "The information of the LAN Prune Delay option in the Hello + message from the neighbor."; + leaf present { + type boolean; + description + "'true' if the LAN Prune Delay option is present in the + last Hello message from the neighbor."; + } + leaf override-interval { + when "../present = 'true'" { + description + "Available only when the leaf present is 'true'."; + } + type uint16; + units milliseconds; + description + "The value of the Override_Interval field of the LAN Prune + Delay option in the last Hello message from the neighbor. + The neighbor uses this value to indicate a short period + after a Join or Prune to allow other routers on the LAN + to override the Join or Prune."; + } + leaf propagation-delay { + when "../present = 'true'" { + description + "Available only when the leaf present is 'true'."; + } + type uint16; + units milliseconds; + description + "The value of the Propagation_Delay field of the LAN Prune + Delay option in the last Hello message from the neighbor. + The value is the propagation delay over the local link + expected by the neighbor."; + } + leaf t-bit { + when "../present = 'true'" { + description + "Available only when the leaf present is 'true'."; + } + type boolean; + description + "'true' if the T bit is set in the LAN Prune Delay option + in the last Hello message from the neighbor. This flag + indicates the neighbor's capability to disable Join + message suppression."; + } + } + leaf up-time { + type rt-types:timeticks64; + description + "The number of time ticks (hundredths of a second) since + the neighbor relationship has been formed as reachable + without beeing timed out."; + } + } // neighbor-state-af-attributes + + grouping pim-instance-af-state-ref { + description + "An absolute reference to a PIM instance address family."; + leaf instance-af-ref { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "pim-base:pim/pim-base:address-family/" + + "pim-base:address-family"; + } + description + "Reference to a PIM instance address family."; + } + } // pim-instance-af-state-ref + + grouping pim-interface-state-ref { + description + "An absolute reference to a PIM interface state."; + leaf interface-ref { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "pim-base:pim/pim-base:interfaces/pim-base:interface/" + + "pim-base:name"; + } + description + "Reference to a PIM interface."; + } + } // pim-interface-state-ref + + grouping statistics-sent-received { + description + "A grouping defining sent and received statistics + on PIM messages."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). Sec. 4.7.1. + RFC5015: Bidirectional Protocol Independent Multicast + (BIDIR-PIM). Sec. 3.7. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.9."; + leaf assert { + type yang:counter32; + description + "The number of Assert messages, with the message Type + of 5 in RFC3973 and RFC7761."; + } + leaf bsr { + type yang:counter32; + description + "The number of Bootstrap messages, with the message Type + of 4 in RFC3973 and RFC7761."; + } + leaf candidate-rp-advertisement { + type yang:counter32; + description + "The number of Candidate RP Advertisement messages, with the + message Type of 8 in RFC3973 and RFC7761."; + } + leaf df-election { + type yang:counter32; + description + "The number of DF (Designated Forwarder) Election messages, + with the message Type of 10 in RFC5015."; + } + leaf graft { + type yang:counter32; + description + "The number of Graft messages, with the message Type + of 6 in RFC3973 and RFC7761."; + } + leaf graft-ack { + type yang:counter32; + description + "The number of Graft-Ack messages, with the message Type + of 7 in RFC3973 and RFC7761."; + } + leaf hello { + type yang:counter32; + description + "The number of Hello messages, with the message Type + of 0 in RFC3973 and RFC7761."; + } + leaf join-prune { + type yang:counter32; + description + "The number of Join/Prune messages, with the message Type + of 3 in RFC3973 and RFC7761."; + } + leaf register { + type yang:counter32; + description + "The number of Register messages, with the message Type + of 1 in RFC3973 and RFC7761."; + } + leaf register-stop { + type yang:counter32; + description + "The number of Register Stop messages, with the message Type + of 2 in RFC3973 and RFC7761."; + } + leaf state-refresh { + type yang:counter32; + description + "The number of State Refresh messages, with the message Type + of 9 in RFC3973."; + } + } // statistics-sent-received + + /* + * Data nodes + */ + + augment "/rt:routing/rt:control-plane-protocols" { + description + "PIM augmentation to the routing instance model."; + + container pim { + presence + "Enables the PIM protocol."; + description + "PIM configuration and operational data."; + + uses graceful-restart-container { + if-feature global-graceful-restart; + } + + list address-family { + key "address-family"; + description + "Each list entry for one address family."; + uses rt:address-family; + uses graceful-restart-container { + if-feature per-af-graceful-restart; + } + + container statistics { + config false; + description "A container defining statistics attributes."; + leaf discontinuity-time { + type yang:date-and-time; + description + "The time on the most recent occasion at which any one + or more of the statistic counters suffered a + discontinuity. If no such discontinuities have + occurred since the last re-initialization of the local + management subsystem, then this node contains the time + the local management subsystem re-initialized + itself."; + } + container error { + description "Containing error statistics."; + uses statistics-sent-received { + description + "Statistic counters on the PIM messages per PIM + message Type. Each leaf attribute counts the number + of PIM messages that were of a particular Type (such + as Hello) and contained errors preventing them from + being processed by PIM. + + Such messages are also counted by the corresponding + counter of the same Type (such as Hello) in the + 'received' container."; + } + leaf checksum { + type yang:counter32; + description + "The number of PIM messages that were passed to PIM + and contained checksum errors."; + } + leaf format { + type yang:counter32; + description + "The number of PIM messages that passed checksum + validation but contained format errors, including + the errors such as PIM Version, Type, and message + length."; + } + } + container queue { + description "Containing queue statistics."; + leaf size { + type uint32; + description + "The size of the input queue."; + } + leaf overflow { + type yang:counter32; + description + "The number of the input queue overflows."; + } + } + container received { + description + "Containing statistics of received messages."; + uses statistics-sent-received; + } + container sent { + description + "Containing statistics of sent messages."; + uses statistics-sent-received; + } + } + + container topology-tree-info { + config false; + description "Containing topology tree information."; + list ipv4-route { + when "../../address-family = 'rt:ipv4'" { + description + "Only applicable to IPv4 address family."; + } + key "group source-address is-rpt"; + description "A list of IPv4 routes."; + leaf group { + type rt-types:ipv4-multicast-group-address; + description "Group address."; + } + leaf source-address { + type rt-types:ipv4-multicast-source-address; + description "Source address."; + } + leaf is-rpt { + type boolean; + description + "'true' if the tree is RPT (Rendezvous-Point Tree)."; + } + + uses multicast-route-attributes; + } // ipv4-route + + list ipv6-route { + when "../../address-family = 'rt:ipv6'" { + description + "Only applicable to IPv6 address family."; + } + key "group source-address is-rpt"; + description "A list of IPv6 routes."; + leaf group { + type rt-types:ipv6-multicast-group-address; + description "Group address."; + } + leaf source-address { + type rt-types:ipv6-multicast-source-address; + description "Source address."; + } + leaf is-rpt { + type boolean; + description + "'true' if the tree is RPT (Rendezvous-Point Tree)."; + } + + uses multicast-route-attributes; + } // ipv6-route + } // topology-tree-info + } // address-family + + container interfaces { + description + "Containing a list of interfaces."; + list interface { + key "name"; + description + "List of pim interfaces."; + leaf name { + type if:interface-ref; + description + "Reference to an entry in the global interface + list."; + } + list address-family { + key "address-family"; + description + "Each list entry for one address family."; + uses rt:address-family; + + container bfd { + if-feature bfd; + description + "BFD (Bidirectional Forwarding Detection) + operation."; + uses bfd-types:client-cfg-parms; + } + leaf dr-priority { + if-feature intf-dr-priority; + type uint32; + default 1; + description + "DR (Designated Router) priority as the preference in + the DR election process."; + } + leaf hello-interval { + if-feature intf-hello-interval; + type rt-types:timer-value-seconds16; + default 30; + description + "Periodic interval for Hello messages. + If 'infinity' or 'not-set' is used, no periodic + Hello messages are sent."; + reference + "RFC3973: Protocol Independent Multicast - Dense Mode + (PIM-DM): Protocol Specification (Revised). + Sec. 4.8. + RFC7761: Protocol Independent Multicast - Sparse + Mode (PIM-SM): Protocol Specification (Revised). + Sec. 4.11."; + } + choice hello-holdtime-or-multiplier { + description + "Holdtime is timer value to time out the neighbor + state when the timer expires. + The holdtime value can be specified either by the + given holdtime value or by the calculation of the + hello-interval multiplied by the given value of the + multiplier."; + case holdtime { + if-feature intf-hello-holdtime; + leaf hello-holdtime { + type rt-types:timer-value-seconds16; + default 105; + description + "Hello holdtime is the amount of time to keep + the neighbor reachable until a new Hello message + is received."; + } + } + case multiplier { + if-feature intf-hello-multiplier; + leaf hello-multiplier { + type rt-types:timer-multiplier; + default 3; + description + "Hello multiplier is the number by which the + hello interval is multplied to obtain the Hello + holdtime. + The value of the Hello holdtime is calculated + as: + hello-holdtime = + (multiplier + 0.5) * (hello-interval)"; + } + } + } + leaf jp-interval { + if-feature intf-jp-interval; + type rt-types:timer-value-seconds16; + default 60; + description + "Periodic interval between Join/Prune messages. + If 'infinity' or 'not-set' is used, no periodic + Join/Prune messages are sent."; + } + choice jp-holdtime-or-multiplier { + description + "Join/Prune holdtime is the amount of time a receiver + must keep the Join/Prune state alive. + The holdtime value can be specified either by the + given holdtime value or by the calculation of the + jp-interval multiplied by the given value of the + multiplier."; + case holdtime { + if-feature intf-jp-holdtime; + leaf jp-holdtime { + type rt-types:timer-value-seconds16; + default 210; + description + "Join/Prune holdtime is the amount of time a + receiver must keep the Join/Prune state alive."; + } + } + case multiplier { + if-feature intf-jp-multiplier; + leaf jp-multiplier { + type rt-types:timer-multiplier; + default 3; + description + "Join prune multiplier is the number by which the + join prune interval is multplied to obtain the + Join/Prune holdtime. + The value of the Join/Prune holdtime is + calculated as: + jp-holdtime = + (multiplier + 0.5) * (jp-interval)"; + } + } + } + leaf override-interval { + if-feature intf-override-interval; + type uint16; + units milliseconds; + default 2500; + description + "A short period after a Join or Prune to allow other + routers on the LAN to override the Join or Prune."; + } + leaf propagation-delay { + if-feature intf-propagation-delay; + type uint16; + units milliseconds; + default 500; + description + "Expected propagation delay over the local link."; + } + + // Interface state attributes + leaf oper-status { + type enumeration { + enum up { + description + "The interface is ready to pass PIM messages."; + } + enum down { + description + "The interface does not pass PIM messages."; + } + } + config false; + description + "PIM operational status on the interface. + This status is PIM specific and separate from the + operational status of the underlying interface."; + } + leaf gen-id { + type uint32; + config false; + description + "The value of the Generation ID this router uses to + insert in the PIM Hello message sent on this + interface."; + } + leaf hello-expiration { + type rt-types:timer-value-seconds16; + config false; + description "Hello interval expiration time."; + } + container ipv4 { + when "../address-family = 'rt:ipv4'" { + description + "Only applicable to IPv4 address family."; + } + config false; + description "Interface state attributes for IPv4."; + leaf-list address { + type inet:ipv4-address; + description + "List of addresses on which PIM is operating."; + } + leaf dr-address { + type inet:ipv4-address; + description "DR (Designated Router) address."; + } + } + container ipv6 { + when "../address-family = 'rt:ipv6'" { + description + "Only applicable to IPv6 address family."; + } + config false; + description "Interface state attributes for IPv6."; + leaf-list address { + type inet:ipv6-address; + description + "List of addresses on which PIM is operating."; + } + leaf dr-address { + type inet:ipv6-address; + description "DR (Designated Router) address."; + } + } + container neighbors { + config false; + description + "Information learned from neighbors through this + interface."; + list ipv4-neighbor { + when "../../address-family = 'rt:ipv4'" { + description + "Only applicable to IPv4 address family."; + } + key "address"; + description "Neighbor state information."; + leaf address { + type inet:ipv4-address; + description "Neighbor address."; + } + uses neighbor-state-af-attributes; + } // list ipv4-neighbor + list ipv6-neighbor { + when "../../address-family = 'rt:ipv6'" { + description + "Only applicable to IPv6 address family."; + } + key "address"; + description "Neighbor state information."; + leaf address { + type inet:ipv6-address; + description "Neighbor address."; + } + uses neighbor-state-af-attributes; + } // list ipv6-neighbor + } // neighbors + } // address-family + } // interface + } // interfaces + } // pim + } // augment + + /* + * Notifications + */ + notification pim-neighbor-event { + description "Notification event for neighbor."; + leaf event-type { + type neighbor-event-type; + description "Event type."; + } + uses pim-interface-state-ref; + leaf interface-af-ref { + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "pim-base:pim/pim-base:interfaces/pim-base:interface" + + "[pim-base:name = current()/../interface-ref]/" + + "pim-base:address-family/pim-base:address-family"; + } + description + "Reference to a PIM interface address family."; + } + leaf neighbor-ipv4-ref { + when "../interface-af-ref = 'rt:ipv4'" { + description "Only applicable to IPv4 address family."; + } + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "pim-base:pim/pim-base:interfaces/pim-base:interface" + + "[pim-base:name = current()/../interface-ref]/" + + "pim-base:address-family" + + "[pim-base:address-family = " + + "current()/../interface-af-ref]/" + + "pim-base:neighbors/pim-base:ipv4-neighbor/" + + "pim-base:address"; + } + description + "Reference to a PIM IPv4 neighbor."; + } + leaf neighbor-ipv6-ref { + when "../interface-af-ref = 'rt:ipv6'" { + description "Only applicable to IPv6 address family."; + } + type leafref { + path "/rt:routing/rt:control-plane-protocols/" + + "pim-base:pim/pim-base:interfaces/pim-base:interface" + + "[pim-base:name = current()/../interface-ref]/" + + "pim-base:address-family" + + "[pim-base:address-family = " + + "current()/../interface-af-ref]/" + + "pim-base:neighbors/pim-base:ipv6-neighbor/" + + "pim-base:address"; + } + description + "Reference to a PIM IPv6 neighbor."; + } + leaf up-time { + type rt-types:timeticks64; + description + "The number of time ticks (hundredths of a second) since + the neighbor relationship has been formed as reachable + without beeing timed out."; + } + } + notification pim-interface-event { + description "Notification event for interface."; + leaf event-type { + type interface-event-type; + description "Event type."; + } + uses pim-interface-state-ref; + container ipv4 { + description "Containing IPv4 information."; + leaf-list address { + type inet:ipv4-address; + description "List of addresses."; + } + leaf dr-address { + type inet:ipv4-address; + description "DR (Designated Router) address."; + } + } + container ipv6 { + description "Containing IPv6 information."; + leaf-list address { + type inet:ipv6-address; + description "List of addresses."; + } + leaf dr-address { + type inet:ipv6-address; + description "DR (Designated Router) address."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2017-12-08.yang b/experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2018-02-29.yang similarity index 54% rename from experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2017-12-08.yang rename to experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2018-02-29.yang index e6ad152bf..8935177f8 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2017-12-08.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-pim-sm@2018-02-29.yang @@ -1,4 +1,5 @@ module ietf-pim-sm { + yang-version 1.1; namespace "urn:ietf:params:xml:ns:yang:ietf-pim-sm"; prefix pim-sm; @@ -25,12 +26,6 @@ module ietf-pim-sm { "WG Web: WG List: - WG Chair: Stig Venaas - - - WG Chair: Mike McBride - - Editor: Xufeng Liu @@ -39,9 +34,9 @@ module ietf-pim-sm { Editor: Anish Peter - Editor: Mahesh Sivakumar + Editor: Yisong Liu @@ -50,13 +45,28 @@ module ietf-pim-sm { description "The YANG module defines a PIM (Protocol Independent Multicast) - SM (Sparse Mode) model."; + SM (Sparse Mode) model. + + Copyright (c) 2018 IETF Trust and the persons identified as + authors of the code. All rights reserved. - revision 2017-12-08 { + 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 2018-02-29 { description "Initial revision."; reference - "RFC XXXX: A YANG Data Model for PIM"; + "RFC XXXX: A YANG Data Model for PIM. + RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; } /* @@ -67,18 +77,24 @@ module ietf-pim-sm { "This feature indicates that the system supports configuration choice whether to trigger the switchover from the RPT (Rendezvous Point Tree) to the SPT (Shortest Path Tree)."; + reference + "RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; } feature spt-switch-policy { description "This feature indicates that the system supports configuring policy for the switchover from the RPT to the SPT."; + reference + "RFC7761: Protocol Independent Multicast - Sparse Mode + (PIM-SM): Protocol Specification (Revised). Sec. 4.2."; } /* * Identities */ - identity sm { + identity rp-sm { base pim-rp:rp-mode; description "SM (Sparse Mode)."; @@ -87,9 +103,26 @@ module ietf-pim-sm { /* * Groupings */ - grouping af-sm-container { + grouping static-rp-sm-container { description - "Grouping of address family SM container."; + "Grouping that contains SM attributes for static RP."; + container sm { + presence + "Indicate the support of sparse mode."; + description + "PIM SM configuration data."; + + uses pim-rp:static-rp-attributes; + } // sm + } // static-rp-sm-container + + /* + * Configuration data nodes + */ + augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" + + "pim-base:address-family" { + description "PIM SM augmentation."; + container sm { description "PIM SM configuration data."; @@ -97,69 +130,60 @@ module ietf-pim-sm { container asm { description "ASM (Any Source Multicast) attributes."; - container anycast-rp { presence "Present to enable anycast RP (Rendezvous Point)."; description "Anycast RP attributes."; - container ipv4 { + list ipv4-anycast-rp { when "../../../../pim-base:address-family = 'rt:ipv4'" { description "Only applicable to IPv4 address family."; } + key "anycast-address rp-address"; description - "IPv4 attributes. Only applicable when - pim-base:address-family is IPv4."; - list ipv4-anycast-rp { - key "anycast-address rp-address"; + "A list of IPv4 anycast RP settings, only applicable + when pim-base:address-family is IPv4."; + leaf anycast-address { + type inet:ipv4-address; + description + "IP address of the anycast RP set. This IP address + is used by the multicast groups or sources to join + or register."; + } + + leaf rp-address { + type inet:ipv4-address; description - "A list of anycast RP settings."; - leaf anycast-address { - type inet:ipv4-address; - description - "IP address of the anycast RP set. This IP address - is used by the multicast groups or sources to join - or register."; - } - - leaf rp-address { - type inet:ipv4-address; - description - "IP address of the router configured with anycast - RP. This is the IP address where the Register - messages are forwarded."; - } + "IP address of the router configured with anycast + RP. This is the IP address where the Register + messages are forwarded."; } } - container ipv6 { + list ipv6-anycast-rp { when "../../../../pim-base:address-family = 'rt:ipv6'" { description "Only applicable to IPv6 address family."; } + key "anycast-address rp-address"; description - "IPv6 attributes. Only applicable when - pim-base:address-family is IPv6."; - list ipv6-anycast-rp { - key "anycast-address rp-address"; + "A list of IPv6 anycast RP settings, only applicable + when pim-base:address-family is IPv6."; + leaf anycast-address { + type inet:ipv6-address; + description + "IP address of the anycast RP set. This IP address + is used by the multicast groups or sources to join + or register."; + } + + leaf rp-address { + type inet:ipv6-address; description - "A list of anycast RP settings."; - leaf anycast-address { - type inet:ipv6-address; - description - "IP address of the anycast RP set. This IP address - is used by the multicast groups or sources to join - or register."; - } - - leaf rp-address { - type inet:ipv6-address; - description - "IP address of the router configured with anycast - RP. This is the IP address where the Register - messages are forwarded."; - } + "IP address of the router configured with anycast + RP. This is the IP address where the Register + messages are forwarded."; } } } @@ -179,7 +203,16 @@ module ietf-pim-sm { if-feature spt-switch-policy; type string; description - "Switch policy."; + "The string value is the name to uniquely identify a + policy that contains one or more policy rules used + to accept or reject certain multicast groups. + The groups accepted by this policy have the SPT + switchover threshold set to infinity, meaning that + they will stay on the shared tree forever. + If a policy is not specified, the entire multicast + address space is accepted. + The definition of such a policy is outside the scope + of this document."; } } // infinity } @@ -194,15 +227,30 @@ module ietf-pim-sm { leaf range-policy { type string; description - "Policy used to define SSM address range."; + "The string value is the name to uniquely identify a + policy that contains one or more policy rules used + to accept or reject certain multicast groups. + The groups accepted by this policy define the multicast + group rang used by SSM. + If a policy is not specified, the default SSM multicast + group rang is used. + The default SSM multicast group range is 232.0.0.0/8 for + IPv4 and ff3x::/96 for IPv6 where x reprents any valid + scope identifier. + The definition of such a policy is outside the scope + of this document."; + reference + "RFC4607: Source-Specific Multicast for IP."; } } // ssm } // sm - } // af-sm-container + } // augment + + augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" + + "pim-base:interfaces/pim-base:interface/" + + "pim-base:address-family" { + description "PIM SM augmentation."; - grouping interface-sm-container { - description - "Grouping of interface SM container."; container sm { presence "Present to enable sparse-mode."; description @@ -216,37 +264,6 @@ module ietf-pim-sm { multicast forwarding entry."; } } // sm - } // interface-sm-container - - grouping static-rp-sm-container { - description - "Grouping that contains SM attributes for static RP."; - container sm { - presence - "Indicate the support of sparse mode."; - description - "PIM SM configuration data."; - - uses pim-rp:static-rp-attributes; - } // sm - } // static-rp-sm-container - - /* - * Configuration data nodes - */ - augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" - + "pim-base:address-family" { - description "PIM SM augmentation."; - - uses af-sm-container; - } // augment - - augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" - + "pim-base:interfaces/pim-base:interface/" - + "pim-base:address-family" { - description "PIM SM augmentation."; - - uses interface-sm-container; } // augment augment "/rt:routing/rt:control-plane-protocols/pim-base:pim/" diff --git a/experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2018-02-28.yang similarity index 51% rename from experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2017-10-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2018-02-28.yang index 172beebd6..4332b5d27 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-pmip-qos@2018-02-28.yang @@ -10,7 +10,8 @@ module ietf-pmip-qos { prefix inet; revision-date 2013-07-15; } - import ietf-trafficselector-types { prefix traffic-selectors; } + import ietf-trafficselector-types { prefix traffic-selectors; + revision-date 2018-02-28; } organization "IETF Distributed Mobility Management (DMM) Working Group"; @@ -18,11 +19,12 @@ module ietf-pmip-qos { contact "WG Web: WG List: + WG Chair: Dapeng Liu - WG Chair: Jouni Korhonen - + WG Chair: Sri Gundavelli + Editor: Satoru Matsushima @@ -47,6 +49,11 @@ module ietf-pmip-qos { in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License."; + revision 2018-02-28 { + description "Updated to drop unnecessary attribute types. + Update WG co-chair."; + reference "RFC 6088: Traffic Selectors for Flow Bindings"; + } revision 2017-10-29 { description "Base Version"; reference @@ -70,7 +77,7 @@ module ietf-pmip-qos { 2-bit reserved field."; reference "RFC 3289: Management Information Base for the - Differentiated Services Architecture + 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 @@ -113,143 +120,7 @@ module ietf-pmip-qos { received with any value in this range."; } - // QoS Attribute Types - //The enumeration value for mapping - don't confuse with the - // identities - typedef qos-attrubite-type-enum { - type enumeration { - enum Reserved { - value 0; - description "This value is reserved and cannot be used"; - } - enum Per-MN-Agg-Max-DL-Bit-Rate { - value 1; - description "Per-Mobile-Node Aggregate Maximum Downlink - Bit Rate."; - } - enum Per-MN-Agg-Max-UL-Bit-Rate { - value 2; - description "Per-Mobile-Node Aggregate Maximum Uplink Bit - Rate."; - } - enum Per-Session-Agg-Max-DL-Bit-Rate { - value 3; - description "Per-Mobility-Session Aggregate Maximum - Downlink Bit Rate."; - } - enum Per-Session-Agg-Max-UL-Bit-Rate { - value 4; - description "Per-Mobility-Session Aggregate Maximum - Uplink Bit Rate."; - } - enum Allocation-Retention-Priority { - value 5; - description "Allocation and Retention Priority."; - } - enum Aggregate-Max-DL-Bit-Rate { - value 6; - description "Aggregate Maximum Downlink Bit Rate."; - } - enum Aggregate-Max-UL-Bit-Rate { - value 7; - description "Aggregate Maximum Uplink Bit Rate."; - } - enum Guaranteed-DL-Bit-Rate { - value 8; - description "Guaranteed Downlink Bit Rate."; - } - enum Guaranteed-UL-Bit-Rate { - value 9; - description "Guaranteed Uplink Bit Rate."; - } - enum QoS-Traffic-Selector { - value 10; - description "QoS Traffic Selector."; - } - enum QoS-Vendor-Specific-Attribute { - value 11; - description "QoS Vendor-Specific Attribute."; - } - } - description - "The type of the QoS attribute. This specification reserves - the following reserved values. - (12) to (254) - Reserved - These values are reserved for future allocation. - - (255) Reserved - This value is reserved and cannot be used."; - } - - // Attribute Type as Identities - // Added for convenience of inclusion and extension in - // other YANG modules. - identity qos-attribute-type { - description - "Base type for Quality of Service Attributes"; - } - - identity Per-MN-Agg-Max-DL-Bit-Rate-type { - base qos-attribute-type; - description - "Per-Mobile-Node Aggregate Maximum Downlink Bit Rate."; - } - - identity Per-MN-Agg-Max-UL-Bit-Rate-type { - base qos-attribute-type; - description - "Per-Mobile-Node Aggregate Maximum Uplink Bit Rate"; - } - - identity Per-Session-Agg-Max-DL-Bit-Rate-type { - base qos-attribute-type; - description - "Per-Mobility-Session Aggregate Maximum Downlink Bit Rate."; - } - - identity Per-Session-Agg-Max-UL-Bit-Rate-type { - base qos-attribute-type; - description - "Per-Mobility-Session Aggregate Maximum Uplink Bit Rate."; - } - - identity Allocation-Retention-Priority-type { - base qos-attribute-type; - description - "Allocation and Retention Priority."; - } - - identity Aggregate-Max-DL-Bit-Rate-type { - base qos-attribute-type; - description "Aggregate Maximum Downlink Bit Rate."; - } - - identity Aggregate-Max-UL-Bit-Rate-type { - base qos-attribute-type; - description "Aggregate Maximum Uplink Bit Rate."; - } - - identity Guaranteed-DL-Bit-Rate-type { - base qos-attribute-type; - description "Guaranteed Downlink Bit Rate."; - } - - identity Guaranteed-UL-Bit-Rate-type { - base qos-attribute-type; - description "Guaranteed Uplink Bit Rate."; - } - - identity QoS-Traffic-Selector-type { - base qos-attribute-type; - description "QoS Traffic Selector."; - } - - identity QoS-Vendor-Specific-Attribute-type { - base qos-attribute-type; - description "QoS Vendor-Specific Attribute."; - } - - //value definitions + //Value definitions typedef Per-MN-Agg-Max-DL-Bit-Rate-Value { type uint32; description @@ -262,7 +133,7 @@ module ietf-pmip-qos { type uint32; description "The aggregate maximum uplink bit rate that is - requested/allocated for the mobile node's IP flows. The + requested/allocated for the mobile node's IP flows. The measurement units are bits per second."; } @@ -307,11 +178,11 @@ module ietf-pmip-qos { } mandatory true; description - "This is a 4-bit unsigned integer value. It is used to - decide whether a mobility session establishment or - modification request can be accepted; this is typically used - for admission control of Guaranteed Bit Rate traffic in - case of resource limitations."; + "This is a 4-bit unsigned integer value. It is used to decide + whether a mobility session establishment or modification + request can be accepted; this is typically used for + admission control of Guaranteed Bit Rate traffic in case of + resource limitations."; } leaf premption-capability { type enumeration { @@ -334,8 +205,8 @@ module ietf-pmip-qos { } mandatory true; description - "This is a 2-bit unsigned integer value. It defines whether a - service data flow can get resources that were already + "This is a 2-bit unsigned integer value. It defines whether + a service data flow can get resources that were already assigned to another service data flow with a lower priority level."; } @@ -425,110 +296,42 @@ module ietf-pmip-qos { "QoS Vendor-Specific Attribute."; } - //NOTE - We do NOT add the Status Codes or other changes in - // PMIP in this module - //Primary Structures (groupings) grouping qosattribute { - leaf attributetype { - type identityref { - base qos-attribute-type; - } - mandatory true; - description "the attribute type"; + leaf per-mn-agg-max-dl { + type qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value; + description "Per-MN-Agg-Max-DL-Bit-Rate Value"; } - - //All of the sub-types by constraint - choice attribute-choice { - case per-mn-agg-max-dl-case { - when "./attributetype = " - + "'Per-MN-Agg-Max-DL-Bit-Rate-type'"; - leaf per-mn-agg-max-dl { - type qos-pmip:Per-MN-Agg-Max-DL-Bit-Rate-Value; - description "Per-MN-Agg-Max-DL-Bit-Rate Value"; - } - description "Per-MN-Agg-Max-DL-Bit-Rate Case"; - } - case per-mn-agg-max-ul-case { - when "./attributetype = " - + "'Per-MN-Agg-Max-UL-Bit-Rate-type'"; - leaf per-mn-agg-max-ul { - type qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value; - description "Per-MN-Agg-Max-UL-Bit-Rate Value"; - } - description "Per-MN-Agg-Max-UL-Bit-Rate Case"; - } - case per-session-agg-max-dl-case { - when "./attributetype = " - + "'Per-Session-Agg-Max-DL-Bit-Rate-type'"; - container per-session-agg-max-dl { - uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; - description "Per-Session-Agg-Max-Bit-Rate Value"; - } - description "Per-Session-Agg-Max-Bit-Rate Case"; - } - case per-session-agg-max-ul-case { - when "./attributetype = " - + "'Per-Session-Agg-Max-UL-Bit-Rate-type'"; - container per-session-agg-max-ul { - uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; - description "Per-Session-Agg-Max-Bit-Rate Value"; - } - description "Per-Session-Agg-Max-Bit-Rate Case"; - } - case allocation-retention-priority-case { - when "./attributetype = " - + "'Allocation-Retention-Priority-type'"; - uses qos-pmip:Allocation-Retention-Priority-Value; - description "Allocation-Retention-Priority Case"; - } - case agg-max-dl-case { - when "./attributetype = " - + "'Aggregate-Max-DL-Bit-Rate-type'"; - leaf agg-max-dl { - type qos-pmip:Aggregate-Max-DL-Bit-Rate-Value; - description "Aggregate-Max-DL-Bit-Rate Value"; - } - description "Aggregate-Max-DL-Bit-Rate Case"; - } - case agg-max-ul-case { - when "./attributetype = " - + "'Aggregate-Max-UL-Bit-Rate-type'"; - leaf agg-max-ul { - type qos-pmip:Aggregate-Max-UL-Bit-Rate-Value; - description "Aggregate-Max-UL-Bit-Rate Value"; - } - description "Aggregate-Max-UL-Bit-Rate Case"; - } - case gbr-dl-case { - when "./attributetype = - 'Guaranteed-DL-Bit-Rate-type'"; - leaf gbr-dl { - type qos-pmip:Guaranteed-DL-Bit-Rate-Value; - description "Guaranteed-DL-Bit-Rate Value"; - } - description "Guaranteed-DL-Bit-Rate Case"; - } - case gbr-ul-case { - when "./attributetype = - 'Guaranteed-UL-Bit-Rate-type'"; - leaf gbr-ul { - type qos-pmip:Guaranteed-UL-Bit-Rate-Value; - description "Guaranteed-UL-Bit-Rate Value"; - } - description "Guaranteed-UL-Bit-Rate Case"; - } - case traffic-selector-case { - when "./attributetype = 'QoS-Traffic-Selector-type'"; - container traffic-selector { - uses traffic-selectors:traffic-selector; - description "traffic selector"; - } - description "traffic selector Case"; - } - description "Attribute Value"; + leaf per-mn-agg-max-ul { + type qos-pmip:Per-MN-Agg-Max-UL-Bit-Rate-Value; + description "Per-MN-Agg-Max-UL-Bit-Rate Value"; + } + container per-session-agg-max-dl { + uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; + description "Per-Session-Agg-Max-Bit-Rate Value"; + } + container per-session-agg-max-ul { + uses qos-pmip:Per-Session-Agg-Max-Bit-Rate-Value; + description "Per-Session-Agg-Max-Bit-Rate Value"; + } + uses qos-pmip:Allocation-Retention-Priority-Value; + leaf agg-max-dl { + type qos-pmip:Aggregate-Max-DL-Bit-Rate-Value; + description "Aggregate-Max-DL-Bit-Rate Value"; + } + leaf agg-max-ul { + type qos-pmip:Aggregate-Max-UL-Bit-Rate-Value; + description "Aggregate-Max-UL-Bit-Rate Value"; + } + leaf gbr-dl { + type qos-pmip:Guaranteed-DL-Bit-Rate-Value; + description "Guaranteed-DL-Bit-Rate Value"; + } + leaf gbr-ul { + type qos-pmip:Guaranteed-UL-Bit-Rate-Value; + description "Guaranteed-UL-Bit-Rate Value"; } - description "PMIP QoS Attribute"; + description "PMIP QoS Attributes"; } grouping qosoption { @@ -547,11 +350,10 @@ module ietf-pmip-qos { mandatory true; description "Operation Code"; } - list attributes { - unique "attributetype"; - uses qosattribute; - min-elements 1; - description "Attributes"; + uses qosattribute; + container traffic-selector { + uses traffic-selectors:traffic-selector; + description "traffic selector"; } description "PMIP QoS Option"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-policy-general@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-policy-general@2018-03-05.yang new file mode 100644 index 000000000..137553075 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-policy-general@2018-03-05.yang @@ -0,0 +1,1340 @@ +module ietf-policy-general { + namespace + "urn:ietf:params:xml:ns:yang:ietf-policy-general"; + prefix + cf-interface; + + import ietf-yang-types{ + prefix yang; + } + + import ietf-inet-types{ + prefix inet; + } + + organization + "IETF I2NSF (Interface to Network Security Functions) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Adrian Farrel + + + WG Chair: Linda Dunbar + + + Editor: Jaehoon Paul Jeong + "; + + description + "This module defines a YANG data module for consumer-facing + interface to security controller."; + + revision "2018-03-05"{ + description "fourth revision"; + reference + "draft-kumar-i2nsf-client-facing-interface-im-04"; + } + + //Groupings + container policy { + description + "This object is a policy instance to have + complete information such as where and when + a policy need to be applied."; + + list rule { + key "rule-id"; + leaf rule-id { + type uint16; + description + "This is ID for rules."; + } + description + "This is a container for rules."; + leaf name { + type string; + description + "This field idenfifies the name of this object."; + } + + leaf date { + type yang:date-and-time; + description + "Date this object was created or last + modified"; + } + + leaf case { + type string; + description + "to identify whether the rule belongs to + web filter or enterprise mode."; + } + + list event { + key "event-id"; + description + "This represents the security event of a + policy-rule."; + + leaf event-id { + type string; + mandatory true; + description + "This represents the event-id."; + } + leaf name { + type string; + description + "This field idenfifies the name of this object."; + } + + leaf date { + type yang:date-and-time; + description + "Date this object was created or last + modified"; + } + + leaf event-type { + type string; + description + "This field identifies the event of + policy enforcement trigger type."; + } + + leaf time-information { + type string; + description + "This field contains time calendar such as + BEGIN-TIME and END-TIME for one time + enforcement or recurring time calendar for + periodic enforcement."; + } + + leaf event-map-group { + type leafref { + path "/threat-feed/event-map-group/event-map-group-id"; + } + description + "This field contains security events or threat + map in order to determine when a policy need + to be activated. This is a reference to + Evnet-Map-Group."; + } + + leaf enable { + type boolean; + description + "This determines whether the condition + matches the security event or not."; + } + } + + list condition { + key "condition-id"; + description + "This represents the condition of a + policy-rule."; + + leaf condition-id { + type string; + description + "This represents the condition-id."; + } + + leaf source { + type string; + description + "This field identifies the source of + the traffic. This could be reference to + either 'Policy Endpoint Group' or + 'Threat-Feed' or 'Custom-List' if Security + Admin wants to specify the source; otherwise, + the default is to match all traffic."; + } + + leaf destination { + type string; + description + "This field identifies the source of + the traffic. This could be reference to + either 'Policy Endpoint Group' or + 'Threat-Feed' or 'Custom-List' if Security + Admin wants to specify the source; otherwise, + the default is to match all traffic."; + } + + leaf match { + type boolean; + description + "This field identifies the match criteria used to + evaluate whether the specified action need to be + taken or not. This could be either a Policy- + Endpoint-Group identifying a Application set or a + set of traffic rules."; + } + + leaf match-direction { + type string; + description + "This field identifies if the match criteria is + to evaluated for both direction of the traffic or + only in one direction with default of allowing in + the other direction for stateful match conditions. + This is optional and by default rule should apply + in both directions."; + } + + leaf exception { + type string; + description + "This field identifies the exception + consideration when a rule is evaluated for a + given communication. This could be reference to + Policy-Endpoint-Group object or set of traffic + matching criteria."; + } + } + + list policy-action { + key "policy-action-id"; + + leaf policy-action-id { + type string; + mandatory true; + description + "this represents the policy-action-id."; + } + description + "This object represents actions that a + Security Admin wants to perform based on + a certain traffic class."; + + leaf name { + type string; + description + "The name of the policy-action object."; + } + + leaf date { + type yang:date-and-time; + description + "When the object was created or last + modified."; + } + + leaf primary-action { + type string; + description + "This field identifies the action when a rule + is matched by NSF. The action could be one of + 'PERMIT', 'DENY', 'RATE-LIMIT', 'TRAFFIC-CLASS', + 'AUTHENTICATE-SESSION', 'IPS, 'APP-FIREWALL', etc."; + } + + leaf secondary-action { + type string; + description + "This field identifies additional actions if + a rule is matched. This could be one of 'LOG', + 'SYSLOG', 'SESSION-LOG', etc."; + } + + leaf owner { + type string; + description + "This field defines the owner of this + policy. Only the owner is authorized to + modify the contents of the policy."; + } + } + } + } + + container multi-tenancy { + description + "The descriptions of multi-tenancy."; + + list policy-domain { + key "policy-domain-id"; + + leaf policy-domain-id { + type uint16; + description + "This represents the list of domains."; + } + description + "this represent the list of policy domains"; + leaf name { + type string; + mandatory true; + description + "Name of the organization or customer representing + this domain."; + } + + leaf address { + type string; + description + "address of an organization or customer."; + } + + leaf contact { + type string; + mandatory true; + description + "contact information of the organization + or customer."; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "The date when this account was created + or last modified."; + } + list policy-tenant { + key "policy-tenant-id"; + leaf policy-tenant-id { + type uint16; + description + "The policy tenant id."; + } + description + "This represents the list of tenants"; + + leaf name { + type string; + mandatory true; + description + "Name of the Department or Division within + an organization."; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "Date this account was created or last modified."; + } + + leaf domain { + type leafref { + path "/multi-tenancy/policy-domain/policy-domain-id"; + } + description + "This field identifies the domain to which this + tenant belongs. This should be reference to a + 'Policy-Domain' object."; + } + } + leaf authentication-method { + type leafref { + path "/multi-tenancy/policy-mgnt-auth-method/policy-mgnt-auth-method-id"; + } + + description + "Authentication method to be used for this domain. + It should be a reference to a 'policy-mgmt-auth-method' + object."; + } + } + + list policy-role { + key "policy-role-id"; + + leaf policy-role-id { + type uint16; + mandatory true; + description + "This defines a set of permissions assigned + to a user in an organization that want to manage + its own Security Policies."; + } + description + "This represents the list of policy roles."; + + leaf name { + type string; + mandatory true; + description + "This field identifies name of the role."; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "Date this role was created or last modified."; + } + + leaf access-profile { + type string; + mandatory true; + description + "This field identifies the access profile for the + role. The profile grants or denies access to policy + objects. Multiple access profiles can be + concatenated together."; + } + } + + list policy-user { + key "policy-user-id"; + + leaf policy-user-id { + type uint16; + description + "This represents the policy-user-id."; + } + description + "This represents the list of policy users."; + leaf name { + type string; + mandatory true; + description + "The name of a user."; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "Date this user was created or last modified"; + } + + leaf password { + type string; + mandatory true; + description + "User password for basic authentication"; + } + + leaf email { + type string; + mandatory true; + description + "The email account of a user"; + } + leaf scope-type { + type string; + description + "identifies whether a user has domain-wide + or tenant-wide privileges"; + } + + leaf scope-reference { + type string; + description + "This references policy-domain or policy-tenant + to identify the scope."; + } + + leaf role { + type string; + mandatory true; + description + "This references policy-role to define specific + permissions"; + } + } + + list policy-mgnt-auth-method { + key "policy-mgnt-auth-method-id"; + + leaf policy-mgnt-auth-method-id { + type uint16; + description + "This represents the authentication method id."; + } + description + "The descriptions of policy management + authentication methods."; + leaf name { + type string; + mandatory true; + description + "name of the authentication method"; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "date when the authentication method + was created"; + } + leaf authentication-method { + type enumeration{ + enum password{ + description + "password-based authentication."; + } + enum token{ + description + "token-based authentication."; + } + enum certificate{ + description + "certificate-based authentication."; + } + } + mandatory true; + description + "The description of authentication method; + token-based, password, certificate, + single-sign-on"; + } + + leaf mutual-authentication { + type boolean; + mandatory true; + description + "To identify whether the authentication + is mutual"; + } + + leaf token-server { + type inet:ipv4-address; + mandatory true; + description + "The token-server information if the + authentication method is token-based"; + } + + leaf certificate-server { + type inet:ipv4-address; + mandatory true; + description + "The certificate-server information if + the authentication method is certificate-based"; + } + + leaf single-sing-on-server { + type inet:ipv4-address; + mandatory true; + description + "The single-sign-on-server information + if the authentication method is + single-sign-on-based"; + } + } + } +container end-group { + description + "A logical entity in their business + environment, where a security policy + is to be applied."; + + list meta-data-source { + key "meta-data-source-id"; + leaf meta-data-source-id { + type uint16; + mandatory true; + description + "This represents the meta-data source id."; + } + description + "This represents the meta-data source."; + + leaf name { + type string; + mandatory true; + description + "This identifies the name of the + meta-datas-ource."; + } + + leaf date { + type yang:date-and-time; + mandatory true; + description + "This identifies the date this object was + created or last modified."; + } + + leaf tag-type { + type boolean; + description + "This identifies the group type; user group, + app group or device group."; + } + + leaf tag-server-information { + type inet:ipv4-address; + description + "The description of suthentication method; + token-based, password, certificate, + single-sign-on"; + } + + leaf tag-application-protocol { + type string; + description + "This filed identifies the protocol e.g. LDAP, + Active Directory, or CMDB"; + } + + leaf tag-server-credential { + type string; + description + "This field identifies the credential + information needed to access the tag server"; + } + } + + list user-group{ + key "user-group-id"; + + leaf user-group-id { + type uint16; + mandatory true; + description + "This represents the the user group id."; + } + description + "This represents the user group."; + + leaf name { + type string; + description + "This field identifies the name of user-group."; + } + + leaf date { + type yang:date-and-time; + description + "when this user-group was created or last modified."; + } + + leaf group-type { + type enumeration{ + enum user-tag{ + description + "The user group is based on user-tag."; + } + enum user-name{ + description + "The user group is based on user-name."; + } + enum ip-address{ + description + "The user group is based on ip-address."; + } + } + + description + "This describes the group type; User-tag, + User-name or IP-address."; + } + + leaf meta-data-server { + type inet:ipv4-address; + description + "This references metadata source"; + } + + leaf group-member { + type string; + description + "This describes the user-tag information"; + } + + leaf risk-level { + type uint16; + description + "This represents the threat level; valid range + may be 0 to 9."; + } + } + + list device-group { + key "device-group-id"; + leaf device-group-id { + type uint16; + description + "This represents a device group id."; + } + description + "This represents a device group."; + leaf name { + type string; + description + "This field identifies the name of + a device-group."; + } + leaf date { + type yang:date-and-time; + description + "The date when this group was create or + last modified."; + } + + leaf group-type { + type enumeration{ + enum device-tag{ + description + "The device group is based on device-tag."; + } + enum device-name{ + description + "The device group is based on device-name."; + } + enum ip-address{ + description + "The device group is based on ip-address."; + } + } + description + "This describes the group type; device-tag, + device-name or IP-address."; + } + + leaf meta-data-server { + type inet:ipv4-address; + description + "This references meta-data-source + object."; + } + + leaf group-member { + type string; + description + "This describes the device-tag, device-name or + IP-address information"; + } + + leaf risk-level { + type uint16; + description + "This represents the threat level; valid range + may be 0 to 9."; + } + } + + list application-group{ + key "application-group-id"; + leaf application-group-id { + type uint16; + description + "This represents an application group id."; + } + description + "This represents an application group."; + leaf name { + type string; + description + "This field identifies the name of + an application group"; + } + + leaf date { + type yang:date-and-time; + description + "The date when this group was created or + last modified."; + } + + leaf group-type { + type enumeration{ + enum application-tag{ + description + "The application group is based on application-tag."; + } + enum device-name{ + description + "The application group is based on application-name."; + } + enum ip-address{ + description + "The application group is based on ip-address."; + } + } + description + "This identifies the group type; + application-tag, application-name or + IP-address."; + } + + leaf meta-data-server { + type inet:ipv4-address; + description + "This references meta-data-source + object."; + } + + leaf group-member { + type string; + description + "This describes the application-tag, + application-name or IP-address information"; + } + + leaf risk-level { + type uint16; + description + "This represents the threat level; valid range + may be 0 to 9."; + } + } + + list location-group{ + key "location-group-id"; + leaf location-group-id { + type uint16; + description + "This represents a location group id."; + } + description + "This represents a location group."; + + leaf name { + type string; + description + "This field identifies the name of + a location group"; + + } + + leaf date { + type yang:date-and-time; + description + "The date when this group was created or + last modified."; + } + + leaf group-type { + type enumeration{ + enum location-tag{ + description + "The location group is based on location-tag."; + } + enum location-name{ + description + "The location group is based on location-name."; + } + enum ip-address{ + description + "The location group is based on ip-address."; + } + } + description + "This identifies the group type; + location-tag, location-name or + IP-address."; + } + + leaf meta-data-server { + type inet:ipv4-address; + description + "This references meta-data-source + object."; + } + + leaf group-member { + type string; + description + "This describes the location-tag, + location-name or IP-address information"; + } + + leaf risk-level { + type uint16; + description + "This represents the threat level; valid range + may be 0 to 9."; + } + } + } + + container threat-feed { + description + "this describes the list of threat-feed."; + + list threat-feed { + key "threat-feed-id"; + leaf threat-feed-id { + type uint16; + mandatory true; + description + "This represents the threat-feed-id."; + } + description + "This represents the threat feed within the + threat-prevention-list."; + leaf name { + type string; + description + "Name of the theat feed."; + } + + leaf date { + type yang:date-and-time; + description + "when the threat-feed was created."; + } + + leaf feed-type { + type enumeration { + enum unknown { + description + "feed-type is unknown."; + } + enum ip-address { + description + "feed-type is IP address."; + } + enum url { + description + "feed-type is URL."; + } + } + mandatory true; + description + "This determined whether the feed-type is IP address + based or URL based."; + } + + leaf feed-server { + type inet:ipv4-address; + description + "this contains threat feed server information."; + } + + leaf feed-priority { + type uint16; + description + "this describes the priority of the threat from + 0 to 5, where 0 means the threat is minimum and + 5 meaning the maximum."; + } + } + + list custom-list { + key "custom-list-id"; + leaf custom-list-id { + type uint16; + description + "this describes the custom-list-id."; + } + description + "this describes the threat-prevention custom list."; + leaf name { + type string; + description + "Name of the custom-list."; + } + + leaf date { + type yang:date-and-time; + description + "when the custom list was created."; + } + + leaf list-type { + type enumeration { + enum unknown { + description + "list-type is unknown."; + } + enum ip-address { + description + "list-type is IP address."; + } + enum mac-address { + description + "list-type is MAC address."; + } + enum url { + description + "list-type is URL."; + } + } + mandatory true; + description + "This determined whether the feed-type is IP address + based or URL based."; + } + + leaf list-property { + type enumeration { + enum unknown { + description + "list-property is unknown."; + } + enum blacklist { + description + "list-property is blacklist."; + } + enum whitelist { + description + "list-property is whitelist."; + } + } + mandatory true; + description + "This determined whether the list-type is blacklist + or whitelist."; + } + + leaf list-content { + type string; + description + "This describes the contents of the custom-list."; + } + } + + list malware-scan-group { + key "malware-scan-group-id"; + leaf malware-scan-group-id { + type uint16; + mandatory true; + description + "This is the malware-scan-group-id."; + } + description + "This represents the malware-scan-group."; + leaf name { + type string; + description + "Name of the malware-scan-group."; + } + + leaf date { + type yang:date-and-time; + description + "when the malware-scan-group was created."; + } + + leaf signature-server { + type inet:ipv4-address; + description + "This describes the signature server of the + malware-scan-group."; + } + + leaf file-types { + type string; + description + "This contains a list of file types needed to + be scanned for the virus."; + } + + leaf malware-signatures { + type string; + description + "This contains a list of malware signatures or hash."; + } + } + + list event-map-group { + key "event-map-group-id"; + leaf event-map-group-id { + type uint16; + mandatory true; + description + "This is the event-map-group-id."; + } + description + "This represents the event map group."; + + leaf name { + type string; + description + "Name of the event-map."; + } + + leaf date { + type yang:date-and-time; + description + "when the event-map was created."; + } + + leaf security-events { + type string; + description + "This contains a list of security events."; + } + + leaf threat-map { + type string; + description + "This contains a list of threat levels."; + } + } + } + + container telemetry-data { + description + "Telemetry provides visibility into the network + activities which can be tapped for further + security analytics, e.g., detecting potential + vulnerabilities, malicious activities, etc."; + + list telemetry-data { + key "telemetry-data-id"; + + leaf telemetry-data-id { + type uint16; + mandatory true; + description + "This is ID for telemetry-data-id."; + } + description + "This is ID for telemetry-data."; + + leaf name { + type string; + description + "Name of the telemetry-data object."; + } + leaf date { + type yang:date-and-time; + description + "This field states when the telemery-data + object was created."; + } + + leaf logs { + type boolean; + description + "This field identifies whether logs + need to be collected."; + } + + leaf syslogs { + type boolean; + description + "This field identifies whether System logs + need to be collected."; + } + + leaf snmp { + type boolean; + description + "This field identifies whether 'SNMP traps' and + 'SNMP alarms' need to be collected."; + } + + leaf sflow { + type boolean; + description + "This field identifies whether 'sFlow' data + need to be collected."; + } + + leaf netflow { + type boolean; + description + "This field identifies whether 'NetFlow' data + need to be collected."; + } + + leaf interface-stats { + type boolean; + description + "This field identifies whether 'Interface' data + such as packet bytes and counts need to be + collected."; + } + } + + list telemetry-source { + key "telemetry-source-id"; + + leaf telemetry-source-id { + type uint16; + mandatory true; + description + "This is ID for telemetry-source-id."; + } + description + "This is ID for telemetry-source."; + + leaf name { + type string; + description + "This identifies the name of this object."; + } + + leaf date { + type yang:date-and-time; + description + "Date this object was created or last modified"; + } + + leaf source-type { + type enumeration { + enum network-nsf { + description + "NSF telemetry source type is network-nsf."; + } + + enum firewall-nsf { + description + "NSF telemetry source type is firewall-nsf."; + } + enum ids-nsf { + description + "NSF telemetry source type is ids-nsf."; + } + enum ips-nsf { + description + "NSF telemetry source type is ips-nsf."; + } + enum proxy-nsf { + description + "NSF telemetry source type is proxy-nsf."; + } + enum other-nsf { + description + "NSF telemetry source type is other-nsf."; + } + } + description + "This should have one of the following type of + the NSF telemetry source: NETWORK-NSF, + FIREWALL-NSF, IDS-NSF, IPS-NSF, + PROXY-NSF, VPN-NSF, DNS, ACTIVE-DIRECTORY, + IP Reputation Authority, Web Reputation + Authority, Anti-Malware Sandbox, Honey Pot, + DHCP, Other Third Party, ENDPOINT"; + } + + leaf nsf-source { + type inet:ipv4-address; + description + "This field contains information such as + IP address and protocol (UDP or TCP) port + number of the NSF providing telemetry data."; + } + + leaf nsf-credentials { + type string; + description + "This field contains username and password + to authenticate with the NSF."; + } + + leaf collection-interval { + type uint16; + units seconds; + default 5000; + description + "This field contains time in milliseconds + between each data collection. For example, + a value of 5000 means data is streamed to + collector every 5 seconds. Value of 0 means + data streaming is event-based"; + } + + leaf collection-method { + type enumeration { + enum unknown { + description + "collection-method is unknown."; + } + enum push-based { + description + "collection-method is PUSH-based."; + } + enum pull-based { + description + "collection-method is PULL-based."; + } + } + description + "This field contains a method of collection, + i.e., whether it is PUSH-based or PULL-based."; + } + leaf heartbeat-interval { + type uint16; + units seconds; + description + "time in seconds the source sends telemetry + heartbeat."; + } + + leaf qos-marking { + type uint16; + description + "DSCP value must be contained in this field."; + } + } + + list telemetry-destination { + key "telemetry-destination-id"; + + leaf telemetry-destination-id { + type uint16; + description + "this represents the telemetry-destination-id"; + } + description + "This object contains information related to + telemetry destination. The destination is + usually a collector which is either a part of + Security Controller or external system + such as Security Information and Event + Management (SIEM)."; + + leaf name { + type string; + description + "This identifies the name of this object."; + } + + leaf date { + type yang:date-and-time; + description + "Date this object was created or last + modified"; + } + + leaf collector-source { + type inet:ipv4-address; + description + "This field contains information such as + IP address and protocol (UDP or TCP) port + number for the collector's destination."; + } + + leaf collector-credentials { + type string; + description + "This field contains the username and + password for the collector."; + } + + leaf data-encoding { + type string; + description + "This field contains the telemetry data encoding + in the form of schema."; + } + + leaf data-transport { + type enumeration{ + enum grpc { + description + "telemetry data protocol is grpc."; + } + enum buffer-over-udp{ + description + "telemetry data protocol is buffer over UDP."; + } + } + description + "This field contains streaming telemetry data + protocols. This could be gRPC, protocol + buffer over UDP, etc."; + } + } + } + } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-policy-voip@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-policy-voip@2018-03-05.yang new file mode 100644 index 000000000..7a96ffc06 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-policy-voip@2018-03-05.yang @@ -0,0 +1,473 @@ +module ietf-policy-voip { +namespace + "urn:ietf:params:xml:ns:yang:ietf-policy-voip"; +prefix + "cf-interface"; + +import ietf-yang-types{ + prefix yang; +} + +import ietf-inet-types{ + prefix inet; +} +organization + "IETF I2NSF (Interface to Network Security Functions) + Working Group"; + +contact + "WG Web: + WG List: + + WG Chair: Adrian Farrel + + + WG Chair: Linda Dunbar + + + Editor: Jaehoon Paul Jeong + "; + +description + "This module defines a YANG data module for consumer-facing + interface to security controller."; + +revision "2018-03-05"{ + description "sixth revision"; + reference + "draft-kumar-i2nsf-client-facing-interface-im-04"; +} + +container policy-voip { + description + "This object is a policy instance to have + complete information such as where and when + a policy need to be applied."; + list rule-voip { + key "rule-voip-id"; + leaf rule-voip-id { + type uint16; + mandatory true; + description + "This is ID for rules."; + } + description + "This is a container for rules."; + leaf name { + type string; + description + "This field idenfifies the name of this object."; + } + leaf date { + type yang:date-and-time; + description + "Date this object was created or last + modified"; + } + list event { + key "event-id"; + description + "This represents the security event of a + policy-rule."; + leaf event-id { + type string; + mandatory true; + description + "This represents the event-id."; + } + leaf name { + type string; + description + "This field idenfifies the name of this object."; + } + leaf date { + type yang:date-and-time; + description + "Date this object was created or last + modified"; + } + leaf event-type { + type string; + description + "This field identifies the event event type + ."; + } + leaf Time-Information { + type string; + description + "This field contains time calendar such as + BEGIN-TIME and END-TIME for one time + enforcement or recurring time calendar for + periodic enforcement."; + } + leaf event-map-group { + type leafref{ + path "/threat-feed/event-map-group/event-map-group-id"; + } + description + "This field contains security events or threat + map in order to determine when a policy need + to be activated. This is a reference to + Evnet-Map-Group."; + } + leaf enable { + type boolean; + description + "This determines whether the condition + matches the security event or not."; + } + } + list condition { + key "condition-id"; + description + "This represents the condition of a + policy-rule."; + leaf condition-id { + type string; + description + "This represents the condition-id."; + } + leaf source-caller { + type leafref { + path "/threat-feed/threat-feed/threat-feed-id"; + } + description + "This field identifies the source of + the traffic. This could be reference to + either 'Policy Endpoint Group' or + 'Threat-Feed' or 'Custom-List' if Security + Admin wants to specify the source; otherwise, + the default is to match all traffic."; + } + leaf destination-callee { + type leafref { + path "/threat-feed/custom-list/custom-list-id"; + } + description + "This field identifies the source of + the traffic. This could be reference to + either 'Policy Endpoint Group' or + 'Threat-Feed' or 'Custom-List' if Security + Admin wants to specify the source; otherwise, + the default is to match all traffic."; + } + leaf match { + type boolean; + description + "This field identifies the match criteria used to + evaluate whether the specified action need to be + taken or not. This could be either a Policy- + Endpoint-Group identifying a Application set or a + set of traffic rules."; + } + leaf match-direction { + type string; + description + "This field identifies if the match criteria is + to evaluated for both direction of the traffic or + only in one direction with default of allowing in + the other direction for stateful match conditions. + This is optional and by default rule should apply + in both directions."; + } + leaf exception { + type string; + description + "This field identifies the exception + consideration when a rule is evaluated for a + given communication. This could be reference to + Policy-Endpoint-Group object or set of traffic + matching criteria."; + } + } + list action { + key "action-id"; + leaf action-id { + type string; + mandatory true; + description + "this represents the policy-action-id."; + } + description + "This object represents actions that a + Security Admin wants to perform based on + a certain traffic class."; + leaf name { + type string; + description + "The name of the policy-action object."; + } + + leaf date { + type yang:date-and-time; + description + "When the object was created or last + modified."; + } + leaf primary-action { + type string; + description + "This field identifies the action when a rule + is matched by NSF. The action could be one of + 'PERMIT', 'DENY', 'RATE-LIMIT', 'TRAFFIC-CLASS', + 'AUTHENTICATE-SESSION', 'IPS, 'APP-FIREWALL', etc."; + } + leaf secondary-action { + type string; + description + "This field identifies additional actions if + a rule is matched. This could be one of 'LOG', + 'SYSLOG', 'SESSION-LOG', etc."; + } + } + leaf precedence { + type uint16; + description + "This field identifies the precedence + assigned to this rule by Security Admin. + This is helpful in conflict resolution + when two or more rules match a given + traffic class."; + } + } + list owner { + key "owner-id"; + leaf owner-id { + type string; + mandatory true; + description + "this represents the owner-id."; + } + description + "This field defines the owner of this policy. + Only the owner is authorized to modify the + contents of the policy."; + leaf name { + type string; + description + "The name of the owner."; + } + leaf date { + type yang:date-and-time; + description + "When the object was created or last + modified."; + } + } +} +container threat-feed { + description + "this describes the list of threat-feed."; + + list threat-feed { + key "threat-feed-id"; + leaf threat-feed-id { + type uint16; + mandatory true; + description + "This represents the threat-feed-id."; + } + description + "This represents the threat feed within the + threat-prevention-list."; + leaf name { + type string; + description + "Name of the theat feed."; + } + + leaf date { + type yang:date-and-time; + description + "when the threat-feed was created."; + } + + leaf feed-type { + type enumeration { + enum unknown { + description + "feed-type is unknown."; + } + enum ip-address { + description + "feed-type is IP address."; + } + enum url { + description + "feed-type is URL."; + } + } + mandatory true; + description + "This determined whether the feed-type is IP address + based or URL based."; + } + + leaf feed-server { + type inet:ipv4-address; + description + "this contains threat feed server information."; + } + + leaf feed-priority { + type uint16; + description + "this describes the priority of the threat from + 0 to 5, where 0 means the threat is minimum and + 5 meaning the maximum."; + } + } + + list custom-list { + key "custom-list-id"; + leaf custom-list-id { + type uint16; + description + "this describes the custom-list-id."; + } + description + "this describes the threat-prevention custom list."; + leaf name { + type string; + description + "Name of the custom-list."; + } + + leaf date { + type yang:date-and-time; + description + "when the custom list was created."; + } + + leaf list-type { + type enumeration { + enum unknown { + description + "list-type is unknown."; + } + enum ip-address { + description + "list-type is IP address."; + } + enum mac-address { + description + "list-type is MAC address."; + } + enum url { + description + "list-type is URL."; + } + } + mandatory true; + description + "This determined whether the feed-type is IP address + based or URL based."; + } + + leaf list-property { + type enumeration { + enum unknown { + description + "list-property is unknown."; + } + enum blacklist { + description + "list-property is blacklist."; + } + enum whitelist { + description + "list-property is whitelist."; + } + } + mandatory true; + description + "This determined whether the list-type is blacklist + or whitelist."; + } + + leaf list-content { + type string; + description + "This describes the contents of the custom-list."; + } + } + + list malware-scan-group { + key "malware-scan-group-id"; + leaf malware-scan-group-id { + type uint16; + mandatory true; + description + "This is the malware-scan-group-id."; + } + description + "This represents the malware-scan-group."; + leaf name { + type string; + description + "Name of the malware-scan-group."; + } + + leaf date { + type yang:date-and-time; + description + "when the malware-scan-group was created."; + } + + leaf signature-server { + type inet:ipv4-address; + description + "This describes the signature server of the + malware-scan-group."; + } + + leaf file-types { + type string; + description + "This contains a list of file types needed to + be scanned for the virus."; + } + + leaf malware-signatures { + type string; + description + "This contains a list of malware signatures or hash."; + } + } + + list event-map-group { + key "event-map-group-id"; + leaf event-map-group-id { + type uint16; + mandatory true; + description + "This is the event-map-group-id."; + } + description + "This represents the event map group."; + leaf name { + type string; + description + "Name of the event-map."; + } + + leaf date { + type yang:date-and-time; + description + "when the event-map was created."; + } + + leaf security-events { + type string; + description + "This contains a list of security events."; + } + + leaf threat-map { + type string; + description + "This contains a list of threat levels."; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2018-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2018-03-03.yang new file mode 100644 index 000000000..c70e9f8c4 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-action@2018-03-03.yang @@ -0,0 +1,805 @@ +module ietf-qos-action { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-qos-action"; + prefix action; + + import ietf-inet-types { + prefix inet; + } + import ietf-qos-policy { + prefix policy; + } + + organization + "IETF RTG (Routing Area) Working Group"; + contact + "WG Web: + WG List: + WG Chair: Chris Bowers + + WG Chair: Jeff Tantsura + + Editor: Aseem Choudhary + + Editor: Mahesh Jethanandani + + Editor: Norm Strahle + "; + description + "This module contains a collection of YANG definitions for + configuring qos specification implementations. + Copyright (c) 2014 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2018-03-03 { + description + "Latest revision for qos actions"; + reference "RFC XXXX"; + } + + feature meter-template-support { + description + " This feature allows support of meter-template."; + } + + feature meter-inline-feature { + description + " This feature allows support of meter-inline configuration."; + } + + feature meter-reference-feature { + description + " This feature allows support of meter by reference + configuration."; + } + + feature min-rate-action-support { + description + " This feature allows support of min rate configuration + in policy."; + } + + feature max-rate-action-support { + description + " This feature allows support of max rate configuration + in policy."; + } + + feature queue-action-support { + description + " This feature allows support of queue action configuration + in policy."; + } + + feature scheduler-action-support { + description + " This feature allows support of scheduler configuration + in policy."; + } + + feature child-policy-feature { + description + " This feature allows configuration of hierarchical policy."; + } + + feature count-feature { + description + "This feature allows action configuration to enable + counter in a classifier"; + } + + feature named-counter-feature { + description + "This feature allows action configuration to enable + named counter in a classifier"; + } + + identity rate-unit-type { + description + "base rate-unit type"; + } + + identity bits-per-second { + base rate-unit-type; + description + "bits per second identity"; + } + + identity kilo-bits-per-second { + base rate-unit-type; + description + "kilo bits per second identity"; + } + + identity mega-bits-per-second { + base rate-unit-type; + description + "mega bits per second identity"; + } + + identity giga-bits-per-second { + base rate-unit-type; + description + "mega bits per second identity"; + } + + identity percent { + base rate-unit-type; + description + "percentage"; + } + + identity dscp-marking { + base policy:action-type; + description + "dscp marking action type"; + } + + identity meter-inline { + base policy:action-type; + if-feature "meter-inline-feature"; + description + "meter-inline action type"; + } + + identity meter-reference { + base policy:action-type; + if-feature "meter-reference-feature"; + description + "meter reference action type"; + } + + identity min-rate { + base policy:action-type; + description + "min-rate action type"; + } + + identity max-rate { + base policy:action-type; + description + "max-rate action type"; + } + + identity queue { + base policy:action-type; + description + "queue action type"; + } + + identity schedular { + base policy:action-type; + description + "schedular action type"; + } + + identity discard { + base policy:action-type; + description + "discard action type"; + } + + identity child-policy { + base policy:action-type; + if-feature "child-policy-feature"; + description + "child-policy action type"; + } + + identity count { + base policy:action-type; + if-feature "count-feature"; + description + "count action type"; + } + + identity named-counter { + base policy:action-type; + if-feature "named-counter-feature"; + description + "name counter action type"; + } + + identity meter-type { + description + "This base identity type defines meter types"; + } + + identity one-rate-two-color-meter-type { + base meter-type; + description + "one rate two color meter type"; + } + + identity one-rate-tri-color-meter-type { + base meter-type; + description + "one rate three color meter type"; + } + + identity two-rate-tri-color-meter-type { + base meter-type; + description + "two rate three color meter action type"; + } + + identity drop-type { + description + "drop algorithm"; + } + identity tail-drop { + base drop-type; + description + "tail drop algorithm"; + } + + identity random-detect { + base drop-type; + description + "random detect algorithm"; + } + + identity conform-2color-meter-action-type { + description + "action type in a meter"; + } + + identity exceed-2color-meter-action-type { + description + "action type in a meter"; + } + + identity conform-3color-meter-action-type { + description + "action type in a meter"; + } + + identity exceed-3color-meter-action-type { + description + "action type in a meter"; + } + + identity violate-3color-meter-action-type { + description + "action type in a meter"; + } + + grouping rate-value-unit { + leaf rate-value { + type uint64; + description + "rate value"; + } + leaf rate-unit { + type identityref { + base rate-unit-type; + } + description + "rate unit"; + } + description + "rate value and unit grouping"; + } + + grouping burst { + description + "burst size or interval configuration"; + choice burst-type { + case size { + leaf burst-size { + type uint64; + units "bytes"; + description + "burst size"; + } + } + case interval { + leaf burst-interval { + type uint64; + units "microsecond"; + description + "burst interval"; + } + } + description + "Choice of burst type"; + } + } + + grouping threshold { + description + "Threshold Parameters"; + container threshold { + description + "threshold"; + choice threshold-type { + case size { + leaf threshold-size { + type uint64; + units "bytes"; + description + "Threshold size"; + } + } + case interval { + leaf threshold-interval { + type uint64; + units "microsecond"; + description + "Threshold interval"; + } + } + description + "Choice of threshold type"; + } + } + } + + grouping drop { + container drop-cfg { + leaf drop-action { + type empty; + description + "always drop algorithm"; + } + description + "the drop action"; + } + description + "always drop grouping"; + } + + grouping queuelimit { + container qlimit-thresh { + uses threshold; + description + "the queue limit"; + } + description + "the queue limit beyond which queue will not hold any packet"; + } + + grouping conform-2color-meter-action-params { + description + "meter action parameters"; + list conform-2color-meter-action-params { + key "conform-2color-meter-action-type"; + ordered-by user; + description + "Configuration of basic-meter & associated actions"; + leaf conform-2color-meter-action-type { + type identityref { + base conform-2color-meter-action-type; + } + description + "meter action type"; + } + choice conform-2color-meter-action-val { + description + " meter action based on choice of meter action type"; + } + } + } + + grouping exceed-2color-meter-action-params { + description + "meter action parameters"; + list exceed-2color-meter-action-params { + key "exceed-2color-meter-action-type"; + ordered-by user; + description + "Configuration of basic-meter & associated actions"; + leaf exceed-2color-meter-action-type { + type identityref { + base exceed-2color-meter-action-type; + } + description + "meter action type"; + } + choice exceed-2color-meter-action-val { + description + " meter action based on choice of meter action type"; + } + } + } + + grouping conform-3color-meter-action-params { + description + "meter action parameters"; + list conform-3color-meter-action-params { + key "conform-3color-meter-action-type"; + ordered-by user; + description + "Configuration of basic-meter & associated actions"; + leaf conform-3color-meter-action-type { + type identityref { + base conform-3color-meter-action-type; + } + description + "meter action type"; + } + choice conform-3color-meter-action-val { + description + " meter action based on choice of meter action type"; + } + } + } + + grouping exceed-3color-meter-action-params { + description + "meter action parameters"; + list exceed-3color-meter-action-params { + key "exceed-3color-meter-action-type"; + ordered-by user; + description + "Configuration of basic-meter & associated actions"; + leaf exceed-3color-meter-action-type { + type identityref { + base exceed-3color-meter-action-type; + } + description + "meter action type"; + } + choice exceed-3color-meter-action-val { + description + " meter action based on choice of meter action type"; + } + } + } + + grouping violate-3color-meter-action-params { + description + "meter action parameters"; + list violate-3color-meter-action-params { + key "violate-3color-meter-action-type"; + ordered-by user; + description + "Configuration of basic-meter & associated actions"; + leaf violate-3color-meter-action-type { + type identityref { + base violate-3color-meter-action-type; + } + description + "meter action type"; + } + choice violate-3color-meter-action-val { + description + " meter action based on choice of meter action type"; + } + } + } + + grouping one-rate-two-color-meter { + container one-rate-two-color-meter { + description + "single rate two color marker meter"; + leaf meter-rate { + type uint64; + units "bits-per-second"; + description + "meter rate"; + } + leaf meter-burst { + type uint64; + units "byes"; + description + "burst size"; + } + container conform-action { + uses conform-2color-meter-action-params; + description + "conform action"; + } + container exceed-action { + uses exceed-2color-meter-action-params; + description + "exceed action"; + } + } + description + "single rate two color marker meter attributes"; + } + + grouping one-rate-tri-color-meter { + container one-rate-tri-color-meter { + description + "single rate three color meter"; + leaf committed-rate { + type uint64; + units "bits-per-second"; + description + "meter rate"; + } + leaf committed-burst { + type uint64; + units "byes"; + description + "commited burst size"; + } + leaf excess-burst { + type uint64; + units "byes"; + description + "excess burst size"; + } + container conform-action { + uses conform-3color-meter-action-params; + description + "conform, or green action"; + } + container exceed-action { + uses exceed-3color-meter-action-params; + description + "exceed, or yellow action"; + } + container violate-action { + uses violate-3color-meter-action-params; + description + "violate, or red action"; + } + } + description + "one-rate-tri-color-meter attributes"; + } + + grouping two-rate-tri-color-meter { + container two-rate-tri-color-meter { + description + "two rate three color meter"; + leaf committed-rate { + type uint64; + units "bits-per-second"; + description + "meter rate"; + } + leaf committed-burst { + type uint64; + units "byes"; + description + "commited burst size"; + } + leaf peak-rate { + type uint64; + units "bits-per-second"; + description + "meter rate"; + } + leaf peak-burst { + type uint64; + units "byes"; + description + "commited burst size"; + } + container conform-action { + uses conform-3color-meter-action-params; + description + "conform, or green action"; + } + container exceed-action { + uses exceed-3color-meter-action-params; + description + "exceed, or yellow action"; + } + container violate-action { + uses violate-3color-meter-action-params; + description + "exceed, or red action"; + } + } + description + "two-rate-tri-color-meter attributes"; + } + + grouping meter { + choice meter-type { + case one-rate-two-color-meter-type { + uses one-rate-two-color-meter; + description + "basic meter"; + } + case one-rate-tri-color-meter-type { + uses one-rate-tri-color-meter; + description + "one rate tri-color meter"; + } + case two-rate-tri-color-meter-type { + uses two-rate-tri-color-meter; + description + "two rate tri-color meter"; + } + description + " meter action based on choice of meter action type"; + } + description + "meter attributes"; + } + + container meter-template { + description + "list of meter templates"; + list meter-entry { + if-feature "meter-template-support"; + key "meter-name"; + description + "meter entry template"; + leaf meter-name { + type string; + description + "meter identifier"; + } + uses meter; + } + } + + grouping meter-reference { + container meter-reference-cfg { + leaf meter-reference-name { + type string; + description + "This leaf defines name of the meter referenced"; + } + description + "meter reference name"; + } + description + "meter reference"; + } + + grouping count { + container count-cfg { + leaf count-action { + type empty; + description + "count action"; + } + description + "the count action"; + } + description + "the count action grouping"; + } + + grouping named-counter { + container named-counter-cfg { + leaf count-name-action { + type string; + description + "count action"; + } + description + "the count action"; + } + description + "the count action grouping"; + } + + grouping discard { + container discard-cfg { + leaf discard { + type empty; + description + "discard action"; + } + description + "discard action"; + } + description + "discard grouping"; + } + + grouping priority { + container priority-cfg { + leaf priority-level { + type uint8; + description + "priority level"; + } + description + "priority attributes"; + } + description + "priority attributes grouping"; + } + + grouping min-rate { + container min-rate-cfg { + uses rate-value-unit; + description + "min guaranteed bandwidth"; + } + description + "minimum rate grouping"; + } + + grouping dscp-marking { + container dscp-cfg { + leaf dscp { + type inet:dscp; + description + "dscp marking"; + } + description + "dscp marking container"; + } + description + "dscp marking grouping"; + } + + grouping child-policy { + container child-policy-cfg { + if-feature "child-policy-feature"; + leaf policy-name { + type string; + description + "Hierarchical Policy"; + } + description + "Hierarchical Policy configuration container"; + } + description + "Grouping of Hierarchical Policy configuration"; + } + + grouping max-rate { + container max-rate-cfg { + uses rate-value-unit; + uses burst; + description + "maximum rate attributes container"; + } + description + "maximum rate attributes"; + } + + grouping queue { + container queue-cfg { + uses priority; + uses min-rate; + uses max-rate; + container algorithmic-drop-cfg { + choice drop-algorithm { + case tail-drop { + container tail-drop-cfg { + leaf tail-drop-alg { + type empty; + description + "tail drop algorithm"; + } + description + "Tail Drop configuration container"; + } + description + "Tail Drop choice"; + } + description + "Choice of Drop Algorithm"; + } + description + "Algorithmic Drop configuration container"; + } + description + "Queue configuration container"; + } + description + "Queue grouping"; + } + + grouping schedular { + container schedular-cfg { + uses min-rate; + uses max-rate; + description + "Schedular configuration container"; + } + description + "Schedular configuration grouping"; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-classifier@2018-03-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-classifier@2018-03-03.yang new file mode 100644 index 000000000..df41c0eda --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-classifier@2018-03-03.yang @@ -0,0 +1,177 @@ +module ietf-qos-classifier { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-qos-classifier"; + prefix classifier; + + organization + "IETF RTG (Routing Area) Working Group"; + contact + "WG Web: + WG List: + WG Chair: Chris Bowers + + WG Chair: Jeff Tantsura + + Editor: Aseem Choudhary + + Editor: Mahesh Jethanandani + + Editor: Norm Strahle + "; + description + "This module contains a collection of YANG definitions for + configuring qos specification implementations. + Copyright (c) 2014 IETF Trust and the persons identified as + authors of the code. All rights reserved. + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject + to the license terms contained in, the Simplified BSD License + set forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (http://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC XXXX; see + the RFC itself for full legal notices."; + + revision 2018-03-03 { + description + "Latest revision of qos base classifier module"; + reference "RFC XXXX"; + } + + feature policy-inline-classifier-config { + description + " This feature allows classifier configuration + directly under policy."; + } + + feature classifier-template-feature { + description + " This feature allows classifier as template configuration + in a policy."; + } + + feature match-any-filter-type-support { + description + " This feature allows classifier configuration + directly under policy."; + } + + identity filter-type { + description + "This is identity of base filter-type"; + } + + identity classifier-entry-filter-operation-type { + description + "Classifier entry filter logical operation"; + } + + identity match-all-filter { + base classifier-entry-filter-operation-type; + description + "Classifier entry filter logical AND operation"; + } + + identity match-any-filter { + base classifier-entry-filter-operation-type; + if-feature "match-any-filter-type-support"; + description + "Classifier entry filter logical OR operation"; + } + + grouping filters { + description + "Filters types in a Classifier entry"; + leaf filter-type { + type identityref { + base filter-type; + } + description + "This leaf defines type of the filter"; + } + leaf filter-logical-not { + type boolean; + description + " + This is logical-not operator for a filter. When true, it + indicates filter looks for absence of a pattern defined + by the filter + "; + } + } + + grouping classifier-entry-generic-attr { + description + " + Classifier generic attributes like name, + description, operation type + "; + leaf classifier-entry-name { + type string; + description + "classifier entry name"; + } + leaf classifier-entry-descr { + type string; + description + "classifier entry description statement"; + } + leaf classifier-entry-filter-operation { + type identityref { + base classifier-entry-filter-operation-type; + } + default "match-all-filter"; + description + "Filters are applicable as match-any or match-all filters"; + } + } + + grouping classifier-entry-inline-attr { + description + "attributes of inline classifier in a policy"; + leaf classifier-entry-inline { + type boolean; + default "false"; + description + "Indication of inline classifier entry"; + } + leaf classifier-entry-filter-oper { + type identityref { + base classifier-entry-filter-operation-type; + } + default "match-all-filter"; + description + "Filters are applicable as match-any or match-all filters"; + } + list filter-entry { + if-feature "policy-inline-classifier-config"; + must " ../classifier-entry-inline = 'true' " { + description + "For inline filter configuration, inline attributemust + be true"; + } + key "filter-type filter-logical-not"; + uses filters; + description + "Filters configured inline in a policy"; + } + } + + container classifiers { + if-feature "classifier-template-feature"; + description + "list of classifier entry"; + list classifier-entry { + key "classifier-entry-name"; + description + "each classifier entry contains a list of filters"; + uses classifier-entry-generic-attr; + list filter-entry { + key "filter-type filter-logical-not"; + uses filters; + description + "Filter entry configuration"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-qos-target@2017-12-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-qos-target@2017-12-12.yang index caa4aa131..f26a39b63 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-qos-target@2017-12-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-qos-target@2017-12-12.yang @@ -2,20 +2,25 @@ module ietf-qos-target { yang-version 1; namespace "urn:ietf:params:xml:ns:yang:ietf-qos-target"; prefix target; + import ietf-interfaces { prefix if; } import ietf-qos-policy { prefix policy; } - organization "IETF RTG (Routing Area) Working Group"; + + organization + "IETF NETMOD (Netmod Working Group) Working Group"; contact - "WG Web: - WG List: - WG Chair: Chris Bowers - - WG Chair: Jeff Tantsura - + "WG Web: + WG List: + WG Chair: Jurgen Schonwalder + + WG Chair: Lou Berger + + WG Chair: Kent Watsen + Editor: Aseem Choudhary Editor: Mahesh Jethanandani @@ -33,11 +38,13 @@ module ietf-qos-target { (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 2017-12-12 { description "Latest revision qos based policy applied to a target"; reference "RFC XXXX"; } + identity direction { description "This is identity of traffic direction"; @@ -47,11 +54,13 @@ module ietf-qos-target { description "Direction of traffic coming into the network entry"; } + identity outbound { base direction; description "Direction of traffic going out of the network entry"; } + augment "/if:interfaces/if:interface" { description "Augments Diffserv Target Entry to Interface module"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-rift@2018-03-04.yang b/experimental/ietf-extracted-YANG-modules/ietf-rift@2018-03-04.yang new file mode 100644 index 000000000..ba40d0237 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-rift@2018-03-04.yang @@ -0,0 +1,666 @@ +module ietf-rift { + + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-rift"; + prefix rift; + + import ietf-inet-types { + prefix "inet"; + reference "RFC6991"; + } + + import ietf-routing { + prefix "rt"; + reference "RFC8022"; + } + + import ietf-interfaces { + prefix "if"; + reference "RFC7223"; + } + + organization + "IETF RIFT(Routing In Fat Trees) Working Group"; + + contact + "WG Web: + WG List: + + Editor: Zheng Zhang + + + Editor: Yuehua Wei + + + Editor: Shaowen Ma + + Editor: Xufeng Liu + "; + + description + "The module defines the YANG definitions for RIFT. + + 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 + (http://trustee.ietf.org/license-info). + This version of this YANG module is part of RFC 3618; see + the RFC itself for full legal notices."; + + revision 2018-03-04 { + description "Initial revision."; + reference + "RFC XXXX: A YANG Data Model for RIFT. + draft-przygienda-rift-04: RIFT: Routing in Fat Trees."; + } + + /* + * Features + */ + feature ztp-mode { + description "Support Zero Touch Provisioning (ZTP) mode."; + } + + feature default-route-originate { + description "Support the orgination of default route. The default route + generation must be careful to avoid balck-holing."; + } + + feature overload { + description "A node with overload bit set SHOULD NOT advertise any reachability + prefixes southbound except locally hosted ones. The leaf node SHOULD + set the 'overload' bit on its node TIEs."; + } + + feature bfd { + description "Support BFD (RFC5881) function to react quickly to link failures."; + } + + feature flood-reducing { + description "Support flood reducing function defined in section 4.2.3.8."; + } + + feature policy { + description "Support policy guide information."; + } + + typedef systemid { + type string { + pattern + '[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}\.[0-9A-Fa-f]{4}'; + } + description + "This type defines RIFT system id using pattern, + system id looks like : 0143.0438.0100.AeF0"; + } + + typedef level-value { + type uint8 { + range "0 .. 64"; + } + description "The value of node level. The max value is 64."; + } + + /* + * Identity + */ + identity rift { + base rt:routing-protocol; + description "Identity for the RIFT routing protocol."; + } + + /* + * Groupings + */ + grouping level-flag { + leaf level-flag { + type enumeration { + enum "auto" { + description "Node derive level automatically. Only applied + if 'configured' is undefined."; + } + enum "undefined" { + description "The level has not been determined and has not + been configured."; + } + enum "leaf-only" { + description "The node will never leave the 'bottom of the + hierarchy'. 'Superspine' and 'configured' value + cannot be defined at the same time as this flag. + It implies configured value of 0."; + } + enum "configured" { + description "This means a level value provided manually. When + this is defined a node is not participating in ZTP. + 'superspine' 'must' not be set when this value is + defined; 'leaf-only' can be set only if this value + is undefined or set to 0."; + } + enum "drived" { + description "This means the level value computed via automatic + level derivation when 'configured' has not been set + to something else than 'undefined'."; + } + enum "l2l" { + description "This means leaf to leaf. 'superspine' cannot be + defined at the same time as this. It implies + 'leaf-only' and the according restrictions."; + } + enum "superspine" { + description "'leaf-only' and 'configured' cannot be defined at + the same time as this. It implies 'configured' + value of 64."; + } + } + description "This node level information."; + } + description "This node level information."; + } + + grouping level-info { + uses level-flag; + + leaf level-value { + type level-value; + description "The node's level value."; + } + description "The 'level' of node. It indicates the position of node in the + Clos and Fat Tree network."; + } + + grouping node-key { + leaf systemid { + type systemid; + mandatory true; + description "Each node is identified via a SystemID which is 64 bits wide."; + } + leaf address { + type inet:ip-address; + description "The loopback address of node. It can be used to indicate + the node with system-id."; + } + description "The key information used to distinguish a node."; + } + + grouping base-node-info { + uses node-key; + uses level-info; + + leaf name { + type string; + description "The name of this node. It won't be used as the key of node, + just used for description."; + } + leaf pod { + type uint16; + description "Point of Delivery. The self-contained vertical slice of + a Clos or Fat Tree network containing normally only + level 0 and level 1 nodes. It communicates with nodes + in other PoDs via the spine. We number PoDs to distinguish + them and use PoD #0 to denote 'undefined' PoD."; + } + description "The base information of a node."; + } + + grouping neighbor { + leaf remote-id { + type uint32; + description "The remote-id to reach this neighbor."; + } + leaf distance { + type uint32; + description "The cost value to arrive this neighbor."; + } + leaf local-id { + type uint32; + description "The local-id of link connect to this neighbor."; + } + description "The neighbor information except for systemid."; + } + + grouping policy { + description "The policy information. When the tie-type of pgp/kv is set + to 'node', node-element is making sense. When the tie-type + of pgp/kv is set to other values except 'node', prefix-info + is making sense."; + + uses pg-info; + container pg-node { + uses node-element; + description "The node element information used as policy guide information."; + } + container pg-prefix { + uses prefix-info; + description "The prefix information used as policy guide information."; + } + } + + grouping node { + uses base-node-info; + + leaf hal { + type level-value; + description "The highest defined level value seen from all + valid level offers received."; + } + leaf ol { + if-feature overload; + type boolean; + description "If the overload bit in TIEs should be set."; + } + leaf ztp { + if-feature ztp-mode; + type boolean; + description "If the node is in ztp mode. If this value is + set node should work in ztp mode."; + } + leaf bfd { + if-feature bfd; + type boolean; + description "If BFD function is enabled to react link failures + after neighbor's detection."; + } + leaf default-originate { + if-feature default-route-originate; + type boolean; + description "If the node can originate southbound default route. + This function should be used carefully to avoid black-holing."; + } + leaf flood-reducing { + if-feature flood-reducing; + type boolean; + description "If the node support flood reducing function defined in section 4.2.3.8."; + } + + description "The information of local node. Includes base information, + configurable parameters and features."; + } + + grouping link-type { + leaf link-type { + type enumeration { + enum northbound { + description "A link to a node one level up."; + } + enum southbound { + description "A link to a node one level down."; + } + enum east-west { + description "A link between two nodes in the same level."; + } + enum l2l { + description "Leaf to leaf. East-west links at leaf level. + It is different from East-west links at other levels."; + } + } + description "The type of a link."; + } + description "The type of a link."; + } + + grouping interface { + list interfaces { + key "local-id"; + leaf local-id { + type uint32; + mandatory true; + description "The local id of this interface."; + } + leaf name { + type if:interface-ref; + description "The interface's name."; + } + container intf-type { + uses link-type; + description "The link type of local interface."; + } + description "The interface information on this node."; + } + description "The interface information."; + } + + grouping community-action { + description "The actions apply on a matching of community."; + leaf action { + type enumeration { + enum prune-nh-required { + description "For each next-hop in P.next_hop_set, if + the next-hop does not have the community, + prune that next-hop from P.next_hop_set."; + } + enum prune-nh-avoid { + description "For each next-hop in P.next_hop_set, if + the next-hop has the community, prune that + next-hop from P.next_hop_set."; + } + enum drop-if { + description "If node X has community M, discard P."; + } + enum drop-if-not { + description "If node X does not have the community M, discard P."; + } + enum add-if-node-match { + description "If the node X has community S, then add community T to P.community_list."; + } + } + description "The actions apply on a matching of community."; + } + } + + grouping community { + leaf type { + type enumeration { + enum top { + description "The direction type of community is toward to top."; + } + enum bottom { + description "The direction type of community is toward to bottom."; + } + } + description "community direction type."; + } + leaf value { + type uint64; + description "community value."; + } + uses community-action; + description "Community Attribute."; + } + + grouping direction-type { + leaf direction-type { + type enumeration { + enum northbound { + description "It means moving towards the top of the Clos or Fat Tree network."; + } + enum southbound { + description "It means moving towards the bottom of the Clos or Fat Tree network."; + } + } + description "The direction type."; + } + description "The direction type."; + } + + grouping node-element { + leaf layer { + type level-value; + description "The layer of this element."; + } + container nbr-info { + leaf nbr-addr { + type inet:ip-address; + description "The information used to distinguish a neighbor."; + } + leaf distance { + type uint32; + description "The cost value to arrive this neighbor."; + } + leaf nbr-layer { + type level-value; + description "The layer of this neighbor."; + } + leaf cost { + type uint32; + description "The cost of this neighbor."; + } + description "The information of this neighbor."; + } + + list link-set { + key "local-id"; + leaf local-id { + type uint32; + description "The local id of link."; + } + description "The link-set information of this TIE."; + } + description "The detail information in NodeElement of a TIE."; + } + + grouping prefix-info { + leaf prefix { + type inet:ip-prefix; + description "The prefix information."; + } + leaf cost { + type uint32; + description "The cost of this prefix."; + } + description "The detail information of prefix."; + } + + grouping tie-type { + leaf tie-type { + type enumeration { + enum node { + description "The node topology information elements."; + } + enum prefix { + description "The prefix topology information elements."; + } + enum pgp-prefix { + description "The PGP prefix information elements."; + } + enum kv { + description "The Key Value information elements."; + } + } + description "The possible TIE's types."; + } + description "The possible TIE's types."; + } + + grouping tie-id { + leaf originator { + type systemid; + description "The originator's systemid of this TIE."; + } + container direction { + uses direction-type; + description "The direction type of this TIE."; + } + container type { + uses tie-type; + description "The type of this TIE."; + } + container link-type { + uses link-type; + description "The type of link in this TIE."; + } + description "TIE is the acronym for 'Topology Information Element'. + TIEs are exchanged between RIFT nodes to describe parts + of a network such as links and address prefixes. This is + the TIE identification information."; + } + + grouping tie-info { + leaf seq { + type uint32; + description "The sequence number of a TIE."; + } + leaf lifetime { + type uint16 { + range "1 .. 65535"; + } + description "The lifetime of a TIE."; + } + container tie-node { + uses node-element; + description "The node element information in this TIE."; + } + container tie-prefix { + uses prefix-info; + description "The prefix information in this TIE."; + } + description "TIE is the acronym for 'Topology Information Element'. + TIEs are exchanged between RIFT nodes to describe parts + of a network such as links and address prefixes. This TIE + info is used to indicate the state of this TIE. When the + type of this TIE is set to 'node', the node-element is + making sense. When the type of this TIE is set to other + types except for 'node', the prefix-info is making sense."; + } + + grouping pg-info { + description "Information that is passed in either southbound direction + or north-bound direction by the means of diffusion and can + be filtered via policies. Policy-Guidedn Prefixes and KV + Ties are examples of Policy-Guided Information."; + leaf pg-type { + type enumeration { + enum pgp { + description "Policy-Guided Prefixes allow to support traffic + engineering that cannot be achieved by the means + of SPF computation or normal node and prefix S-TIE + origination. S-PGPs are propagated in south direction + only and N-PGPs follow northern direction strictly."; + } + enum kv-tie { + description "A S-TIE that is carrying a set of key value pairs. + It can be used to distribute information in the + southbound direction within the protocol."; + } + } + description "The types of Policy-Guiden Information."; + } + container pg-common { + uses tie-id; + description "The brief key information of this policy. It applies to node-element and prefix as well."; + } + } + + grouping algorithm { + choice algorighm-type { + case spf { + description "The algorithm is SPF."; + } + description "The possible algorithm types."; + } + description "The computation algorithm types."; + } + + grouping nh-set { + list next-hop-set { + key "local-id"; + leaf local-id { + type uint32; + description "The local id of interface."; + } + description "The next-hop set."; + } + description "The next-hop set."; + } + + /* + * Data nodes + */ + augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" { + when "derived-from(rt:type, 'rift:rift')" { + description "This augment is only valid for a routing protocol instance of RIFT."; + } + description "RIFT ( Routing in Fat Trees ) YANG model."; + container rift { + presence "Container for RIFT protocol."; + description "RIFT configuration data."; + + container node-info { + description "The node information about RIFT."; + uses node; + uses interface; + container community { + uses community; + description "The community attribute and information."; + } + container policy-info { + if-feature policy; + uses policy; + description "The policy information."; + } + } + container neighbor { + config false; + list nbrs { + key "systemid remote-id"; + uses base-node-info; + uses neighbor; + /*uses nbr-status;*/ /*The status will be added in later version.*/ + description "The information of a neighbor."; + } + description "The neighbor's information."; + }//neighbor + + container database { + config false; + list ties { + key "tie-index"; + leaf tie-index { + type uint32; + description "The index of a TIE."; + } + container database-tie { + uses tie-id; + uses tie-info; + description "The TIEs in the database."; + } + description "The detail information of a TIE."; + } + uses algorithm; + description "The TIEs information in database."; + }//database + + container kv-store { + config false; + list kvs { + key "kvs-index"; + leaf kvs-index { + type uint32; + description "The index of a kv pair."; + } + + container kvs-tie { + uses tie-id; + uses tie-info; + description "The TIEs in the kv-store."; + } + description "The information used to distinguish a Key/Value pair. + When the type of kv is set to 'node', node-element is + making sense. When the type of kv is set to other values + except 'node', prefix-info is making sense."; + } + description "The Key/Value store information."; + }//kv-store + }//rift + }//augment*/ + + /* + * RPCs + */ + + /* + * Notifications + */ + notification error-set { + description "The errors notification of RIFT."; + container tie-level-error { + uses tie-id; + uses tie-info; + description "The level is undefined in the LIEs."; + } + container nbr-error { + list nbrs { + key "systemid remote-id"; + uses base-node-info; + uses neighbor; + description "The information of a neighbor."; + } + description "The neighbor errors set."; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-routing-policy@2018-02-26.yang b/experimental/ietf-extracted-YANG-modules/ietf-routing-policy@2018-02-26.yang new file mode 100644 index 000000000..6375a69d7 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-routing-policy@2018-02-26.yang @@ -0,0 +1,765 @@ +module ietf-routing-policy { + + yang-version "1.1"; + namespace "urn:ietf:params:xml:ns:yang:ietf-routing-policy"; + prefix rt-pol; + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-yang-types { + prefix "yang"; + } + + import ietf-interfaces { + prefix "if"; + } + + import ietf-routing { + prefix "rt"; + } + + import ietf-interfaces-common { + prefix if-cmn; + } + + import ietf-if-l3-vlan { + prefix "if-l3-vlan"; + } + + organization + "IETF RTGWG - Routing Area Working Group"; + contact + "WG Web: + WG List: + + Editor: Yingzhen Qu + + Jeff Tantsura + + Acee Lindem + + Xufeng Liu + + Anees Shaikh + "; + + description + "This module describes a YANG model for routing policy + configuration. It is a limited subset of all of the policy + configuration parameters available in the variety of vendor + implementations, but supports widely used constructs for + managing how routes are imported, exported, and modified across + different routing protocols. This module is intended to be used + in conjunction with routing protocol configuration modules + (e.g., BGP) defined in other models. + + Route policy expression: + + Policies are expressed as a set of top-level policy definitions, + each of which consists of a sequence of policy statements. + Policy statements consist of simple condition-action tuples. + Conditions may include mutiple match or comparison operations, + and similarly actions may be multitude of changes to route + attributes or a final disposition of accepting or rejecting the + route. + + Route policy evaluation: + + Policy definitions are referenced in routing protocol + configurations using import and export configuration statements. + The arguments are members of an ordered list of named policy + definitions which comprise a policy chain, and optionally, an + explicit default policy action (i.e., reject or accept). + + Evaluation of each policy definition proceeds by evaluating its + corresponding individual policy statements in order. When a + condition statement in a policy statement is satisfied, the + corresponding action statement is executed. If the action + statement has either accept-route or reject-route actions, + policy evaluation of the current policy definition stops, and + no further policy definitions in the chain are evaluated. + + If the condition is not satisfied, then evaluation proceeds to + the next policy statement. If none of the policy statement + conditions are satisfied, then evaluation of the current policy + definition stops, and the next policy definition in the chain is + evaluated. When the end of the policy chain is reached, the + default route disposition action is performed (i.e., + reject-route unless an alternate default action is specified + for the chain). + + Policy 'subroutines' (or nested policies) are supported by + allowing policy statement conditions to reference another policy + definition which applies conditions and actions from the + referenced policy before returning to the calling policy + statement and resuming evaluation. If the called policy + results in an accept-route (either explicit or by default), then + the subroutine returns an effective true value to the calling + policy. Similarly, a reject-route action returns false. If the + subroutine returns true, the calling policy continues to + evaluate the remaining conditions (using a modified route if the + subroutine performed any changes to the route)."; + + revision "2018-02-26" { + description + "Initial revision."; + reference + "RFC XXXX: Routing Policy Configuration Model for Service + Provider Networks"; + } + + // typedef statements + + typedef default-policy-type { + // this typedef retained for name compatibiity with default + // import and export policy + type enumeration { + enum accept-route { + description + "Default policy to accept the route"; + } + enum reject-route { + description + "Default policy to reject the route"; + } + } + description + "Type used to specify route disposition in + a policy chain"; + } + + typedef policy-result-type { + type enumeration { + enum accept-route { + description "Policy accepts the route"; + } + enum reject-route { + description "Policy rejects the route"; + } + } + description + "Type used to specify route disposition in + a policy chain"; + } + + typedef tag-type { + type union { + type uint32; + type yang:hex-string; + } + description "Type for expressing route tags on a local system, + including IS-IS and OSPF; may be expressed as either decimal + or hexadecimal integer"; + reference + "RFC 2178 - OSPF Version 2 + RFC 5130 - A Policy Control Mechanism in IS-IS Using + Administrative Tags"; + } + + typedef match-set-options-type { + type enumeration { + enum any { + description "Match is true if given value matches any member + of the defined set"; + } + enum all { + description "Match is true if given value matches all + members of the defined set"; + } + enum invert { + description "Match is true if given value does not match any + member of the defined set"; + } + } + default any; + description + "Options that govern the behavior of a match statement. The + default behavior is any, i.e., the given value matches any + of the members of the defined set"; + } + + // grouping statements + + grouping prefix-set { + description + "Configuration data for prefix sets used in policy + definitions."; + + leaf name { + type string; + description + "Name of the prefix set -- this is used as a label to + reference the set in match conditions"; + } + + leaf mode { + type enumeration { + enum ipv4 { + description + "Prefix set contains IPv4 prefixes only"; + } + enum ipv6 { + description + "Prefix set contains IPv6 prefixes only"; + } + enum mixed { + description + "Prefix set contains mixed IPv4 and IPv6 prefixes"; + } + } + description + "Indicates the mode of the prefix set, in terms of which + address families (IPv4, IPv6, or both) are present. The + mode provides a hint, but the device must validate that all + prefixes are of the indicated type, and is expected to + reject the configuration if there is a discrepancy. The + MIXED mode may not be supported on devices that require + prefix sets to be of only one address family."; + } + + } + + grouping prefix-set-top { + description + "Top-level data definitions for a list of IPv4 or IPv6 + prefixes which are matched as part of a policy"; + + container prefix-sets { + description + "Enclosing container "; + + list prefix-set { + key "name"; + description + "List of the defined prefix sets"; + + uses prefix-set; + + uses prefix-top; + } + } + } + + grouping prefix { + description + "Configuration data for a prefix definition"; + + leaf ip-prefix { + type inet:ip-prefix; + mandatory true; + description + "The prefix member in CIDR notation -- while the + prefix may be either IPv4 or IPv6, most + implementations require all members of the prefix set + to be the same address family. Mixing address types in + the same prefix set is likely to cause an error."; + } + + leaf masklength-range { + type string { + pattern '([0-9]{2}\.\.[0-9]{2})|([0-9]{2})'; + } + description + "Defines a range for the masklength, or 'exact' if + the prefix has an exact length. + + Example: 10.3.192.0/21 through 10.3.192.0/24 would be + expressed as prefix: 10.3.192.0/21, + masklength-range: 21..24. + + Example: 10.3.192.0/21 would be expressed as + prefix: 10.3.192.0/21, + masklength-range: exact"; + } + } + + grouping prefix-top { + description + "Top-level grouping for prefixes in a prefix list"; + + container prefixes { + description + "Enclosing container for the list of prefixes in a policy + prefix list"; + + list prefix-list { + key "ip-prefix masklength-range"; + description + "List of prefixes in the prefix set"; + + uses prefix; + } + } + } + + grouping neighbor-set { + description + "This grouping provides neighbor set definitions"; + + leaf name { + type string; + description + "Name of the neighbor set -- this is used as a label + to reference the set in match conditions"; + } + + leaf-list address { + type inet:ip-address; + description + "List of IP addresses in the neighbor set"; + } + } + + grouping neighbor-set-top { + description + "Top-level data definition for a list of IPv4 or IPv6 + neighbors which can be matched in a routing policy"; + + container neighbor-sets { + description + "Enclosing container for the list of neighbor set + definitions"; + + list neighbor-set { + key "name"; + description + "List of defined neighbor sets for use in policies."; + + uses neighbor-set; + } + } + } + + grouping tag-set { + description + "This grouping provides tag set definitions."; + + leaf name { + type string; + description + "Name of the tag set -- this is used as a label to reference + the set in match conditions"; + } + + leaf-list tag-value { + type tag-type; + description + "Value of the tag set member"; + } + } + + grouping tag-set-top { + description + "Top-level data definitions for a list of tags which can + be matched in policies"; + + container tag-sets { + description + "Enclosing container for the list of tag sets."; + + list tag-set { + key "name"; + description + "List of tag set definitions."; + + uses tag-set; + + } + } + } + + grouping match-set-options-group { + description + "Grouping containing options relating to how a particular set + should be matched"; + + leaf match-set-options { + type match-set-options-type; + description + "Optional parameter that governs the behavior of the + match operation"; + } + } + + grouping match-set-options-restricted-group { + description + "Grouping for a restricted set of match operation modifiers"; + + leaf match-set-options { + type match-set-options-type { + enum any { + description "Match is true if given value matches any + member of the defined set"; + } + enum invert { + description "Match is true if given value does not match + any member of the defined set"; + } + } + description + "Optional parameter that governs the behavior of the + match operation. This leaf only supports matching on ANY + member of the set or inverting the match. Matching on ALL + is not supported"; + } + } + + grouping match-interface-condition { + description + "This grouping provides interface match condition"; + + container match-interface { + leaf interface { + type leafref { + path "/if:interfaces/if:interface/if:name"; + } + description + "Reference to a base interface. If a reference to a + subinterface is required, this leaf must be specified + to indicate the base interface."; + } + leaf subinterface { + type leafref { + path "/if:interfaces/if:interface/if-cmn:encapsulation" + + "/if-l3-vlan:dot1q-vlan" + + "/if-l3-vlan:outer-tag/if-l3-vlan:vlan-id"; + } + description + "Reference to a subinterface -- this requires the base + interface to be specified using the interface leaf in + this container. If only a reference to a base interface + is requuired, this leaf should not be set."; + } + + description + "Container for interface match conditions"; + } + } + + grouping prefix-set-condition { + description + "This grouping provides prefix-set conditions"; + + container match-prefix-set { + leaf prefix-set { + type leafref { + path "../../../../../../../defined-sets/" + + "prefix-sets/prefix-set/name"; + } + description "References a defined prefix set"; + } + uses match-set-options-restricted-group; + + description + "Match a referenced prefix-set according to the logic + defined in the match-set-options leaf"; + } + } + + grouping neighbor-set-condition { + description + "This grouping provides neighbor-set conditions"; + + container match-neighbor-set { + leaf neighbor-set { + type leafref { + path "../../../../../../../defined-sets/neighbor-sets/" + + "neighbor-set/name"; + require-instance true; + } + description "References a defined neighbor set"; + } + + description + "Match a referenced neighbor set according to the logic + defined in the match-set-options-leaf"; + } + } + + grouping tag-set-condition { + description + "This grouping provides tag-set conditions"; + + container match-tag-set { + leaf tag-set { + type leafref { + path "../../../../../../../defined-sets/tag-sets/tag-set" + + "/name"; + require-instance true; + } + description "References a defined tag set"; + } + uses match-set-options-restricted-group; + + description + "Match a referenced tag set according to the logic defined + in the match-options-set leaf"; + } + } + + grouping generic-conditions { + description "Condition statement definitions for checking + membership in a generic defined set"; + + uses match-interface-condition; + uses prefix-set-condition; + uses neighbor-set-condition; + uses tag-set-condition; + + } + + grouping generic-actions { + description + "Definitions for common set of policy action statements that + manage the disposition or control flow of the policy"; + + leaf policy-result { + type policy-result-type; + description + "Select the final disposition for the route, either + accept or reject."; + } + } + + grouping policy-conditions { + description + "Data for general policy conditions, i.e., those + not related to match-sets"; + + leaf call-policy { + type leafref { + path "../../../../../../" + + "rt-pol:policy-definitions/" + + "rt-pol:policy-definition/rt-pol:name"; + require-instance true; + } + description + "Applies the statements from the specified policy + definition and then returns control the current + policy statement. Note that the called policy may + itself call other policies (subject to + implementation limitations). This is intended to + provide a policy 'subroutine' capability. The + called policy should contain an explicit or a + default route disposition that returns an + effective true (accept-route) or false + (reject-route), otherwise the behavior may be + ambiguous and implementation dependent"; + } + + leaf install-protocol-eq { + type identityref { + base rt:control-plane-protocol; + } + description + "Condition to check the protocol / method used to install + the route into the local routing table"; + } + } + + grouping policy-conditions-top { + description + "Top-level grouping for policy conditions"; + + container conditions { + description + "Condition statements for the current policy statement"; + + uses policy-conditions; + + uses generic-conditions; + } + } + + grouping policy-statements { + description + "Data for policy statements"; + + leaf name { + type string; + description + "Name of the policy statement"; + } + } + + grouping policy-actions { + description + "Grouping for policy actions"; + + uses generic-actions; + } + grouping policy-actions-top { + description + "Top-level grouping for policy actions"; + + container actions { + description + "Top-level container for policy action statements"; + + uses policy-actions; + } + } + + grouping policy-statements-top { + description + "Top-level grouping for the policy statements list"; + + container statements { + description + "Enclosing container for policy statements"; + + list statement { + key "name"; + ordered-by user; + description + "Policy statements group conditions and actions + within a policy definition. They are evaluated in + the order specified (see the description of policy + evaluation at the top of this module."; + + uses policy-statements; + + uses policy-conditions-top; + uses policy-actions-top; + } + } + } + + grouping policy-definitions { + description + "This grouping provides policy definitions"; + + leaf name { + type string; + description + "Name of the top-level policy definition -- this name + is used in references to the current policy"; + } + } + + grouping apply-policy-import { + description + "Grouping for applying import policies"; + + leaf-list import-policy { + type leafref { + path "/rt-pol:routing-policy/rt-pol:policy-definitions/" + + "rt-pol:policy-definition/rt-pol:name"; + require-instance true; + } + ordered-by user; + description + "List of policy names in sequence to be applied on + receiving a routing update in the current context, e.g., + for the current peer group, neighbor, address family, + etc."; + } + + leaf default-import-policy { + type default-policy-type; + default reject-route; + description + "Explicitly set a default policy if no policy definition + in the import policy chain is satisfied."; + } + + } + + grouping apply-policy-export { + description + "Grouping for applying export policies"; + + leaf-list export-policy { + type leafref { + path "/rt-pol:routing-policy/rt-pol:policy-definitions/" + + "rt-pol:policy-definition/rt-pol:name"; + require-instance true; + } + ordered-by user; + description + "List of policy names in sequence to be applied on + sending a routing update in the current context, e.g., + for the current peer group, neighbor, address family, + etc."; + } + + leaf default-export-policy { + type default-policy-type; + default reject-route; + description + "Explicitly set a default policy if no policy definition + in the export policy chain is satisfied."; + } + } + + grouping apply-policy { + description + "Configuration data for routing policies"; + + uses apply-policy-import; + uses apply-policy-export; + + container apply-policy-state { + description + "Operational state associated with routing policy"; + + //TODO: identify additional state data beyond the intended + //policy configuration. + } + + } + + grouping apply-policy-group { + description + "Top level container for routing policy applications. This + grouping is intended to be used in routing models where + needed."; + + container apply-policy { + description + "Anchor point for routing policies in the model. + Import and export policies are with respect to the local + routing table, i.e., export (send) and import (receive), + depending on the context."; + + uses apply-policy; + + } + } + + container routing-policy { + description + "Top-level container for all routing policy"; + + container defined-sets { + description + "Predefined sets of attributes used in policy match + statements"; + + uses prefix-set-top; + uses neighbor-set-top; + uses tag-set-top; + } + + container policy-definitions { + description + "Enclosing container for the list of top-level policy + definitions"; + + list policy-definition { + key "name"; + description + "List of top-level policy definitions, keyed by unique + name. These policy definitions are expected to be + referenced (by name) in policy chains specified in import + or export configuration statements."; + + uses policy-definitions; + + uses policy-statements-top; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-schedule@2018-02-26.yang b/experimental/ietf-extracted-YANG-modules/ietf-schedule@2018-02-26.yang new file mode 100644 index 000000000..b327b0d5d --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-schedule@2018-02-26.yang @@ -0,0 +1,243 @@ +module ietf-schedule { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; + + prefix "sch"; + + import ietf-yang-types { + prefix "yang"; + } + + organization + "IETF NETMOD (NETCONF Data Modeling Language) Working Group"; + contact + "WG Web: + WG List: + + Editor: Xufeng Liu + + + Editor: Igor Bryskin + + + Editor: Vishnu Pavan Beeram + + + Editor: Tarek Saad + + + Editor: Himanshu Shah + + + Editor: Oscar Gonzalez De Dios + "; + description + "The model allows time scheduling parameters to be specified."; + + revision 2018-02-26 { + description "Initial revision"; + reference "TBD"; + } + + /* + * Typedefs + */ + typedef operation { + type enumeration { + enum configure { + description + "Create the configuration data."; + } + enum deconfigure { + description + "Remove the configuration data."; + } + enum set { + description + "Set the specified configuration data."; + } + enum reset { + description + "Revert the specified configuration data back to the + original value."; + } + } + description "Operation type."; + } + + /* + * Groupings + */ + + grouping schedule-config-attributes { + description + "A group of attributes for a schedule."; + + leaf inclusive-exclusive { + type enumeration { + enum inclusive { + description + "The schedule element is inclusive, i.e., the schedule + specifies the time at which the element is enabled."; + } + enum exclusive { + description + "The schedule element is exclusive. i.e., the schedule + specifies the time at which the element is disabled."; + } + } + default "inclusive"; + description + "Whether the list item is inclusive or exclusive."; + } + leaf start { + type yang:date-and-time; + description "Start time."; + } + leaf schedule-duration { + type string { + pattern + 'P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?(\d+S)?'; + } + description "Schedule duration in ISO 8601 format."; + } + leaf repeat-interval { + type string { + pattern + 'R\d*/P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?' + + '(\d+S)?'; + } + description "Repeat interval in ISO 8601 format."; + } + leaf operation { + type operation; + default "configure"; + description + "Operation type."; + } + anydata data-value { + description + "The data value applied to the leaf data node + specified by data-objects. + The format of the data value depends on the value of the + leaf operation defined above: + configure: data-value is the sub-tree added to the + target object; + deconfigure: data-value is the child to be deleted from + the target object; + set: the target object MULST be a leaf, and + data-value is the new value to be set to + the target object; + reset: data-value is ignored."; + } + } // schedule-config-attributes + + grouping schedule-config-notification { + description + "A group of attributes for a schedule notification."; + + notification execution { + description + "Notification event for an execution performed on a target + object."; + leaf operation { + type operation; + mandatory true; + description "Operation type."; + } + leaf datetime { + type yang:date-and-time; + description + "The date and time when the execution was performed."; + } + anydata results { + description + "This chunk of data contains the results of the execution + performed on the target object. The results are the same + or equivalent to the contents of a message, + Because of the nature of such a target execution, a + message is not used to return the execution + results. Instead, this notification is used to serve + the same purpose."; + } + } + } // schedule-config-notification + + grouping schedule-state-attributes { + description + "State attributes for a schedule."; + container future-executions { + description + "The state information of the nexte scheduled event."; + list execution { + key "start"; + description + "List of scheduled future executions."; + leaf start { + type yang:date-and-time; + description "Start time."; + } + leaf duration { + type string { + pattern + 'P(\d+Y)?(\d+M)?(\d+W)?(\d+D)?T(\d+H)?(\d+M)?(\d+S)?'; + } + description "Schedule duration in ISO 8601 format."; + } + leaf operation { + type operation; + description "Operation type."; + } + } // event + } // future-events + } // schedule-state-attributes + + grouping schedules { + description + "A list of schedules defining when a particular + configuration takes effect."; + container schedules { + description + "Container of a schedule list defining when a particular + configuration takes effect."; + list schedule { + key "schedule-id"; + description "A list of schedule elements."; + leaf schedule-id { + type uint32; + description "Identifies the schedule element."; + } + uses schedule-config-attributes; + } + } + } // schedules + + /* + * Configuration data and operational state nodes + */ + container configuration-schedules { + description + "Serves as top-level container for a list of configuration + schedules."; + list target { + key "object"; + description + "A list of targets that configuration schedules are + applied."; + leaf object { + type yang:xpath1.0; + description + "Xpath defining the data items of interest."; + } + uses schedules; + container state { + config false; + description + "Operational state data."; + uses schedule-state-attributes; + } // state + + uses schedule-config-notification; + } // target + } // configuration-schedules +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2017-10-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2018-02-28.yang similarity index 85% rename from experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2017-10-30.yang rename to experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2018-02-28.yang index c0c760be1..d5e2cab33 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2017-10-30.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-sr-topology-state@2018-02-28.yang @@ -22,7 +22,7 @@ module ietf-sr-topology-state { organization "TBD"; contact "TBD"; description "L3 TE Topology model"; - revision 2017-10-30 { + revision 2018-02-28 { description "Initial revision"; reference "TBD"; } @@ -36,7 +36,7 @@ module ietf-sr-topology-state { augment "/nw-s:networks/nw-s:network/" + "l3t-s:l3-topology-attributes" { - when "../nw-s:network-types/l3t-s:l3-unicast-topology/sr" { + when "../nw-s:network-types/l3t-s:l3-unicast-topology/srt-s:sr" { description "Augment only for SR topology."; } description "Augment topology configuration"; @@ -45,7 +45,8 @@ module ietf-sr-topology-state { augment "/nw-s:networks/nw-s:network/nw-s:node/" + "l3t-s:l3-node-attributes" { - when "../../nw-s:network-types/l3t-s:l3-unicast-topology/sr" { + when "../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "srt-s:sr" { description "Augment only for SR topology."; } description "Augment node configuration."; @@ -54,7 +55,8 @@ module ietf-sr-topology-state { augment "/nw-s:networks/nw-s:network/nw-s:node/" + "l3t-s:l3-node-attributes/l3t-s:prefix" { - when "../../../nw-s:network-types/l3t-s:l3-unicast-topology/sr" { + when "../../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "srt-s:sr" { description "Augment only for SR topology."; } description "Augment node prefix."; @@ -65,7 +67,7 @@ module ietf-sr-topology-state { + "nt-s:termination-point/" + "l3t-s:l3-termination-point-attributes" { when "../../../nw-s:network-types/l3t-s:l3-unicast-topology/" - + "sr" { + + "srt-s:sr" { description "Augment only for SR topology."; } description "Augment termination point configuration"; @@ -74,7 +76,8 @@ module ietf-sr-topology-state { augment "/nw-s:networks/nw-s:network/nt-s:link/" + "l3t-s:l3-link-attributes" { - when "../../nw-s:network-types/l3t-s:l3-unicast-topology/sr" { + when "../../nw-s:network-types/l3t-s:l3-unicast-topology/" + + "srt-s:sr" { description "Augment only for SR topology."; } description "Augment link configuration."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-sr-topology@2018-02-28.yang b/experimental/ietf-extracted-YANG-modules/ietf-sr-topology@2018-02-28.yang new file mode 100644 index 000000000..fe20b52c0 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-sr-topology@2018-02-28.yang @@ -0,0 +1,210 @@ +module ietf-sr-topology { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-sr-topology"; + prefix "srt"; + + import ietf-network { + prefix "nw"; + } + import ietf-network-topology { + prefix "nt"; + } + import ietf-l3-unicast-topology { + prefix "l3t"; + } + import ietf-segment-routing-common { + prefix "sr-cmn"; + } + + organization "TBD"; + contact "TBD"; + description "L3 TE Topology model"; + + revision 2018-02-28 { + description "Initial revision"; + reference "TBD"; + } + + grouping sr-topology-type { + description + "Identifies the SR topology type."; + container sr { + presence "Indiates SR Topology"; + description + "Its presence identifies the SR topology type."; + } + } + + augment "/nw:networks/nw:network/nw:network-types/" + + "l3t:l3-unicast-topology" { + description + "Defines the SR topology type."; + uses sr-topology-type; + } + + augment "/nw:networks/nw:network/l3t:l3-topology-attributes" { + when "../nw:network-types/l3t:l3-unicast-topology/srt:sr" { + description "Augment only for SR topology."; + } + description "Augment topology configuration"; + uses sr-topology-attributes; + } + + augment "/nw:networks/nw:network/nw:node/l3t:l3-node-attributes" { + when "../../nw:network-types/l3t:l3-unicast-topology/srt:sr" { + description "Augment only for SR topology."; + } + description "Augment node configuration."; + uses sr-node-attributes; + } + + augment "/nw:networks/nw:network/nw:node/l3t:l3-node-attributes" + + "/l3t:prefix" { + when "../../../nw:network-types/l3t:l3-unicast-topology/srt:sr" { + description "Augment only for SR topology."; + } + description "Augment node prefix."; + uses sr-node-prefix-attributes; + } + + augment "/nw:networks/nw:network/nw:node/nt:termination-point/" + + "l3t:l3-termination-point-attributes" { + when "../../../nw:network-types/l3t:l3-unicast-topology/" + + "srt:sr" { + description "Augment only for SR topology."; + } + description "Augment termination point configuration"; + uses sr-tp-attributes; + } + + augment "/nw:networks/nw:network/nt:link/l3t:l3-link-attributes" { + when "../../nw:network-types/l3t:l3-unicast-topology/srt:sr" { + description "Augment only for SR topology."; + } + description "Augment link configuration."; + uses sr-link-attributes; + } + + grouping sr-topology-attributes { + description "SR topology scope attributes."; + container sr { + description + "Containing SR attributes."; + uses sr-cmn:srgb-cfg; + } // sr + } // sr-topology-attributes + + grouping information-source-attributes { + description + "The attributes identifying source that has provided the + related information, and the source credibility."; + leaf information-source { + type enumeration { + enum "unknown" { + description "The source is unknown."; + } + enum "locally-configured" { + description "Configured entity."; + } + enum "ospfv2" { + description "OSPFv2."; + } + enum "ospfv3" { + description "OSPFv3."; + } + enum "isis" { + description "ISIS."; + } + enum "system-processed" { + description "System processed entity."; + } + enum "other" { + description "Other source."; + } + } + config false; + description + "Indicates the source of the information."; + } + container information-source-state { + config false; + description + "The container contains state attributes related to + the information source."; + leaf credibility-preference { + type uint16; + description + "The preference value to calculate the traffic + engineering database credibility value used for + tie-break selection between different + information-source values. + Higher value is more preferable."; + } + } + } // information-source-attributes + + grouping sr-node-attributes { + description "SR node scope attributes."; + container sr { + description + "Containing SR attributes."; + uses sr-cmn:srgb-cfg; + uses sr-cmn:srlb-cfg; + uses sr-cmn:node-capabilities; + // Operational state data + uses information-source-attributes; + } // sr + } // sr-node-attributes + + grouping sr-node-prefix-attributes { + description "Containing SR attributes for a prefix."; + container sr { + presence "Presence indicates SR is enabled."; + description + "Containing SR attributes for a prefix."; + uses sr-cmn:prefix-sid-attributes; + uses sr-cmn:last-hop-behavior; + leaf is-local { + type boolean; + description + "'true' if the SID is local."; + } + } // sr + } // sr-node-prefix-attributes + + grouping sr-tp-attributes { + description "SR termination point scope attributes"; + } // sr-tp-attributes + + grouping sr-link-attributes { + description "SR link scope attributes"; + container sr { + description + "Containing SR attributes."; + leaf sid { + type uint32; + description + "SID."; + } + uses sr-cmn:sid-value-type; + leaf is-local { + type boolean; + description + "'true' if the SID is local."; + } + leaf is-part-of-set { + type boolean; + config false; + description + "'true' if the SID is part of a set."; + } + leaf is-on-lan { + type boolean; + config false; + description + "'true' if on a lan."; + } + uses information-source-attributes; + } // sr + } // sr-link-attributes +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2017-11-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2018-03-01.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2017-11-12.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2018-03-01.yang index 95ada36d5..315f1d24a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2017-11-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-base@2018-03-01.yang @@ -30,15 +30,9 @@ module ietf-srv6-base { organization "IETF SPRING Working Group"; contact - "WG Web: + "WG Web: WG List: - WG Chair: Bruno Decraene - - - WG Chair: Martin Vigoureux - - Editor: Kamran Raza @@ -48,6 +42,9 @@ module ietf-srv6-base { Editor: Xufeng Liu + Editor: Zhibo Hu + + Editor: Iftekhar Hussain @@ -55,15 +52,21 @@ module ietf-srv6-base { Editor: Daniel Voyer - + Editor: Hani Elmalky + Editor: Satoru Matsushima + + + Editor: Katsuhiro Horiba + + Editor: Ahmed AbdelSalam - "; + "; description "This YANG module defines the essential elements for the management of Segment-Routing with IPv6 dataplane (SRv6). @@ -80,6 +83,13 @@ module ietf-srv6-base { reference "RFC XXXX"; + revision 2018-03-01 { + description + "Updated to align with SRv6 network programming draft rev 04"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + } + revision 2017-11-12 { description "Initial revision."; @@ -96,7 +106,7 @@ module ietf-srv6-base { "Path properties -common for v4/v6"; leaf weight { - type uint16; + type uint32; description "This value is used to compute a loadshare to perform un-equal load balancing when multiple outgoing path(s) are specified. A @@ -328,6 +338,7 @@ module ietf-srv6-base { when "../../../next-hop-type != 'l2'" { description "This container is valid only for L3 type of NHs"; } + leaf interface { type if:interface-ref; description "The outgoing Layer3 interface"; @@ -344,7 +355,6 @@ module ietf-srv6-base { } uses path-out-sids-choice; } - description "Forwarding paths"; } } @@ -360,7 +370,7 @@ module ietf-srv6-base { container counters { description "SRv6 counters"; - container cnt0 { + container cnt3 { description "Counts SRv6 traffic received/dropped on local prefix not instantiated as local-SID"; uses srv6-stats-in; } @@ -376,13 +386,16 @@ module ietf-srv6-base { } uses srv6-locator-ref; + leaf is-reserved { type boolean; description "Set to true if SID comes from reserved pool"; } leaf end-behavior-type { - type srv6-types:srv6-end-type; + type identityref { + base srv6-types:srv6-endpoint-type; + } description "Type of SRv6 end behavior."; } @@ -396,7 +409,9 @@ module ietf-srv6-base { key "type instance"; description "SID Owner clients"; leaf type { - type srv6-types:srv6-sid-owner-type; + type identityref { + base srv6-types:srv6-sid-owner-type; + } description "SID owner/client type"; } leaf instance { @@ -431,7 +446,9 @@ module ietf-srv6-base { description "End behavior support"; leaf type { - type srv6-types:srv6-end-type; + type identityref { + base srv6-types:srv6-endpoint-type; + } description "End behavior (End*) type"; } leaf supported { @@ -520,6 +537,7 @@ module ietf-srv6-base { } } } + grouping srv6-support-counters { description "SRv6 Counters grouping"; @@ -609,18 +627,22 @@ module ietf-srv6-base { container existing { description "Current assignment / bind"; leaf end-behavior-type { - type srv6-types:srv6-end-type; + type identityref { + base srv6-types:srv6-endpoint-type; + } description "End type"; } // TODO: More } container requested { description "Requested assignment / bind"; + leaf end-behavior-type { - type srv6-types:srv6-end-type; + type identityref { + base srv6-types:srv6-endpoint-type; + } description "End type"; } - // TODO: More } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2017-11-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2018-03-01.yang similarity index 66% rename from experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2017-11-12.yang rename to experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2018-03-01.yang index fdc6c80c4..8135df192 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2017-11-12.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-static@2018-03-01.yang @@ -29,12 +29,6 @@ module ietf-srv6-static { "WG Web: WG List: - WG Chair: Bruno Decraene - - - WG Chair: Martin Vigoureux - - Editor: Kamran Raza @@ -44,6 +38,9 @@ module ietf-srv6-static { Editor: Xufeng Liu + Editor: Zhibo Hu + + Editor: Iftekhar Hussain @@ -51,13 +48,20 @@ module ietf-srv6-static { Editor: Daniel Voyer - + Editor: Hani Elmalky + Editor: Satoru Matsushima + + + Editor: Katsuhiro Horiba + + Editor: Ahmed AbdelSalam + "; description @@ -77,6 +81,13 @@ module ietf-srv6-static { reference "RFC XXXX"; + revision 2018-03-01 { + description + "Updated to align with SRv6 network programming draft rev 04"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + } + revision 2017-11-12 { description "Initial revision."; @@ -113,7 +124,6 @@ module ietf-srv6-static { type if:interface-ref; description "The outgoing interface"; } - leaf next-hop { type inet:ipv4-address; description "The IP address of the next-hop"; @@ -218,7 +228,9 @@ module ietf-srv6-static { "SRv6 function opcode."; } leaf end-behavior-type { - type srv6-types:srv6-end-type; + type identityref { + base srv6-types:srv6-endpoint-type; + } mandatory true; description "Type of SRv6 end behavior."; @@ -228,41 +240,77 @@ module ietf-srv6-static { when "../end-behavior-type = 'End'" { description "This container is valid only when the user chooses End - behavior."; + behavior (variant: no PSP, no USP)."; } description "The Endpoint function is the most basic function. FIB lookup on updated DA and forward accordingly to the matched entry. - This is the SRv6 instantiation of a Prefix SID."; + This is the SRv6 instantiation of a Prefix SID + (variant: no PSP, no USP)"; + + } + + container end_psp { + when "../end-behavior-type = 'End_PSP'" { + description + "This container is valid only when the user chooses End + behavior (variant: PSP only)."; + } + description + "The Endpoint function is the most basic function. + FIB lookup on updated DA and forward accordingly + to the matched entry. + This is the SRv6 instantiation of a Prefix SID + (variant: PSP only)"; + + } + + container end_usp { + when "../end-behavior-type = 'End_USP'" { + description + "This container is valid only when the user chooses End + behavior (variant: USP only)."; + } + description + "The Endpoint function is the most basic function. + FIB lookup on updated DA and forward accordingly + to the matched entry. + This is the SRv6 instantiation of a Prefix SID + (variant: USP only)"; + + } + + container end_psp_usp { + when "../end-behavior-type = 'End_PSP_USP'" { + description + "This container is valid only when the user chooses End + behavior (variant: PSP/USP)."; + } + description + "The Endpoint function is the most basic function. + FIB lookup on updated DA and forward accordingly + to the matched entry. + This is the SRv6 instantiation of a Prefix SID + (variant: PSP/USP)"; - leaf usp { - type boolean; - default false; - description - "Ultimate SRH poping. Default is PSP"; - } } container end-t { when "../end-behavior-type = 'End.T'" { description "This container is valid only when the user chooses - End.T behavior."; + End.T behavior (variant: no PSP, no USP)."; } description - "Endpoint with specific IPv6 table lookup. + "Endpoint with specific IPv6 table lookup (variant: no PSP, no USP). Lookup the next segment in IPv6 table T - associated with the SID and forward viai + associated with the SID and forward via the matched table entry. The End.T is used for multi-table operation in the core."; - leaf usp { - type boolean; - default false; - description - "Ultimate SRH poping. Default is PSP"; - } + + // TODO presence "Mandatory child only if container is present"; leaf lookup-table-ipv6 { type srv6-types:table-id; mandatory true; @@ -271,126 +319,166 @@ module ietf-srv6-static { } } - container end-x { - when "../end-behavior-type = 'End.X'" { + container end-t_psp { + when "../end-behavior-type = 'End.T_PSP'" { description "This container is valid only when the user chooses - End.X behavior."; + End.T behavior (variant: PSP only)."; } description - "Endpoint with cross-connect to an array of - layer-3 adjacencies. - Forward to layer-3 adjacency bound to the SID S. - The End.X function is required to express any - traffic-engineering policy."; - leaf usp { - type boolean; - default false; + "Endpoint with specific IPv6 table lookup (variant: PSP only). + Lookup the next segment in IPv6 table T + associated with the SID and forward via + the matched table entry. + The End.T is used for multi-table operation + in the core."; + + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv6 { + type srv6-types:table-id; + mandatory true; + description + "Table Id for lookup on updated DA (next segment)"; + } + } + + container end-t_usp { + when "../end-behavior-type = 'End.T_USP'" { description - "Ultimate SRH poping. Default is PSP"; + "This container is valid only when the user chooses + End.T behavior (variant: USP only)."; } + description + "Endpoint with specific IPv6 table lookup (variant: USP only). + Lookup the next segment in IPv6 table T + associated with the SID and forward via + the matched table entry. + The End.T is used for multi-table operation + in the core."; - uses multi-paths-v6; + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv6 { + type srv6-types:table-id; + mandatory true; + description + "Table Id for lookup on updated DA (next segment)"; + } } - container end-dx4 { - when "../end-behavior-type = 'End.DX4'" { + container end-t_psp_usp { + when "../end-behavior-type = 'End.T_PSP_USP'" { description "This container is valid only when the user chooses - End.DX4 behavior."; + End.T behavior (variant: USP/PSP)."; } description - "Endpoint with decapsulation and cross-connect to - an array of IPv4 adjacencies. - Pop the (outer) IPv6 header and its extension - header and forward to layer-3 adjacency bound - to the SID S. - This would be equivalent to the per-CE VPN - label in MPLS."; + "Endpoint with specific IPv6 table lookup (variant: USP/PSP). + Lookup the next segment in IPv6 table T + associated with the SID and forward via + the matched table entry. + The End.T is used for multi-table operation + in the core."; - uses multi-paths-v4; + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv6 { + type srv6-types:table-id; + mandatory true; + description + "Table Id for lookup on updated DA (next segment)"; + } } - container end-dx6 { - when "../end-behavior-type = 'End.DX6'" { + + container end-x { + when "../end-behavior-type = 'End.X'" { description "This container is valid only when the user chooses - End.DX6 behavior."; + End.X behavior (variant: no USP/PSP)"; } description - "Endpoint with decapsulation and cross-connect to - an array of IPv6 adjacencies. Pop the (outer) - IPv6 header and its extension headers and forward - to layer-3 adjacency bound to the SID S. - The End.DX6 used in the L3VPN use-case."; + "Endpoint with cross-connect to an array of + layer-3 adjacencies (variant: no USP/PSP). + Forward to layer-3 adjacency bound to the SID S. + The End.X function is required to express any + traffic-engineering policy."; + + leaf protected { + type boolean; + default false; + description "Is Adj-SID protected?"; + } uses multi-paths-v6; } - container end-dt4 { - when "../end-behavior-type = 'End.DT4'" { + + container end-x_psp { + when "../end-behavior-type = 'End.X_PSP'" { description "This container is valid only when the user chooses - End.DT4 behavior."; + End.X behavior (variant: PSP only)"; } description - "Endpoint with decapsulation and specific - IPv4 table lookup. - Pop the (outer) IPv6 header and its extension - headers. - Lookup the exposed inner IPv4 DA in IPv4 - table T and forward via the matched table entry. - This would be equivalent to the per-VRF VPN label - in MPLS."; - leaf lookup-table-ipv4 { - type srv6-types:table-id; - mandatory true; - description "IPv4 table"; + "Endpoint with cross-connect to an array of + layer-3 adjacencies (variant: PSP only). + Forward to layer-3 adjacency bound to the SID S. + The End.X function is required to express any + traffic-engineering policy."; + + leaf protected { + type boolean; + default false; + description "Is Adj-SID protected?"; } + + uses multi-paths-v6; } - container end-dt6 { - when "../end-behavior-type = 'End.DT6'" { + + container end-x_usp { + when "../end-behavior-type = 'End.X_USP'" { description "This container is valid only when the user chooses - End.DT6 behavior."; + End.X behavior (variant: USP only)"; } description - "Endpoint with decapsulation and specific IPv6 table - lookup. - Pop the (outer) IPv6 header and its extension - headers. - Lookup the exposed inner IPv6 DA in IPv6 - table T and forward via the matched table entry. - End.DT6 function is used in L3VPN use-case."; - leaf lookup-table-ipv6 { - type srv6-types:table-id; - mandatory true; - description "IPv6 table"; + "Endpoint with cross-connect to an array of + layer-3 adjacencies (variant: USP only). + Forward to layer-3 adjacency bound to the SID S. + The End.X function is required to express any + traffic-engineering policy."; + + leaf protected { + type boolean; + default false; + description "Is Adj-SID protected?"; } + + uses multi-paths-v6; } - container end-dt46 { - when "../end-behavior-type = 'End.DT46'" { + + container end-x_psp_usp { + when "../end-behavior-type = 'End.X_PSP_USP'" { description "This container is valid only when the user chooses - End.DT46 behavior."; + End.X behavior (variant: PSP/USP)"; } description - "Endpoint with decapsulation and specific - IP table lookup. - Depending on the protocol type (IPv4 or IPv6) - of the inner ip packet and the specific VRF name - forward the packet. - This would be equivalent to the per-VRF VPN - label in MPLS."; - leaf lookup-table-ipv4 { - type srv6-types:table-id; - mandatory true; - description "IPv4 table"; - } - leaf lookup-table-ipv6 { - type srv6-types:table-id; - mandatory true; - description "IPv6 table"; + "Endpoint with cross-connect to an array of + layer-3 adjacencies (variant: PSP/USP). + Forward to layer-3 adjacency bound to the SID S. + The End.X function is required to express any + traffic-engineering policy."; + + leaf protected { + type boolean; + default false; + description "Is Adj-SID protected?"; } + + uses multi-paths-v6; } + container end-b6 { when "../end-behavior-type = 'End.B6'" { description @@ -402,6 +490,9 @@ module ietf-srv6-static { Insert SRH based on the policy and forward the packet toward the first hop configured in the policy. This is the SRv6 instantiation of a Binding SID."; + + // TODO presence "Mandatory child only if container is present"; + leaf policy-name { type string; mandatory true; @@ -410,6 +501,7 @@ module ietf-srv6-static { uses multi-paths-v6; } + container end-b6-encaps { when "../end-behavior-type = 'End.B6.Encaps'" { description @@ -426,6 +518,9 @@ module ietf-srv6-static { Instead of simply inserting an SRH with the policy (End.B6), this behavior also adds an outer IPv6 header."; + + // TODO presence "Mandatory child only if container is present"; + leaf policy-name { type string; mandatory true; @@ -440,6 +535,7 @@ module ietf-srv6-static { uses multi-paths-v6; } + container end-bm { when "../end-behavior-type = 'End.BM'" { description @@ -452,6 +548,9 @@ module ietf-srv6-static { received packet and forward the according to Lable L1. This is an SRv6 instantiation of an SR-MPLS Binding SID."; + + // TODO presence "Mandatory child only if container is present"; + leaf policy-name { type string; mandatory true; @@ -460,6 +559,114 @@ module ietf-srv6-static { uses multi-paths-mpls; } + container end-dx6 { + when "../end-behavior-type = 'End.DX6'" { + description + "This container is valid only when the user chooses + End.DX6 behavior."; + } + description + "Endpoint with decapsulation and cross-connect to + an array of IPv6 adjacencies. Pop the (outer) + IPv6 header and its extension headers and forward + to layer-3 adjacency bound to the SID S. + The End.DX6 used in the L3VPN use-case."; + + uses multi-paths-v6; + } + container end-dx4 { + when "../end-behavior-type = 'End.DX4'" { + description + "This container is valid only when the user chooses + End.DX4 behavior."; + } + description + "Endpoint with decapsulation and cross-connect to + an array of IPv4 adjacencies. + Pop the (outer) IPv6 header and its extension + header and forward to layer-3 adjacency bound + to the SID S. + This would be equivalent to the per-CE VPN + label in MPLS."; + + uses multi-paths-v4; + } + container end-dt6 { + when "../end-behavior-type = 'End.DT6'" { + description + "This container is valid only when the user chooses + End.DT6 behavior."; + } + description + "Endpoint with decapsulation and specific IPv6 table + lookup. + Pop the (outer) IPv6 header and its extension + headers. + Lookup the exposed inner IPv6 DA in IPv6 + table T and forward via the matched table entry. + End.DT6 function is used in L3VPN use-case."; + + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv6 { + type srv6-types:table-id; + mandatory true; + description "IPv6 table"; + } + } + container end-dt4 { + when "../end-behavior-type = 'End.DT4'" { + description + "This container is valid only when the user chooses + End.DT4 behavior."; + } + description + "Endpoint with decapsulation and specific + IPv4 table lookup. + Pop the (outer) IPv6 header and its extension + headers. + Lookup the exposed inner IPv4 DA in IPv4 + table T and forward via the matched table entry. + This would be equivalent to the per-VRF VPN label + in MPLS."; + + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv4 { + type srv6-types:table-id; + mandatory true; + description "IPv4 table"; + } + } + container end-dt46 { + when "../end-behavior-type = 'End.DT46'" { + description + "This container is valid only when the user chooses + End.DT46 behavior."; + } + description + "Endpoint with decapsulation and specific + IP table lookup. + Depending on the protocol type (IPv4 or IPv6) + of the inner ip packet and the specific VRF name + forward the packet. + This would be equivalent to the per-VRF VPN + label in MPLS."; + + // TODO presence "Mandatory child only if container is present"; + + leaf lookup-table-ipv4 { + type srv6-types:table-id; + mandatory true; + description "IPv4 table"; + } + leaf lookup-table-ipv6 { + type srv6-types:table-id; + mandatory true; + description "IPv6 table"; + } + } + container end-dx2 { when "../end-behavior-type = 'End.DX2'" { description @@ -483,7 +690,7 @@ module ietf-srv6-static { } } } -/* TODO + /* TODO container end-dx2v { when "../end-behavior-type = 'End.DX2V'" { description @@ -545,11 +752,22 @@ module ietf-srv6-static { } } */ + + container end-otp { + when "../end-behavior-type = 'End.OTP'" { + description + "This container is valid only when the user chooses + End.OTP behavior."; + } + description + "Endpoint for OAM with timestamp and punt behavior"; + } } grouping srv6-static-cfg { description "Grouping configuration and operation for SRv6 sid."; + list sid { key "opcode"; description "Local SID list"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2017-11-12.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2017-11-12.yang deleted file mode 100644 index 3822832fe..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2017-11-12.yang +++ /dev/null @@ -1,330 +0,0 @@ -module ietf-srv6-types { - - namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-types"; - prefix srv6-types; - - import ietf-inet-types { - prefix inet; - } - - organization - "IETF SPRING Working Group"; - contact - "WG Web: - WG List: - - WG Chair: Bruno Decraene - - - WG Chair: Martin Vigoureux - - - Editor: Kamran Raza - - - Editor: Jaganbabu Rajamanickam - - - Editor: Xufeng Liu - - - Editor: Iftekhar Hussain - - - Editor: Himanshu Shah - - - Editor: Daniel Voyer - - - Editor: Hani Elmalky - - - Editor: Ahmed AbdelSalam - - - "; - - description - "This YANG module defines the essential types for the - management of Segment-Routing with IPv6 dataplane (SRv6). - - Copyright (c) 2017 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)."; - - reference "RFC XXXX"; - - revision 2017-11-12 { - description - "Initial revision."; - reference - "RFC XXXX: YANG Data Model for SRv6"; - } - - // TODO: Special opcode - - typedef srv6-end-type { - - type enumeration { - /* draft-filsfils-spring-srv6-network-programming */ - - enum End { - value 1; - description - "The Endpoint function. This is the most - basic function"; - } - enum End.X { - description - "Endpoint with cross-connect to an array - of layer-3 adjacencies"; - } - enum End.T { - description - "Endpoint with specific IPv6 table lookup"; - } - enum End.DX2 { - description - "Endpoint with decapsulation and Layer-2 - cross-connect to an L2 interface"; - } - enum End.DX2V { - description - "Endpoint with decapsulation and specific - VLAN L2 table lookup"; - } - enum End.DT2U { - description - "Endpoint with decapsulation and specific - unicast MAC L2 table lookup"; - } - enum End.DT2M { - description - "Endpoint with decapsulation and specific L2 table - flooding"; - } - enum End.DX6 { - description - "Endpoint with decapsulation and cross-connect - to an array of IPv6 adjacencies"; - } - enum End.DX4 { - description - "Endpoint with decapsulation and cross-connect - to an array of IPv4 adjacencies"; - } - enum End.DT6 { - description - "Endpoint with decapsulation and specific - IPv6 table lookup"; - } - enum End.DT4 { - description - "Endpoint with decapsulation and specific - IPv4 table lookup"; - } - enum End.DT46 { - description - "Endpoint with decapsulation and specific IP - (IPv4 or IPv6) table lookup"; - } - enum End.B6 { - description - "Endpoint bound to an SRv6 Policy"; - } - enum End.B6.Encaps { - description - "This is a variation of the End.B6 behavior - where the SRv6 Policy also includes an - IPv6 Source Address A."; - } - enum End.BM { - description - "Endpoint bound to an SR-MPLS Policy"; - } - - enum End.S { - description - "Endpoint in search of a target in table TE"; - } - - /* draft-clad-spring-segment-routing-service-chaining */ - enum End.AS { - description - "Service-Chaining Static proxy for inner type (Ethernet, IPv4 or IPv6)"; - } - enum End.AD { - description - "Service-Chaining Dynamic proxy for inner type (Ethernet, IPv4 or IPv6)"; - } - enum End.ASM { - description - "Service-Chaining Shared memory SR proxy for inner type (Ethernet, IPv4 or IPv6)"; - } - enum End.AM { - description - "Service-Chaining Masquerading SR proxy"; - } - } - - description "SRv6 End behavior types"; - } - - typedef srv6-transit-type { - type enumeration { - /* draft-filsfils-spring-srv6-network-programming */ - enum T { value 1; description "Transit"; } - enum T.Encaps { description "T.Encaps"; } - enum T.Insert { description "T.Insert"; } - enum T.Encaps.L2 { description "T.Encaps.L2"; } - } - - description "SRv6 Transit behavior types"; - } - - typedef srv6-security-rule-type { - type enumeration { - /* draft-filsfils-spring-srv6-network-programming */ - enum SEC1 { value 1; description "Security rule SEC1"; } - enum SEC2 { description "Security rule SEC2"; } - enum SEC3 { description "Security rule SEC3"; } - enum SEC4 { description "Security rule SEC4"; } - } - - description "SRv6 Security rule types"; - } - - typedef srv6-counter-type { - type enumeration { - /* draft-filsfils-spring-srv6-network-programming */ - enum CNT0 { value 0; description "CNT0"; } - enum CNT1 { description "CNT1"; } - enum CNT2 { description "CNT2"; } - } - - description "SRv6 counter types"; - } - - typedef srv6-sid { - type inet:ipv6-prefix; - description - "This type defines a SID value in SRv6"; - } - - typedef srv6-func-opcode { - type uint32; - description - "This is a typedef for SID FUNC's opcode type"; - } - - typedef srv6-func-opcode-reserved { - type uint32 { - range "1 .. 63"; - } - - description - "This is a typedef for SID FUNC's reserved opcode type"; - } - - typedef srv6-func-opcode-unreserved { - type uint32 { - range "64 .. max"; - } - - description - "This is a typedef for SID FUNC's allocatable (unreserved) opcode type"; - } - - typedef srv6-func-opcode-reserved-type { - type enumeration { - enum invalid { value 0; description "Invalid opcode"; } - enum default-end-psp { value 1; - description "Opcode for Default End/PSP funcion"; } - enum default-end-usp { value 2; - description "Opcode for Default End/USP funcion"; } - // TODO enum wildcard { value ~0; description "Opcode for Wildcard/mass operations"; } - } - - description "SRv6 SID FUNC Reserved Opcodes"; - } - - typedef srv6-locator-len { - type uint8 { - range "32 .. 96"; - } - description - "This type defines an SRv6 locator len with range constraints"; - } - - typedef srv6-sid-pfxlen { - type uint8 { - range "33 .. 128"; - } - default 128; - description - "This type defines a SID prefixlen with range constraints"; - } - - typedef sid-alloc-type { - type enumeration { - enum Dynamic { - description - "SID allocated dynamically."; - } - enum Explicit { - description - "SID allocated with explicit (static) value"; - } - } - description - "Types of sid allocation used."; - } - typedef srv6-sid-owner-type { - type enumeration { - enum isis { value 1; description "ISIS"; } - enum ospfv3 { description "OSPFv3"; } - enum bgp { description "BGP"; } - enum evpn { description "EVPN"; } - enum sr-policy { description "SR Policy"; } - enum service-chain { description "Service-Chaining"; } - // TODO: Others - } - description - "SID Client types."; - } - - // TODO: Rtg module ? - typedef table-id { - type uint32; - description - "Routing Table Id"; - } - - typedef srv6-status-type { - type enumeration { - enum up { value 1; description "State is Up"; } - enum down { description "State is Down"; } - } - description - "Status type"; - } - - typedef srv6-nexthop-type { - type enumeration { - enum ipv4 { value 1; description "IPv4 next-hop"; } - enum ipv6 { description "IPv6 next-hop"; } - enum mpls { description "MPLS next-hop"; } - enum l2 { description "L2 next-hop"; } - } - description - "Forwarding Next-hop type"; - } - -} // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2018-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2018-03-01.yang new file mode 100644 index 000000000..62a093cb4 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-srv6-types@2018-03-01.yang @@ -0,0 +1,577 @@ +module ietf-srv6-types { + + namespace "urn:ietf:params:xml:ns:yang:ietf-srv6-types"; + prefix srv6-types; + + import ietf-inet-types { + prefix inet; + } + + organization + "IETF SPRING Working Group"; + contact + "WG Web: + WG List: + + Editor: Kamran Raza + + + Editor: Jaganbabu Rajamanickam + + + Editor: Xufeng Liu + + + Editor: Zhibo Hu + + + Editor: Iftekhar Hussain + + + Editor: Himanshu Shah + + + Editor: Daniel Voyer + + + Editor: Hani Elmalky + + + Editor: Satoru Matsushima + + + Editor: Katsuhiro Horiba + + + Editor: Ahmed AbdelSalam + + + "; + + description + "This YANG module defines the essential types for the + management of Segment-Routing with IPv6 dataplane (SRv6). + + 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 + (http://trustee.ietf.org/license-info)."; + + reference "RFC XXXX"; + + revision 2018-03-01 { + description + "Updated to align with SRv6 network programming draft rev 04"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + } + + revision 2017-11-12 { + description + "Initial revision"; + reference + "RFC XXXX: YANG Data Model for SRv6"; + } + + identity srv6-endpoint-type { + description + "Base identity from which specific SRv6 Endpoint types are derived."; + } + + /* Endpoints defined under draft-filsfils-spring-srv6-network-programming */ + + identity End { + base srv6-endpoint-type; + description + "End function (variant: no PSP, no USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End_PSP { + base srv6-endpoint-type; + description + "End function (variant: PSP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End_USP { + base srv6-endpoint-type; + description + "End function (variant: USP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End_PSP_USP { + base srv6-endpoint-type; + description + "End function (variant: PSP and USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.X { + base srv6-endpoint-type; + description + "Endpoint with cross-connect to an array + of layer-3 adjacencies (variant: no PSP, no USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.X_PSP { + base srv6-endpoint-type; + description + "Endpoint with cross-connect to an array + of layer-3 adjacencies (variant: PSP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.X_USP { + base srv6-endpoint-type; + description + "Endpoint with cross-connect to an array + of layer-3 adjacencies (variant: USP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.X_PSP_USP { + base srv6-endpoint-type; + description + "Endpoint with cross-connect to an array + of layer-3 adjacencies (variant: PSP and USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.T { + base srv6-endpoint-type; + description + "Endpoint with specific IPv6 table lookup + (variant: no PSP, no USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.T_PSP { + base srv6-endpoint-type; + description + "Endpoint with specific IPv6 table lookup + (variant: PSP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.T_USP { + base srv6-endpoint-type; + description + "Endpoint with specific IPv6 table lookup + (variant: USP only)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.T_PSP_USP { + base srv6-endpoint-type; + description + "Endpoint with specific IPv6 table lookup + (variant: PSP and USP)."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.B6 { + base srv6-endpoint-type; + description + "Endpoint bound to an SRv6 Policy"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.B6.Encaps { + base srv6-endpoint-type; + description + "This is a variation of the End.B6 behavior + where the SRv6 Policy also includes an + IPv6 Source Address A."; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.BM { + base srv6-endpoint-type; + description + "Endpoint bound to an SR-MPLS Policy"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DX6 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and cross-connect + to an array of IPv6 adjacencies"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DX4 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and cross-connect + to an array of IPv4 adjacencies"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DT6 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific + IPv6 table lookup"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DT4 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific + IPv4 table lookup"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DT46 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific IP + (IPv4 or IPv6) table lookup"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DX2 { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and Layer-2 + cross-connect to an L2 interface"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DX2V { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific + VLAN L2 table lookup"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DT2U { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific + unicast MAC L2 table lookup"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.DT2M { + base srv6-endpoint-type; + description + "Endpoint with decapsulation and specific L2 table + flooding"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.OTP { + base srv6-endpoint-type; + description + "Endpoint for OAM operation of timestamp and punt"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + identity End.S { + base srv6-endpoint-type; + description + "Endpoint in search of a target in table TE"; + reference + "draft-filsfils-spring-srv6-network-programming-04"; + } + + /* Endpoints defined under draft-xuclad-spring-sr-service-chaining */ + + identity End.AS { + base srv6-endpoint-type; + description + "Service-Chaining Static proxy for inner type (Ethernet, + IPv4 or IPv6)"; + reference + "draft-xuclad-spring-sr-service-chaining-01"; + } + + identity End.AD { + base srv6-endpoint-type; + description + "Service-Chaining Dynamic proxy for inner type (Ethernet, + IPv4 or IPv6)"; + reference + "draft-xuclad-spring-sr-service-chaining-01"; + } + + identity End.ASM { + base srv6-endpoint-type; + description + "Service-Chaining Shared memory SR proxy for inner type + (Ethernet, IPv4 or IPv6)"; + reference + "draft-xuclad-spring-sr-service-chaining-01"; + } + + identity End.AM { + base srv6-endpoint-type; + description + "Service-Chaining Masquerading SR proxy"; + reference + "draft-xuclad-spring-sr-service-chaining-01"; + } + + /* Endpoints defined under draft-ietf-dmm-srv6-mobile-uplane */ + + identity End.MAP { + base srv6-endpoint-type; + description + "DMM End.MAP"; + reference + "draft-ietf-dmm-srv6-mobile-uplane-01"; + } + + identity End.M.GTP6.UP { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.UP"; + reference + "draft-ietf-dmm-srv6-mobile-uplane-01"; + } + + identity End.M.GTP6.DN { + base srv6-endpoint-type; + description + "DMM End.M.GTP6.DN"; + reference + "draft-ietf-dmm-srv6-mobile-uplane-01"; + } + + identity End.M.GTP4.DN { + base srv6-endpoint-type; + description + "DMM End.M.GTP4.DN"; + reference + "draft-ietf-dmm-srv6-mobile-uplane-01"; + } + + identity End.Limit { + base srv6-endpoint-type; + description + "DMM End.Limit"; + reference + "draft-ietf-dmm-srv6-mobile-uplane-01"; + } + + typedef srv6-transit-type { + + type enumeration { + /* draft-filsfils-spring-srv6-network-programming-04 */ + enum T { value 1; description "Transit behavior"; } + enum T.Insert { + description "Transit behavior with insertion of an SRv6 policy"; + } + enum T.Insert.Red { + description "Transit behavior with reduced insertion of an SRv6 policy"; + } + enum T.Encaps { + description "Transit behavior with encap of an SRv6 policy"; + } + enum T.Encaps.Red { + description "Transit behavior with reduced encap of an SRv6 policy"; + } + enum T.Encaps.L2 { + description "T.Encaps behavior on the received L2 frame"; + } + enum T.Encaps.L2.Red { + description "T.Encaps.Red behavior on the received L2 frame"; + } + } + + description "SRv6 Transit behavior types"; + } + + typedef srv6-security-rule-type { + type enumeration { + /* draft-filsfils-spring-srv6-network-programming-04 */ + enum SEC1 { value 1; description "Security rule SEC1"; } + enum SEC2 { description "Security rule SEC2"; } + enum SEC3 { description "Security rule SEC3"; } + enum SEC4 { description "Security rule SEC4"; } + } + + description "SRv6 Security rule types"; + } + + typedef srv6-counter-type { + type enumeration { + /* draft-filsfils-spring-srv6-network-programming-04 */ + enum CNT1 { value 1; description "CNT1"; } + enum CNT2 { description "CNT2"; } + enum CNT3 { description "CNT3"; } + } + + description "SRv6 counter types"; + } + + typedef srv6-sid { + type inet:ipv6-prefix; + description + "This type defines a SID value in SRv6"; + } + + typedef srv6-func-opcode { + type uint32; + description + "This is a typedef for SID FUNC's opcode type"; + } + + typedef srv6-func-opcode-reserved { + type uint32 { + range "1 .. 63"; + } + + description + "This is a typedef for SID FUNC's reserved opcode type"; + } + + typedef srv6-func-opcode-unreserved { + type uint32 { + range "64 .. max"; + } + + description + "This is a typedef for SID FUNC's allocatable (unreserved) opcode type"; + } + + typedef srv6-func-opcode-reserved-type { + type enumeration { + enum invalid { value 0; description "Invalid opcode"; } + } + + description "SRv6 SID FUNC Reserved Opcodes"; + } + + typedef srv6-locator-len { + type uint8 { + range "32 .. 96"; + } + description + "This type defines an SRv6 locator len with range constraints"; + } + + typedef srv6-sid-pfxlen { + type uint8 { + range "33 .. 128"; + } + default 128; + description + "This type defines a SID prefixlen with range constraints"; + } + + typedef sid-alloc-type { + type enumeration { + enum Dynamic { + description + "SID allocated dynamically."; + } + enum Explicit { + description + "SID allocated with explicit (static) value"; + } + } + description + "Types of sid allocation used."; + } + + identity srv6-sid-owner-type { + description + "Base identity from which SID owner types are derived."; + } + + identity isis { + base srv6-sid-owner-type; + description "ISIS"; + } + + identity ospfv3 { + base srv6-sid-owner-type; + description "OSPFv3"; + } + + identity bgp { + base srv6-sid-owner-type; + description "BGP"; + } + + identity evpn { + base srv6-sid-owner-type; + description "EVPN"; + } + + identity sr-policy { + base srv6-sid-owner-type; + description "SR Policy"; + } + + identity service-function { + base srv6-sid-owner-type; + description "SF"; + } + + // TODO: Rtg module ? + typedef table-id { + type uint32; + description + "Routing Table Id"; + } + + typedef srv6-status-type { + type enumeration { + enum up { value 1; description "State is Up"; } + enum down { description "State is Down"; } + } + description + "Status type"; + } + + typedef srv6-nexthop-type { + type enumeration { + enum ipv4 { value 1; description "IPv4 next-hop"; } + enum ipv6 { description "IPv6 next-hop"; } + enum mpls { description "MPLS next-hop"; } + enum l2 { description "L2 next-hop"; } + } + description + "Forwarding Next-hop type"; + } + +} // module diff --git a/experimental/ietf-extracted-YANG-modules/ietf-stamp@2018-03-01.yang b/experimental/ietf-extracted-YANG-modules/ietf-stamp@2018-03-01.yang new file mode 100644 index 000000000..c7d615aa3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-stamp@2018-03-01.yang @@ -0,0 +1,990 @@ +module ietf-stamp { + + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-stamp"; + //namespace need to be assigned by IANA + prefix "ietf-stamp"; + + import ietf-inet-types { + prefix inet; + reference "RFC 6991"; + } + import ietf-yang-types { + prefix yang; + reference "RFC 6991"; + } + import ietf-key-chain { + prefix kc; + reference "RFC 8177"; + } + + organization + "IETF IPPM (IP Performance Metrics) Working Group"; + + contact + "draft-ietf-ippm-stamp-yang@tools.ietf.org"; + + description "STAMP Data Model"; + + revision "2018-03-01" { + description + "00 version. Base STAMP specification is covered"; + reference ""; + } + + /* + * Feature definitions. + */ + feature session-sender { + description + "This feature relates to the device functions as the + STAMP Session-Sender"; + } + + feature session-reflector { + description + "This feature relates to the device functions as the + STAMP Session-Reflector"; + } + + feature stamp-security { + description "Secure STAMP supported"; + } + + typedef enable { + type boolean; + description "enable"; + } + + typedef session-reflector-mode { + type enumeration { + enum stateful { + description + "When the Session-Reflector is stateful, + i.e. is aware of STAMP-Test session state."; + } + enum stateless { + description + "When the Session-Reflector is stateless, + i.e. is not aware of the state of + STAMP-Test session."; + } + } + description "State of the Session-Reflector"; + } + + typedef session-dscp-mode { + type enumeration { + enum copy-received-value { + description + "Use DSCP value copied from received + STAMP test packet of the test session."; + } + enum use-configured-value { + description + "Use DSCP value configured for this + test session on the Session-Reflector."; + } + } + description + "DSCP handling mode by Session-Reflector."; + } + + typedef timestamp-format { + type enumeration { + enum ntp-format { + description + "NTP 64 bit format of a timestamp"; + } + enum ptp-format { + description + "PTPv2 truncated format of a timestamp"; + } + } + description + "Timestamp format used by Session-Sender + or Session-Reflector."; + } + + typedef percentage { + type decimal64 { + fraction-digits 5; + } + description "Percentage"; + } + + typedef percentile { + type decimal64 { + fraction-digits 2; + } + description + "Percentile is a measure used in statistics + indicating the value below which a given + percentage of observations in a group of + observations fall."; + } + + grouping maintenance-statistics { + description "Maintenance statistics grouping"; + leaf sent-packets { + type uint32; + description "Packets sent"; + } + leaf rcv-packets { + type uint32; + description "Packets received"; + } + leaf sent-packets-error { + type uint32; + description "Packets sent error"; + } + leaf rcv-packets-error { + type uint32; + description "Packets received error"; + } + leaf last-sent-seq { + type uint32; + description "Last sent sequence number"; + } + leaf last-rcv-seq { + type uint32; + description "Last received sequence number"; + } + } + +grouping stamp-session-percentile { + description "Percentile grouping"; + leaf first-percentile { + type percentile; + default 95.00; + description + "First percentile to report"; + } + leaf second-percentile { + type percentile; + default 99.00; + description + "Second percentile to report"; + } + leaf third-percentile { + type percentile; + default 99.90; + description + "Third percentile to report"; + } +} + + grouping delay-statistics { + description "Delay statistics grouping"; + container delay { + description "Packets transmitted delay"; + leaf min { + type yang:gauge32; + units microseconds; + description + "Min of Packets transmitted delay"; + } + leaf max { + type yang:gauge32; + units microseconds; + description + "Max of Packets transmitted delay"; + } + leaf avg { + type yang:gauge32; + units microseconds; + description + "Avg of Packets transmitted delay"; + } + } + + container delay-variation { + description + "Packets transmitted delay variation"; + leaf min { + type uint32; + units microseconds; + description + "Min of Packets transmitted + delay variation"; + } + leaf max { + type uint32; + units microseconds; + description + "Max of Packets transmitted + delay variation"; + } + leaf avg { + type uint32; + units microseconds; + description + "Avg of Packets transmitted + delay variation"; + } + } + } + grouping time-percentile-report { + description "Delay percentile report grouping"; + container delay-percentile { + description + "Report round-trip, near- and far-end delay"; + leaf rtt-delay { + type percentile; + description + "Percentile of round-trip delay"; + } + leaf near-end-delay { + type percentile; + description + "Percentile of near-end delay"; + } + leaf far-end-delay { + type percentile; + description + "Percentile of far-end delay"; + } + } + container delay-variation-percentile { + description + "Report round-trip, near- and far-end delay variation"; + leaf rtt-delay-variation { + type percentile; + description + "Percentile of round-trip delay-variation"; + } + leaf near-end-delay-variation { + type percentile; + description + "Percentile of near-end delay variation"; + } + leaf far-end-delay-variation { + type percentile; + description + "Percentile of far-end delay-variation"; + } + } + } + + grouping packet-loss-statistics { + description + "Grouping for Packet Loss statistics"; + leaf loss-count { + type int32; + description + "Number of lost packets + during the test interval."; + } + leaf loss-ratio { + type percentage; + description + "Ratio of packets lost to packets + sent during the test interval."; + } + leaf loss-burst-max { + type int32; + description + "Maximum number of consecutively + lost packets during the test interval."; + } + leaf loss-burst-min { + type int32; + description + "Minimum number of consecutively + lost packets during the test interval."; + } + leaf loss-burst-count { + type int32; + description + "Number of occasions with packet + loss during the test interval."; + } + } + grouping session-parameters { + description + "Parameters common among + Session-Sender and Session-Reflector"; + leaf sender-ip { + type inet:ip-address; + mandatory true; + description "Sender IP address"; + } + leaf sender-udp-port { + type inet:port-number { + range "49152..65535"; + } + mandatory true; + description "Sender UDP port number"; + } + leaf reflector-ip { + type inet:ip-address; + mandatory true; + description "Reflector IP address"; + } + leaf reflector-udp-port { + type inet:port-number{ + range "862 | 49152..65535"; + } + default 862; + description "Reflector UDP port number"; + } + } + + grouping session-security { + description + "Grouping for STAMP security and related parameters"; + container security { + if-feature stamp-security; + presence "Enables secure STAMP"; + description + "Parameters for STAMP authentication or encryption"; + leaf key-chain { + type kc:key-chain-ref; + description "Name of key-chain"; + } + } + } + + /* Configuration Data */ + container stamp { + description + "Top level container for stamp configuration"; + + container stamp-session-sender { + if-feature session-sender; + description "stamp Session-Sender container"; + + leaf sender-enable { + type enable; + default "true"; + description + "Whether this network element is enabled to + act as STAMP Session-Sender"; + } + + list test-session { + key "session-id"; + unique "sender-ip sender-udp-port reflector-ip" + +" reflector-udp-port dscp-value"; + description + "This structure is a container of test session + managed objects"; + + leaf session-id { + type uint32; + description "Session ID"; + } + + leaf test-session-enable { + type enable; + default "true"; + description + "Whether this STAMP Test session is enabled"; + } + + leaf number-of-packets { + type union { + type uint32 { + range 1..4294967294 { + description + "The overall number of UDP test packet + to be transmitted by the sender for this + test session"; + } + } + type enumeration { + enum forever { + description + "Indicates that the test session SHALL + be run *forever*."; + } + } + } + default 10; + description + "This value determines if the STAMP-Test session is + bound by number of test packets or not."; + } + + leaf packet-padding-size { + type uint32; + default 27; + description + "Size of the Packet Padding. Suggested to run + Path MTU Discovery to avoid packet fragmentation in + IPv4 and packet blackholing in IPv6"; + } + + leaf interval { + type uint32; + units microseconds; + description + "Time interval between transmission of two + consecutive packets in the test session in + microseconds"; + } + + leaf session-timeout { + when "../number-of-packets != 'forever'" { + description + "Test session timeout only valid if the + test mode is periodic."; + } + type uint32; + units "seconds"; + default 900; + description + "The timeout value for the Session-Sender to + collect outstanding reflected packets."; + } + + leaf measurement-interval { + when "../number-of-packets = 'forever'" { + description + "Valid only when the test to run forever, + i.e. continuously."; + } + type uint32; + units "seconds"; + default 60; + description + "Interval to calculate performance metric when + the test mode is 'continuous'."; + } + + leaf repeat { + type union { + type uint32 { + range 0..4294967294; + } + type enumeration { + enum forever { + description + "Indicates that the test session SHALL + be repeated *forever* using the + information in repeat-interval + parameter, and SHALL NOT decrement + the value."; + } + } + } + default 0; + description + "This value determines if the STAMP-Test session must + be repeated. When a test session has completed, the + repeat parameter is checked. The default value + of 0 indicates that the session MUST NOT be repeated. + If the repeat value is 1 through 4,294,967,294 + then the test session SHALL be repeated using the + information in repeat-interval parameter. + The implementation MUST decrement the value of repeat + after determining a repeated session is expected."; + } + + leaf repeat-interval { + when "../repeat != '0'"; + type uint32; + units seconds; + default 0; + description + "This parameter determines the timing of repeated + STAMP-Test sessions when repeat is more than 0."; + } + + leaf dscp-value { + type inet:dscp; + default 0; + description + "DSCP value to be set in the test packet."; + } + + leaf test-session-reflector-mode { + type session-reflector-mode; + default "stateless"; + description + "The mode of STAMP-Reflector for the test session."; + } + + uses session-parameters; + leaf sender-timestamp-format { + type timestamp-format; + default ntp-format; + description "Sender Timestamp format"; + } + uses session-security; + uses stamp-session-percentile; + } + } + + container stamp-session-reflector { + if-feature session-reflector; + description + "stamp Session-Reflector container"; + leaf reflector-enable { + type enable; + default "true"; + description + "Whether this network element is enabled to + act as stamp Session-Reflector"; + } + + leaf ref-wait { + type uint32 { + range 1..604800; + } + units seconds; + default 900; + description + "REFWAIT(STAMP test session timeout in seconds), + the default value is 900"; + } + + leaf reflector-mode-state { + type session-reflector-mode; + default stateless; + description + "The state of the mode of the stamp + Session-Reflector"; + } + + list test-session { + key "session-id"; + unique "sender-ip sender-udp-port reflector-ip" + +" reflector-udp-port"; + description + "This structure is a container of test session + managed objects"; + + leaf session-id { + type uint32; + description "Session ID"; + } + + leaf dscp-handling-mode { + type session-dscp-mode; + default copy-received-value; + description + "Session-Reflector handling of DSCP: + - use value copied from received STAMP-Test packet; + - use value explicitly configured"; + } + + leaf dscp-value { + when "../dscp-handling-mode = 'use-configured-value'"; + type inet:dscp; + default 0; + description + "DSCP value to be set in the reflected packet + if dscp-handling-mode is set to use-configured-value."; + } + + leaf sender-ip { + type union { + type inet:ip-address; + type enumeration { + enum any { + description + "Indicates that the Session-Reflector + accepts STAMP test packets from + any Session-Sender"; + } + } + } + default any; + description + "This value determines whether specific + IPv4/IPv6 address of the Session-Sender + or the wildcard, i.e. any address"; + } + + leaf sender-udp-port { + type union { + type inet:port-number { + range "49152..65535"; + } + type enumeration { + enum any { + description + "Indicates that the Session-Reflector + accepts STAMP test packets from + any Session-Sender"; + } + } + } + default any; + description + "This value determines whether specific + port number of the Session-Sender + or the wildcard, i.e. any"; + } + leaf reflector-ip { + type union { + type inet:ip-address; + type enumeration { + enum any { + description + "Indicates that the Session-Reflector + accepts STAMP test packets on + any of its interfaces"; + } + } + } + default any; + description + "This value determines whether specific + IPv4/IPv6 address of the Session-Reflector + or the wildcard, i.e. any address"; + } + + leaf reflector-udp-port { + type inet:port-number{ + range "862 | 49152..65535"; + } + default 862; + description "Reflector UDP port number"; + } + leaf reflector-timestamp-format { + type timestamp-format; + default ntp-format; + description "Reflector Timestamp format"; + } + uses session-security; + } + } + } + + /* Operational state data nodes */ + container stamp-state { + config false; + description + "Top level container for stamp state data"; + + container stamp-session-sender-state { + if-feature session-sender; + description + "Session-Sender container for state data"; + list test-session-state{ + key "session-id"; + description + "This structure is a container of test session + managed objects"; + + leaf session-id { + type uint32; + description "Session ID"; + } + + leaf sender-session-state { + type enumeration { + enum active { + description "Test session is active"; + } + enum ready { + description "Test session is idle"; + } + } + description + "State of the particular stamp test + session at the sender"; + } + + container current-stats { + description + "This container contains the results for the current + Measurement Interval in a Measurement session "; + leaf start-time { + type yang:date-and-time; + mandatory true; + description + "The time that the current Measurement Interval started"; + } + + leaf packet-padding-size { + type uint32; + default 27; + description + "Size of the Packet Padding. Suggested to run + Path MTU Discovery to avoid packet fragmentation + in IPv4 and packet blackholing in IPv6"; + } + + leaf interval { + type uint32; + units microseconds; + description + "Time interval between transmission of two + consecutive packets in the test session"; + } + + leaf duplicate-packets { + type uint32; + description "Duplicate packets"; + } + leaf reordered-packets { + type uint32; + description "Reordered packets"; + } + + uses session-parameters; + leaf sender-timestamp-format { + type timestamp-format; + default ntp-format; + description "Sender Timestamp format"; + } + leaf reflector-timestamp-format { + type timestamp-format; + default ntp-format; + description "Reflector Timestamp format"; + } + leaf dscp { + type inet:dscp; + description + "The DSCP value that was placed in the header of + STAMP UDP test packets by the Session-Sender."; + } + uses maintenance-statistics; + + container two-way-delay { + description + "two way delay result of the test session"; + uses delay-statistics; + } + + container one-way-delay-far-end { + description + "one way delay far-end of the test session"; + uses delay-statistics; + } + + container one-way-delay-near-end { + description + "one way delay near-end of the test session"; + uses delay-statistics; + } + + container low-percentile { + when "/stamp/stamp-session-sender/" + +"test-session[session-id]/" + +"first-percentile != '0.00'" { + description + "Only valid if the + the first-percentile is not NULL"; + } + description + "Low percentile report"; + uses time-percentile-report; + } + + container mid-percentile { + when "/stamp/stamp-session-sender/" + +"test-session[session-id]/" + +"second-percentile != '0.00'" { + description + "Only valid if the + the first-percentile is not NULL"; + } + description + "Mid percentile report"; + uses time-percentile-report; + } + + container high-percentile { + when "/stamp/stamp-session-sender/" + +"test-session[session-id]/" + +"third-percentile != '0.00'" { + description + "Only valid if the + the first-percentile is not NULL"; + } + description + "High percentile report"; + uses time-percentile-report; + } + + container two-way-loss { + description + "two way loss count and ratio result of + the test session"; + uses packet-loss-statistics; + } + container one-way-loss-far-end { + when "/stamp/stamp-session-sender/" + +"test-session[session-id]/" + +"test-session-reflector-mode = 'stateful'" { + description + "One-way statistic is only valid if the + session-reflector is in stateful mode."; + } + description + "one way loss count and ratio far-end of + the test session"; + uses packet-loss-statistics; + } + container one-way-loss-near-end { + when "/stamp/stamp-session-sender/" + +"test-session[session-id]/" + +"test-session-reflector-mode = 'stateful'" { + description + "One-way statistic is only valid if the + session-reflector is in stateful mode."; + } + description + "one way loss count and ratio near-end of + the test session"; + uses packet-loss-statistics; + } + } + + list history-stats { + key id; + description + "This container contains the results for the history + Measurement Interval in a Measurement session "; + leaf id { + type uint32; + description + "The identifier for the Measurement Interval + within this session"; + } + leaf end-time { + type yang:date-and-time; + mandatory true; + description + "The time that the Measurement Interval ended"; + } + leaf number-of-packets { + type uint32; + description + "The overall number of UDP test packets to be + transmitted by the sender for this test session"; + } + + leaf packet-padding-size { + type uint32; + default 27; + description + "Size of the Packet Padding. Suggested to run + Path MTU Discovery to avoid packet fragmentation + in IPv4 and packet blackholing in IPv6"; + } + + leaf interval { + type uint32; + units microseconds; + description + "Time interval between transmission of two + consecutive packets in the test session"; + } + leaf duplicate-packets { + type uint32; + description "Duplicate packets"; + } + leaf reordered-packets { + type uint32; + description "Reordered packets"; + } + leaf loss-packets { + type uint32; + description "Loss packets"; + } + + uses session-parameters; + leaf sender-timestamp-format { + type timestamp-format; + default ntp-format; + description "Sender Timestamp format"; + } + leaf reflector-timestamp-format { + type timestamp-format; + default ntp-format; + description "Reflector Timestamp format"; + } + leaf dscp { + type inet:dscp; + description + "The DSCP value that was placed in the header of + STAMP UDP test packets by the Session-Sender."; + } + uses maintenance-statistics; + + container two-way-delay{ + description + "two way delay result of the test session"; + uses delay-statistics; + } + container one-way-delay-far-end{ + description + "one way delay far end of the test session"; + uses delay-statistics; + } + container one-way-delay-near-end{ + description + "one way delay near end of the test session"; + uses delay-statistics; + } + } + } + } + + container stamp-session-refl-state { + if-feature session-reflector; + description + "stamp Session-Reflector container for + state data"; + leaf reflector-light-admin-status { + type boolean; + mandatory "true"; + description + "Whether this network element is enabled to + act as stamp Session-Reflector"; + } + + list test-session-state { + key "session-id"; + description + "This structure is a container of test session + managed objects"; + + leaf session-id { + type uint32; + description "Session ID"; + } + + uses maintenance-statistics; + leaf reflector-timestamp-format { + type timestamp-format; + default ntp-format; + description "Reflector Timestamp format"; + } + uses session-parameters; + } + } + } + + rpc stamp-sender-start { + description + "start the configured sender session"; + input { + leaf session-id { + type uint32; + mandatory true; + description + "The session to be started"; + } + } + } + + rpc stamp-sender-stop { + description + "stop the configured sender session"; + input { + leaf session-id { + type uint32; + mandatory true; + description + "The session to be stopped"; + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-02-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-03-15.yang similarity index 93% rename from experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-02-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-03-15.yang index 9b2318e9f..2fff6e49c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-02-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-syslog@2018-03-15.yang @@ -1,857 +1,859 @@ -module ietf-syslog { - yang-version 1.1; - - namespace "urn:ietf:params:xml:ns:yang:ietf-syslog"; - prefix syslog; - - import ietf-inet-types { - prefix inet; - reference - "RFC 6991: INET Types Model"; - } - - import ietf-interfaces { - prefix if; - reference - "RFC 7223: Interfaces Model"; - } - - import ietf-tls-client { - prefix tlsc; - reference - "I-D.ietf-netconf-tls-client-server: - TLS Client and Server Models"; - } - - import ietf-keystore { - prefix ks; - reference - "I-D.ietf-netconf-keystore: Keystore Model"; - } - - organization - "IETF NETMOD (Network Modeling) Working Group"; - - contact - "WG Web: - WG List: - - Editor: Kiran Agrahara Sreenivasa - - - Editor: Clyde Wildes - "; - description - "This module contains a collection of YANG definitions - for syslog configuration. - - 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 - (http://trustee.ietf.org/license-info). - - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL - NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and - 'OPTIONAL' in the module text are to be interpreted as - described in RFC 2119 (http://tools.ietf.org/html/rfc2119). - - This version of this YANG module is part of RFC zzzz - (http://tools.ietf.org/html/rfczzzz); see the RFC itself for - full legal notices."; - - revision 2018-02-21 { - description - "Initial Revision"; - reference - "RFC zzzz: Syslog YANG Model"; - } - - feature console-action { - description - "This feature indicates that the local console action is - supported."; - } - - feature file-action { - description - "This feature indicates that the local file action is - supported."; - } - - feature file-limit-size { - description - "This feature indicates that file logging resources - are managed using size and number limits."; - } - - feature file-limit-duration { - description - "This feature indicates that file logging resources - are managed using time based limits."; - } - - feature remote-action { - description - "This feature indicates that the remote server action is - supported."; - } - - feature remote-source-interface { - description - "This feature indicates that source-interface is supported - supported for the remote-action."; - } - - feature select-adv-compare { - description - "This feature represents the ability to select messages - using the additional comparison operators when comparing - the syslog message severity."; - } - - feature select-match { - description - "This feature represents the ability to select messages - based on a Posix 1003.2 regular expression pattern match."; - } - - feature structured-data { - description - "This feature represents the ability to log messages - in structured-data format."; - reference - "RFC 5424: The Syslog Protocol"; - } - - feature signed-messages { - description - "This feature represents the ability to configure signed - syslog messages."; - reference - "RFC 5848: Signed Syslog Messages"; - } - - typedef syslog-severity { - type enumeration { - enum "emergency" { - value 0; - description - "The severity level 'Emergency' indicating that the - system is unusable."; - } - enum "alert" { - value 1; - description - "The severity level 'Alert' indicating that an action - must be taken immediately."; - } - enum "critical" { - value 2; - description - "The severity level 'Critical' indicating a critical - condition."; - } - enum "error" { - value 3; - description - "The severity level 'Error' indicating an error - condition."; - } - enum "warning" { - value 4; - description - "The severity level 'Warning' indicating a warning - condition."; - } - enum "notice" { - value 5; - description - "The severity level 'Notice' indicating a normal but - significant condition."; - } - enum "info" { - value 6; - description - "The severity level 'Info' indicating an informational - message."; - } - enum "debug" { - value 7; - description - "The severity level 'Debug' indicating a debug-level - message."; - } - } - description - "The definitions for Syslog message severity."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity syslog-facility { - description - "This identity is used as a base for all syslog facilities."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity kern { - base syslog-facility; - description - "The facility for kernel messages (0)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity user { - base syslog-facility; - description - "The facility for user-level messages (1)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity mail { - base syslog-facility; - description - "The facility for the mail system (2)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity daemon { - base syslog-facility; - description - "The facility for the system daemons (3)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity auth { - base syslog-facility; - description - "The facility for security/authorization messages (4)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity syslog { - base syslog-facility; - description - "The facility for messages generated internally by syslogd - facility (5)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity lpr { - base syslog-facility; - description - "The facility for the line printer subsystem (6)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity news { - base syslog-facility; - description - "The facility for the network news subsystem (7)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity uucp { - base syslog-facility; - description - "The facility for the UUCP subsystem (8)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity cron { - base syslog-facility; - description - "The facility for the clock daemon (9)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity authpriv { - base syslog-facility; - description - "The facility for privileged security/authorization messages - (10)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity ftp { - base syslog-facility; - description - "The facility for the FTP daemon (11)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity ntp { - base syslog-facility; - description - "The facility for the NTP subsystem (12)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity audit { - base syslog-facility; - description - "The facility for log audit messages (13)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity console { - base syslog-facility; - description - "The facility for log alert messages (14)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity cron2 { - base syslog-facility; - description - "The facility for the second clock daemon (15)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local0 { - base syslog-facility; - description - "The facility for local use 0 messages (16)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local1 { - base syslog-facility; - description - "The facility for local use 1 messages (17)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local2 { - base syslog-facility; - description - "The facility for local use 2 messages (18)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local3 { - base syslog-facility; - description - "The facility for local use 3 messages (19)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local4 { - base syslog-facility; - description - "The facility for local use 4 messages (20)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local5 { - base syslog-facility; - description - "The facility for local use 5 messages (21)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local6 { - base syslog-facility; - description - "The facility for local use 6 messages (22)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - identity local7 { - base syslog-facility; - description - "The facility for local use 7 messages (23)."; - reference - "RFC 5424: The Syslog Protocol"; - } - - grouping severity-filter { - description - "This grouping defines the processing used to select - log messages by comparing syslog message severity using - the following processing rules: - - if 'none', do not match. - - if 'all', match. - - else compare message severity with the specified severity - according to the default compare rule (all messages of the - specified severity and greater match) or if the - select-adv-compare feature is present, the advance-compare - rule."; - leaf severity { - type union { - type syslog-severity; - type enumeration { - enum none { - value 2147483647; - description - "This enum describes the case where no severities - are selected."; - } - enum all { - value -2147483648; - description - "This enum describes the case where all severities - are selected."; - } - } - } - mandatory true; - description - "This leaf specifies the syslog message severity."; - } - container advanced-compare { - when '../severity != "all" and - ../severity != "none"' { - description - "The advanced compare container is not applicable for - severity 'all' or severity 'none'"; - } - if-feature select-adv-compare; - leaf compare { - type enumeration { - enum equals { - description - "This enum specifies that the severity comparison - operation will be equals."; - } - enum equals-or-higher { - description - "This enum specifies that the severity comparison - operation will be equals or higher."; - } - } - default equals-or-higher; - description - "The compare can be used to specify the comparison - operator that should be used to compare the syslog message - severity with the specified severity."; - } - leaf action { - type enumeration { - enum log { - description - "This enum specifies that if the compare operation is - true the message will be logged."; - } - enum block { - description - "This enum specifies that if the compare operation is - true the message will not be logged."; - } - } - default log; - description - "The action can be used to spectify if the message should - be logged or blocked based on the outcome of the compare - operation."; - } - description - "This container describes additional severity compare - operations that can be used in place of the default - severity comparison. The compare leaf specifies the type of - the compare that is done and the action leaf specifies the - intended result. - Example: compare->equals and action->no-match means - messages that have a severity that is not equal to the - specified severity will be logged."; - } - } - - grouping selector { - description - "This grouping defines a syslog selector which is used to - select log messages for the log-actions (console, file, - remote, etc.). Choose one or both of the following: - facility [ ...] - pattern-match regular-expression-match-string - If both facility and pattern-match are specified, both must - match in order for a log message to be selected."; - container facility-filter { - description - "This container describes the syslog filter parameters."; - list facility-list { - key "facility severity"; - ordered-by user; - description - "This list describes a collection of syslog - facilities and severities."; - leaf facility { - type union { - type identityref { - base syslog-facility; - } - type enumeration { - enum all { - description - "This enum describes the case where all - facilities are requested."; - } - } - } - description - "The leaf uniquely identifies a syslog facility."; - } - uses severity-filter; - } - } - leaf pattern-match { - if-feature select-match; - type string; - description - "This leaf describes a Posix 1003.2 regular expression - string that can be used to select a syslog message for - logging. The match is performed on the SYSLOG-MSG field."; - reference - "RFC 5424: The Syslog Protocol - Std-1003.1-2008 Regular Expressions"; - } - } - - grouping structured-data { - description - "This grouping defines the syslog structured data option - which is used to select the format used to write log - messages."; - leaf structured-data { - if-feature structured-data; - type boolean; - default false; - description - "This leaf describes how log messages are written. - If true, messages will be written with one or more - STRUCTURED-DATA elements; if false, messages will be - written with STRUCTURED-DATA = NILVALUE."; - reference - "RFC 5424: The Syslog Protocol"; - } - } - - container syslog { - presence "Enables logging."; - description - "This container describes the configuration parameters for - syslog."; - container actions { - description - "This container describes the log-action parameters - for syslog."; - container console { - if-feature console-action; - presence "Enables logging to the console"; - description - "This container describes the configuration parameters - for console logging."; - uses selector; - } - container file { - if-feature file-action; - description - "This container describes the configuration parameters for - file logging. If file-archive limits are not supplied, it - is assumed that the local implementation defined limits - will be used."; - list log-file { - key "name"; - description - "This list describes a collection of local logging - files."; - leaf name { - type inet:uri { - pattern 'file:.*'; - } - description - "This leaf specifies the name of the log file which - MUST use the uri scheme file:."; - } - uses selector; - uses structured-data; - container file-rotation { - description - "This container describes the configuration - parameters for log file rotation."; - leaf number-of-files { - if-feature file-limit-size; - type uint32; - default 1; - description - "This leaf specifies the maximum number of log - files retained. Specify 1 for implementations - that only support one log file."; - } - leaf max-file-size { - if-feature file-limit-size; - type uint32; - units "megabytes"; - description - "This leaf specifies the maximum log file size."; - } - leaf rollover { - if-feature file-limit-duration; - type uint32; - units "minutes"; - description - "This leaf specifies the length of time that log - events should be written to a specific log file. - Log events that arrive after the rollover period - cause the current log file to be closed and a new - log file to be opened."; - } - leaf retention { - if-feature file-limit-duration; - type uint32; - units "minutes"; - description - "This leaf specifies the length of time that - completed/closed log event files should be stored - in the file system before they are removed."; - } - } - } - } - container remote { - if-feature remote-action; - description - "This container describes the configuration parameters - for forwarding syslog messages to remote relays or - collectors."; - list destination { - key "name"; - description - "This list describes a collection of remote logging - destinations."; - leaf name { - type string; - description - "An arbitrary name for the endpoint to connect to."; - } - choice transport { - mandatory true; - description - "This choice describes the transport option."; - case udp { - container udp { - description - "This container describes the UDP transport - options."; - reference - "RFC 5426: Transmission of Syslog Messages over - UDP"; - leaf address { - type inet:host; - description - "The leaf uniquely specifies the address of - the remote host. One of the following must be - specified: an ipv4 address, an ipv6 address, - or a host name."; - } - leaf port { - type inet:port-number; - default 514; - description - "This leaf specifies the port number used to - deliver messages to the remote server."; - } - } - } - case tls { - container tls { - description - "This container describes the TLS transport - options."; - reference - "RFC 5425: Transport Layer Security (TLS) - Transport Mapping for Syslog "; - leaf address { - type inet:host; - description - "The leaf uniquely specifies the address of - the remote host. One of the following must be - specified: an ipv4 address, an ipv6 address, - or a host name."; - } - leaf port { - type inet:port-number; - default 6514; - description - "TCP port 6514 has been allocated as the default - port for syslog over TLS."; - } - uses tlsc:tls-client-grouping; - } - } - } - uses selector; - uses structured-data; - leaf facility-override { - type identityref { - base syslog-facility; - } - description - "If specified, this leaf specifies the facility used - to override the facility in messages delivered to - the remote server."; - } - leaf source-interface { - if-feature remote-source-interface; - type if:interface-ref; - description - "This leaf sets the source interface to be used to - send messages to the remote syslog server. If not - set, messages can be sent on any interface."; - } - container signing { - if-feature signed-messages; - presence - "If present, syslog-signing options is activated."; - description - "This container describes the configuration - parameters for signed syslog messages."; - reference - "RFC 5848: Signed Syslog Messages"; - container cert-signers { - description - "This container describes the signing certificate - configuration for Signature Group 0 which covers - the case for administrators who want all Signature - Blocks to be sent to a single destination."; - list cert-signer { - key "name"; - description - "This list describes a collection of syslog - message signers."; - leaf name { - type string; - description - "This leaf specifies the name of the syslog - message signer."; - } - container cert { - uses ks:private-key-grouping; - uses ks:certificate-grouping; - description - "This is the certificate that is periodically - sent to the remote receiver. Selection of the - certificate also implicitly selects the private - key used to sign the syslog messages."; - } - leaf hash-algorithm { - type enumeration { - enum SHA1 { - value 1; - description - "This enum describes the SHA1 algorithm."; - } - enum SHA256 { - value 2; - description - "This enum describes the SHA256 algorithm."; - } - } - description - "This leaf describes the syslog signer hash - algorithm used."; - } - } - leaf cert-initial-repeat { - type uint32; - default 3; - description - "This leaf specifies the number of times each - Certificate Block should be sent before the first - message is sent."; - } - leaf cert-resend-delay { - type uint32; - units "seconds"; - default 3600; - description - "This leaf specifies the maximum time delay in - seconds until resending the Certificate Block."; - } - leaf cert-resend-count { - type uint32; - default 0; - description - "This leaf specifies the maximum number of other - syslog messages to send until resending the - Certificate Block."; - } - leaf sig-max-delay { - type uint32; - units "seconds"; - default 60; - description - "This leaf specifies when to generate a new - Signature Block. If this many seconds have - elapsed since the message with the first message - number of the Signature Block was sent, a new - Signature Block should be generated."; - } - leaf sig-number-resends { - type uint32; - default 0; - description - "This leaf specifies the number of times a - Signature Block is resent. (It is recommended to - select a value of greater than 0 in particular - when the UDP transport RFC 5426 is used.)."; - } - leaf sig-resend-delay { - type uint32; - units "seconds"; - default 5; - description - "This leaf specifies when to send the next - Signature Block transmission based on time. If - this many seconds have elapsed since the previous - sending of this Signature Block, resend it."; - } - leaf sig-resend-count { - type uint32; - default 0; - description - "This leaf specifies when to send the next - Signature Block transmission based on a count. - If this many other syslog messages have been - sent since the previous sending of this - Signature Block, resend it. A value of 0 means - that you don't resend based on the number of - messages."; - } - } - } - } - } - } - } -} +module ietf-syslog { + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-syslog"; + prefix syslog; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + + import ietf-interfaces { + prefix if; + reference + "I-D.ietf-netmod-rfc7223bis: A YANG Data Model + for Interface Management"; + } + + import ietf-tls-client { + prefix tlsc; + reference + "I-D.ietf-netconf-tls-client-server: + YANG Groupings for TLS Clients and TLS Servers"; + } + + import ietf-keystore { + prefix ks; + reference + "I-D.ietf-netconf-keystore: YANG Data Model for a + Keystore Mechanism"; + } + + organization + "IETF NETMOD (Network Modeling) Working Group"; + + contact + "WG Web: + WG List: + + Editor: Kiran Agrahara Sreenivasa + + + Editor: Clyde Wildes + "; + description + "This module contains a collection of YANG definitions + for syslog configuration. + + 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 + (http://trustee.ietf.org/license-info). + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', and + 'OPTIONAL' in the module text are to be interpreted as + described in RFC 2119 (http://tools.ietf.org/html/rfc2119). + + This version of this YANG module is part of RFC zzzz + (http://tools.ietf.org/html/rfczzzz); see the RFC itself for + full legal notices."; + + revision 2018-03-15 { + description + "Initial Revision"; + reference + "RFC zzzz: Syslog YANG Model"; + } + + feature console-action { + description + "This feature indicates that the local console action is + supported."; + } + + feature file-action { + description + "This feature indicates that the local file action is + supported."; + } + + feature file-limit-size { + description + "This feature indicates that file logging resources + are managed using size and number limits."; + } + + feature file-limit-duration { + description + "This feature indicates that file logging resources + are managed using time based limits."; + } + + feature remote-action { + description + "This feature indicates that the remote server action is + supported."; + } + feature remote-source-interface { + description + "This feature indicates that source-interface is supported + supported for the remote-action."; + } + + feature select-adv-compare { + description + "This feature represents the ability to select messages + using the additional comparison operators when comparing + the syslog message severity."; + } + + feature select-match { + description + "This feature represents the ability to select messages + based on a Posix 1003.2 regular expression pattern match."; + } + + feature structured-data { + description + "This feature represents the ability to log messages + in structured-data format."; + reference + "RFC 5424: The Syslog Protocol"; + } + + feature signed-messages { + description + "This feature represents the ability to configure signed + syslog messages."; + reference + "RFC 5848: Signed Syslog Messages"; + } + + typedef syslog-severity { + type enumeration { + enum "emergency" { + value 0; + description + "The severity level 'Emergency' indicating that the + system is unusable."; + } + enum "alert" { + value 1; + description + "The severity level 'Alert' indicating that an action + must be taken immediately."; + } + enum "critical" { + value 2; + description + "The severity level 'Critical' indicating a critical + condition."; + } + enum "error" { + value 3; + description + "The severity level 'Error' indicating an error + condition."; + } + enum "warning" { + value 4; + description + "The severity level 'Warning' indicating a warning + condition."; + } + enum "notice" { + value 5; + description + "The severity level 'Notice' indicating a normal but + significant condition."; + } + enum "info" { + value 6; + description + "The severity level 'Info' indicating an informational + message."; + } + enum "debug" { + value 7; + description + "The severity level 'Debug' indicating a debug-level + message."; + } + } + description + "The definitions for Syslog message severity. + Note that a lower value is a higher severity. Comparisons of + equal-or-higher severity mean equal or lower numeric value"; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity syslog-facility { + description + "This identity is used as a base for all syslog facilities."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity kern { + base syslog-facility; + description + "The facility for kernel messages (0)."; + reference + "RFC 5424: The Syslog Protocol"; + } + identity user { + base syslog-facility; + description + "The facility for user-level messages (1)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity mail { + base syslog-facility; + description + "The facility for the mail system (2)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity daemon { + base syslog-facility; + description + "The facility for the system daemons (3)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity auth { + base syslog-facility; + description + "The facility for security/authorization messages (4)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity syslog { + base syslog-facility; + description + "The facility for messages generated internally by syslogd + facility (5)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity lpr { + base syslog-facility; + description + "The facility for the line printer subsystem (6)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity news { + base syslog-facility; + description + "The facility for the network news subsystem (7)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity uucp { + base syslog-facility; + description + "The facility for the UUCP subsystem (8)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity cron { + base syslog-facility; + description + "The facility for the clock daemon (9)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity authpriv { + base syslog-facility; + description + "The facility for privileged security/authorization messages + (10)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity ftp { + base syslog-facility; + description + "The facility for the FTP daemon (11)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity ntp { + base syslog-facility; + description + "The facility for the NTP subsystem (12)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity audit { + base syslog-facility; + description + "The facility for log audit messages (13)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity console { + base syslog-facility; + description + "The facility for log alert messages (14)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity cron2 { + base syslog-facility; + description + "The facility for the second clock daemon (15)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local0 { + base syslog-facility; + description + "The facility for local use 0 messages (16)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local1 { + base syslog-facility; + description + "The facility for local use 1 messages (17)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local2 { + base syslog-facility; + description + "The facility for local use 2 messages (18)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local3 { + base syslog-facility; + description + "The facility for local use 3 messages (19)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local4 { + base syslog-facility; + description + "The facility for local use 4 messages (20)."; + reference + "RFC 5424: The Syslog Protocol"; + } + identity local5 { + base syslog-facility; + description + "The facility for local use 5 messages (21)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local6 { + base syslog-facility; + description + "The facility for local use 6 messages (22)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + identity local7 { + base syslog-facility; + description + "The facility for local use 7 messages (23)."; + reference + "RFC 5424: The Syslog Protocol"; + } + + grouping severity-filter { + description + "This grouping defines the processing used to select + log messages by comparing syslog message severity using + the following processing rules: + - if 'none', do not match. + - if 'all', match. + - else compare message severity with the specified severity + according to the default compare rule (all messages of the + specified severity and greater match) or if the + select-adv-compare feature is present, use the + advance-compare rule."; + leaf severity { + type union { + type syslog-severity; + type enumeration { + enum none { + value 2147483647; + description + "This enum describes the case where no severities + are selected."; + } + enum all { + value -2147483648; + description + "This enum describes the case where all severities + are selected."; + } + } + } + mandatory true; + description + "This leaf specifies the syslog message severity."; + } + container advanced-compare { + when '../severity != "all" and + ../severity != "none"' { + description + "The advanced compare container is not applicable for + severity 'all' or severity 'none'"; + } + if-feature select-adv-compare; + leaf compare { + type enumeration { + enum equals { + description + "This enum specifies that the severity comparison + operation will be equals."; + } + enum equals-or-higher { + description + "This enum specifies that the severity comparison + operation will be equals or higher."; + } + } + default equals-or-higher; + description + "The compare can be used to specify the comparison + operator that should be used to compare the syslog message + severity with the specified severity."; + } + leaf action { + type enumeration { + enum log { + description + "This enum specifies that if the compare operation is + true the message will be logged."; + } + enum block { + description + "This enum specifies that if the compare operation is + true the message will not be logged."; + } + } + default log; + description + "The action can be used to specify if the message should + be logged or blocked based on the outcome of the compare + operation."; + } + description + "This container describes additional severity compare + operations that can be used in place of the default + severity comparison. The compare leaf specifies the type of + the compare that is done and the action leaf specifies the + intended result. + Example: compare->equals and action->block means + messages that have a severity that are equal to the + specified severity will not be logged."; + } + } + + grouping selector { + description + "This grouping defines a syslog selector which is used to + select log messages for the log-actions (console, file, + remote, etc.). Choose one or both of the following: + facility [ ...] + pattern-match regular-expression-match-string + If both facility and pattern-match are specified, both must + match in order for a log message to be selected."; + container facility-filter { + description + "This container describes the syslog filter parameters."; + list facility-list { + key "facility severity"; + ordered-by user; + description + "This list describes a collection of syslog + facilities and severities."; + leaf facility { + type union { + type identityref { + base syslog-facility; + } + type enumeration { + enum all { + description + "This enum describes the case where all + facilities are requested."; + } + } + } + description + "The leaf uniquely identifies a syslog facility."; + } + uses severity-filter; + } + } + leaf pattern-match { + if-feature select-match; + type string; + description + "This leaf describes a Posix 1003.2 regular expression + string that can be used to select a syslog message for + logging. The match is performed on the SYSLOG-MSG field."; + reference + "RFC 5424: The Syslog Protocol + Std-1003.1-2008 Regular Expressions"; + } + } + + grouping structured-data { + description + "This grouping defines the syslog structured data option + which is used to select the format used to write log + messages."; + leaf structured-data { + if-feature structured-data; + type boolean; + default false; + description + "This leaf describes how log messages are written. + If true, messages will be written with one or more + STRUCTURED-DATA elements; if false, messages will be + written with STRUCTURED-DATA = NILVALUE."; + reference + "RFC 5424: The Syslog Protocol"; + } + } + + container syslog { + presence "Enables logging."; + description + "This container describes the configuration parameters for + syslog."; + container actions { + description + "This container describes the log-action parameters + for syslog."; + container console { + if-feature console-action; + presence "Enables logging to the console"; + description + "This container describes the configuration parameters + for console logging."; + uses selector; + } + container file { + if-feature file-action; + description + "This container describes the configuration parameters for + file logging. If file-archive limits are not supplied, it + is assumed that the local implementation defined limits + will be used."; + list log-file { + key "name"; + description + "This list describes a collection of local logging + files."; + leaf name { + type inet:uri { + pattern 'file:.*'; + } + description + "This leaf specifies the name of the log file which + MUST use the uri scheme file:."; + reference + "RFC 8089: The file URI Scheme"; + } + uses selector; + uses structured-data; + container file-rotation { + description + "This container describes the configuration + parameters for log file rotation."; + leaf number-of-files { + if-feature file-limit-size; + type uint32; + default 1; + description + "This leaf specifies the maximum number of log + files retained. Specify 1 for implementations + that only support one log file."; + } + leaf max-file-size { + if-feature file-limit-size; + type uint32; + units "megabytes"; + description + "This leaf specifies the maximum log file size."; + } + leaf rollover { + if-feature file-limit-duration; + type uint32; + units "minutes"; + description + "This leaf specifies the length of time that log + events should be written to a specific log file. + Log events that arrive after the rollover period + cause the current log file to be closed and a new + log file to be opened."; + } + leaf retention { + if-feature file-limit-duration; + type uint32; + units "minutes"; + description + "This leaf specifies the length of time that + completed/closed log event files should be stored + in the file system before they are removed."; + } + } + } + } + container remote { + if-feature remote-action; + description + "This container describes the configuration parameters + for forwarding syslog messages to remote relays or + collectors."; + list destination { + key "name"; + description + "This list describes a collection of remote logging + destinations."; + leaf name { + type string; + description + "An arbitrary name for the endpoint to connect to."; + } + choice transport { + mandatory true; + description + "This choice describes the transport option."; + case udp { + container udp { + description + "This container describes the UDP transport + options."; + reference + "RFC 5426: Transmission of Syslog Messages over + UDP"; + leaf address { + type inet:host; + description + "The leaf uniquely specifies the address of + the remote host. One of the following must be + specified: an ipv4 address, an ipv6 address, + or a host name."; + } + leaf port { + type inet:port-number; + default 514; + description + "This leaf specifies the port number used to + deliver messages to the remote server."; + } + } + } + case tls { + container tls { + description + "This container describes the TLS transport + options."; + reference + "RFC 5425: Transport Layer Security (TLS) + Transport Mapping for Syslog "; + leaf address { + type inet:host; + description + "The leaf uniquely specifies the address of + the remote host. One of the following must be + specified: an ipv4 address, an ipv6 address, + or a host name."; + } + leaf port { + type inet:port-number; + default 6514; + description + "TCP port 6514 has been allocated as the default + port for syslog over TLS."; + } + uses tlsc:tls-client-grouping; + } + } + } + uses selector; + uses structured-data; + leaf facility-override { + type identityref { + base syslog-facility; + } + description + "If specified, this leaf specifies the facility used + to override the facility in messages delivered to + the remote server."; + } + leaf source-interface { + if-feature remote-source-interface; + type if:interface-ref; + description + "This leaf sets the source interface to be used to + send messages to the remote syslog server. If not + set, messages can be sent on any interface."; + } + container signing { + if-feature signed-messages; + presence + "If present, syslog-signing options is activated."; + description + "This container describes the configuration + parameters for signed syslog messages."; + reference + "RFC 5848: Signed Syslog Messages"; + container cert-signers { + description + "This container describes the signing certificate + configuration for Signature Group 0 which covers + the case for administrators who want all Signature + Blocks to be sent to a single destination."; + list cert-signer { + key "name"; + description + "This list describes a collection of syslog + message signers."; + leaf name { + type string; + description + "This leaf specifies the name of the syslog + message signer."; + } + container cert { + uses ks:private-key-grouping; + uses ks:certificate-grouping; + description + "This is the certificate that is periodically + sent to the remote receiver. Selection of the + certificate also implicitly selects the private + key used to sign the syslog messages."; + } + leaf hash-algorithm { + type enumeration { + enum SHA1 { + value 1; + description + "This enum describes the SHA1 algorithm."; + } + enum SHA256 { + value 2; + description + "This enum describes the SHA256 algorithm."; + } + } + description + "This leaf describes the syslog signer hash + algorithm used."; + } + } + leaf cert-initial-repeat { + type uint32; + default 3; + description + "This leaf specifies the number of times each + Certificate Block should be sent before the first + message is sent."; + } + leaf cert-resend-delay { + type uint32; + units "seconds"; + default 3600; + description + "This leaf specifies the maximum time delay in + seconds until resending the Certificate Block."; + } + leaf cert-resend-count { + type uint32; + default 0; + description + "This leaf specifies the maximum number of other + syslog messages to send until resending the + Certificate Block."; + } + leaf sig-max-delay { + type uint32; + units "seconds"; + default 60; + description + "This leaf specifies when to generate a new + Signature Block. If this many seconds have + elapsed since the message with the first message + number of the Signature Block was sent, a new + Signature Block should be generated."; + } + leaf sig-number-resends { + type uint32; + default 0; + description + "This leaf specifies the number of times a + Signature Block is resent. (It is recommended to + select a value of greater than 0 in particular + when the UDP transport RFC 5426 is used.)."; + } + leaf sig-resend-delay { + type uint32; + units "seconds"; + default 5; + description + "This leaf specifies when to send the next + Signature Block transmission based on time. If + this many seconds have elapsed since the previous + sending of this Signature Block, resend it."; + } + leaf sig-resend-count { + type uint32; + default 0; + description + "This leaf specifies when to send the next + Signature Block transmission based on a count. + If this many other syslog messages have been + sent since the previous sending of this + Signature Block, resend it. A value of 0 means + that you don't resend based on the number of + messages."; + } + } + } + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-detnet-topology@2018-01-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-detnet-topology@2018-01-15.yang new file mode 100644 index 000000000..7a5d3cbe1 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-detnet-topology@2018-01-15.yang @@ -0,0 +1,252 @@ +module ietf-te-detnet-topology { + namespace "urn:ietf:params:xml:ns:yang:ietf-detnet-topology"; + prefix "detnet-to"; + + import ietf-te-types { + prefix "te-types"; + } + + import ietf-routing-types { + prefix "rt-types"; + } + + import ietf-te-topology { + prefix "tet"; + } + + import ietf-network { + prefix "nw"; + } + + import ietf-network-topology { + prefix "nt"; + } + + organization + "IETF Deterministic Networking(detnet)Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Lou Berger + + + Editor: Xuesong Geng + + + Editor: Mach Chen + "; + + description + "This YAGN module augments the 'ietf-te-topology' + module with detnet capability data for detnet + configuration"; + + revision "2018-01-15" { + description "Initial revision"; + reference "RFC XXXX: YANG Data Model for DetNet Topologies"; + //RFC Ed.: replace XXXX with actual RFC number and remove + // this note + } + + grouping detnet-link-info-attributes{ + description + "DetNet capability attributes in a DetNet topology"; + container detnet-performance-metric-attributes{ + description + "Link performance information in real time."; + uses detnet-performance-metric-attributes; + } + container detnet-queuing-management-algorithm{ + description + "Detnet queuing management algorithm used in + output queue"; + uses detnet-queuing-management-algorithm; + } + } + + grouping detnet-performance-metric-attributes{ + description + "Link performance information in real time."; + container maximum-detnet-reservable-bandwidth{ + uses te-types:te-bandwidth; + description + "This container specifies the maximum bandwidth + that is reserved for DetNet on this link."; + } + container reserved-detnet-bandwidth{ + uses te-types:te-bandwidth; + description + "This container specifies the bandwidth that has + been reserved for DetNet on this link."; + } + container available-detnet-bandwidth{ + uses te-types:te-bandwidth; + description + "This container specifies the bandwidth that can + be used for new DetNet flows on this link."; + } + leaf minimum-detnet-device-delay{ + type uint32; + description + "Minimum delay in the device for DetNet flows"; + } + leaf maximum-detnet-device-delay{ + type uint32; + description + "Maximum delay in the device for DetNet flows"; + } + } + + grouping detnet-queuing-management-algorithm{ + description + "Detnet queuing management algorithm used in + output queue"; + leaf queuing-management-algorithm{ + type enumeration{ + enum credit-based-shaping{ + reference + "IEEE P802.1 Qav"; + } + enum time-aware-shaping{ + reference + "IEEE P802.1 Qbv"; + } + enum cyclic-queuing-and-forwarding{ + reference + "IEEE P802.1 Qch"; + } + enum asynchronous-traffic-shaping{ + reference + "IEEE P802.1 Qcr"; + } + } + description + "Detnet queuing management algorithm type"; + } + } + + grouping detnet-node-info-attributes{ + description + "DetNet capability attributes in a DetNet node"; + container detnet-node-type{ + description + "Three types of DetNet nodes"; + reference + "draft-ietf-detnet-architecture-03: + Deterministic Networking Architecture"; + uses detnet-node-type; + } + container detnet-resource-reservation-attributes{ + description + "Attributes about resource reservation for + DetNet flows"; + uses detnet-resource-reservation-attributes; + } + leaf detnet-elimination-capability{ + type boolean; + description + "This node is able to do DetNet packet + elimination"; + } + leaf detnet-replication-capability{ + type boolean; + description + "This node is able to do DetNet packet + replication"; + } + } + + grouping detnet-node-type{ + description + "This grouping defines three types of DetNet nodes"; + reference + "draft-ietf-detnet-architecture-03:Deterministic + Networking Architecture"; + leaf detnet-node-type{ + type enumeration{ + enum edge-node{ + description + "An instance of a DetNet relay node that + includes either a DetNet service layer proxy + function for DetNet service protection (e.g. + the addition or removal of packet sequencing + information) for one or more end systems, or + starts or terminate congestion protection at + the DetNet transport layer,analogous to a + Label Edge Router (LER)."; + } + enum relay-node{ + description + "A DetNet node including a service layer + function that interconnects different DetNet + transport layer paths to provide service + protection.A DetNet relay node can be a bridge, + a router, a firewall, or any other system that + participates in the DetNet service layer. It + typically incorporates DetNet transport layer + functions as well, in which case it is + collocated with a transit node."; + } + enum transit-node{ + description + "A node operating at the DetNet transport layer, + that utilizes link layer and/or network layer + switching across multiple links and/or + sub-networks to provide paths for DetNet + service layer functions.Optionally provides + congestion protection over those paths.An MPLS + LSR is an example of a DetNet transit node."; + } + } + description + "The type this node belongs to, which also determines + the role the node can play in DetNet "; + } + } + + grouping detnet-resource-reservation-attributes{ + description + "This grouping describs reservation operation for + the entire device"; + leaf MaxFanInPorts{ + type uint32; + description + "maximum number of fan-in ports in the device"; + } + leaf MaxPacketSize{ + type uint32; + description + "maximum Packet size the device allows"; + } + leaf MaxDetNetClasses{ + type uint32; + description + "maximum number of traffic classes that can be + reserved for DetNet"; + } + } + + augment "/nw:networks/nw:network/nw:node" { + when "../nw:network-types/tet:te-topology" + { + description + ""; + } + description + "Advertised DetNet link information attributes."; + uses detnet-link-info-attributes; + } + + augment "/nw:networks/nw:network/nt:link" { + when "../nw:network-types/tet:te-topology" + { + description + ""; + } + description + "Advertised DetNet node information attributes."; + uses detnet-node-info-attributes; + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-device@2018-02-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-device@2018-02-15.yang index 14d18fbd2..bf07a2528 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-device@2018-02-15.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-device@2018-02-15.yang @@ -64,7 +64,6 @@ module ietf-te-device { Editor: Bin Wen "; - description "YANG data module for TE device configurations, state, RPC and notifications."; @@ -112,7 +111,6 @@ module ietf-te-device { } description "downstream information"; - leaf nhop { type inet:ip-address; description @@ -130,6 +128,7 @@ module ietf-te-device { description "downstream neighbor."; } + leaf label { type rt-types:generalized-label; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-mpls-types@2018-02-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-mpls-types@2018-02-15.yang index d4c0bedd1..b958815b1 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-mpls-types@2018-02-15.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-mpls-types@2018-02-15.yang @@ -112,7 +112,6 @@ module ietf-te-mpls-types { description "Type of BFD session"; } - typedef bfd-encap-mode-type { type enumeration { enum gal { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-mpls@2018-02-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-mpls@2018-02-15.yang index 6c81797f3..8febae40c 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-mpls@2018-02-15.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-mpls@2018-02-15.yang @@ -131,7 +131,6 @@ module ietf-te-mpls { uses tunnel-igp-shortcut_config; } } - grouping tunnel-forwarding-adjacency_configs { description "Tunnel forwarding adjacency grouping"; leaf binding-label { @@ -228,7 +227,6 @@ module ietf-te-mpls { an overflow event"; } - leaf trigger-event-count { type uint16; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2016-10-10.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2016-10-10.yang deleted file mode 100644 index 5c7aa29bd..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2016-10-10.yang +++ /dev/null @@ -1,247 +0,0 @@ -module ietf-te-path-computation { - yang-version 1.1; - namespace "urn:ietf:params:xml:ns:yang:ietf-te-path-computation"; - // replace with IANA namespace when assigned - - prefix "tepc"; - - import ietf-inet-types { - prefix "inet"; - } - - import ietf-yang-types { - prefix "yang-types"; - } - - import ietf-network-topology { - prefix "nt"; - } - - import ietf-te { - prefix "te"; - } - - import ietf-te-types { - prefix "te-types"; - } - - organization - "Traffic Engineering Architecture and Signaling (TEAS) - Working Group"; - - contact - "WG Web: - WG List: - WG Chair: Lou Berger - - - WG Chair: Vishnu Pavan Beeram - - - "; - - description "YANG model for stateless TE path computation"; - - revision "2016-10-10" { - description "Initial revision"; - reference "YANG model for stateless TE path computation"; - } - - /* - * Features - */ - - feature stateless-path-computation { - description - "This feature indicates that the system supports - stateless path computation."; - } - - /* - * Groupings - */ - - grouping Path { - list _telink { - key 'link-ref'; - config false; - uses nt:link-ref; - description "List of telink refs."; - } - uses te-types:generic-path-constraints; - leaf path-id { - type yang-types:uuid; - config false; - description "path-id ref."; - } - description "Path is described by an ordered list of TE Links."; - } - - grouping PathCompServicePort { - leaf source { - type inet:ip-address; - description "TE tunnel source address."; - } - leaf destination { - type inet:ip-address; - description "P2P tunnel destination address"; - } - leaf src-tp-id { - type binary; - description "TE tunnel source termination point identifier."; - } - leaf dst-tp-id { - type binary; - description "TE tunnel destination termination point -identifier."; - } - uses te:bidir-assoc-properties; - description "Path Computation Service Port grouping."; - } - - grouping PathComputationService { - leaf-list _path-ref { - type leafref { - path '/paths/path/path-id'; - } - config false; - description "List of previously computed path references."; - } - container _servicePort { - uses PathCompServicePort; - description "Path Computation Service Port."; - } - uses te-types:generic-path-constraints; - uses te-types:generic-path-optimization; - - description "Path computation service."; - } - - grouping synchronization-info { - description "Information for sync"; - list synchronization { - key "synchronization-index"; - description "sync list"; - leaf synchronization-index { - type uint32; - description "index"; - } - container svec { - description - "Synchronization VECtor"; - leaf relaxable { - type boolean; - default true; - description - "If this leaf is true, path computation process is free -to ignore svec content. - otherwise it must take into account this svec."; - } - leaf link-diverse { - type boolean; - default false; - description "link-diverse"; - } - leaf node-diverse { - type boolean; - default false; - description "node-diverse"; - } - leaf srlg-diverse { - type boolean; - default false; - description "srlg-diverse"; - } - leaf-list request-id-number { - type uint32; - description - "This list reports the set of M path computation requests -that must be synchronized."; - } - } - uses te-types:generic-path-constraints; - } - } - - grouping no-path-info { - description "no-path-info"; - container no-path { - description "no-path container"; - } - } - - /* - * Root container - */ - container paths { - list path { - key "path-id"; - config false; - uses Path; - - description "List of previous computed paths."; - } - description "Root container for path-computation"; - } - - container pathComputationService { - config false; - uses PathComputationService; - description "Service for computing paths."; - } - - /** - * AUGMENTS TO TE RPC - */ - - augment "/te:tunnels-rpc/te:input/te:tunnel-info" { - description "statelessComputeP2PPath input"; - list request-list { - key "request-id-number"; - description "request-list"; - leaf request-id-number { - type uint32; - mandatory true; - description "Each path computation request is uniquely -identified by the request-id-number. - It must be present also in rpcs."; - } - list servicePort { - min-elements 1; - uses PathCompServicePort; - description "List of service ports."; - } - uses te-types:generic-path-constraints; - uses te-types:generic-path-optimization; - - } - uses synchronization-info; - } - - augment "/te:tunnels-rpc/te:output/te:result" { - description "statelessComputeP2PPath output"; - list response { - key response-index; - config false; - description "response"; - leaf response-index { - type uint32; - description - "The list key that has to reuse request-id-number."; - } - choice response-type { - config false; - description "response-type"; - case no-path-case { - uses no-path-info; - } - case path-case { - container pathCompService { - uses PathComputationService; - description "Path computation service."; - } - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2018-03-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2018-03-02.yang new file mode 100644 index 000000000..979d9e02f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-path-computation@2018-03-02.yang @@ -0,0 +1,356 @@ +module ietf-te-path-computation { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-te-path-computation"; + // replace with IANA namespace when assigned + + prefix "tepc"; + + import ietf-inet-types { + prefix "inet"; + } + + import ietf-yang-types { + prefix "yang-types"; + } + + import ietf-te { + prefix "te"; + } + + import ietf-te-types { + prefix "te-types"; + } + organization + "Traffic Engineering Architecture and Signaling (TEAS) + Working Group"; + + contact + "WG Web: + WG List: + + WG Chair: Lou Berger + + + WG Chair: Vishnu Pavan Beeram + + + "; + + description "YANG model for stateless TE path computation"; + + revision "2018-03-02" { + description "Revision to fix issues #22, 29, 33 and 39"; + reference "YANG model for stateless TE path computation"; + } + + /* + * Features + */ + + feature stateless-path-computation { + description + "This feature indicates that the system supports + stateless path computation."; + } + + /* + * Groupings + */ + + grouping path-info { + leaf path-id { + type yang-types:uuid; + config false; + description "path-id ref."; + } + uses te-types:generic-path-properties; + description "Path computation output information"; + } + + grouping end-points { + leaf source { + type inet:ip-address; + description "TE tunnel source address."; + } + leaf destination { + type inet:ip-address; + description "P2P tunnel destination address"; + } + leaf src-tp-id { + type binary; + description "TE tunnel source termination point identifier."; + } + leaf dst-tp-id { + type binary; + description "TE tunnel destination termination point +identifier."; + } + description "Path Computation End Points grouping."; + } + + grouping requested-metrics-info { + description "requested metric"; + list requested-metrics { + key 'metric-type'; + description "list of requested metrics"; + leaf metric-type { + type identityref { + base te-types:path-metric-type; + } + description "the requested metric"; + } + } + } + + identity svec-metric-type { + description + "Base identity for svec metric type"; + } + + identity svec-metric-cumul-te { + base svec-metric-type; + description + "TE cumulative path metric"; + } + + identity svec-metric-cumul-igp { + base svec-metric-type; + description + "IGP cumulative path metric"; + } + + identity svec-metric-cumul-hop { + base svec-metric-type; + description + "Hop cumulative path metric"; + } + + identity svec-metric-aggregate-bandwidth-consumption { + base svec-metric-type; + description + "Cumulative bandwith consumption of the set of synchronized +paths"; + } + + identity svec-metric-load-of-the-most-loaded-link { + base svec-metric-type; + description + "Load of the most loaded link"; + } + + grouping svec-metrics-bounds_config { + description "TE path metric bounds grouping for computing a set +of + synchronized requests"; + leaf metric-type { + type identityref { + base svec-metric-type; + } + description "TE path metric type usable for computing a set of + synchronized requests"; + } + leaf upper-bound { + type uint64; + description "Upper bound on end-to-end svec path metric"; + } + } + + grouping svec-metrics-optimization_config { + description "TE path metric bounds grouping for computing a set +of + synchronized requests"; + leaf metric-type { + type identityref { + base svec-metric-type; + } + description "TE path metric type usable for computing a set of + synchronized requests"; + } + leaf weight { + type uint8; + description "Metric normalization weight"; + } + } + + grouping svec-exclude { + description "List of resources to be excluded by all the paths + in the SVEC"; + container exclude-objects { + description "resources to be excluded"; + list excludes { + key index; + description + "List of explicit route objects to always exclude + from synchronized path computation"; + uses te-types:explicit-route-hop; + } + } + } + + grouping synchronization-constraints { + description "Global constraints applicable to synchronized + path computation"; + container svec-constraints { + description "global svec constraints"; + list path-metric-bound { + key metric-type; + description "list of bound metrics"; + uses svec-metrics-bounds_config; + } + } + uses te-types:generic-path-srlgs; + uses svec-exclude; + } + + grouping synchronization-optimization { + description "Synchronized request optimization"; + container optimizations { + description + "The objective function container that includes + attributes to impose when computing a synchronized set of +paths"; + + choice algorithm { + description "Optimizations algorithm."; + case metric { + list optimization-metric { + key "metric-type"; + description "svec path metric type"; + uses svec-metrics-optimization_config; + } + } + case objective-function { + container objective-function { + description + "The objective function container that includes + attributes to impose when computing a TE path"; + uses te-types:path-objective-function_config; + } + } + } + } + } + + grouping synchronization-info { + description "Information for sync"; + list synchronization { + key "synchronization-id"; + description "sync list"; + leaf synchronization-id { + type uint32; + description "index"; + } + container svec { + description + "Synchronization VECtor"; + leaf relaxable { + type boolean; + default true; + description + "If this leaf is true, path computation process is free +to ignore svec content. + otherwise it must take into account this svec."; + } + leaf link-diverse { + type boolean; + default false; + description "link-diverse"; + } + leaf node-diverse { + type boolean; + default false; + description "node-diverse"; + } + leaf srlg-diverse { + type boolean; + default false; + description "srlg-diverse"; + } + leaf-list request-id-number { + type uint32; + description "This list reports the set of M path +computation + requests that must be synchronized."; + } + } + uses synchronization-constraints; + uses synchronization-optimization; + } + } + + grouping no-path-info { + description "no-path-info"; + container no-path { + presence "Response without path information, due to failure + performing the path computation"; + description "if path computation cannot identify a path, + rpc returns no path."; + } + } + + /* + * Root container + */ + container paths { + list path { + key "path-id"; + config false; + uses path-info; + description "List of previous computed paths."; + } + description "Root container for path-computation"; + } + + /** + * AUGMENTS TO TE RPC + */ + + augment "/te:tunnels-rpc/te:input/te:tunnel-info" { + description "statelessComputeP2PPath input"; + list path-request { + key "request-id"; + description "request-list"; + leaf request-id { + type uint32; + mandatory true; + description "Each path computation request is uniquely +identified by the request-id-number. + It must be present also in rpcs."; + } + uses end-points; + uses te:bidir-assoc-properties; + uses te-types:path-route-objects; + uses te-types:generic-path-constraints; + uses te-types:generic-path-optimization; + uses requested-metrics-info; + } + uses synchronization-info; + } + + augment "/te:tunnels-rpc/te:output/te:result" { + description "statelessComputeP2PPath output"; + list response { + key response-id; + config false; + description "response"; + leaf response-id { + type uint32; + description + "The list key that has to reuse request-id-number."; + } + choice response-type { + config false; + description "response-type"; + case no-path-case { + uses no-path-info; + } + case path-case { + container computed-path { + uses path-info; + description "Path computation service."; + } + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-24.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-24.yang index bf013b014..d0ec9a115 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-service-mapping@2018-02-24.yang @@ -31,7 +31,7 @@ module ietf-te-service-mapping { "This module contains a YANG module for the mapping of service (e.g. L3VPN) to the TE tunnels or ACTN VN."; - revision 2018-02-21 { + revision 2018-02-24 { description "initial version."; reference @@ -112,7 +112,7 @@ to modify the properties of the tunnel (e.g., b/w) "; leaf l2vpn-ref { type leafref { path "/l2:l2vpn-svc/l2:vpn-services/" - + "l2:vpn-svc/l2:vpn-id"; + + "l2:vpn-service/l2:vpn-id"; } description "The reference to L2VPN Service Yang Model"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-sr-mpls@2018-02-15.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-sr-mpls@2018-02-15.yang index 16b7a224b..8b7fe7676 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-sr-mpls@2018-02-15.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-sr-mpls@2018-02-15.yang @@ -72,7 +72,6 @@ module ietf-te-sr-mpls { description "The Adj-SID is eligible if protected"; } - identity sr-protection-type-unprotected { base sr-protection-type; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-topology-packet-state@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-packet-state@2017-10-29.yang index ad91ef21e..e245f68d7 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-topology-packet-state@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-packet-state@2017-10-29.yang @@ -32,9 +32,9 @@ module ietf-te-topology-packet-state { contact "WG Web: WG List: - WG Chair: Lou Berger + WG Chair: Vishnu Pavan Beeram @@ -128,7 +128,6 @@ module ietf-te-topology-packet-state { if-feature tet-pkt:te-performance-metric; } } - /* Augmentations to te-link-attributes */ augment "/nd-s:networks/tet-s:te/tet-s:templates/" + "tet-s:link-template/tet-s:te-link-attributes" { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf-state@2018-02-27.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf-state@2018-02-27.yang new file mode 100644 index 000000000..3cc1080f3 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf-state@2018-02-27.yang @@ -0,0 +1,107 @@ +module ietf-te-topology-sf-state { + yang-version 1; + namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology-sf-state"; + + prefix "tet-sf-s"; + + import ietf-te-topology-sf { + prefix "tet-sf"; + } + + import ietf-network-state { + prefix "nw-s"; + } + + import ietf-network-topology-state { + prefix "nt-s"; + } + + import ietf-te-topology-state { + prefix "tet-s"; + } + + organization + "Traffic Engineering Architecture and Signaling (TEAS) + Working Group"; + + contact + "WG Web: + WG List: + + Editors: Igor Bryskin + + + Xufeng Liu + "; + + description + "Network service and function aware aware TE topology operational + state model for non-NMDA compliant implementations. + + 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 + (http://trustee.ietf.org/license-info)."; + + revision 2018-02-27 { + description "Initial revision"; + reference "TBD"; + } + + /* + * Augmentations + */ + /* Augmentations to network-types/te-topology */ + augment "/nw-s:networks/nw-s:network/nw-s:network-types/" + + "tet-s:te-topology" { + description + "Defines the SF aware TE topology type."; + uses tet-sf:sf-topology-type; + } + + /* Augmentations to connectivity-matrix */ + augment "/nw-s:networks/nw-s:network/nw-s:node/tet-s:te/" + + "tet-s:te-node-attributes" { + description + "Parameters for SF aware TE topology."; + uses tet-sf:service-function-node-augmentation; + } + + augment "/nw-s:networks/nw-s:network/nw-s:node/tet-s:te/" + + "tet-s:information-source-entry" { + description + "Parameters for SF aware TE topology."; + uses tet-sf:service-function-node-augmentation; + } + + /* Augmentations to tunnel-termination-point */ + augment "/nw-s:networks/nw-s:network/nw-s:node/tet-s:te/" + + "tet-s:tunnel-termination-point" { + description + "Parameters for SF aware TE topology."; + uses tet-sf:service-function-ttp-augmentation; + } + + /* Augmentations to connectivity-matrix */ + augment "/nw-s:networks/nw-s:network/nw-s:node/tet-s:te/" + + "tet-s:te-node-attributes/tet-sf-s:service-function/" + + "tet-sf-s:link-terminations/tet-sf-s:link-termination/" + + "tet-sf-s:from" { + description + "Add reference to the link termination point. + This portion cannot be shared with the state module."; + leaf tp-ref { + type leafref { + path "../../../../../../../nt-s:termination-point/" + + "nt-s:tp-id"; + } + description + "Reference to the link termination point."; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2017-10-22.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2018-02-27.yang similarity index 88% rename from experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2017-10-22.yang rename to experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2018-02-27.yang index 11ef4085f..13388354e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2017-10-22.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-topology-sf@2018-02-27.yang @@ -3,12 +3,13 @@ module ietf-te-topology-sf { namespace "urn:ietf:params:xml:ns:yang:ietf-te-topology-sf"; prefix "tet-sf"; + import ietf-network { - prefix "nd"; + prefix "nw"; } import ietf-network-topology { - prefix "lnk"; + prefix "nt"; } import ietf-te-topology { @@ -23,21 +24,26 @@ module ietf-te-topology-sf { "WG Web: WG List: - WG Chair: Lou Berger - - - WG Chair: Vishnu Pavan Beeram - - Editors: Igor Bryskin Xufeng Liu "; - description "SF aware TE topology model"; + description + "Network service and function aware aware TE topology model. + + 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 + (http://trustee.ietf.org/license-info)."; - revision 2017-10-22 { + revision 2018-02-27 { description "Initial revision"; reference "TBD"; } @@ -286,7 +292,7 @@ module ietf-te-topology-sf { * Augmentations */ /* Augmentations to network-types/te-topology */ - augment "/nd:networks/nd:network/nd:network-types/" + augment "/nw:networks/nw:network/nw:network-types/" + "tet:te-topology" { description "Defines the SF aware TE topology type."; @@ -294,14 +300,14 @@ module ietf-te-topology-sf { } /* Augmentations to te-node-attributes */ - augment "/nd:networks/nd:network/nd:node/tet:te/" + augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes" { description "Parameters for SF aware TE topology."; uses service-function-node-augmentation; } - augment "/nd:networks/nd:network/nd:node/tet:te/" + augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:information-source-entry" { description "Parameters for SF aware TE topology."; @@ -309,7 +315,7 @@ module ietf-te-topology-sf { } /* Augmentations to tunnel-termination-point */ - augment "/nd:networks/nd:network/nd:node/tet:te/" + augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:tunnel-termination-point" { description "Parameters for SF aware TE topology."; @@ -317,7 +323,7 @@ module ietf-te-topology-sf { } /* Augmentations to connectivity-matrix */ - augment "/nd:networks/nd:network/nd:node/tet:te/" + augment "/nw:networks/nw:network/nw:node/tet:te/" + "tet:te-node-attributes/tet-sf:service-function/" + "tet-sf:link-terminations/tet-sf:link-termination/" + "tet-sf:from" { @@ -326,8 +332,8 @@ module ietf-te-topology-sf { This portion cannot be shared with the state module."; leaf tp-ref { type leafref { - path "../../../../../../../lnk:termination-point/" - + "lnk:tp-id"; + path "../../../../../../../nt:termination-point/" + + "nt:tp-id"; } description "Reference to the link termination point."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-02-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-03-05.yang similarity index 91% rename from experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-02-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-03-05.yang index 7a4cb4c6a..a68c26162 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-02-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-types@2018-03-05.yang @@ -20,6 +20,7 @@ module ietf-te-types { organization "IETF Traffic Engineering Architecture and Signaling (TEAS) Working Group"; + contact "WG Web: WG List: @@ -52,7 +53,7 @@ module ietf-te-types { "This module contains a collection of generally useful TE specific YANG data type defintions."; - revision "2018-02-19" { + revision "2018-03-05" { description "Latest revision of TE types"; reference "RFC3209"; } @@ -62,6 +63,7 @@ module ietf-te-types { */ identity objective-function-type { description "Base objective function type"; + reference "RFC4657"; } identity of-minimize-cost-path { base objective-function-type; @@ -215,6 +217,7 @@ module ietf-te-types { description "enumerated type for specifying loose or strict paths"; + reference "RFC3209: section-4.3.2"; } identity LSP_METRIC_TYPE { @@ -261,6 +264,7 @@ module ietf-te-types { base tunnel-type; description "TE point-to-multipoint tunnel type."; + reference "RFC4875"; } identity tunnel-action-type { @@ -433,10 +437,10 @@ module ietf-te-types { description "Restores when all the tunnel LSPs are affected by failure"; } - identity restoration-scheme-type { description "Base identity for LSP restoration schemes"; + reference "RFC4872"; } identity restoration-scheme-preconfigured { @@ -548,6 +552,7 @@ module ietf-te-types { reference "ITU-T G.808, RFC 4427"; } + identity signal-fail { base lsp-protection-state; description @@ -699,12 +704,14 @@ module ietf-te-types { identity switching-capabilities { description "Base identity for interface switching capabilities"; + reference "RFC3471"; } identity switching-psc1 { base switching-capabilities; description "Packet-Switch Capable-1 (PSC-1)"; + reference "RFC3471"; } identity switching-evpl { @@ -717,12 +724,14 @@ module ietf-te-types { base switching-capabilities; description "Layer-2 Switch Capable (L2SC)"; + reference "RFC3471"; } identity switching-tdm { base switching-capabilities; description "Time-Division-Multiplex Capable (TDM)"; + reference "RFC3471"; } identity switching-otn { @@ -741,65 +750,76 @@ module ietf-te-types { base switching-capabilities; description "Lambda-Switch Capable (LSC)"; + reference "RFC3471"; } identity switching-fsc { base switching-capabilities; description "Fiber-Switch Capable (FSC)"; + reference "RFC3471"; } identity lsp-encoding-types { description "Base identity for encoding types"; + reference "RFC3471"; } identity lsp-encoding-packet { base lsp-encoding-types; description "Packet LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-ethernet { base lsp-encoding-types; description "Ethernet LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-pdh { base lsp-encoding-types; description "ANSI/ETSI LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-sdh { base lsp-encoding-types; description "SDH ITU-T G.707 / SONET ANSI T1.105 LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-digital-wrapper { base lsp-encoding-types; description "Digital Wrapper LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-lambda { base lsp-encoding-types; description "Lambda (photonic) LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-fiber { base lsp-encoding-types; description "Fiber LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-fiber-channel { base lsp-encoding-types; description "FiberChannel LSP encoding"; + reference "RFC3471"; } identity lsp-encoding-oduk { @@ -836,6 +856,7 @@ module ietf-te-types { base path-signaling-type; description "RSVP-TE signaling path setup"; + reference "RFC3209"; } identity path-setup-sr { @@ -866,17 +887,20 @@ module ietf-te-types { feature p2mp-te { description "Indicates support for P2MP-TE"; + reference "RFC4875"; } feature frr-te { description "Indicates support for TE FastReroute (FRR)"; + reference "RFC4090"; } feature extended-admin-groups { description "Indicates support for TE link extended admin groups."; + reference "RFC7308"; } feature named-path-affinities { @@ -941,12 +965,14 @@ module ietf-te-types { base path-metric-type; description "TE path metric"; + reference "RFC3785"; } identity path-metric-igp { base path-metric-type; description "IGP path metric"; + reference "RFC3785"; } identity path-metric-hop { @@ -971,6 +997,20 @@ module ietf-te-types { reference "RFC7471"; } + identity path-metric-optimize-includes { + base path-metric-type; + description + "A metric that optimizes the number of included resources + specified in a set"; + } + + identity path-metric-optimize-excludes { + base path-metric-type; + description + "A metric that optimizes the number of excluded resources + specified in a set"; + } + identity path-tiebreaker-type { description "Base identity for path tie-breaker type"; @@ -998,40 +1038,47 @@ module ietf-te-types { description "Base identity for bidirectional provisioning mode."; + reference "RFC7551"; } identity bidir-provisioning-single-sided { base bidir-provisioning-mode; description "Single-sided bidirectional provioning mode"; + reference "RFC7551"; } identity bidir-provisioning-double-sided { base bidir-provisioning-mode; description "Double-sided bidirectional provioning mode"; + reference "RFC7551"; } identity bidir-association-type { description "Base identity for bidirectional association type"; + reference "RFC7551"; } identity bidir-assoc-corouted { base bidir-association-type; description "Co-routed bidirectional association type"; + reference "RFC7551"; } identity bidir-assoc-non-corouted { base bidir-association-type; description "Non co-routed bidirectional association type"; + reference "RFC7551"; } identity resource-affinities-type { description "Base identity for resource affinities"; + reference "RFC2702"; } identity resource-aff-include-all { @@ -1040,6 +1087,7 @@ module ietf-te-types { "The set of attribute filters associated with a tunnel all of which must be present for a link to be acceptable"; + reference "RFC2702 and RFC3209"; } identity resource-aff-include-any { @@ -1048,6 +1096,7 @@ module ietf-te-types { "The set of attribute filters associated with a tunnel any of which must be present for a link to be acceptable"; + reference "RFC2702 and RFC3209"; } identity resource-aff-exclude-any { @@ -1055,6 +1104,7 @@ module ietf-te-types { description "The set of attribute filters associated with a tunnel any of which renders a link unacceptable"; + reference "RFC2702 and RFC3209"; } typedef optimization-goal { @@ -1170,6 +1220,7 @@ module ietf-te-types { "Defines a type representing the administrative status of a TE resource."; } + typedef te-global-id { type uint32; description @@ -1386,12 +1437,14 @@ module ietf-te-types { } description "Administrative group/Resource class/Color."; + reference "RFC3630 and RFC5305"; } typedef extended-admin-group { type binary; description "Extended administrative group/Resource class/Color."; + reference "RFC7308"; } typedef admin-groups { @@ -1405,6 +1458,7 @@ module ietf-te-types { typedef srlg { type uint32; description "SRLG type"; + reference "RFC4203 and RFC5307"; } identity path-computation-srlg-type { @@ -1440,6 +1494,7 @@ module ietf-te-types { type uint32; description "TE link metric"; + reference "RFC3785"; } /** @@ -1449,6 +1504,7 @@ module ietf-te-types { description "Base type to identify OTN bit rates of various information structures."; + reference "RFC7139"; } identity odu0 { base otn-rate-type; @@ -1497,18 +1553,18 @@ module ietf-te-types { } identity cwdm { base wdm-spectrum-type; - description - "CWDM."; + description "CWDM."; + reference "RFC6205"; } identity dwdm { base wdm-spectrum-type; - description - "DWDM."; + description "DWDM."; + reference "RFC6205"; } identity flexible-grid { base wdm-spectrum-type; - description - "Flexible grid."; + description "Flexible grid."; + reference "RFC6205"; } grouping te-bandwidth { @@ -1600,6 +1656,31 @@ module ietf-te-types { } } // performance-metric-container + grouping te-topology-identifier { + description + "Augmentation for TE topology."; + container te-topology-identifier { + description "TE topology identifier container"; + leaf provider-id { + type te-types:te-global-id; + description + "An identifier to uniquely identify a provider."; + } + leaf client-id { + type te-types:te-global-id; + description + "An identifier to uniquely identify a client."; + } + leaf topology-id { + type te-types:te-topology-id; + description + "It is presumed that a datastore will contain many + topologies. To distinguish between topologies it is + vital to have UNIQUE topology identifiers."; + } + } + } + grouping performance-metric-attributes { description "Link performance information in real time."; @@ -1794,6 +1875,7 @@ module ietf-te-types { /** * TE tunnel generic groupings **/ + /* Tunnel path selection parameters */ grouping explicit-route-hop { description @@ -1997,7 +2079,6 @@ module ietf-te-types { } /*** End of TE tunnel groupings ***/ - grouping optimizations_config { description "Optimization metrics configuration grouping"; leaf metric-type { @@ -2010,35 +2091,39 @@ module ietf-te-types { type uint8; description "TE path metric normalization weight"; } + container explicit-route-exclude-objects { + when "../metric-type = " + + "'te-types:path-metric-optimize-excludes'"; + description + "Container for the exclude route object list"; + uses path-route-exclude-objects; + } + container explicit-route-include-objects { + when "../metric-type = " + + "'te-types:path-metric-optimize-includes'"; + description + "Container for the include route object list"; + uses path-route-include-objects; + } } grouping common-constraints_config { description "Common constraints grouping that can be set on a constraint set or directly on the tunnel"; - leaf topology-id { - type te-types:te-topology-id; - description - "The tunnel path is computed using the specific - topology identified by this identifier"; - } uses te-types:te-bandwidth { description "A requested bandwidth to use for path computation"; } - leaf disjointness { - type te-types:te-path-disjointness; - description - "The type of resource disjointness."; - } leaf setup-priority { type uint8 { range "0..7"; } description "TE LSP requested setup priority"; + reference "RFC3209"; } leaf hold-priority { type uint8 { @@ -2046,6 +2131,7 @@ module ietf-te-types { } description "TE LSP requested hold priority"; + reference "RFC3209"; } leaf signaling-type { type identityref { @@ -2055,6 +2141,14 @@ module ietf-te-types { } } + grouping tunnel-constraints_config { + description + "Tunnel constraints grouping that can be set on + a constraint set or directly on the tunnel"; + uses te-types:te-topology-identifier; + uses te-types:common-constraints_config; + } + grouping path-metrics-bounds_config { description "TE path metric bounds grouping"; leaf metric-type { @@ -2083,6 +2177,74 @@ module ietf-te-types { /** * TE interface generic groupings **/ + grouping path-route-objects { + description + "List of EROs to be included or excluded when performing + the path computation."; + container explicit-route-objects { + description + "Container for the exclude route object list"; + list route-object-exclude-always { + key index; + description + "List of explicit route objects to always exclude + from path computation"; + uses te-types:explicit-route-hop; + } + list route-object-include-exclude { + key index; + description + "List of explicit route objects to include or + exclude in path computation"; + leaf explicit-route-usage { + type identityref { + base te-types:route-usage-type; + } + description "Explicit-route usage."; + } + uses te-types:explicit-route-hop; + } + } + } + + grouping path-route-include-objects { + description + "List of EROs to be included when performing + the path computation."; + list route-object-include-object { + key index; + description + "List of explicit route objects to be included + in path computation"; + uses te-types:explicit-route-hop; + } + } + + grouping path-route-exclude-objects { + description + "List of EROs to be included when performing + the path computation."; + list route-object-exclude-object { + key index; + description + "List of explicit route objects to be excluded + in path computation"; + uses te-types:explicit-route-hop; + } + } + + grouping generic-path-metric-bounds { + description "TE path metric bounds grouping"; + container path-metric-bounds { + description "TE path metric bounds container"; + list path-metric-bound { + key metric-type; + description "List of TE path metric bounds"; + uses path-metrics-bounds_config; + } + } + } + grouping generic-path-optimization { description "TE generic path optimization grouping"; @@ -2177,19 +2339,27 @@ module ietf-te-types { } } + grouping generic-path-disjointness { + description "Path disjointness grouping"; + leaf disjointness { + type te-types:te-path-disjointness; + description + "The type of resource disjointness. + Under primary path, disjointness level applies to + all secondary LSPs. Under secondary, disjointness + level overrides the one under primary"; + } + } + grouping generic-path-constraints { description "Global named path constraints configuration grouping"; container path-constraints { description "TE named path constraints container"; - list path-metric-bound { - key metric-type; - description "List of TE path metrics"; - uses path-metrics-bounds_config; - } - uses common-constraints_config; + uses generic-path-disjointness; + uses generic-path-metric-bounds; uses generic-path-affinities; uses generic-path-srlgs; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2017-10-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2018-02-27.yang similarity index 95% rename from experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2017-10-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2018-02-27.yang index ccba1bfc3..1b57f4598 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2017-10-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te-wson-types@2018-02-27.yang @@ -17,9 +17,9 @@ module ietf-te-wson-types { description "This module defines WSON types."; - revision "2017-10-09" { + revision "2018-02-27" { description - "Revision 0.1"; + "Revision 2"; reference "TBD"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-te@2018-02-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-te@2018-03-03.yang similarity index 84% rename from experimental/ietf-extracted-YANG-modules/ietf-te@2018-02-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-te@2018-03-03.yang index 462f97176..93d6c97e5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-te@2018-02-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-te@2018-03-03.yang @@ -51,7 +51,7 @@ module ietf-te { "YANG data module for TE configuration, state, RPC and notifications."; - revision "2018-02-19" { + revision "2018-03-03" { description "Latest update to TE generic YANG module."; reference "TBA"; } @@ -88,44 +88,16 @@ module ietf-te { description "This type is used by data models that need to reference configured P2MP TE tunnel."; + reference "RFC4875"; } /** * TE tunnel generic groupings */ - grouping path-route-objects { - description - "List of EROs to be included or excluded when performing - the path computation."; - container explicit-route-objects { - description - "Container for the exclude route object list"; - list route-object-exclude-always { - key index; - description - "List of explicit route objects to always exclude - from path computation"; - uses te-types:explicit-route-hop; - } - list route-object-include-exclude { - key index; - description - "List of explicit route objects to include or - exclude in path computation"; - leaf explicit-route-usage { - type identityref { - base te-types:route-usage-type; - } - description "Explicit-route usage."; - } - uses te-types:explicit-route-hop; - } - } - } - grouping path-affinities-contents_config { description "Path affinities constraints grouping"; + reference "RFC3630 and RFC5305"; leaf usage { type identityref { base te-types:resource-affinities-type; @@ -155,96 +127,6 @@ module ietf-te { } } - grouping path-affinities_state { - description "Path affinities grouping"; - container path-affinities { - description "Path affinities container"; - list constraints { - key "usage"; - description "List of named affinity constraints"; - leaf usage { - type leafref { - path "../state/usage"; - } - description "Affinities usage"; - } - container state { - config false; - description - "Configuration applied parameters and state"; - uses path-affinities-contents_config; - } - } - } - } - - grouping path-srlgs_state { - description "Path SRLG properties grouping"; - container path-srlgs { - description "Path SRLG properties container"; - choice style { - description "Type of SRLG representation"; - case values { - container state { - config false; - description - "Configuration applied parameters and state"; - uses path-affinities-values_config; - } - } - case named { - container constraints { - description "SRLG named constraints"; - list constraint { - key "usage"; - leaf usage { - type leafref { - path "../state/usage"; - } - description "Affinity resource usage"; - } - container state { - config false; - description - "Configuration applied parameters and state"; - leaf usage { - type identityref { - base te-types:route-exclude-srlg; - } - description "SRLG usage"; - } - } - container srlg-names { - description "Container for named SRLG list"; - list srlg-name { - key "name"; - leaf name { - type leafref { - path "../state/name"; - } - description "The SRLG name"; - } - container state { - config false; - description - "Configuration applied parameters and - state"; - leaf name { - type string; - description "The SRLG name"; - } - } - description "List named SRLGs"; - } - } - description "List of named SRLG constraints"; - } - } - } - } - } - } - grouping path-affinities { description "Path affinities grouping"; container path-affinities { @@ -257,8 +139,9 @@ module ietf-te { } } - grouping path-affinities-values_config { - description "Path affinities values configuration grouping"; + grouping path-srlgs-values_config { + description "Path SRLG values properties grouping"; + reference "RFC4203 and RFC5307"; leaf usage { type identityref { base te-types:route-exclude-srlg; @@ -268,6 +151,7 @@ module ietf-te { leaf-list values { type te-types:srlg; description "SRLG value"; + reference "RFC4203 and RFC5307"; } } @@ -278,29 +162,32 @@ module ietf-te { choice style { description "Type of SRLG representation"; case values { - uses path-affinities-values_config; + uses path-srlgs-values_config; } case named { - list constraints { - key "usage"; - leaf usage { - type identityref { - base te-types:route-exclude-srlg; + container constraints { + description "SRLG named constraints"; + list constraint { + key "usage"; + leaf usage { + type identityref { + base te-types:route-exclude-srlg; + } + description "SRLG usage"; } - description "SRLG usage"; - } - container constraint { - description "Container for named SRLG list"; - list srlg-names { - key "name"; - leaf name { - type string; - description "The SRLG name"; + container constraint { + description "Container for named SRLG list"; + list srlg-names { + key "name"; + leaf name { + type string; + description "The SRLG name"; + } + description "List named SRLGs"; } - description "List named SRLGs"; } + description "List of named SRLG constraints"; } - description "List of named SRLG constraints"; } } } @@ -311,6 +198,7 @@ module ietf-te { description "TE tunnel associated bidirectional leaves grouping"; + reference "RFC7551"; leaf id { type uint16; description @@ -348,6 +236,7 @@ module ietf-te { description "TE tunnel associated bidirectional properties grouping"; + reference "RFC7551"; container bidirectional { description "TE tunnel associated bidirectional attributes."; @@ -361,6 +250,7 @@ module ietf-te { grouping p2p-reverse-primary-path-properties { description "tunnel path properties."; + reference "RFC7551"; container p2p-reverse-primary-path { description "Tunnel reverse primary path properties"; uses p2p-path-reverse-properties_config; @@ -436,8 +326,8 @@ module ietf-te { uses path-properties_state; } } - uses path-affinities_state; - uses path-srlgs_state; + uses path-affinities; + uses path-srlgs; container path-route-objects { description "Container for the list of computed route objects @@ -546,7 +436,8 @@ module ietf-te { type identityref { base te-types:path-scope-type; } - description "Path scope"; + default te-types:path-scope-end-to-end; + description "Path scope if segment or an end-to-end path"; } } @@ -555,15 +446,8 @@ module ietf-te { "TE tunnel reverse path properties configuration grouping"; uses p2p-path-properties-common_config; - leaf named-explicit-path { - when "../path-computation-method =" + - " 'te-types:path-explicitly-defined'"; - type leafref { - path "../../../../../../globals/named-explicit-paths/" - + "named-explicit-path/name"; - } - description "The explicit-path name"; - } + uses path-constraints_config; + uses te-types:generic-path-optimization; leaf named-path-constraint { if-feature te-types:named-path-constraints; type leafref { @@ -581,6 +465,8 @@ module ietf-te { description "TE tunnel path properties configuration grouping"; uses p2p-path-properties-common_config; + uses path-constraints_config; + uses te-types:generic-path-optimization; leaf preference { type uint8 { range "1..255"; @@ -589,15 +475,6 @@ module ietf-te { "Specifies a preference for this path. The lower the number higher the preference"; } - leaf named-explicit-path { - when "../path-computation-method =" + - " 'te-types:path-explicitly-defined'"; - type leafref { - path "../../../../../globals/named-explicit-paths/" - + "named-explicit-path/name"; - } - description "The explicit-path name"; - } leaf named-path-constraint { if-feature te-types:named-path-constraints; type leafref { @@ -634,6 +511,7 @@ module ietf-te { grouping hierarchical-link_config { description "Hierarchical link configuration grouping"; + reference "RFC4206"; leaf local-te-node-id { type te-types:te-node-id; description @@ -649,18 +527,13 @@ module ietf-te { description "Remote TE node identifier"; } - leaf te-topology-id { - type te-types:te-topology-id; - description - "It is presumed that a datastore will contain many - topologies. To distinguish between topologies it is - vital to have UNIQUE topology identifiers."; - } + uses te-types:te-topology-identifier; } grouping hierarchical-link { description "Hierarchical link grouping"; + reference "RFC4206"; container hierarchical-link { description "Identifies a hierarchical link (in client layer) @@ -852,7 +725,7 @@ module ietf-te { } } - grouping tunnel-p2p-depency-tunnels_config { + grouping p2p-dependency-tunnels_config { description "Groupong for tunnel dependency list of tunnels"; container dependency-tunnels { @@ -872,6 +745,7 @@ module ietf-te { base te-types:lsp-encoding-types; } description "LSP encoding type"; + reference "RFC3945"; } leaf switching-type { type identityref { @@ -906,6 +780,7 @@ module ietf-te { base te-types:lsp-encoding-types; } description "LSP encoding type"; + reference "RFC3945"; } leaf switching-type { type identityref { @@ -956,14 +831,9 @@ module ietf-te { description "TE tunnel destination termination point identifier."; } - leaf ignore-overload { - type boolean; - description - "The tunnel path can traverse overloaded node."; - } uses protection-restoration-params_config; - uses te-types:common-constraints_config; - uses tunnel-p2p-depency-tunnels_config; + uses te-types:tunnel-constraints_config; + uses p2p-dependency-tunnels_config; } grouping tunnel-p2p-params_state { @@ -1292,18 +1162,7 @@ module ietf-te { } key "index"; description "Record route sub-object list"; - leaf index { - type leafref { - path "../state/index"; - } - description "Index of record-route object"; - } - container state { - config false; - description - "Configuration applied parameters and state"; - uses te-types:record-route-subobject_state; - } + uses te-types:record-route-subobject_state; } } } @@ -1402,87 +1261,7 @@ module ietf-te { } } - /* Global named explicit-paths configuration data */ - grouping named-explicit-paths_config { - description - "Global explicit path configuration - grouping"; - leaf name { - type string; - description - "A string name that uniquely identifies an - explicit path"; - } - } - - grouping named-explicit-paths { - description - "Global explicit path configuration - grouping"; - container named-explicit-paths { - description "TE named explicit path container"; - list named-explicit-path { - key "name"; - description - "A list of explicit paths"; - uses named-explicit-paths_config; - container explicit-route-objects { - description "Explicit route objects container"; - list explicit-route-object { - key "index"; - description - "List of explicit route objects"; - leaf explicit-route-usage { - type identityref { - base te-types:route-usage-type; - } - description "An explicit-route hop action."; - } - uses te-types:explicit-route-hop; - } - } - } - } - } - /* Global named paths constraints configuration data */ - grouping path-metrics-bounds_config { - description "TE path metric bounds grouping"; - leaf metric-type { - type identityref { - base te-types:path-metric-type; - } - description "TE path metric type"; - } - leaf upper-bound { - type uint64; - description "Upper bound on end-to-end TE path metric"; - } - } - - grouping path-objective-function_config { - description "Optimization metrics configuration grouping"; - leaf objective-function-type { - type identityref { - base te-types:objective-function-type; - } - description - "Objective function entry"; - } - } - - grouping path-metric-bounds { - description "TE path metric bounds grouping"; - container path-metric-bounds { - description "TE path metric bounds container"; - list path-metric-bound { - key metric-type; - description "List of TE path metrics"; - uses path-metrics-bounds_config; - } - } - } - grouping path-constraints_state { description "TE path constraints state"; @@ -1503,18 +1282,12 @@ module ietf-te { description "Global named path constraints configuration grouping"; - leaf name { - type string; - description - "A string name that uniquely identifies a - path constraint set"; - } uses te-types:common-constraints_config; - uses path-metric-bounds; - uses te-types:generic-path-optimization; + uses te-types:generic-path-disjointness; + uses te-types:generic-path-metric-bounds; uses path-affinities; uses path-srlgs; - uses path-route-objects; + uses te-types:path-route-objects; uses shared-resources-tunnels { description "Set of tunnels that are allowed to share secondary path @@ -1526,6 +1299,17 @@ module ietf-te { } } + grouping path-constraints { + description "Per path constraints"; + uses path-constraints_config; + container state { + config false; + description + "Configuration applied parameters and state"; + uses path-constraints_state; + } + } + grouping named-path-constraints { description "Global named path constraints configuration @@ -1535,15 +1319,15 @@ module ietf-te { list named-path-constraint { if-feature te-types:named-path-constraints; key "name"; - description - "A list of named path constraints"; - uses path-constraints_config; - container state { - config false; + leaf name { + type string; description - "Configuration applied parameters and state"; - uses path-constraints_state; + "A string name that uniquely identifies a + path constraint set"; } + uses path-constraints; + description + "A list of named path constraints"; } } } @@ -1557,7 +1341,6 @@ module ietf-te { "Globals TE system-wide configuration data container"; uses named-admin-groups; uses named-srlgs; - uses named-explicit-paths; uses named-path-constraints; } } @@ -1764,6 +1547,7 @@ module ietf-te { description "Notification messages for Global TE."; } + /* TE Tunnel Notification Data */ notification tunnels-notif { description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-template@2016-03-20.yang b/experimental/ietf-extracted-YANG-modules/ietf-template@2016-03-20.yang index 1210d03d7..3033bf160 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-template@2016-03-20.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-template@2016-03-20.yang @@ -47,7 +47,7 @@ module ietf-template { // RFC Ed.: replace XXXX with actual RFC number and remove // this note - reference "RFC XXXX"; + reference "RFC XXXX: "; // RFC Ed.: remove this note // Note: extracted from RFC XXXX diff --git a/experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2017-10-29.yang b/experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2018-02-28.yang similarity index 97% rename from experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2017-10-29.yang rename to experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2018-02-28.yang index 14116461d..b8402da34 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2017-10-29.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-trafficselector-types@2018-02-28.yang @@ -21,11 +21,12 @@ module ietf-trafficselector-types { WG Chair: Dapeng Liu - WG Chair: Jouni Korhonen - + WG Chair: Sri Gundavelli + Editor: Satoru Matsushima + Editor: Lyle Bertz "; @@ -46,6 +47,13 @@ module ietf-trafficselector-types { in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License."; + revision 2018-02-28 { + description + "removed ts-list and updated WG co-chair."; + reference + "RFC 6088: Traffic Selectors for Flow Bindings"; + } + revision 2017-10-29 { description "Base Version"; reference @@ -353,6 +361,7 @@ module ietf-trafficselector-types { } description "ipv6 binary traffic selector"; } + grouping traffic-selector { leaf ts-format { type identityref { @@ -370,17 +379,4 @@ module ietf-trafficselector-types { "RFC 6089: Flow Bindings in Mobile IPv6 and Network Mobility (NEMO) Basic Support"; } - - grouping ts-list { - list selectors { - key index; - leaf index { - type uint64; - description "index"; - } - uses traffic-selector; - description "traffic selectors"; - } - description "traffic selector list"; - } } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-trans-client-service@2018-02-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-trans-client-service@2018-02-09.yang new file mode 100644 index 000000000..c7ec4dfdb --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-trans-client-service@2018-02-09.yang @@ -0,0 +1,186 @@ +module ietf-trans-client-service { + /* TODO: FIXME */ + //yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-trans-client-service"; + prefix "clntsvc"; + + import ietf-te-types { + prefix "te-types"; + } + + import ietf-otn-types { + prefix "otn-types"; + } + + organization + "Internet Engineering Task Force (IETF) CCAMP WG"; + contact + " + + ID-draft editor: + Aihua Guo (aihuaguo@huawei.com); + Haomian Zheng (zhenghaomian@huawei.com); + Italo Busi (italo.busi@huawei.com); + Yunbin Xu (xuyunbin@ritt.cn); + Yang Zhao (zhaoyangyjy@chinamobile.com); + Xufeng Liu (Xufeng_Liu@jabil.com); + Giuseppe Fioccola (giuseppe.fioccola@telecomitalia.it); + "; + + description + "This module defines a YANG data model for describing + simple transport client services."; + + revision 2018-02-09 { + description + "Initial version"; + reference + "ADD REFERENCE HERE"; + } + + /* + * Groupings + */ + grouping client-svc-access-parameters { + description + "Transport client services access parameters"; + + leaf access-node-id { + type te-types:te-node-id; + description + "The identifier of the access node in the underlying + transport topology."; + } + + leaf access-ltp-id { + type te-types:te-tp-id; + description + "The TE link termination point identifier, used together with + access-node-id to identify the access LTP."; + } + + leaf client-signal { + type identityref { + base otn-types:client-signal; + } + description + "Identifiies the client signal type associated with this port"; + } + } + + grouping client-svc-tunnel-parameters { + description + "Transport client services tunnel parameters"; + + leaf tunnel-name { + type string; + description + "TE service tunnel instance name."; + } + } + + grouping te-topology-identifier { + description + "description"; + leaf access-provider-id { + type te-types:te-global-id; + description + "An identifier to uniquely identify a provider."; + } + + leaf access-client-id { + type te-types:te-global-id; + description + "An identifier to uniquely identify a client."; + } + + leaf access-topology-id { + type te-types:te-topology-id; + description + "Identifies the topology the service access ports belong to."; + } + } + + grouping client-svc-instance_config { + description + "Configuraiton parameters for client services."; + leaf client-svc-name { + type string; + description + "Name of the p2p transport client service."; + } + + leaf client-svc-descr { + type string; + description + "Description of the transport client service."; + } + + uses te-topology-identifier; + + leaf admin-status { + type identityref { + base te-types:tunnel-state-type; + } + default te-types:tunnel-state-up; + description "Client service administrative state."; + } + + container src-access-ports { + description + "Source access port of a client service."; + uses client-svc-access-parameters; + } + + container dst-access-ports { + description + "Destination access port of a client service."; + uses client-svc-access-parameters; + } + + list svc-tunnels { + key tunnel-name; + description + "List of the TE Tunnels supporting the client service."; + uses client-svc-tunnel-parameters; + } + } + + grouping client-svc-instance_state { + description + "State parameters for client services."; + leaf operational-state { + type identityref { + base te-types:tunnel-state-type; + } + config false; + description "Client service operational state."; + } + leaf provisioning-state { + type identityref { + base te-types:lsp-state-type; + } + config false; + description "Client service provisioning state."; + } + } + + /* + * Data nodes + */ + + container client-svc { + description + "Transport client services."; + + list client-svc-instances { + key client-svc-name; + description + "The list of p2p transport client service instances"; + + uses client-svc-instance_config; + uses client-svc-instance_state; + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-trust-anchors@2018-03-05.yang b/experimental/ietf-extracted-YANG-modules/ietf-trust-anchors@2018-03-05.yang new file mode 100644 index 000000000..1247c91a9 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-trust-anchors@2018-03-05.yang @@ -0,0 +1,194 @@ +module ietf-trust-anchors { + yang-version 1.1; + + namespace "urn:ietf:params:xml:ns:yang:ietf-trust-anchors"; + prefix "ta"; + + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 6536: Network Configuration Protocol (NETCONF) Access + Control Model"; + } + + organization + "IETF NETCONF (Network Configuration) Working Group"; + + contact + "WG Web: + WG List: + + Author: Kent Watsen + "; + + description + "This module defines a data model for configuring global + trust anchors used by other data models. The data model + actually enables the configuration of sets of trust + anchors. This data model supports configuring trust + anchors for both X.509 certificates and SSH host keys. + + This data model does not support the configuring trust + anchors for SSH client keys, or pinning of the client + keys themselves, as the ability to do so is already + supported by ietf-system in RFC 7317. + + 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 + (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 "2018-03-05" { + description + "Initial version"; + reference + "RFC XXXX: YANG Data Model for Global Trust Anchors"; + } + + // Identities + + // typedefs + + typedef pinned-certificates { + type leafref { + path "/ta:trust-anchors/ta:pinned-certificates/ta:name"; + } + description + "This typedef enables importing modules to easily define a + reference to pinned-certificates. Use of this type also + impacts the YANG tree diagram output."; + } + + typedef pinned-host-keys { + type leafref { + path "/ta:trust-anchors/ta:pinned-host-keys/ta:name"; + } + description + "This typedef enables importing modules to easily define a + reference to pinned-host-keys. Use of this type also + impacts the YANG tree diagram output."; + reference + "I-D.ietf-netmod-yang-tree-diagrams: YANG Tree Diagrams"; + } + + // protocol accessible nodes + + container trust-anchors { + nacm:default-deny-write; + description + "Contains sets of X.509 certificates and SSH host keys."; + + list pinned-certificates { + key name; + description + "A list of pinned certificates. These certificates can be + used by a server to authenticate clients, or by a client to + authenticate servers. Each list of pinned certificates + SHOULD be specific to a purpose, as the list as a whole + may be referenced by other modules. For instance, a + NETCONF server's configuration might use a specific list + of pinned certificates for when authenticating NETCONF + client connections."; + leaf name { + type string; + description + "An arbitrary name for this list of pinned certificates."; + } + leaf description { + type string; + description + "An arbitrary description for this list of pinned + certificates."; + } + list pinned-certificate { + key name; + description + "A pinned certificate."; + leaf name { + type string; + description + "An arbitrary name for this pinned certificate. The + name must be unique across all lists of pinned + certificates (not just this list) so that leafrefs + from another module can resolve to unique values."; + } + leaf data { + type binary; + mandatory true; + description + "An X.509 v3 certificate structure as specified by RFC + 5280, Section 4 encoded using the ASN.1 distinguished + encoding rules (DER), as specified in ITU-T X.690."; + reference + "RFC 5280: + Internet X.509 Public Key Infrastructure Certificate + and Certificate Revocation List (CRL) Profile. + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + } + } + + list pinned-host-keys { + key name; + description + "A list of pinned host keys. These pinned host-keys can + be used by clients to authenticate SSH servers. Each + list of pinned host keys SHOULD be specific to a purpose, + so the list as a whole may be referenced by other modules. + For instance, a NETCONF client's configuration might + point to a specific list of pinned host keys for when + authenticating specific SSH servers."; + leaf name { + type string; + description + "An arbitrary name for this list of pinned SSH host keys."; + } + leaf description { + type string; + description + "An arbitrary description for this list of pinned SSH host + keys."; + } + list pinned-host-key { + key name; + description + "A pinned host key."; + leaf name { + type string; + description + "An arbitrary name for this pinned host-key. Must be + unique across all lists of pinned host-keys (not just + this list) so that a leafref to it from another module + can resolve to unique values."; + } + leaf data { + type binary; + mandatory true; + description + "The binary public key data for this SSH key, as + specified by RFC 4253, Section 6.6, i.e.: + + string certificate or public key format + identifier + byte[n] key/certificate data."; + reference + "RFC 4253: The Secure Shell (SSH) Transport Layer + Protocol"; + } + } + } + } + +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-01-18.yang b/experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-02-27.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-01-18.yang rename to experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-02-27.yang index a02d500ae..6ef4031d6 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-01-18.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-vbng@2018-02-27.yang @@ -29,6 +29,12 @@ description "The YANG module defines a generic configuration model for vbng"; + revision 2018-02-27{ + description "Correct some type of nodes."; + reference + "draft-hu-rtgwg-cu-separation-yang-model-02"; +} + revision 2018-01-18{ description "add multicast service configuration and pppox configuration, and update the OpenFlow channel parameters."; @@ -77,7 +83,6 @@ revision 2017-07-16{ augment /lne:logical-network-elements/lne:logical-network-element { container ietf-vbng{ - container bng-cp { leaf bng-cp-name { type string; @@ -225,7 +230,7 @@ revision 2017-07-16{ description "Address family type value."; } leaf control-ip { - type address-family-type; + type inet:ip-address; description "Set the IP address of for openflow session"; } @@ -301,13 +306,13 @@ revision 2017-07-16{ } leaf tunnel-source-ip { - type address-family-type; + type inet:ip-address; description "Source IP address for the static VxLAN tunnel"; } leaf tunnel-destination-ip { - type address-family-type; + type inet:ip-address; description "Destination IP address for the static VxLAN tunnel"; } @@ -322,6 +327,7 @@ revision 2017-07-16{ description "VxLAN ID list for the VTEP."; } + description "Per-af params."; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-vn-rsc@2018-02-03.yang b/experimental/ietf-extracted-YANG-modules/ietf-vn-rsc@2018-02-03.yang new file mode 100644 index 000000000..e21b6fb3f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-vn-rsc@2018-02-03.yang @@ -0,0 +1,720 @@ +module ietf-vn-rsc { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-vn-rsc"; + prefix vnrsc; + + import ietf-inet-types { + prefix inet; + } + import ietf-l3vpn-svc { + prefix l3vpn-svc; + } + import ietf-interfaces{ + prefix if; + } + + organization + "IETF OPSAWG Working Group."; + contact + "WG List: foo@ietf.org + Editor: Qin Wu + Editor: Zitao Wang "; + + description + "The YANG module defines a generic service configuration + model for Layer VN services common across all of the + vendor implementations."; + +revision 2018-02-03{ +description +"Initial revision"; +reference +"A YANG Data Model for VN Service Delivery."; +} +/* Features */ + +/* Typedefs */ +typedef svc-id { + type string; + description + "Type definition for servicer identifier"; +} + typedef address-family { + type enumeration { + enum ipv4 { + description + "IPv4 address family."; + } + enum ipv6 { + description + "IPv6 address family."; + } + } + description + "Defines a type for the address family."; + } + /* + +/* Identities */ + identity vn-type { + description + "Base identity for VN type"; + } + identity l2vpn { + base vn-type; + description + "Identity for Layer 2 vpn"; + } + identity l3vpn { + base vn-type; + description + "Identity for Layer 3 vpn"; + } + identity evpn { + base l2vpn; + description + "Identity for evpn"; + } + identity vpls { + base l2vpn; + description + "Identity for vpls"; + } + identity vpw { + base l2vpn; + description + "Identity for vpw"; + } + identity vpn-topology { + description + "Base identity for VPN topology."; + } + identity any-to-any { + base vpn-topology; + description + "Identity for any-to-any VPN topology."; + } + identity hub-spoke { + base vpn-topology; + description + + "Identity for Hub-and-Spoke VPN topology."; + } + identity hub-spoke-disjoint { + base vpn-topology; + description + "Identity for Hub-and-Spoke VPN topology + where Hubs cannot communicate with each other."; + } + + identity objective-function{ + description + "Identity for objective function"; + } + + identity metric-type{ + description + "Identity for metric type"; + } + + identity hop-type{ + description + "Identity for hop-type"; + } + identity loose{ + base hop-type; + description + "loose hop in an explicit path"; + } + identity strict{ + base hop-type; + description + "strict hop in an explicit path"; + } +/* Grouping */ +grouping vn-service-list { + list vn-service { + key "vn-id"; + leaf vn-id { + type svc-id; + description + "VN id"; + } + leaf customer-name { + type string; + description + "Customer name"; + } + leaf service-topology { + type identityref { + base vpn-topology; + } + default any-to-any; + description + "VPN service topology."; + } + container site-network-accesses{ + list site-network-access{ + key "site-network-access-id"; + leaf site-network-access-id{ + type svc-id; + description + "Site network access identifier"; + } + description + "List for site-network access"; + } + description + "Container for site network accesses"; + } + + description + "List for vn service"; + } + description + "Grouping for vn service list"; +} +grouping vn-services-grouping{ + container vn-services{ + uses vn-service-list; + description + "Container for virtual network service"; + } + description + "Grouping for vn services"; +} + +grouping interfaces-grouping{ + container interfaces{ + leaf interface{ + type if:interface-ref; + description + "Base interface"; + } + leaf-list sub-interfaces{ + type if:interface-ref; + description + "Sub interfaces"; + } + description + "Container for interfaces"; + } + description + "Grouping for interfaces"; +} + +grouping cpe-device-list{ + list cpe-device{ + key "device-id"; + leaf device-id { + type svc-id; + description + "Device identifier"; + } + leaf address-family{ + type address-family; + description + "Address family used for management. If address-family + is specified, the address may or may not be specified + (by the customer)."; + } + leaf address{ + type inet:ip-address; + description + "IP address"; + } + uses interfaces-grouping; + description + "List for devices"; + } + description + "Grouping for cpe device list"; + +} +grouping cpe-devices-grouping{ + container cpe-devices{ + uses cpe-device-list; + description + "Container for cpe devices"; + } + description + "grouping for cpe-devices-grouping"; +} + +grouping bandwidth-grouping { + leaf svc-input-bandwidth{ + type uint32; + description + "Service input bandwidth"; + } + leaf svc-output-bandwidth{ + type uint32; + description + "Service output bandwidth"; + } + description + "Grouping for bandwidth"; +} + +grouping attachment-point-grouping{ + container attachment-point{ + leaf pe-device-id { + type svc-id; + description + "PE Device identifier"; + } + leaf address-family{ + type address-family; + description + "Address family used for management. If address-family + is specified, the address may or may not be specified + (by the customer)."; + } + leaf address{ + type inet:ip-address; + description + "IP address"; + } + uses interfaces-grouping; + description + "Container for attachment point"; + } + description + "Grouping for attachment points"; +} + +grouping vn-attachment-list{ + list vn-attachment{ + key "vn-id"; + leaf vn-id{ + type svc-id; + description + "Virtual network identifier"; + } + leaf vn-type{ + type identityref{ + base vn-type; + } + description + "VN type"; + } + uses attachment-point-grouping; + description + "List for VN attachments"; + } + description + "Grouping for VN attachment list"; +} + +grouping vn-attachments-grouping{ + container vn-attachments{ + uses vn-attachment-list; + description + "Container for VN attachments"; + } + description + "Grouping for VN attachments"; +} + +grouping site-network-access-list{ + list site-network-access{ + key "site-network-access-id"; + leaf site-network-access-id{ + type leafref{ + path "/vn-svc/vn-services/vn-service" + +"/site-network-accesses/site-network-access" + +"/site-network-access-id"; + } + description + "Site network access identifier"; + } + leaf device-id { + type leafref{ + path "/vn-svc/sites/site/cpe-devices" + +"/cpe-device/device-id"; + } + description + "Device id"; + } + uses l3vpn-svc:access-diversity; + container service { + uses bandwidth-grouping; + leaf svc-mtu { + type uint16; + description + "Service-mtu"; + } + uses l3vpn-svc:site-service-qos-profile; + description + "Container for service"; + } + uses vn-attachments-grouping; + description + "List for site-network access"; + + } + description + "Grouping for site-network access list"; +} + +grouping site-network-accesses-grouping{ + container site-network-accesses{ + uses site-network-access-list; + description + "Container for site network accesses"; + } + description + "Grouping for site network accesses"; +} + +grouping site-list-grouping{ + list site { + key "site-id"; + leaf site-id { + type svc-id; + description + "Site identifier"; + } + uses cpe-devices-grouping; + container service { + uses l3vpn-svc:site-service-qos-profile; + description + "Site service"; + } + uses site-network-accesses-grouping; + description + "List for sites"; + } + description + "Grouping for site list"; +} + +grouping sites-grouping { + container sites{ + uses site-list-grouping; + description + "Container for sites"; + } + description + "Grouping for sites"; +} + +grouping src-grouping{ + container src{ + leaf src-address{ + type leafref { + path "/vn-svc/sites/site/site-id"; + } + description + "Leaf list for source address"; + } + leaf site-network-access-id{ + type leafref { + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/site-network-access-id"; + } + description + "Leaf list for site-network-access id"; + } + description + "Container for source id"; + } + description + "Grouping for source site"; +} + +grouping dst-grouping{ + container dst{ + leaf dst-address{ + type leafref { + path "/vn-svc/sites/site/site-id"; + } + description + "Leaf list for source address"; + } + leaf site-network-access-id{ + type leafref { + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/site-network-access-id"; + } + description + "Leaf list for site-network-access id"; + } + description + "Container for destination id"; + } + description + "Grouping for source site"; +} + +grouping objective-function-group{ + leaf objective-function { + type identityref{ + base objective-function; + } + description + "operational state of the objective function"; + } + description + "Grouping for objective functions"; +} + +grouping path-element-list{ + list path-element{ + key "path-element-id"; + leaf path-element-id{ + type leafref{ + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/vn-attachments/vn-attachment"+ + "/attachment-point/pe-device-id"; + } + description + "Path element identifier"; + } + leaf address{ + type leafref{ + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/vn-attachments/vn-attachment"+ + "/attachment-point/address"; + } + description + "Path element address"; + } + description + "List for path elements"; + } + description + "Grouping for path elements"; +} + +grouping constraint-grouping{ + container constraint{ + config false; + uses path-element-list; + description + "Container for constraint"; + } + description + "Grouping for constraint"; +} + +grouping metric-grouping{ + list metric { + key metric-type; + leaf metric-type { + type identityref{ + base metric-type; + } + description + "Metric type"; + } + leaf metric-value { + type uint32; + description + "Metric value"; + } + description + "List for metric"; + } + description + "Grouping for metric"; +} + +grouping path-list{ + list path-element{ + key "path-element-id"; + leaf path-element-id{ + type leafref{ + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/vn-attachments/vn-attachment"+ + "/attachment-point/pe-device-id"; + } + description + "Path element identifier"; + } + leaf index{ + type uint32; + description + "Index"; + } + leaf address{ + type leafref{ + path "/vn-svc/sites/site/site-network-accesses"+ + "/site-network-access/vn-attachments/vn-attachment"+ + "/attachment-point/address"; + } + description + "Path element address"; + } + leaf hop-type{ + type identityref { + base hop-type; + } + description + "Hop type"; + } + description + "List for path elements"; + } + description + "Grouping for path list"; +} + +grouping path-grouping{ + container path{ + uses path-list; + description + "Container for path"; + } + description + "Grouping for path"; +} +grouping access-grouping{ + list source-access{ + key "access-id"; + leaf access-id { + type leafref{ + path "/vn-svc/sites/site/site-network-accesses" + +"/site-network-access/site-network-access-id"; + } + description + "Access id"; + } + list destination-access{ + key "access-id"; + leaf access-id { + type leafref{ + path "/vn-svc/sites/site/site-network-accesses" + +"/site-network-access/site-network-access-id"; + } + description + "Access id"; + } + description + "List for destination access id"; + } + description + "List for source access id"; + } + description + "Grouping for access"; +} +/* .....................................*/ + +container vn-svc{ + uses vn-services-grouping; + uses sites-grouping; + description + "Container for vn service"; +} + +rpc vn-compute{ + description + "RPC for VN compute"; + input { + list vn-member-list { + key "vn-member-id"; + leaf vn-member-id{ + type leafref{ + path "/vn-svc/vn-services/vn-service/vn-id"; + } + description + "VN member identifier"; + } + uses src-grouping; + uses dst-grouping; + uses constraint-grouping; + uses objective-function-group; + uses metric-grouping; + description + "List for vn member"; + } + + } + output{ + list vn-member-list { + key "vn-member-id"; + leaf vn-member-id{ + type uint32; + description + "VN member identifier"; + } + uses src-grouping; + uses dst-grouping; + uses metric-grouping; + uses path-grouping; + description + "List for vn member"; + } + } +} + +rpc vn-stitch{ + description + "RPC for VN compute"; + input { + list vn-list { + key "vn-id"; + leaf vn-id{ + type leafref{ + path "/vn-svc/vn-services/vn-service/vn-id"; + } + description + "VN identifier"; + } + uses access-grouping; + uses objective-function-group; + uses metric-grouping; + description + "List for vn"; + } + + } + output{ + list vn-access-list { + key "index"; + leaf index{ + type uint32; + description + "Index for VN access"; + } + leaf source-access { + type leafref{ + path "/vn-svc/sites/site/site-network-accesses" + +"/site-network-access/site-network-access-id"; + } + description + "Source Access ID"; + } + leaf destination-access { + type leafref{ + path "/vn-svc/sites/site/site-network-accesses" + +"/site-network-access/site-network-access-id"; + } + description + "Destination Access ID"; + } + list multi-domain-network-access-list { + key "domain-id network-access-id"; + leaf domain-id { + type string; + description + "Domain ID"; + } + leaf network-access-id { + type leafref{ + path "/vn-svc/sites/site/site-network-accesses" + +"/site-network-access/site-network-access-id"; + } + description + "Network access ID"; + } + description + "List for multiple domain network access"; + } + description + "List for vn access"; + } + } +} +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2018-02-14.yang b/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2018-02-14.yang index 3f20c24b7..7a9892e77 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2018-02-14.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-voucher-request@2018-02-14.yang @@ -14,9 +14,10 @@ module ietf-voucher-request { import ietf-voucher { prefix v; - description "This module defines the format for a voucher, which is produced by - a pledge's manufacturer or delegate (MASA) to securely assign a - pledge to an 'owner', so that the pledge may establish a secure + description "This module defines the format for a voucher, + which is produced by a pledge's manufacturer or + delegate (MASA) to securely assign a pledge to + an 'owner', so that the pledge may establish a secure conn ection to the owner's network infrastructure"; reference "RFC YYYY: Voucher Profile for Bootstrapping Protocols"; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2017-10-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2018-02-27.yang similarity index 96% rename from experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2017-10-09.yang rename to experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2018-02-27.yang index 6aa18d2b9..ae5d3f92b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2017-10-09.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-wson-topology@2018-02-27.yang @@ -41,7 +41,7 @@ module ietf-wson-topology { for RWA WSON. - Copyright (c) 2016 IETF Trust and the persons identified + Copyright (c) 2017 IETF Trust and the persons identified as authors of the code. All rights reserved. @@ -55,9 +55,9 @@ Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - revision 2017-10-09 { + revision 2018-02-27 { description - "version 8."; + "version 10."; reference "RFC XXX: A Yang Data Model for WSON Optical @@ -261,7 +261,6 @@ tranponder) uses wson-node-attributes; } - //REMOVING /* augment "/nd:networks/nd:network/nd:node/tet:te/tet:state" diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-02-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-03-05.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-02-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-03-05.yang index 75ae06900..35a89c61d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-02-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-data-ext@2018-03-05.yang @@ -12,6 +12,7 @@ module ietf-yang-data-ext { Author: Andy Bierman + Author: Martin Bjorklund @@ -32,10 +33,11 @@ module ietf-yang-data-ext { Relating to IETF Documents (http://trustee.ietf.org/license-info)."; - revision 2018-02-19 { + revision 2018-03-05 { description "Initial revision."; reference + // RFC Ed.: replace XXXX with RFC number and remove this note "RFC XXXX: YANG Data Extensions."; } @@ -102,7 +104,6 @@ module ietf-yang-data-ext { The following data-def-stmt sub-statements are constrained when used within a yang-data-resource extension statement. - - The list-stmt is not required to have a key-stmt defined. - The if-feature-stmt is ignored if present. - The config-stmt is ignored if present. diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-library@2018-02-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-library@2018-02-21.yang new file mode 100644 index 000000000..f691ee045 --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-library@2018-02-21.yang @@ -0,0 +1,569 @@ +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; + // RFC Ed.: update the reference below with the actual RFC number + reference "RFC XXXX: Network Management Datastore Architecture."; + } + + organization + "IETF NETCONF (Network Configuration) Working Group"; + + contact + "WG Web: + WG List: + + Author: Andy Bierman + + + Author: Martin Bjorklund + + + Author: Juergen Schoenwaelder + + + Author: Kent Watsen + + + Author: Rob Wilton + "; + + description + "This module provides information about the YANG modules, + datastores, and datastore schemas used by a network + management server. + + 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 + (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."; + + // RFC Ed.: update the date below with the date of RFC publication + // and remove this note. + // RFC Ed.: replace XXXX with actual RFC number and remove this + // note. + revision 2018-02-21 { + description + "Added support for multiple datastores according to the + Network Management Datastore Architecture (NMDA)."; + reference + "RFC XXXX: 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 location leaf list parameter for 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 implementation-parameters { + description + "Parameters for describing the implementation of a module."; + + leaf-list feature { + type yang:yang-identifier; + description + "List of 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 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 RFC 7950 section 5.6.5, 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 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 datstore 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 checksum { + type string; + mandatory true; + description + "A server-generated checksum 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/checksum', has + changed."; + } + } + + /* + * Notifications + */ + + notification yang-library-update { + description + "Generated when any YANG library information on the + server has changed."; + + leaf checksum { + type leafref { + path "/yanglib:yang-library/yanglib:checksum"; + } + mandatory true; + description + "Contains the YANG library checksum 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 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."; + } + } + +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2017-10-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2018-03-05.yang similarity index 53% rename from experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2017-10-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2018-03-05.yang index b0b4bdc46..1c983e419 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2017-10-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-bootstrap-server@2018-03-05.yang @@ -13,46 +13,45 @@ module ietf-zerotouch-bootstrap-server { Author: Kent Watsen "; description - "This module defines an interface for bootstrap servers, as - defined by RFC XXXX: Zero Touch Provisioning for NETCONF or - RESTCONF based Management. + "This module defines an interface for bootstrap servers, as + defined by RFC XXXX: Zero Touch Provisioning for Networking + Devices. - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', - 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', - and 'OPTIONAL' in the module text are to be interpreted as - described in RFC 2119. + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', + 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', + and 'OPTIONAL' in the module text are to be interpreted as + described in RFC 2119. - Copyright (c) 2017 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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 (http://trustee.ietf.org/license-info) + 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."; + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; - revision 2017-10-19 { + revision 2018-03-05 { description "Initial version"; reference - "RFC XXXX: Zero Touch Provisioning for NETCONF or RESTCONF based - Management"; + "RFC XXXX: Zero Touch Provisioning for Networking Devices"; } // typedefs - typedef pkcs7 { + typedef cms { type binary; description - "A PKCS #7 SignedData structure, as specified by Section 9.1 - in RFC 2315, encoded using ASN.1 distinguished encoding rules - (DER), as specified in ITU-T X.690."; + "A CMS structure, as specified in RFC 5652, encoded using + ASN.1 distinguished encoding rules (DER), as specified in + ITU-T X.690."; reference - "RFC 2315: - PKCS #7: Cryptographic Message Syntax Version 1.5. + "RFC 5652: + Cryptographic Message Syntax (CMS) ITU-T X.690: Information technology - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), @@ -64,7 +63,7 @@ module ietf-zerotouch-bootstrap-server { rpc get-bootstrapping-data { description - "This RPC enables a device, as identified by its RESTCONF + "This RPC enables a device, as identified by the RESTCONF username, to obtain bootstrapping data that has been made available for it."; input { @@ -72,12 +71,26 @@ module ietf-zerotouch-bootstrap-server { type empty; description "This optional input parameter enables a device to - communicate to the bootstrap server that it is unable - to authenticate the bootstrap server's TLS certificate. - In such circumstances, the device likely did not send - any of the other input parameters. The bootstrap server - needs to return either unsigned redirect information or - signed data."; + communicate to the bootstrap server that it is unable to + authenticate the bootstrap server's TLS certificate. In + such circumstances, the device likely does not send any + of the other input parameters, except for the 'nonce' + parameter. Upon receiving this input parameter, the + bootstrap server should only return unsigned redirect + information or signed data of any type."; + } + leaf hw-model { + type string; + description + "This optional input parameter enables a device to + communicate to the bootstrap server its vendor specific + hardware model number. This parameter may be needed, + for instance, when a device's IDevID certificate does + not include the 'hardwareModelName' value in its + subjectAltName field, as is allowed by 802.1AR-2009."; + reference + "IEEE 802.1AR-2009: IEEE Standard for Local and + metropolitan area networks - Secure Device Identity"; } leaf os-name { type string; @@ -85,58 +98,30 @@ module ietf-zerotouch-bootstrap-server { "This optional input parameter enables a device to communicate to the bootstrap server the name of its operating system. This parameter may be useful if - the device, as identified by its IDevID certificate, - to run more than one type of operating system (e.g., + the device, as identified by its serial number, can + run more than one type of operating system (e.g., on a white-box system."; } leaf os-version { type string; description "This optional input parameter enables a device to - communicate to the bootstrap server the version of - its operating system. This parameter may be useful - to a server that wants to return a response optimized - for the device, negating, for instance, the need for - a potentially expensive boot-image update."; - } - leaf remote-id { - type string; - must "../circuit-id"; - description - "This optional input parameter enables a device to - communicate to the bootstrap server the 'remote-id' - value it learned from a DHCP server via Option 82, - as described in Section 2.0 or RFC 3046. - - This information, along with the circuit-id, enables - the bootstrap server to return a deployment-specific - response independent of the device's IDevID identity."; - reference - "RFC 3046: DHCP Relay Agent Information Option"; - } - leaf circuit-id { - type string; - must "../remote-id"; - description - "This optional input parameter enables a device to - communicate to the bootstrap server the 'circuit-id' - value it learned from a DHCP server via Option 82, - as described in Section 2.0 or RFC 3046. - - This information, along with the remote-id, enables - the bootstrap server to return a deployment-specific - response independent of the device's IDevID identity."; - reference - "RFC 3046: DHCP Relay Agent Information Option"; + communicate to the bootstrap server the version of its + operating system. This parameter may be used by a + bootstrap server to return an operating system specific + response to the device, thus negating the need for a + potentially expensive boot-image update."; } leaf nonce { - type string; + type binary { + length "8..32"; + } description "This optional input parameter enables a device to communicate to the bootstrap server a nonce value. This may be especially useful for devices lacking - an accurate clock, as then the bootstrap server can - then dynamically obtain from the manufacturer a + an accurate clock, as then the bootstrap server + can dynamically obtain from the manufacturer a voucher with the nonce value in it, as described in I-D.ietf-anima-voucher."; reference @@ -144,94 +129,65 @@ module ietf-zerotouch-bootstrap-server { } } output { - container bootstrapping-data { + leaf zerotouch-information { + type cms; + mandatory true; description - "Top-level node for the bootstrapping data."; - leaf zerotouch-information { - type pkcs7; - mandatory true; - description - "A 'zerotouch-information' artifact, as described in - Section 4.1 of RFC XXXX. In order to be processed by a - device, when conveyed over an untrusted transport, the - PKCS#7 SignedData structure MUST contain a 'signerInfo' - structure, described in Section 9.1 of RFC 2315, - containing a signature generated using the private key - associated with the 'owner-certificate'."; - reference - "RFC XXXX: Zero Touch Provisioning for NETCONF or - RESTCONF based Management. - RFC 2315: - PKCS #7: Cryptographic Message Syntax Version 1.5"; - } - leaf owner-certificate { - type pkcs7; - must '../ownership-voucher' { - description - "An ownership voucher must be present whenever an owner - certificate is presented."; - } + "A zero touch information artifact, as described in + Section 3.1 of RFC XXXX."; + reference + "RFC XXXX: + Zero Touch Provisioning for Networking Devices"; + } + leaf owner-certificate { + type cms; + must '../ownership-voucher' { description - "This PKCS#7 structure MUST contain the owner certificate - and all intermediate certificates leading up to, and - optionally including, the trust anchor certificate - specified in the ownership voucher. Additionally, if - needed by the device, this structure MAY also contain - suitably fresh CRL and/or OCSP Responses with which to - verify the revocation status of the certificates. - - X.509 certificates and CRLs are described in RFC 5280. - OCSP Responses are described in RFC 6960."; - reference - "RFC 2315: - PKCS #7: Cryptographic Message Syntax Version 1.5. - RFC 5280: - Internet X.509 Public Key Infrastructure Certificate - and Certificate Revocation List (CRL) Profile. - RFC 6960: - X.509 Internet Public Key Infrastructure Online - Certificate Status Protocol - OCSP. - ITU-T X.690: - Information technology - ASN.1 encoding rules: - Specification of Basic Encoding Rules (BER), - Canonical Encoding Rules (CER) and Distinguished - Encoding Rules (DER)."; + "An ownership voucher must be present whenever an owner + certificate is presented."; } - leaf ownership-voucher { - type pkcs7; - must '../owner-certificate' { - description - "An owner certificate must be present whenever an - ownership voucher is presented."; - } + description + "An owner certificate artifact, as described in Section + 3.2 of RFC XXXX. This leaf is optional because it is + only needed when the zero touch information artifact + is signed."; + reference + "RFC XXXX: + Zero Touch Provisioning for Networking Devices"; + } + leaf ownership-voucher { + type cms; + must '../owner-certificate' { description - "A 'voucher' artifact, as described in Section 5 of - I-D.ietf-anima-voucher. The voucher informs the device - who its owner is. The voucher encodes the device's - serial number, so that the device can ensure the - voucher applies to it. The voucher is signed by the - device's manufacturer."; - reference - "I-D.ietf-anima-voucher: - Voucher and Voucher Revocation Profiles for - Bootstrapping Protocols"; + "An owner certificate must be present whenever an + ownership voucher is presented."; } + description + "An ownership voucher artifact, as described by Section + 3.3 of RFC XXXX. This leaf is optional because it is + only needed when the zero touch information artifact + is signed."; + reference + "RFC XXXX: + Zero Touch Provisioning for Networking Devices"; } } } rpc report-progress { description - "This RPC enables a device, as identified by its RESTCONF + "This RPC enables a device, as identified by the RESTCONF username, to report its bootstrapping progress to the - bootstrap server."; + bootstrap server. This RPC is expected to be used when + the device obtains onboarding-information from a trusted + bootstap server."; input { leaf progress-type { type enumeration { enum "bootstrap-initiated" { description "Indicates that the device just used the - 'get-bootstrapping-data' RPC. The 'message' field + 'get-bootstrapping-data' RPC. The 'message' node below MAY contain any additional information that the manufacturer thinks might be useful."; } @@ -239,29 +195,28 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device had a non-fatal error when parsing the response from the bootstrap server. The - 'message' field below SHOULD indicate the specific + 'message' node below SHOULD indicate the specific warning that occurred."; } enum "parsing-error" { description "Indicates that the device encountered a fatal error when parsing the response from the bootstrap server. - For instance, this could be due to malformed - encoding, the device expecting signed data when - only unsigned data is provided, because the - ownership voucher didn't include the device's - unique identifier, or because the signature didn't - match. The 'message' field below SHOULD indicate - the specific error. This progress type also indicates - that the device has abandoned trying to bootstrap - off this bootstrap server."; + For instance, this could be due to malformed encoding, + the device expecting signed data when only unsigned + data is provided, the ownership voucher not listing + the device's serial number, or because the signature + didn't match. The 'message' node below SHOULD + indicate the specific error. This progress type + also indicates that the device has abandoned trying + to bootstrap off this bootstrap server."; } enum "boot-image-warning" { description "Indicates that the device encountered a non-fatal error condition when trying to install a boot-image. A possible reason might include a need to reformat a - partition causing loss of data. The 'message' field + partition causing loss of data. The 'message' node below SHOULD indicate any warning messages that were generated."; } @@ -271,7 +226,7 @@ module ietf-zerotouch-bootstrap-server { trying to install a boot-image, which could be for reasons such as a file server being unreachable, file not found, signature mismatch, etc. The - 'message' field SHOULD indicate the specific error + 'message' node SHOULD indicate the specific error that occurred. This progress type also indicates that the device has abandoned trying to bootstrap off this bootstrap server."; @@ -280,7 +235,7 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device obtained a greater than zero exit status code from the script when it was - executed. The 'message' field below SHOULD indicate + executed. The 'message' node below SHOULD indicate both the resulting exit status code, as well as capture any stdout/stderr messages the script may have produced."; @@ -289,7 +244,7 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device obtained a less than zero exit status code from the script when it was - executed. The 'message' field below SHOULD indicate + executed. The 'message' node below SHOULD indicate both the resulting exit status code, as well as capture any stdout/stderr messages the script may have produced. This progress type also indicates @@ -300,14 +255,14 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device obtained warning messages when it committed the initial configuration. The - 'message' field below SHOULD indicate any warning + 'message' node below SHOULD indicate any warning messages that were generated."; } enum "config-error" { description "Indicates that the device obtained error messages when it committed the initial configuration. The - 'message' field below SHOULD indicate the error + 'message' node below SHOULD indicate the error messages that were generated. This progress type also indicates that the device has abandoned trying to bootstrap off this bootstrap server."; @@ -316,7 +271,7 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device obtained a greater than zero exit status code from the script when it was - executed. The 'message' field below SHOULD indicate + executed. The 'message' node below SHOULD indicate both the resulting exit status code, as well as capture any stdout/stderr messages the script may have produced."; @@ -325,7 +280,7 @@ module ietf-zerotouch-bootstrap-server { description "Indicates that the device obtained a less than zero exit status code from the script when it was - executed. The 'message' field below SHOULD indicate + executed. The 'message' node below SHOULD indicate both the resulting exit status code, as well as capture any stdout/stderr messages the script may have produced. This progress type also indicates @@ -334,13 +289,13 @@ module ietf-zerotouch-bootstrap-server { } enum "bootstrap-complete" { description - "Indicates that the device successfully processed all - 'onboarding-information' provided, and that it is ready - to be managed. The 'message' field below MAY contain - any additional information that the manufacturer thinks - might be useful. After sending this progress type, - the device is not expected to access the bootstrap - server again."; + "Indicates that the device successfully processed + all 'onboarding-information' provided, and that it + is ready to be managed. The 'message' node below + MAY contain any additional information that the + manufacturer thinks might be useful. After sending + this progress type, the device is not expected to + access the bootstrap server again."; } enum "informational" { description @@ -348,7 +303,7 @@ module ietf-zerotouch-bootstrap-server { by any of the other progress types. For instance, a message indicating that the device is about to reboot after having installed a boot-image could - be provided. The 'message' field below SHOULD + be provided. The 'message' node below SHOULD contain information that the manufacturer thinks might be useful."; } @@ -379,11 +334,11 @@ module ietf-zerotouch-bootstrap-server { type enumeration { enum "ssh-dss" { description - "ssh-dss"; + "The SSH host key is a ssh-dss based key."; } enum "ssh-rsa" { description - "ssh-rsa"; + "The SSH host key is a ssh-rsa based key."; } } mandatory true; @@ -408,7 +363,9 @@ module ietf-zerotouch-bootstrap-server { "A list of trust anchor certificates an NMS may use to authenticate subsequent certificate-based connections to this device (e.g., restconf-tls, netconf-tls, or - even netconf-ssh with X.509 support from RFC 6187)."; + even netconf-ssh with X.509 support from RFC 6187). + In practice, trust anchors for IDevID certificates do + not need to be conveyed using this mechanism."; reference "RFC 6187: X.509v3 Certificates for Secure Shell Authentication."; @@ -416,7 +373,7 @@ module ietf-zerotouch-bootstrap-server { description "A trust anchor."; leaf certificate { - type pkcs7; + type cms; mandatory true; description "An X.509 v3 certificate structure, as specified diff --git a/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2017-10-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2018-03-05.yang similarity index 52% rename from experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2017-10-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2018-03-05.yang index 9204be508..d91461651 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2017-10-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-zerotouch-information@2018-03-05.yang @@ -11,12 +11,9 @@ module ietf-zerotouch-information { prefix inet; reference "RFC 6991: Common YANG Data Types"; } - import ietf-restconf { - prefix rc; - description - "This import statement is only present to access - the yang-data extension defined in RFC 8040."; - reference "RFC 8040: RESTCONF Protocol"; + import ietf-yang-data-ext { + prefix yd; + reference "I-D.ietf-netmod-yang-data-ext: YANG Data Extensions"; } organization @@ -28,38 +25,39 @@ module ietf-zerotouch-information { Author: Kent Watsen "; description - "This module defines the data model for the Zero Touch Information - artifact defined by RFC XXXX: Zero Touch Provisioning for NETCONF - or RESTCONF based Management. + "This module defines the data model for the Zero Touch + Information artifact defined in RFC XXXX: Zero Touch + Provisioning for Networking Devices. - The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', - 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', - and 'OPTIONAL' in the module text are to be interpreted as - described in RFC 2119. + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', + 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'MAY', + and 'OPTIONAL' in the module text are to be interpreted as + described in RFC 2119. - Copyright (c) 2017 IETF Trust and the persons identified as - authors of the code. All rights reserved. + 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 (http://trustee.ietf.org/license-info) + 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."; + This version of this YANG module is part of RFC XXXX; see the + RFC itself for full legal notices."; - revision 2017-10-19 { + revision 2018-03-05 { description "Initial version"; reference - "RFC XXXX: Zero Touch Provisioning for NETCONF or RESTCONF based - Management"; + "RFC XXXX: Zero Touch Provisioning for Networking Devices"; } + // identities + identity hash-algorithm { description - "A base identity for hash algorith verification"; + "A base identity for hash algorithm verification"; } identity sha-256 { @@ -68,7 +66,26 @@ module ietf-zerotouch-information { reference "RFC 6234: US Secure Hash Algorithms."; } - rc:yang-data "zerotouch-information" { + // typedefs + + typedef cms { + type binary; + description + "A CMS structure, as specified in RFC 5652, encoded using + ASN.1 distinguished encoding rules (DER), as specified in + ITU-T X.690."; + reference + "RFC 5652: + Cryptographic Message Syntax (CMS) + ITU-T X.690: + Information technology - ASN.1 encoding rules: + Specification of Basic Encoding Rules (BER), + Canonical Encoding Rules (CER) and Distinguished + Encoding Rules (DER)."; + } + // yang-data + + yd:yang-data "zerotouch-information" { choice information-type { mandatory true; description @@ -80,8 +97,7 @@ module ietf-zerotouch-information { RFC XXXX. Its purpose is to redirect a device to another bootstrap server."; reference - "RFC XXXX: Zero Touch Provisioning for NETCONF or RESTCONF - based Management"; + "RFC XXXX: Zero Touch Provisioning for Networking Devices"; list bootstrap-server { key "address"; min-elements 1; @@ -91,40 +107,39 @@ module ietf-zerotouch-information { type inet:host; mandatory true; description - "The IP address or hostname of the bootstrap server the - device should redirect to."; + "The IP address or hostname of the bootstrap server the + device should redirect to."; } leaf port { type inet:port-number; default "443"; description - "The port number the bootstrap server listens on. If no - port is specified, the IANA-assigned port for 'https' - (443) is used."; + "The port number the bootstrap server listens on. If no + port is specified, the IANA-assigned port for 'https' + (443) is used."; } leaf trust-anchor { - type binary; + type cms; description - "An X.509 v3 certificate structure as specified by RFC - 5280, Section 4, encoded using ASN.1 distinguished - encoding rules (DER), as specified in ITU-T X.690. A - certificate that the device can use as the trust anchor - to authenticate the bootstrap server the device is - being redirected to. If not specified, the device may - establish a provisional connection to the bootstrap - server, as described in RFC XXXX."; + "A CMS structure that MUST contain the chain of + X.509 certificates needed to authenticate the TLS + certificate presented by this bootstrap server. + In all cases, the chain MUST include a self-signed + root certificate. In the case where the root + certificate is itself the issuer of the bootstrap + server's TLS certificate, only one X.509 certificate + is present. If needed by the device, this CMS + structure MAY also contain suitably fresh revocation + objects with which the device can verify the + revocation status of the certificates. + + This CMS encodes the degenerate form of the SignedData + structure that is commonly used to disseminate X.509 + certificates and revocation objects."; reference "RFC 5280: Internet X.509 Public Key Infrastructure Certificate - and Certificate Revocation List (CRL) Profile. - ITU-T X.690: - Information technology - ASN.1 encoding rules: - Specification of Basic Encoding Rules (BER), - Canonical Encoding Rules (CER) and Distinguished - Encoding Rules (DER). - RFC XXXX: - Zero Touch Provisioning for NETCONF or RESTCONF - based Management."; + and Certificate Revocation List (CRL) Profile."; } } } @@ -134,15 +149,14 @@ module ietf-zerotouch-information { RFC XXXX. Its purpose is to provide the device everything it needs to bootstrap itself."; reference - "RFC XXXX: Zero Touch Provisioning for NETCONF or RESTCONF - based Management"; + "RFC XXXX: Zero Touch Provisioning for Networking Devices"; container boot-image { description "Specifies criteria for the boot image the device MUST - be running."; + be running, as well as information enabling the device + to install the required boot image."; leaf os-name { type string; - mandatory true; description "The name of the operating system software the device MUST be running in order to not require a software @@ -150,11 +164,10 @@ module ietf-zerotouch-information { } leaf os-version { type string; - mandatory true; description - "The version of the operating system software the device - MUST be running in order to not require a software - image upgrade (ex. 17.3R2.1)."; + "The version of the operating system software the + device MUST be running in order to not require a + software image upgrade (ex. 17.3R2.1)."; } leaf-list download-uri { type inet:uri; @@ -166,7 +179,7 @@ module ietf-zerotouch-information { ordered-by user; description "An ordered list of URIs to where the necessary - boot-image file MAY be obtained. Deployments must + boot-image file may be obtained. Deployments must know through out-of-band means which URI schemes (http, ftp, etc.) the bootstrapping device supports. If a secure scheme (e.g., https) is provided, a @@ -174,6 +187,11 @@ module ietf-zerotouch-information { remote server to obtain the boot-image."; } list image-verification { + must '../download-uri' { + description + "Download URIs must be provided if an image is to + be verified."; + } key hash-algorithm; description "A list of hash values that a device can use to verify @@ -182,15 +200,16 @@ module ietf-zerotouch-information { type identityref { base "hash-algorithm"; } - mandatory true; description "Identifies the hash algorithm used."; } leaf hash-value { type yang:hex-string; + mandatory true; description - "The hex-encoded value of the specified hash algorithm - over the contents of the boot image file."; + "The hex-encoded value of the specified hash + algorithm over the contents of the boot image + file."; } } } @@ -217,12 +236,15 @@ module ietf-zerotouch-information { "A script that, when present, is executed before the configuration has been processed."; } - anydata configuration { + leaf configuration { + type binary; must '../configuration-handling'; description - "Any configuration data model known to the device. It may - contain manufacturer-specific and/or standards-based data - models."; + "Any configuration known to the device. The use of + the 'binary' type enables e.g., XML-content to be + embedded into a JSON document. The exact encoding + of the content, as with the scripts, is vendor + specific."; } leaf post-configuration-script { type script; @@ -248,27 +270,32 @@ module ietf-zerotouch-information { product line, and/or model of the device. If a script is erroneously provided to a device that does not - support the execution of scripts, the device SHOULD send a - 'script-warning' progress report, but otherwise continue - processing the bootstrapping data as if the script had not - been present. + support the execution of scripts, and the device obtained the + onboarding information from a trusted bootstrap server, the + device SHOULD send either a 'pre-script-warning' or + 'post-script-warning' progress report, based on which kind + of script was presented, but otherwise continue processing + the bootstrapping data as if the script had not been present. - The script returns exit status code '0' on success and non-zero - on error, with accompanying stderr/stdout for logging purposes. - In the case of an error, the exit status code will specify what - the device should do as follows. + The script returns exit status code zero on success and + non-zero otherwise, with accompanying stderr/stdout for + logging purposes. If the exit status code is greater than zero, then the device should assume that the script had a soft error, which the script believes does not affect manageability. If the device - obtained the bootstrap information from a bootstrap server, - it SHOULD send a 'script-warning' progress report. + obtained the bootstrap information from a trusted bootstrap + server, it SHOULD either send a 'pre-script-warning' or + 'post-script-warning' progress report, based on which kind of + script was executed. If the exit status code is less than zero, the device should assume the script had a hard error, which the script believes - will affect manageability. In this case, the device SHOULD - send a 'script-error' progress report followed by a reset that - will wipe out anything the script may have done and restart - the entire bootstrapping process again."; + will affect manageability. If the device obtained the + bootstrap information from a trusted bootstrap server, it + SHOULD send a 'pre-script-error' or 'post-script-error' + progress report, based on which kind of script was executed, + followed by a reset that will wipe out any bad state left by + the script, and restart the entire bootstrapping process."; } }