diff --git a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang index 0babc0f2e..4fde0ca6a 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-altmark@2024-06-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-altmark@2025-01-08.yang @@ -34,10 +34,7 @@ module ietf-altmark { Author: wangminxue@chinamobile.com Author: giuseppe.fioccola@huawei.com Author: zhoutianran@huawei.com - Author: xiao.min2@zte.com.cn - Author: guo.jun2@zte.com.cn - Author: massimo.nilo@telecomitalia.it - Author: hanliuyan@chinamobile.com"; + Author: xiao.min2@zte.com.cn"; description "This YANG module specifies a vendor-independent data @@ -63,7 +60,7 @@ module ietf-altmark { (https://www.rfc-editor.org/info/rfcXXXX); see the RFC itself for full legal notices."; - revision 2024-06-19 { + revision 2025-01-08 { description "First revision."; reference "RFC XXXX: A YANG Data Model for Alternate-Marking"; } @@ -85,6 +82,7 @@ module ietf-altmark { /* * IDENTITIES */ + identity filter { description "Base identity to represent a filter. A filter is used to @@ -181,6 +179,7 @@ module ietf-altmark { description "It indicates the AltMark Period."; } + identity flow-mon-id { description "It indicates the FlowMonID."; @@ -373,7 +372,6 @@ module ietf-altmark { description "Type of timestamp, such as Truncated PTP or NTP."; } - list available-interface { key "if-name"; description diff --git a/experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang similarity index 94% rename from experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang rename to experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang index 03b3de53d..d1ae6042b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-arp@2024-06-30.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-arp@2025-01-02.yang @@ -25,19 +25,26 @@ module ietf-arp { "WG Web: WG List: - Author: Feng Zheng - Editor: Bo Wu - Editor: Robert Wilton - Editor: Fan Zhang - Author: Yongqing Zhu - Author: Xiaojian Ding + Editor: Bo Wu + + Editor: Robert Wilton + + Editor: Fan Zhang + + Author: Yongqing Zhu + + Author: Xiaojian Ding + "; + description "This YANG module defines Address Resolution Protocol (ARP) management, which includes static ARP configuration, dynamic ARP learning, ARP entry query, and packet statistics collection. - Copyright (c) 2024 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -50,7 +57,7 @@ module ietf-arp { This version of this YANG module is part of RFC XXXX; see the RFC itself for full legal notices."; - revision 2024-06-30 { + revision 2025-01-02 { description "Init revision"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang similarity index 99% rename from experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang rename to experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang index bbd5bc2e3..e5f2a8bc5 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2024-06-19.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-ospf-sr-mpls@2025-01-03.yang @@ -72,7 +72,7 @@ module ietf-ospf-sr-mpls { This YANG model conforms to the Network Management Datastore Architecture (NMDA) as described in RFC 8342. - Copyright (c) 2023 IETF Trust and the persons identified as + Copyright (c) 2025 IETF Trust and the persons identified as authors of the code. All rights reserved. Redistribution and use in source and binary forms, with or @@ -97,7 +97,7 @@ module ietf-ospf-sr-mpls { reference "RFC XXXX"; - revision 2024-06-19 { + revision 2025-01-03 { description "Initial revision."; reference @@ -729,8 +729,8 @@ module ietf-ospf-sr-mpls { a lower priority being more preferred."; } description - "Enable SRLG (Shared Resource Link Group) - disjoint as a TI-LFA path selection tie-breaker. + "Enable SRLG (Sharsed Resource Link Group) + disjoint as a TI-LFA path selection tie-breaker. A path providing node a disjoint path for SRLG links from the primary path will be selected over one that doesn't provide an SRLG disjoint path."; diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang index 14c84c6f5..963147938 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice-mpi@2024-07-07.yang @@ -78,7 +78,7 @@ module ietf-otn-slice-mpi { description "Latest revision of MPI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-07: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data Model for OTN Network Slicing"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang index 900fecedc..e1bc4b43d 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-otn-slice@2024-07-07.yang @@ -79,7 +79,7 @@ module ietf-otn-slice { description "Latest revision of NBI YANG model for OTN slicing."; reference - "draft-ietf-ccamp-yang-otn-slicing-07: Framework and Data + "draft-ietf-ccamp-yang-otn-slicing-08: Framework and Data Model for OTN Network Slicing"; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang index e67bcd062..dc4cf429b 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-resource-pm@2024-07-07.yang @@ -111,7 +111,7 @@ module ietf-resource-pm { } config false; description - "the type of resource, such as NE, board or port"; + "the type of resource, such as NE, board or port"; } leaf holding-time { diff --git a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang deleted file mode 100644 index 4960ded75..000000000 --- a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-05-06.yang +++ /dev/null @@ -1,1299 +0,0 @@ -module ietf-subscribed-notifications { - yang-version 1.1; - namespace - "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"; - - prefix sn; - - import ietf-inet-types { - prefix inet; - reference - "RFC 6991: Common YANG Data Types"; - } - import ietf-interfaces { - prefix if; - reference - "RFC 8343: A YANG Data Model for Interface Management"; - } - import ietf-netconf-acm { - prefix nacm; - reference - "RFC 8341: Network Configuration Access Control Model"; - } - import ietf-network-instance { - prefix ni; - reference - "RFC 8529: YANG Model for Network Instances"; - } - import ietf-restconf { - prefix rc; - reference - "RFC 8040: RESTCONF Protocol"; - } - import ietf-yang-types { - prefix yang; - reference - "RFC 6991: Common YANG Data Types"; - } - - organization "IETF NETCONF (Network Configuration) Working Group"; - contact - "WG Web: - WG List: - - Author: Alexander Clemm - - - Author: Eric Voit - - - Author: Alberto Gonzalez Prieto - - - Author: Einar Nilsen-Nygaard - - - Author: Ambika Prasad Tripathy - "; - - description - "Contains a YANG specification for subscribing to event records - and receiving matching content within notification messages. - - Copyright (c) 2018 IETF Trust and the persons identified as authors - of the code. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, is permitted pursuant to, and subject to the license - terms contained in, the Simplified BSD License set forth in Section - 4.c of the IETF Trust's Legal Provisions Relating to IETF Documents - (https://trustee.ietf.org/license-info). - - This version of this YANG module is part of RFC XXXX; see the RFC - itself for full legal notices."; - - revision 2019-05-06 { - description - "Initial version"; - reference - "RFC XXXX:Subscription to YANG Event Notifications"; - } - - /* - * FEATURES - */ - - feature configured { - description - "This feature indicates that configuration of subscriptions is - supported."; - } - - feature dscp { - description - "This feature indicates that a publisher supports the ability to - set the DiffServ Code Point (DSCP) value in outgoing packets."; - } - - feature encode-json { - description - "This feature indicates that JSON encoding of notification - messages is supported."; - } - - feature encode-xml { - description - "This feature indicates that XML encoding of notification - messages is supported."; - } - - feature interface-designation { - description - "This feature indicates a publisher supports sourcing all - receiver interactions for a configured subscription from a single - designated egress interface."; - } - - feature qos { - description - "This feature indicates a publisher supports absolute - dependencies of one subscription's traffic over another, as well - as weighted bandwidth sharing between subscriptions. Both of - these are Quality of Service (QoS) features which allow - differentiated treatment of notification messages between a - publisher and a specific receiver."; - } - - feature replay { - description - "This feature indicates that historical event record replay is - supported. With replay, it is possible for past event records to - be streamed in chronological order."; - } - - feature subtree { - description - "This feature indicates support for YANG subtree filtering."; - reference "RFC 6241, Section 6."; - } - - feature supports-vrf { - description - "This feature indicates a publisher supports VRF configuration - for configured subscriptions. VRF support for dynamic - subscriptions does not require this feature."; - reference "RFC XXXY, Section 6."; - } - - feature xpath { - description - "This feature indicates support for XPath filtering."; - reference "http://www.w3.org/TR/1999/REC-xpath-19991116"; - } - - /* - * EXTENSIONS - */ - - extension subscription-state-notification { - description - "This statement applies only to notifications. It indicates that - the notification is a subscription state change notification. - Therefore it does not participate in a regular event stream and - does not need to be specifically subscribed to in order to be - received. This statement can only occur as a substatement to the - YANG 'notification' statement. This statement is not for use - outside of this YANG module."; - } - - /* - * IDENTITIES - */ - - /* Identities for RPC and Notification errors */ - - identity delete-subscription-error { - description - "Problem found while attempting to fulfill either a - 'delete-subscription' RPC request or a 'kill-subscription' - RPC request."; - } - - identity establish-subscription-error { - description - "Problem found while attempting to fulfill an - 'establish-subscription' RPC request."; - } - - identity modify-subscription-error { - description - "Problem found while attempting to fulfill a - 'modify-subscription' RPC request."; - } - - identity subscription-suspended-reason { - description - "Problem condition communicated to a receiver as part of a - 'subscription-suspended' notification."; - } - - identity subscription-terminated-reason { - description - "Problem condition communicated to a receiver as part of a - 'subscription-terminated' notification."; - } - - identity dscp-unavailable { - base establish-subscription-error; - if-feature "dscp"; - description - "The publisher is unable mark notification messages with a - prioritization information in a way which will be respected - during network transit."; - } - - identity encoding-unsupported { - base establish-subscription-error; - description - "Unable to encode notification messages in the desired format."; - } - - identity filter-unavailable { - base subscription-terminated-reason; - description - "Referenced filter does not exist. This means a receiver is - referencing a filter which doesn't exist, or to which they do not - have access permissions."; - } - - identity filter-unsupported { - base establish-subscription-error; - base modify-subscription-error; - description - "Cannot parse syntax within the filter. This failure can be from - a syntax error, or a syntax too complex to be processed by the - publisher."; - } - - identity insufficient-resources { - base establish-subscription-error; - base modify-subscription-error; - base subscription-suspended-reason; - description - "The publisher has insufficient resources to support the - requested subscription. An example might be that allocated CPU - is too limited to generate the desired set of notification - messages."; - } - - identity no-such-subscription { - base modify-subscription-error; - base delete-subscription-error; - base subscription-terminated-reason; - description - "Referenced subscription doesn't exist. This may be as a result of - a non-existent subscription id, an id which belongs to another - subscriber, or an id for configured subscription."; - } - - identity replay-unsupported { - base establish-subscription-error; - if-feature "replay"; - description - "Replay cannot be performed for this subscription. This means the - publisher will not provide the requested historic information - from the event stream via replay to this receiver."; - } - - identity stream-unavailable { - base subscription-terminated-reason; - description - "Not a subscribable event stream. This means the referenced event - stream is not available for subscription by the receiver."; - } - - identity suspension-timeout { - base subscription-terminated-reason; - description - "Termination of previously suspended subscription. The publisher - has eliminated the subscription as it exceeded a time limit for - suspension."; - } - - identity unsupportable-volume { - base subscription-suspended-reason; - description - "The publisher does not have the network bandwidth needed to get - the volume of generated information intended for a receiver."; - } - - /* Identities for encodings */ - - identity configurable-encoding { - description - "If a transport identity derives from this identity, it means - that it supports configurable encodings. An example of a - configurable encoding might be a new identity such as - 'encode-cbor'. Such an identity could use - 'configurable-encoding' as its base. This would allow a - dynamic subscription encoded in JSON [RFC-8259] to request - notification messages be encoded via CBOR [RFC-7049]. Further - details for any specific configurable encoding would be - explored in a transport document based on this specification."; - } - - identity encoding { - description - "Base identity to represent data encodings"; - } - - identity encode-xml { - base encoding; - if-feature "encode-xml"; - description - "Encode data using XML as described in RFC 7950"; - reference - "RFC 7950 - The YANG 1.1 Data Modeling Language"; - } - - identity encode-json { - base encoding; - if-feature "encode-json"; - description - "Encode data using JSON as described in RFC 7951"; - reference - "RFC 7951 - JSON Encoding of Data Modeled with YANG"; - } - - /* Identities for transports */ - identity transport { - description - "An identity that represents the underlying mechanism for - passing notification messages."; - } - - /* - * TYPEDEFs - */ - - typedef encoding { - type identityref { - base encoding; - } - description - "Specifies a data encoding, e.g. for a data subscription."; - } - - typedef stream-filter-ref { - type leafref { - path "/sn:filters/sn:stream-filter/sn:name"; - } - description - "This type is used to reference an event stream filter."; - } - - typedef stream-ref { - type leafref { - path "/sn:streams/sn:stream/sn:name"; - } - description - "This type is used to reference a system-provided event stream."; - } - - typedef subscription-id { - type uint32; - description - "A type for subscription identifiers."; - } - - typedef transport { - type identityref { - base transport; - } - description - "Specifies transport used to send notification messages to a - receiver."; - } - - /* - * GROUPINGS - */ - - grouping stream-filter-elements { - description - "This grouping defines the base for filters applied to event - streams."; - choice filter-spec { - description - "The content filter specification for this request."; - anydata stream-subtree-filter { - if-feature "subtree"; - description - "Event stream evaluation criteria encoded in the syntax of a - subtree filter as defined in RFC 6241, Section 6. - - The subtree filter is applied to the representation of - individual, delineated event records as contained within the - event stream. - - If the subtree filter returns a non-empty node set, the - filter matches the event record, and the event record is - included in the notification message sent to the receivers."; - reference "RFC 6241, Section 6."; - } - leaf stream-xpath-filter { - if-feature "xpath"; - type yang:xpath1.0; - description - "Event stream evaluation criteria encoded in the syntax of - an XPath 1.0 expression. - - The XPath expression is evaluated on the representation of - individual, delineated event records as contained within - the event stream. - - The result of the XPath expression is converted to a - boolean value using the standard XPath 1.0 rules. If the - boolean value is 'true', the filter matches the event - record, and the event record is included in the notification - message sent to the receivers. - - The expression is evaluated in the following XPath context: - - o The set of namespace declarations is the set of prefix - and namespace pairs for all YANG modules implemented - by the server, where the prefix is the YANG module - name and the namespace is as defined by the - 'namespace' statement in the YANG module. - - If the leaf is encoded in XML, all namespace - declarations in scope on the 'stream-xpath-filter' - leaf element are added to the set of namespace - declarations. If a prefix found in the XML is - already present in the set of namespace declarations, - the namespace in the XML is used. - - o The set of variable bindings is empty. - - o The function library is the core function library, and - the XPath functions defined in section 10 in RFC 7950. - - o The context node is the root node."; - reference - "http://www.w3.org/TR/1999/REC-xpath-19991116 - RFC 7950, Section 10."; - - } - } - } - - grouping update-qos { - description - "This grouping describes Quality of Service information - concerning a subscription. This information is passed to lower - layers for transport prioritization and treatment"; - leaf dscp { - if-feature "dscp"; - type inet:dscp; - default "0"; - description - "The desired network transport priority level. This is the - priority set on notification messages encapsulating the - results of the subscription. This transport priority is - shared for all receivers of a given subscription."; - } - leaf weighting { - if-feature "qos"; - type uint8 { - range "0 .. 255"; - } - description - "Relative weighting for a subscription. Larger weights get - more resources. Allows an underlying transport layer perform - informed load balance allocations between various - subscriptions"; - reference - "RFC-7540, section 5.3.2"; - } - leaf dependency { - if-feature "qos"; - type subscription-id; - description - "Provides the 'subscription-id' of a parent subscription which - has absolute precedence should that parent have push updates - ready to egress the publisher. In other words, there should be - no streaming of objects from the current subscription if - the parent has something ready to push. - - If a dependency is asserted via configuration or via RPC, but - the referenced 'subscription-id' does not exist, the - dependency is silently discarded. If a referenced - subscription is deleted this dependency is removed."; - reference - "RFC-7540, section 5.3.1"; - } - } - - grouping subscription-policy-modifiable { - description - "This grouping describes all objects which may be changed - in a subscription."; - choice target { - mandatory true; - description - "Identifies the source of information against which a - subscription is being applied, as well as specifics on the - subset of information desired from that source."; - case stream { - choice stream-filter { - description - "An event stream filter can be applied to a subscription. - That filter will come either referenced from a global list, - or be provided within the subscription itself."; - case by-reference { - description - "Apply a filter that has been configured separately."; - leaf stream-filter-name { - type stream-filter-ref; - mandatory true; - description - "References an existing event stream filter which is to - be applied to an event stream for the subscription."; - } - } - case within-subscription { - description - "Local definition allows a filter to have the same - lifecycle as the subscription."; - uses stream-filter-elements; - } - } - } - } - leaf stop-time { - type yang:date-and-time; - description - "Identifies a time after which notification messages for a - subscription should not be sent. If 'stop-time' is not - present, the notification messages will continue until the - subscription is terminated. If 'replay-start-time' exists, - 'stop-time' must be for a subsequent time. If - 'replay-start-time' doesn't exist, 'stop-time' when established - must be for a future time."; - } - } - - grouping subscription-policy-dynamic { - description - "This grouping describes the only information concerning a - subscription which can be passed over the RPCs defined in this - model."; - uses subscription-policy-modifiable { - augment target/stream { - description - "Adds additional objects which can be modified by RPC."; - leaf stream { - type stream-ref { - require-instance false; - } - mandatory true; - description - "Indicates the event stream to be considered for - this subscription."; - } - leaf replay-start-time { - if-feature "replay"; - type yang:date-and-time; - config false; - description - "Used to trigger the replay feature for a dynamic - subscription, with event records being selected needing to - be at or after the start at the time specified. If - 'replay-start-time' is not present, this is not a replay - subscription and event record push should start - immediately. It is never valid to specify start times that - are later than or equal to the current time."; - } - } - } - uses update-qos; - } - - grouping subscription-policy { - description - "This grouping describes the full set of policy information - concerning both dynamic and configured subscriptions, with the - exclusion of both receivers and networking information specific - to the publisher such as what interface should be used to - transmit notification messages."; - uses subscription-policy-dynamic; - leaf transport { - if-feature "configured"; - type transport; - description - "For a configured subscription, this leaf specifies the - transport used to deliver messages destined to all receivers - of that subscription."; - } - leaf encoding { - when 'not(../transport) or derived-from(../transport, - "sn:configurable-encoding")'; - type encoding; - description - "The type of encoding for notification messages. For a - dynamic subscription, if not included as part of an establish- - subscription RPC, the encoding will be populated with the - encoding used by that RPC. For a configured subscription, if - not explicitly configured the encoding with be the default - encoding for an underlying transport."; - } - leaf purpose { - if-feature "configured"; - type string; - description - "Open text allowing a configuring entity to embed the - originator or other specifics of this subscription."; - } - } - - /* - * RPCs - */ - - rpc establish-subscription { - description - "This RPC allows a subscriber to create (and possibly negotiate) - a subscription on its own behalf. If successful, the - subscription remains in effect for the duration of the - subscriber's association with the publisher, or until the - subscription is terminated. In case an error occurs, or the - publisher cannot meet the terms of a subscription, an RPC error - is returned, the subscription is not created. In that case, the - RPC reply's 'error-info' MAY include suggested parameter - settings that would have a higher likelihood of succeeding in a - subsequent 'establish-subscription' request."; - input { - uses subscription-policy-dynamic; - leaf encoding { - type encoding; - description - "The type of encoding for the subscribed data. If not - included as part of the RPC, the encoding MUST be set by the - publisher to be the encoding used by this RPC."; - } - } - output { - leaf id { - type subscription-id; - mandatory true; - description - "Identifier used for this subscription."; - } - leaf replay-start-time-revision { - if-feature "replay"; - type yang:date-and-time; - description - "If a replay has been requested, this represents the - earliest time covered by the event buffer for the requested - event stream. The value of this object is the - 'replay-log-aged-time' if it exists. Otherwise it is the - 'replay-log-creation-time'. All buffered event records - after this time will be replayed to a receiver. This - object will only be sent if the starting time has been - revised to be later than the time requested by the - subscriber."; - } - } - } - - rc:yang-data establish-subscription-stream-error-info { - container establish-subscription-stream-error-info { - description - "If any 'establish-subscription' RPC parameters are - unsupportable against the event stream, a subscription is not - created and the RPC error response MUST indicate the reason - why the subscription failed to be created. This yang-data MAY - be inserted as structured data within a subscription's RPC - error response to indicate the failure reason. This yang-data - MUST be inserted if hints are to be provided back to the - subscriber."; - leaf reason { - type identityref { - base establish-subscription-error; - } - description - "Indicates the reason why the subscription has failed to - be created to a targeted event stream."; - } - leaf filter-failure-hint { - type string; - description - "Information describing where and/or why a provided filter - was unsupportable for a subscription. The syntax and - semantics of this hint are implementation-specific."; - } - } - } - - rpc modify-subscription { - description - "This RPC allows a subscriber to modify a dynamic subscription's - parameters. If successful, the changed subscription - parameters remain in effect for the duration of the - subscription, until the subscription is again modified, or until - the subscription is terminated. In case of an error or an - inability to meet the modified parameters, the subscription is - not modified and the original subscription parameters remain in - effect. In that case, the RPC error MAY include 'error-info' - suggested parameter hints that would have a high likelihood of - succeeding in a subsequent 'modify-subscription' request. A - successful 'modify-subscription' will return a suspended - subscription to an 'active' state."; - input { - leaf id { - type subscription-id; - mandatory true; - description - "Identifier to use for this subscription."; - } - uses subscription-policy-modifiable; - } - } - - rc:yang-data modify-subscription-stream-error-info { - container modify-subscription-stream-error-info { - description - "This yang-data MAY be provided as part of a subscription's RPC - error response when there is a failure of a - 'modify-subscription' RPC which has been made against an event - stream. This yang-data MUST be used if hints are to be - provided back to the subscriber."; - leaf reason { - type identityref { - base modify-subscription-error; - } - description - "Information in a 'modify-subscription' RPC error response - which indicates the reason why the subscription to an event - stream has failed to be modified."; - } - leaf filter-failure-hint { - type string; - description - "Information describing where and/or why a provided filter - was unsupportable for a subscription. The syntax and - semantics of this hint are implementation-specific."; - } - } - } - - rpc delete-subscription { - description - "This RPC allows a subscriber to delete a subscription that - was previously created from by that same subscriber using the - 'establish-subscription' RPC. - - If an error occurs, the server replies with an 'rpc-error' where - the 'error-info' field MAY contain an - 'delete-subscription-error-info' structure."; - input { - leaf id { - type subscription-id; - mandatory true; - description - "Identifier of the subscription that is to be deleted. - Only subscriptions that were created using - 'establish-subscription' from the same origin as this RPC - can be deleted via this RPC."; - } - } - } - - rpc kill-subscription { - nacm:default-deny-all; - description - "This RPC allows an operator to delete a dynamic subscription - without restrictions on the originating subscriber or underlying - transport session. - - If an error occurs, the server replies with an 'rpc-error' where - the 'error-info' field MAY contain an - 'delete-subscription-error-info' structure."; - input { - leaf id { - type subscription-id; - mandatory true; - description - "Identifier of the subscription that is to be deleted. Only - subscriptions that were created using - 'establish-subscription' can be deleted via this RPC."; - } - } - } - - rc:yang-data delete-subscription-error-info { - container delete-subscription-error-info { - description - "If a 'delete-subscription' RPC or a 'kill-subscription' RPC - fails, the subscription is not deleted and the RPC error - response MUST indicate the reason for this failure. This - yang-data MAY be inserted as structured data within a - subscription's RPC error response to indicate the failure - reason."; - leaf reason { - type identityref { - base delete-subscription-error; - } - mandatory true; - description - "Indicates the reason why the subscription has failed to be - deleted."; - } - } - } - - /* - * NOTIFICATIONS - */ - - notification replay-completed { - sn:subscription-state-notification; - if-feature "replay"; - description - "This notification is sent to indicate that all of the replay - notifications have been sent."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - } - - notification subscription-completed { - sn:subscription-state-notification; - if-feature "configured"; - description - "This notification is sent to indicate that a subscription has - finished passing event records, as the 'stop-time' has been - reached."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the gracefully completed subscription."; - } - } - - notification subscription-modified { - sn:subscription-state-notification; - description - "This notification indicates that a subscription has been - modified. Notification messages sent from this point on will - conform to the modified terms of the subscription. For - completeness, this subscription state change notification - includes both modified and non-modified aspects of a - subscription."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - uses subscription-policy { - refine "target/stream/stream-filter/within-subscription" { - description - "Filter applied to the subscription. If the - 'stream-filter-name' is populated, the filter within the - subscription came from the 'filters' container. Otherwise it - is populated in-line as part of the subscription."; - } - } - } - - notification subscription-resumed { - sn:subscription-state-notification; - description - "This notification indicates that a subscription that had - previously been suspended has resumed. Notifications will once - again be sent. In addition, a 'subscription-resumed' indicates - that no modification of parameters has occurred since the last - time event records have been sent."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - } - - notification subscription-started { - sn:subscription-state-notification; - if-feature "configured"; - description - "This notification indicates that a subscription has started and - notifications are beginning to be sent."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - uses subscription-policy { - refine "target/stream/replay-start-time" { - description - "Indicates the time that a replay is using for the streaming - of buffered event records. This will be populated with the - most recent of the following: the event time of the previous - event record sent to a receiver, the - 'replay-log-creation-time', the 'replay-log-aged-time', - or the most recent publisher boot time."; - } - refine "target/stream/stream-filter/within-subscription" { - description - "Filter applied to the subscription. If the - 'stream-filter-name' is populated, the filter within the - subscription came from the 'filters' container. Otherwise it - is populated in-line as part of the subscription."; - } - augment "target/stream" { - description - "This augmentation adds additional parameters specific to a - subscription-started notification."; - leaf replay-previous-event-time { - when "../replay-start-time"; - if-feature "replay"; - type yang:date-and-time; - description - "If there is at least one event in the replay buffer prior - to 'replay-start-time', this gives the time of the event - generated immediately prior to the 'replay-start-time'. - If a receiver previously received event records for this - configured subscription, it can compare this time to the - last event record previously received. If the two are not - the same (perhaps due to a reboot), then a dynamic replay - can be initiated to acquire any missing event records."; - } - } - } - } - - notification subscription-suspended { - sn:subscription-state-notification; - description - "This notification indicates that a suspension of the - subscription by the publisher has occurred. No further - notifications will be sent until the subscription resumes. - This notification shall only be sent to receivers of a - subscription; it does not constitute a general-purpose - notification."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - leaf reason { - type identityref { - base subscription-suspended-reason; - } - mandatory true; - description - "Identifies the condition which resulted in the suspension."; - } - } - - notification subscription-terminated { - sn:subscription-state-notification; - description - "This notification indicates that a subscription has been - terminated."; - leaf id { - type subscription-id; - mandatory true; - description - "This references the affected subscription."; - } - leaf reason { - type identityref { - base subscription-terminated-reason; - } - mandatory true; - description - "Identifies the condition which resulted in the termination ."; - } - } - - /* - * DATA NODES - */ - - container streams { - config false; - description - "This container contains information on the built-in event - streams provided by the publisher."; - list stream { - key "name"; - description - "Identifies the built-in event streams that are supported by - the publisher."; - leaf name { - type string; - description - "A handle for a system-provided event stream made up of a - sequential set of event records, each of which is - characterized by its own domain and semantics."; - } - leaf description { - type string; - description - "A description of the event stream, including such - information as the type of event records that are available - within this event stream."; - } - leaf replay-support { - if-feature "replay"; - type empty; - description - "Indicates that event record replay is available on this - event stream."; - } - leaf replay-log-creation-time { - when "../replay-support"; - if-feature "replay"; - type yang:date-and-time; - mandatory true; - description - "The timestamp of the creation of the log used to support the - replay function on this event stream. This time might be - earlier than the earliest available information contained in - the log. This object is updated if the log resets for some - reason."; - } - leaf replay-log-aged-time { - when "../replay-support"; - if-feature "replay"; - type yang:date-and-time; - description - "The timestamp associated with last event record which has - been aged out of the log. This timestamp identifies how far - back into history this replay log extends, if it doesn't - extend back to the 'replay-log-creation-time'. This object - MUST be present if replay is supported and any event records - have been aged out of the log."; - } - } - } - - container filters { - description - "This container contains a list of configurable filters - that can be applied to subscriptions. This facilitates - the reuse of complex filters once defined."; - list stream-filter { - key "name"; - description - "A list of pre-configured filters that can be applied to - subscriptions."; - leaf name { - type string; - description - "An name to differentiate between filters."; - } - uses stream-filter-elements; - } - } - - container subscriptions { - description - "Contains the list of currently active subscriptions, i.e. - subscriptions that are currently in effect, used for - subscription management and monitoring purposes. This includes - subscriptions that have been setup via RPC primitives as well as - subscriptions that have been established via configuration."; - list subscription { - key "id"; - description - "The identity and specific parameters of a subscription. - Subscriptions within this list can be created using a control - channel or RPC, or be established through configuration. - - If configuration operations or the 'kill-subscription' RPC are - used to delete a subscription, a 'subscription-terminated' - message is sent to any active or suspended receivers."; - leaf id { - type subscription-id; - description - "Identifier of a subscription; unique within a publisher"; - } - uses subscription-policy { - refine "target/stream/stream" { - description - "Indicates the event stream to be considered for this - subscription. If an event stream has been removed, - and no longer can be referenced by an active subscription, - send a 'subscription-terminated' notification with - 'stream-unavailable' as the reason. If a configured - subscription refers to a non-existent event stream, move - that subscription to the 'invalid' state."; - } - refine "transport" { - description - "For a configured subscription, this leaf specifies the - transport used to deliver messages destined to all - receivers of that subscription. This object is mandatory - for subscriptions in the configuration datastore. This - object is not mandatory for dynamic subscriptions within - the operational state datastore. The object should not - be present for dynamic subscriptions."; - } - augment "target/stream" { - description - "Enables objects to added to a configured stream - subscription"; - leaf configured-replay { - if-feature "configured"; - if-feature "replay"; - type empty; - description - "The presence of this leaf indicates that replay for the - configured subscription should start at the earliest time - in the event log, or at the publisher boot time, which - ever is later."; - } - } - } - choice notification-message-origin { - if-feature "configured"; - description - "Identifies the egress interface on the publisher from which - notification messages are to be sent."; - case interface-originated { - description - "When notification messages to egress a specific, - designated interface on the publisher."; - leaf source-interface { - if-feature "interface-designation"; - type if:interface-ref; - description - "References the interface for notification messages."; - } - } - case address-originated { - description - "When notification messages are to depart from a publisher - using specific originating address and/or routing context - information."; - leaf source-vrf { - if-feature "supports-vrf"; - type leafref { - path "/ni:network-instances/ni:network-instance/ni:name"; - } - description - "VRF from which notification messages should egress a - publisher."; - } - leaf source-address { - type inet:ip-address-no-zone; - description - "The source address for the notification messages. If a - source VRF exists, but this object doesn't, a publisher's - default address for that VRF must be used."; - } - } - } - leaf configured-subscription-state { - if-feature "configured"; - type enumeration { - enum valid { - value 1; - description - "Subscription is supportable with current parameters."; - } - enum invalid { - value 2; - description - "The subscription as a whole is unsupportable with its - current parameters."; - } - enum concluded { - value 3; - description - "A subscription is inactive as it has hit a stop time, - it no longer has receivers in the 'receiver active' or - 'receiver suspended' state, but not yet been - removed from configuration."; - } - } - config false; - description - "The presence of this leaf indicates that the subscription - originated from configuration, not through a control channel - or RPC. The value indicates the system established state - of the subscription."; - } - container receivers { - description - "Set of receivers in a subscription."; - list receiver { - key "name"; - min-elements 1; - description - "A host intended as a recipient for the notification - messages of a subscription. For configured subscriptions, - transport specific network parameters (or a leafref to - those parameters) may augmentated to a specific receiver - within this list."; - leaf name { - type string; - description - "Identifies a unique receiver for a subscription."; - } - leaf sent-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records sent to the receiver. The - count is initialized when a dynamic subscription is - established, or when a configured receiver - transitions to the valid state."; - } - leaf excluded-event-records { - type yang:zero-based-counter64; - config false; - description - "The number of event records explicitly removed either - via an event stream filter or an access control filter so - that they are not passed to a receiver. This count is - set to zero each time 'sent-event-records' is - initialized."; - } - leaf state { - type enumeration { - enum active { - value 1; - description - "Receiver is currently being sent any applicable - notification messages for the subscription."; - } - enum suspended { - value 2; - description - "Receiver state is 'suspended', so the publisher - is currently unable to provide notification messages - for the subscription."; - } - enum connecting { - value 3; - if-feature "configured"; - description - "A subscription has been configured, but a - 'subscription-started' subscription state change - notification needs to be successfully received before - notification messages are sent. - - If the 'reset' action is invoked for a receiver of an - active configured subscription, the state must be - moved to 'connecting'."; - } - enum disconnected { - value 4; - if-feature "configured"; - description - "A subscription has failed in sending a subscription - started state change to the receiver. - Additional attempts at connection attempts are not - currently being made."; - } - } - config false; - mandatory true; - description - "Specifies the state of a subscription from the - perspective of a particular receiver. With this info it - is possible to determine whether a publisher is - currently generating notification messages intended for - that receiver."; - } - action reset { - if-feature "configured"; - description - "Allows the reset of this configured subscription - receiver to the 'connecting' state. This enables the - connection process to be re-initiated."; - output { - leaf time { - type yang:date-and-time; - mandatory true; - description - "Time a publisher returned the receiver to a - 'connecting' state."; - } - } - } - } - } - } - } -} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang new file mode 100644 index 000000000..e04593c3f --- /dev/null +++ b/experimental/ietf-extracted-YANG-modules/ietf-subscribed-notifications@2019-09-09.yang @@ -0,0 +1,1350 @@ +module ietf-subscribed-notifications { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-subscribed-notifications"; + prefix sn; + + import ietf-inet-types { + prefix inet; + reference + "RFC 6991: Common YANG Data Types"; + } + import ietf-interfaces { + prefix if; + reference + "RFC 8343: A YANG Data Model for Interface Management"; + } + import ietf-netconf-acm { + prefix nacm; + reference + "RFC 8341: Network Configuration Access Control Model"; + } + import ietf-network-instance { + prefix ni; + reference + "RFC 8529: YANG Data Model for Network Instances"; + } + import ietf-restconf { + prefix rc; + reference + "RFC 8040: RESTCONF Protocol"; + } + import ietf-yang-types { + prefix yang; + reference + "RFC 6991: Common YANG Data Types"; + } + + organization + "IETF NETCONF (Network Configuration) Working Group"; + contact + "WG Web: + WG List: + + Author: Alexander Clemm + + + Author: Eric Voit + + + Author: Alberto Gonzalez Prieto + + + Author: Einar Nilsen-Nygaard + + + Author: Ambika Prasad Tripathy + "; + description + "This module defines a YANG data model for subscribing to event + records and receiving matching content in notification messages. + + The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL + NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', + 'MAY', and 'OPTIONAL' in this document are to be interpreted as + described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, + they appear in all capitals, as shown here. + + Copyright (c) 2019 IETF Trust and the persons identified as + authors of the code. All rights reserved. + + Redistribution and use in source and binary forms, with or + without modification, is permitted pursuant to, and subject to + the license terms contained in, the Simplified BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 8639; see the + RFC itself for full legal notices."; + + revision 2019-09-09 { + description + "Initial version."; + reference + "RFC 8639: A YANG Data Model for Subscriptions to + Event Notifications"; + } + + /* + * FEATURES + */ + + feature configured { + description + "This feature indicates that configuration of subscriptions is + supported."; + } + + feature dscp { + description + "This feature indicates that a publisher supports the ability + to set the Differentiated Services Code Point (DSCP) value in + outgoing packets."; + } + + feature encode-json { + description + "This feature indicates that JSON encoding of notification + messages is supported."; + } + + feature encode-xml { + description + "This feature indicates that XML encoding of notification + messages is supported."; + } + + feature interface-designation { + description + "This feature indicates that a publisher supports sourcing all + receiver interactions for a configured subscription from a + single designated egress interface."; + } + + feature qos { + description + "This feature indicates that a publisher supports absolute + dependencies of one subscription's traffic over another + as well as weighted bandwidth sharing between subscriptions. + Both of these are Quality of Service (QoS) features that allow + differentiated treatment of notification messages between a + publisher and a specific receiver."; + } + + feature replay { + description + "This feature indicates that historical event record replay is + supported. With replay, it is possible for past event records + to be streamed in chronological order."; + } + + feature subtree { + description + "This feature indicates support for YANG subtree filtering."; + reference + "RFC 6241: Network Configuration Protocol (NETCONF), + Section 6"; + } + + feature supports-vrf { + description + "This feature indicates that a publisher supports VRF + configuration for configured subscriptions. VRF support for + dynamic subscriptions does not require this feature."; + reference + "RFC 8529: YANG Data Model for Network Instances, + Section 6"; + } + + feature xpath { + description + "This feature indicates support for XPath filtering."; + reference + "XML Path Language (XPath) Version 1.0 + (https://www.w3.org/TR/1999/REC-xpath-19991116)"; + } + + /* + * EXTENSIONS + */ + + extension subscription-state-notification { + description + "This statement applies only to notifications. It indicates + that the notification is a subscription state change + notification. Therefore, it does not participate in a regular + event stream and does not need to be specifically subscribed + to in order to be received. This statement can only occur as + a substatement of the YANG 'notification' statement. This + statement is not for use outside of this YANG module."; + } + + /* + * IDENTITIES + */ + /* Identities for RPC and notification errors */ + + identity delete-subscription-error { + description + "Base identity for the problem found while attempting to + fulfill either a 'delete-subscription' RPC request or a + 'kill-subscription' RPC request."; + } + + identity establish-subscription-error { + description + "Base identity for the problem found while attempting to + fulfill an 'establish-subscription' RPC request."; + } + + identity modify-subscription-error { + description + "Base identity for the problem found while attempting to + fulfill a 'modify-subscription' RPC request."; + } + + identity subscription-suspended-reason { + description + "Base identity for the problem condition communicated to a + receiver as part of a 'subscription-suspended' + notification."; + } + + identity subscription-terminated-reason { + description + "Base identity for the problem condition communicated to a + receiver as part of a 'subscription-terminated' + notification."; + } + + identity dscp-unavailable { + base establish-subscription-error; + if-feature "dscp"; + description + "The publisher is unable to mark notification messages with + prioritization information in a way that will be respected + during network transit."; + } + + identity encoding-unsupported { + base establish-subscription-error; + description + "Unable to encode notification messages in the desired + format."; + } + + identity filter-unavailable { + base subscription-terminated-reason; + description + "Referenced filter does not exist. This means a receiver is + referencing a filter that doesn't exist or to which it + does not have access permissions."; + } + + identity filter-unsupported { + base establish-subscription-error; + base modify-subscription-error; + description + "Cannot parse syntax in the filter. This failure can be from + a syntax error or a syntax too complex to be processed by the + publisher."; + } + + identity insufficient-resources { + base establish-subscription-error; + base modify-subscription-error; + base subscription-suspended-reason; + description + "The publisher does not have sufficient resources to support + the requested subscription. An example might be that + allocated CPU is too limited to generate the desired set of + notification messages."; + } + + identity no-such-subscription { + base modify-subscription-error; + base delete-subscription-error; + base subscription-terminated-reason; + description + "Referenced subscription doesn't exist. This may be as a + result of a nonexistent subscription ID, an ID that belongs to + another subscriber, or an ID for a configured subscription."; + } + + identity replay-unsupported { + base establish-subscription-error; + if-feature "replay"; + description + "Replay cannot be performed for this subscription. This means + the publisher will not provide the requested historic + information from the event stream via replay to this + receiver."; + } + + identity stream-unavailable { + base subscription-terminated-reason; + description + "Not a subscribable event stream. This means the referenced + event stream is not available for subscription by the + receiver."; + } + + identity suspension-timeout { + base subscription-terminated-reason; + description + "Termination of a previously suspended subscription. The + publisher has eliminated the subscription, as it exceeded a + time limit for suspension."; + } + + identity unsupportable-volume { + base subscription-suspended-reason; + description + "The publisher does not have the network bandwidth needed to + get the volume of generated information intended for a + receiver."; + } + + /* Identities for encodings */ + + identity configurable-encoding { + description + "If a transport identity derives from this identity, it means + that it supports configurable encodings. An example of a + configurable encoding might be a new identity such as + 'encode-cbor'. Such an identity could use + 'configurable-encoding' as its base. This would allow a + dynamic subscription encoded in JSON (RFC 8259) to request + that notification messages be encoded via the Concise Binary + Object Representation (CBOR) (RFC 7049). Further details for + any specific configurable encoding would be explored in a + transport document based on this specification."; + reference + "RFC 8259: The JavaScript Object Notation (JSON) Data + Interchange Format + RFC 7049: Concise Binary Object Representation (CBOR)"; + } + + identity encoding { + description + "Base identity to represent data encodings."; + } + + identity encode-xml { + base encoding; + if-feature "encode-xml"; + description + "Encode data using XML as described in RFC 7950."; + reference + "RFC 7950: The YANG 1.1 Data Modeling Language"; + } + + identity encode-json { + base encoding; + if-feature "encode-json"; + description + "Encode data using JSON as described in RFC 7951."; + reference + "RFC 7951: JSON Encoding of Data Modeled with YANG"; + } + + /* Identities for transports */ + + identity transport { + description + "An identity that represents the underlying mechanism for + passing notification messages."; + } + + /* + * TYPEDEFs + */ + + typedef encoding { + type identityref { + base encoding; + } + description + "Specifies a data encoding, e.g., for a data subscription."; + } + + typedef stream-filter-ref { + type leafref { + path "/sn:filters/sn:stream-filter/sn:name"; + } + description + "This type is used to reference an event stream filter."; + } + + typedef stream-ref { + type leafref { + path "/sn:streams/sn:stream/sn:name"; + } + description + "This type is used to reference a system-provided + event stream."; + } + + typedef subscription-id { + type uint32; + description + "A type for subscription identifiers."; + } + + typedef transport { + type identityref { + base transport; + } + description + "Specifies the transport used to send notification messages + to a receiver."; + } + + /* + * GROUPINGS + */ + + grouping stream-filter-elements { + description + "This grouping defines the base for filters applied to event + streams."; + choice filter-spec { + description + "The content filter specification for this request."; + anydata stream-subtree-filter { + if-feature "subtree"; + description + "Event stream evaluation criteria encoded in the syntax of + a subtree filter as defined in RFC 6241, Section 6. + + The subtree filter is applied to the representation of + individual, delineated event records as contained in the + event stream. + + If the subtree filter returns a non-empty node set, the + filter matches the event record, and the event record is + included in the notification message sent to the + receivers."; + reference + "RFC 6241: Network Configuration Protocol (NETCONF), + Section 6"; + } + leaf stream-xpath-filter { + if-feature "xpath"; + type yang:xpath1.0; + description + "Event stream evaluation criteria encoded in the syntax of + an XPath 1.0 expression. + + The XPath expression is evaluated on the representation of + individual, delineated event records as contained in + the event stream. + + The result of the XPath expression is converted to a + boolean value using the standard XPath 1.0 rules. If the + boolean value is 'true', the filter matches the event + record, and the event record is included in the + notification message sent to the receivers. + + The expression is evaluated in the following XPath + context: + + o The set of namespace declarations is the set of + prefix and namespace pairs for all YANG modules + implemented by the server, where the prefix is the + YANG module name and the namespace is as defined by + the 'namespace' statement in the YANG module. + + If the leaf is encoded in XML, all namespace + declarations in scope on the 'stream-xpath-filter' + leaf element are added to the set of namespace + declarations. If a prefix found in the XML is + already present in the set of namespace + declarations, the namespace in the XML is used. + + o The set of variable bindings is empty. + + o The function library is comprised of the core + function library and the XPath functions defined in + Section 10 in RFC 7950. + + o The context node is the root node."; + reference + "XML Path Language (XPath) Version 1.0 + (https://www.w3.org/TR/1999/REC-xpath-19991116) + RFC 7950: The YANG 1.1 Data Modeling Language, + Section 10"; + } + } + } + + grouping update-qos { + description + "This grouping describes QoS information concerning a + subscription. This information is passed to lower layers + for transport prioritization and treatment."; + leaf dscp { + if-feature "dscp"; + type inet:dscp; + default "0"; + description + "The desired network transport priority level. This is the + priority set on notification messages encapsulating the + results of the subscription. This transport priority is + shared for all receivers of a given subscription."; + } + leaf weighting { + if-feature "qos"; + type uint8 { + range "0 .. 255"; + } + description + "Relative weighting for a subscription. Larger weights get + more resources. Allows an underlying transport layer to + perform informed load-balance allocations between various + subscriptions."; + reference + "RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2), + Section 5.3.2"; + } + leaf dependency { + if-feature "qos"; + type subscription-id; + description + "Provides the 'subscription-id' of a parent subscription. + The parent subscription has absolute precedence should + that parent have push updates ready to egress the publisher. + In other words, there should be no streaming of objects from + the current subscription if the parent has something ready + to push. + + If a dependency is asserted via configuration or via an RPC + but the referenced 'subscription-id' does not exist, the + dependency is silently discarded. If a referenced + subscription is deleted, this dependency is removed."; + reference + "RFC 7540: Hypertext Transfer Protocol Version 2 (HTTP/2), + Section 5.3.1"; + } + } + + grouping subscription-policy-modifiable { + description + "This grouping describes all objects that may be changed + in a subscription."; + choice target { + mandatory true; + description + "Identifies the source of information against which a + subscription is being applied as well as specifics on the + subset of information desired from that source."; + case stream { + choice stream-filter { + description + "An event stream filter can be applied to a subscription. + That filter will either come referenced from a global + list or be provided in the subscription itself."; + case by-reference { + description + "Apply a filter that has been configured separately."; + leaf stream-filter-name { + type stream-filter-ref; + mandatory true; + description + "References an existing event stream filter that is + to be applied to an event stream for the + subscription."; + } + } + case within-subscription { + description + "A local definition allows a filter to have the same + lifecycle as the subscription."; + uses stream-filter-elements; + } + } + } + } + leaf stop-time { + type yang:date-and-time; + description + "Identifies a time after which notification messages for a + subscription should not be sent. If 'stop-time' is not + present, the notification messages will continue until the + subscription is terminated. If 'replay-start-time' exists, + 'stop-time' must be for a subsequent time. If + 'replay-start-time' doesn't exist, 'stop-time', when + established, must be for a future time."; + } + } + + grouping subscription-policy-dynamic { + description + "This grouping describes the only information concerning a + subscription that can be passed over the RPCs defined in this + data model."; + uses subscription-policy-modifiable { + augment "target/stream" { + description + "Adds additional objects that can be modified by an RPC."; + leaf stream { + type stream-ref { + require-instance false; + } + mandatory true; + description + "Indicates the event stream to be considered for + this subscription."; + } + leaf replay-start-time { + if-feature "replay"; + type yang:date-and-time; + config false; + description + "Used to trigger the 'replay' feature for a dynamic + subscription, where event records that are selected + need to be at or after the specified starting time. If + 'replay-start-time' is not present, this is not a replay + subscription and event record push should start + immediately. It is never valid to specify start times + that are later than or equal to the current time."; + } + } + } + uses update-qos; + } + + grouping subscription-policy { + description + "This grouping describes the full set of policy information + concerning both dynamic and configured subscriptions, with the + exclusion of both receivers and networking information + specific to the publisher, such as what interface should be + used to transmit notification messages."; + uses subscription-policy-dynamic; + leaf transport { + if-feature "configured"; + type transport; + description + "For a configured subscription, this leaf specifies the + transport used to deliver messages destined for all + receivers of that subscription."; + } + leaf encoding { + when 'not(../transport) or derived-from(../transport, + "sn:configurable-encoding")'; + type encoding; + description + "The type of encoding for notification messages. For a + dynamic subscription, if not included as part of an + 'establish-subscription' RPC, the encoding will be populated + with the encoding used by that RPC. For a configured + subscription, if not explicitly configured, the encoding + will be the default encoding for an underlying transport."; + } + leaf purpose { + if-feature "configured"; + type string; + description + "Open text allowing a configuring entity to embed the + originator or other specifics of this subscription."; + } + } + + /* + * RPCs + */ + + rpc establish-subscription { + description + "This RPC allows a subscriber to create (and possibly + negotiate) a subscription on its own behalf. If successful, + the subscription remains in effect for the duration of the + subscriber's association with the publisher or until the + subscription is terminated. If an error occurs or the + publisher cannot meet the terms of a subscription, an RPC + error is returned, and the subscription is not created. + In that case, the RPC reply's 'error-info' MAY include + suggested parameter settings that would have a higher + likelihood of succeeding in a subsequent + 'establish-subscription' request."; + input { + uses subscription-policy-dynamic; + leaf encoding { + type encoding; + description + "The type of encoding for the subscribed data. If not + included as part of the RPC, the encoding MUST be set by + the publisher to be the encoding used by this RPC."; + } + } + output { + leaf id { + type subscription-id; + mandatory true; + description + "Identifier used for this subscription."; + } + leaf replay-start-time-revision { + if-feature "replay"; + type yang:date-and-time; + description + "If a replay has been requested, this object represents + the earliest time covered by the event buffer for the + requested event stream. The value of this object is the + 'replay-log-aged-time' if it exists. Otherwise, it is + the 'replay-log-creation-time'. All buffered event + records after this time will be replayed to a receiver. + This object will only be sent if the starting time has + been revised to be later than the time requested by the + subscriber."; + } + } + } + + rc:yang-data establish-subscription-stream-error-info { + container establish-subscription-stream-error-info { + description + "If any 'establish-subscription' RPC parameters are + unsupportable against the event stream, a subscription + is not created and the RPC error response MUST indicate the + reason why the subscription failed to be created. This + yang-data MAY be inserted as structured data in a + subscription's RPC error response to indicate the reason for + the failure. This yang-data MUST be inserted if hints are + to be provided back to the subscriber."; + leaf reason { + type identityref { + base establish-subscription-error; + } + description + "Indicates the reason why the subscription has failed to + be created to a targeted event stream."; + } + leaf filter-failure-hint { + type string; + description + "Information describing where and/or why a provided + filter was unsupportable for a subscription. The + syntax and semantics of this hint are + implementation specific."; + } + } + } + + rpc modify-subscription { + description + "This RPC allows a subscriber to modify a dynamic + subscription's parameters. If successful, the changed + subscription parameters remain in effect for the duration of + the subscription, until the subscription is again modified, or + until the subscription is terminated. In the case of an error + or an inability to meet the modified parameters, the + subscription is not modified and the original subscription + parameters remain in effect. In that case, the RPC error MAY + include 'error-info' suggested parameter hints that would have + a high likelihood of succeeding in a subsequent + 'modify-subscription' request. A successful + 'modify-subscription' will return a suspended subscription to + the 'active' state."; + input { + leaf id { + type subscription-id; + mandatory true; + description + "Identifier to use for this subscription."; + } + uses subscription-policy-modifiable; + } + } + + rc:yang-data modify-subscription-stream-error-info { + container modify-subscription-stream-error-info { + description + "This yang-data MAY be provided as part of a subscription's + RPC error response when there is a failure of a + 'modify-subscription' RPC that has been made against an + event stream. This yang-data MUST be used if hints are to + be provided back to the subscriber."; + leaf reason { + type identityref { + base modify-subscription-error; + } + description + "Information in a 'modify-subscription' RPC error response + that indicates the reason why the subscription to an event + stream has failed to be modified."; + } + leaf filter-failure-hint { + type string; + description + "Information describing where and/or why a provided + filter was unsupportable for a subscription. The syntax + and semantics of this hint are + implementation specific."; + } + } + } + + rpc delete-subscription { + description + "This RPC allows a subscriber to delete a subscription that + was previously created by that same subscriber using the + 'establish-subscription' RPC. + + If an error occurs, the server replies with an 'rpc-error' + where the 'error-info' field MAY contain a + 'delete-subscription-error-info' structure."; + input { + leaf id { + type subscription-id; + mandatory true; + description + "Identifier of the subscription that is to be deleted. + Only subscriptions that were created using + 'establish-subscription' from the same origin as this RPC + can be deleted via this RPC."; + } + } + } + + rpc kill-subscription { + nacm:default-deny-all; + description + "This RPC allows an operator to delete a dynamic subscription + without restrictions on the originating subscriber or + underlying transport session. + + If an error occurs, the server replies with an 'rpc-error' + where the 'error-info' field MAY contain a + 'delete-subscription-error-info' structure."; + input { + leaf id { + type subscription-id; + mandatory true; + description + "Identifier of the subscription that is to be deleted. + Only subscriptions that were created using + 'establish-subscription' can be deleted via this RPC."; + } + } + } + + rc:yang-data delete-subscription-error-info { + container delete-subscription-error-info { + description + "If a 'delete-subscription' RPC or a 'kill-subscription' RPC + fails, the subscription is not deleted and the RPC error + response MUST indicate the reason for this failure. This + yang-data MAY be inserted as structured data in a + subscription's RPC error response to indicate the reason + for the failure."; + leaf reason { + type identityref { + base delete-subscription-error; + } + mandatory true; + description + "Indicates the reason why the subscription has failed to be + deleted."; + } + } + } + + /* + * NOTIFICATIONS + */ + + notification replay-completed { + sn:subscription-state-notification; + if-feature "replay"; + description + "This notification is sent to indicate that all of the replay + notifications have been sent."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + } + + notification subscription-completed { + sn:subscription-state-notification; + if-feature "configured"; + description + "This notification is sent to indicate that a subscription has + finished passing event records, as the 'stop-time' has been + reached."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the gracefully completed subscription."; + } + } + + notification subscription-modified { + sn:subscription-state-notification; + description + "This notification indicates that a subscription has been + modified. Notification messages sent from this point on will + conform to the modified terms of the subscription. For + completeness, this subscription state change notification + includes both modified and unmodified aspects of a + subscription."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + uses subscription-policy { + refine "target/stream/stream-filter/within-subscription" { + description + "Filter applied to the subscription. If the + 'stream-filter-name' is populated, the filter in the + subscription came from the 'filters' container. + Otherwise, it is populated in-line as part of the + subscription."; + } + } + } + + notification subscription-resumed { + sn:subscription-state-notification; + description + "This notification indicates that a subscription that had + previously been suspended has resumed. Notifications will + once again be sent. In addition, a 'subscription-resumed' + indicates that no modification of parameters has occurred + since the last time event records have been sent."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + } + + notification subscription-started { + sn:subscription-state-notification; + if-feature "configured"; + description + "This notification indicates that a subscription has started + and notifications will now be sent."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + uses subscription-policy { + refine "target/stream/replay-start-time" { + description + "Indicates the time that a replay is using for the + streaming of buffered event records. This will be + populated with the most recent of the following: + the event time of the previous event record sent to a + receiver, the 'replay-log-creation-time', the + 'replay-log-aged-time', or the most recent publisher + boot time."; + } + refine "target/stream/stream-filter/within-subscription" { + description + "Filter applied to the subscription. If the + 'stream-filter-name' is populated, the filter in the + subscription came from the 'filters' container. + Otherwise, it is populated in-line as part of the + subscription."; + } + augment "target/stream" { + description + "This augmentation adds additional parameters specific to a + 'subscription-started' notification."; + leaf replay-previous-event-time { + when '../replay-start-time'; + if-feature "replay"; + type yang:date-and-time; + description + "If there is at least one event in the replay buffer + prior to 'replay-start-time', this gives the time of + the event generated immediately prior to the + 'replay-start-time'. + + If a receiver previously received event records for + this configured subscription, it can compare this time + to the last event record previously received. If the + two are not the same (perhaps due to a reboot), then a + dynamic replay can be initiated to acquire any missing + event records."; + } + } + } + } + + notification subscription-suspended { + sn:subscription-state-notification; + description + "This notification indicates that a suspension of the + subscription by the publisher has occurred. No further + notifications will be sent until the subscription resumes. + This notification shall only be sent to receivers of a + subscription; it does not constitute a general-purpose + notification."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + leaf reason { + type identityref { + base subscription-suspended-reason; + } + mandatory true; + description + "Identifies the condition that resulted in the suspension."; + } + } + + notification subscription-terminated { + sn:subscription-state-notification; + description + "This notification indicates that a subscription has been + terminated."; + leaf id { + type subscription-id; + mandatory true; + description + "This references the affected subscription."; + } + leaf reason { + type identityref { + base subscription-terminated-reason; + } + mandatory true; + description + "Identifies the condition that resulted in the termination."; + } + } + + /* + * DATA NODES + */ + + container streams { + config false; + description + "Contains information on the built-in event streams provided by + the publisher."; + list stream { + key "name"; + description + "Identifies the built-in event streams that are supported by + the publisher."; + leaf name { + type string; + description + "A handle for a system-provided event stream made up of a + sequential set of event records, each of which is + characterized by its own domain and semantics."; + } + leaf description { + type string; + description + "A description of the event stream, including such + information as the type of event records that are + available in this event stream."; + } + leaf replay-support { + if-feature "replay"; + type empty; + description + "Indicates that event record replay is available on this + event stream."; + } + leaf replay-log-creation-time { + when '../replay-support'; + if-feature "replay"; + type yang:date-and-time; + mandatory true; + description + "The timestamp of the creation of the log used to support + the replay function on this event stream. This time + might be earlier than the earliest available information + contained in the log. This object is updated if the log + resets for some reason."; + } + leaf replay-log-aged-time { + when '../replay-support'; + if-feature "replay"; + type yang:date-and-time; + description + "The timestamp associated with the last event record that + has been aged out of the log. This timestamp identifies + how far back in history this replay log extends, if it + doesn't extend back to the 'replay-log-creation-time'. + This object MUST be present if replay is supported and any + event records have been aged out of the log."; + } + } + } + container filters { + description + "Contains a list of configurable filters that can be applied to + subscriptions. This facilitates the reuse of complex filters + once defined."; + list stream-filter { + key "name"; + description + "A list of preconfigured filters that can be applied to + subscriptions."; + leaf name { + type string; + description + "A name to differentiate between filters."; + } + uses stream-filter-elements; + } + } + container subscriptions { + description + "Contains the list of currently active subscriptions, i.e., + subscriptions that are currently in effect, used for + subscription management and monitoring purposes. This + includes subscriptions that have been set up via + RPC primitives as well as subscriptions that have been + established via configuration."; + list subscription { + key "id"; + description + "The identity and specific parameters of a subscription. + Subscriptions in this list can be created using a control + channel or RPC or can be established through configuration. + + If the 'kill-subscription' RPC or configuration operations + are used to delete a subscription, a + 'subscription-terminated' message is sent to any active or + suspended receivers."; + leaf id { + type subscription-id; + description + "Identifier of a subscription; unique in a given + publisher."; + } + uses subscription-policy { + refine "target/stream/stream" { + description + "Indicates the event stream to be considered for this + subscription. If an event stream has been removed + and can no longer be referenced by an active + subscription, send a 'subscription-terminated' + notification with 'stream-unavailable' as the reason. + If a configured subscription refers to a nonexistent + event stream, move that subscription to the + 'invalid' state."; + } + refine "transport" { + description + "For a configured subscription, this leaf specifies the + transport used to deliver messages destined for all + receivers of that subscription. This object is + mandatory for subscriptions in the configuration + datastore. This object (1) is not mandatory for dynamic + subscriptions in the operational state datastore and + (2) should not be present for other types of dynamic + subscriptions."; + } + augment "target/stream" { + description + "Enables objects to be added to a configured stream + subscription."; + leaf configured-replay { + if-feature "configured"; + if-feature "replay"; + type empty; + description + "The presence of this leaf indicates that replay for + the configured subscription should start at the + earliest time in the event log or at the publisher + boot time, whichever is later."; + } + } + } + choice notification-message-origin { + if-feature "configured"; + description + "Identifies the egress interface on the publisher + from which notification messages are to be sent."; + case interface-originated { + description + "When notification messages are to egress a specific, + designated interface on the publisher."; + leaf source-interface { + if-feature "interface-designation"; + type if:interface-ref; + description + "References the interface for notification messages."; + } + } + case address-originated { + description + "When notification messages are to depart from a + publisher using a specific originating address and/or + routing context information."; + leaf source-vrf { + if-feature "supports-vrf"; + type leafref { + path "/ni:network-instances/ni:network-instance/ni:name"; + } + description + "VRF from which notification messages should egress a + publisher."; + } + leaf source-address { + type inet:ip-address-no-zone; + description + "The source address for the notification messages. + If a source VRF exists but this object doesn't, a + publisher's default address for that VRF must + be used."; + } + } + } + leaf configured-subscription-state { + if-feature "configured"; + type enumeration { + enum valid { + value 1; + description + "The subscription is supportable with its current + parameters."; + } + enum invalid { + value 2; + description + "The subscription as a whole is unsupportable with its + current parameters."; + } + enum concluded { + value 3; + description + "A subscription is inactive, as it has hit a + stop time. It no longer has receivers in the + 'active' or 'suspended' state, but the subscription + has not yet been removed from configuration."; + } + } + config false; + description + "The presence of this leaf indicates that the subscription + originated from configuration, not through a control + channel or RPC. The value indicates the state of the + subscription as established by the publisher."; + } + container receivers { + description + "Set of receivers in a subscription."; + list receiver { + key "name"; + min-elements 1; + description + "A host intended as a recipient for the notification + messages of a subscription. For configured + subscriptions, transport-specific network parameters + (or a leafref to those parameters) may be augmented to a + specific receiver in this list."; + leaf name { + type string; + description + "Identifies a unique receiver for a subscription."; + } + leaf sent-event-records { + type yang:zero-based-counter64; + config false; + description + "The number of event records sent to the receiver. The + count is initialized when a dynamic subscription is + established or when a configured receiver + transitions to the 'valid' state."; + } + leaf excluded-event-records { + type yang:zero-based-counter64; + config false; + description + "The number of event records explicitly removed via + either an event stream filter or an access control + filter so that they are not passed to a receiver. + This count is set to zero each time + 'sent-event-records' is initialized."; + } + leaf state { + type enumeration { + enum active { + value 1; + description + "The receiver is currently being sent any + applicable notification messages for the + subscription."; + } + enum suspended { + value 2; + description + "The receiver state is 'suspended', so the + publisher is currently unable to provide + notification messages for the subscription."; + } + enum connecting { + value 3; + if-feature "configured"; + description + "A subscription has been configured, but a + 'subscription-started' subscription state change + notification needs to be successfully received + before notification messages are sent. + + If the 'reset' action is invoked for a receiver of + an active configured subscription, the state + must be moved to 'connecting'."; + } + enum disconnected { + value 4; + if-feature "configured"; + description + "A subscription has failed to send a + 'subscription-started' state change to the + receiver. Additional connection attempts are not + currently being made."; + } + } + config false; + mandatory true; + description + "Specifies the state of a subscription from the + perspective of a particular receiver. With this + information, it is possible to determine whether a + publisher is currently generating notification + messages intended for that receiver."; + } + action reset { + if-feature "configured"; + description + "Allows the reset of this configured subscription's + receiver to the 'connecting' state. This enables the + connection process to be reinitiated."; + output { + leaf time { + type yang:date-and-time; + mandatory true; + description + "Time at which a publisher returned the receiver to + the 'connecting' state."; + } + } + } + } + } + } + } +} diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang similarity index 98% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang index 99ad72d97..74243f5e1 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2024-03-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-library-semver@2025-01-07.yang @@ -65,8 +65,8 @@ module ietf-yang-library-semver { // RFC Ed.: please replace ys:version with 1.0.0 and // remove this note. - revision 2024-03-02 { - ys:version "1.0.0-draft-ietf-netmod-yang-semver-14"; + revision 2025-01-07 { + ys:version "0.18.0"; description "Initial revision"; reference diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang similarity index 56% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang index 45ff9fbc0..ea38fb34e 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-05-21.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-push@2019-09-09.yang @@ -11,11 +11,7 @@ module ietf-yang-push { import ietf-subscribed-notifications { prefix sn; reference - "draft-ietf-netconf-subscribed-notifications: - Customized Subscriptions to a Publisher's Event Streams - NOTE TO RFC Editor: Please replace above reference to - draft-ietf-netconf-subscribed-notifications with RFC number - when published (i.e. RFC xxxx)."; + "RFC 8639: Subscription to YANG Notifications"; } import ietf-datastores { prefix ds; @@ -34,28 +30,19 @@ module ietf-yang-push { } organization - "IETF NETCONF Working Group"; + "IETF NETCONF (Network Configuration) Working Group"; contact - "WG Web: - - WG List: - - Editor: Alexander Clemm - - Editor: Eric Voit - - Editor: Alberto Gonzalez Prieto - - Editor: Ambika Prasad Tripathy - - Editor: Einar Nilsen-Nygaard - - Editor: Andy Bierman - - Editor: Balazs Lengyel - "; + "WG Web: + WG List: + + Author: Alexander Clemm + + + Author: Eric Voit + "; + description - "This module contains YANG specifications for YANG push. + "This module contains YANG specifications for YANG-Push. The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', @@ -73,26 +60,14 @@ module ietf-yang-push { Relating to IETF Documents (https://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 8641; see the + RFC itself for full legal notices."; - // RFC Ed.: replace XXXX with actual RFC number and remove this - // note. - - revision 2019-05-21 { + revision 2019-09-09 { description - "Initial revision. - NOTE TO RFC EDITOR: - (1)Please replace the above revision date to - the date of RFC publication when published. - (2) Please replace the date in the file name - (ietf-yang-push@2019-05-21.yang) to the date of RFC - publication. - (3) Please replace the following reference to - draft-ietf-netconf-yang-push-25 with RFC number when - published (i.e. RFC xxxx)."; + "Initial revision."; reference - "draft-ietf-netconf-yang-push-25"; + "RFC 8641: Subscriptions to YANG Datastores"; } /* @@ -109,20 +84,21 @@ module ietf-yang-push { * IDENTITIES */ - /* Error type identities for datastore subscription */ + /* Error type identities for datastore subscription */ identity resync-subscription-error { description - "Problem found while attempting to fulfill an + "Problem found while attempting to fulfill a 'resync-subscription' RPC request."; } identity cant-exclude { base sn:establish-subscription-error; description - "Unable to remove the set of 'excluded-changes'. This means - the publisher is unable to restrict 'push-change-update's to - just the change types requested for this subscription."; + "Unable to remove the set of 'excluded-change' parameters. + This means that the publisher is unable to restrict + 'push-change-update' notifications to just the change types + requested for this subscription."; } identity datastore-not-subscribable { @@ -135,30 +111,30 @@ module ietf-yang-push { identity no-such-subscription-resync { base resync-subscription-error; description - "Referenced subscription doesn't exist. This may be as a result - of a non-existent subscription ID, an ID which belongs to - another subscriber, or an ID for configured subscription."; + "The referenced subscription doesn't exist. This may be as a + result of a nonexistent subscription ID, an ID that belongs to + another subscriber, or an ID for a configured subscription."; } identity on-change-unsupported { base sn:establish-subscription-error; description - "On-change is not supported for any objects which are + "On-change is not supported for any objects that are selectable by this filter."; } identity on-change-sync-unsupported { base sn:establish-subscription-error; description - "Neither sync on start nor resynchronization are supported for - this subscription. This error will be used for two - reasons. First if an 'establish-subscription' RPC includes - 'sync-on-start', yet the publisher can't support sending a + "Neither 'sync-on-start' nor resynchronization is supported for + this subscription. This error will be used for two reasons: + (1) if an 'establish-subscription' RPC includes + 'sync-on-start' but the publisher can't support sending a 'push-update' for this subscription for reasons other than - 'on-change-unsupported' or 'sync-too-big'. And second, if the - 'resync-subscription' RPC is invoked either for an existing - periodic subscription, or for an on-change subscription which - can't support resynchronization."; + 'on-change-unsupported' or 'sync-too-big' + (2) if the 'resync-subscription' RPC is invoked for either an + existing periodic subscription or an on-change subscription + that can't support resynchronization."; } identity period-unsupported { @@ -166,10 +142,10 @@ module ietf-yang-push { base sn:modify-subscription-error; base sn:subscription-suspended-reason; description - "Requested time period or dampening-period is too short. This - can be for both periodic and on-change subscriptions (with or - without dampening.) Hints suggesting alternative periods may - be returned as supplemental information."; + "The requested time period or 'dampening-period' is too short. + This can be for both periodic and on-change subscriptions + (with or without dampening). Hints suggesting alternative + periods may be returned as supplemental information."; } identity update-too-big { @@ -177,9 +153,9 @@ module ietf-yang-push { base sn:modify-subscription-error; base sn:subscription-suspended-reason; description - "Periodic or on-change push update datatrees exceed a maximum - size limit. Hints on estimated size of what was too big may - be returned as supplemental information."; + "Periodic or on-change push update data trees exceed a maximum + size limit. Hints on the estimated size of what was too big + may be returned as supplemental information."; } identity sync-too-big { @@ -188,9 +164,9 @@ module ietf-yang-push { base resync-subscription-error; base sn:subscription-suspended-reason; description - "Sync-on-start or resynchronization datatree exceeds a maximum - size limit. Hints on estimated size of what was too big may - be returned as supplemental information."; + "The 'sync-on-start' or resynchronization data tree exceeds a + maximum size limit. Hints on the estimated size of what was + too big may be returned as supplemental information."; } identity unchanging-selection { @@ -198,13 +174,13 @@ module ietf-yang-push { base sn:modify-subscription-error; base sn:subscription-terminated-reason; description - "Selection filter is unlikely to ever select datatree nodes. - This means that based on the subscriber's current access - rights, the publisher recognizes that the selection filter is - unlikely to ever select datatree nodes which change. Examples - for this might be that node or subtree doesn't exist, read - access is not permitted for a receiver, or static objects that - only change at reboot have been chosen."; + "The selection filter is unlikely to ever select data tree + nodes. This means that based on the subscriber's current + access rights, the publisher recognizes that the selection + filter is unlikely to ever select data tree nodes that change. + Examples for this might be that the node or subtree doesn't + exist, read access is not permitted for a receiver, or static + objects that only change at reboot have been chosen."; } /* @@ -215,13 +191,13 @@ module ietf-yang-push { type enumeration { enum create { description - "A change that refers to the creation of a new datastore - node."; + "A change that refers to the creation of a new + datastore node."; } enum delete { description - "A change that refers to the deletion of a datastore - node."; + "A change that refers to the deletion of a + datastore node."; } enum insert { description @@ -242,13 +218,14 @@ module ietf-yang-push { description "Specifies different types of datastore changes. - This type is based on the edit operations defined for YANG - Patch, with the difference that it is valid for a receiver to - process an update record which performs a create operation on - a datastore node the receiver believes exists, or to process a - delete on a datastore node the receiver believes is missing."; + This type is based on the edit operations defined for + YANG Patch, with the difference that it is valid for a + receiver to process an update record that performs a + 'create' operation on a datastore node the receiver believes + exists or to process a delete on a datastore node the + receiver believes is missing."; reference - "RFC 8072: YANG Patch Media Type, section 2.5"; + "RFC 8072: YANG Patch Media Type, Section 2.5"; } typedef selection-filter-ref { @@ -263,7 +240,7 @@ module ietf-yang-push { type uint32; description "A period of time, measured in units of 0.01 seconds."; - } + } /* * GROUP DEFINITIONS @@ -271,9 +248,8 @@ module ietf-yang-push { grouping datastore-criteria { description - "A grouping to define criteria for which selected objects - from a targeted datastore should be included in push - updates."; + "A grouping to define criteria for which selected objects from + a targeted datastore should be included in push updates."; leaf datastore { type identityref { base ds:datastore; @@ -298,43 +274,50 @@ module ietf-yang-push { "This parameter identifies the portions of the target datastore to retrieve."; reference - "RFC 6241: Network Configuration Protocol, Section 6."; + "RFC 6241: Network Configuration Protocol (NETCONF), + Section 6"; } leaf datastore-xpath-filter { if-feature "sn:xpath"; type yang:xpath1.0; description "This parameter contains an XPath expression identifying - the portions of the target datastore to retrieve. + the portions of the target datastore to retrieve. - If the expression returns a node-set, all nodes in the - node-set are selected by the filter. Otherwise, if the - expression does not return a node-set, the filter - doesn't select any nodes. + If the expression returns a node set, all nodes in the + node set are selected by the filter. Otherwise, if the + expression does not return a node set, the filter + doesn't select any nodes. - The expression is evaluated in the following XPath - context: + The expression is evaluated in the following XPath + context: - o The set of namespace declarations is the set of prefix - and namespace pairs for all YANG modules implemented - by the server, where the prefix is the YANG module - name and the namespace is as defined by the - 'namespace' statement in the YANG module. + o The set of namespace declarations is the set of prefix + and namespace pairs for all YANG modules implemented + by the server, where the prefix is the YANG module + name and the namespace is as defined by the + 'namespace' statement in the YANG module. - If the leaf is encoded in XML, all namespace - declarations in scope on the 'stream-xpath-filter' - leaf element are added to the set of namespace - declarations. If a prefix found in the XML is - already present in the set of namespace declarations, - the namespace in the XML is used. + If the leaf is encoded in XML, all namespace + declarations in scope on the 'stream-xpath-filter' + leaf element are added to the set of namespace + declarations. If a prefix found in the XML is + already present in the set of namespace declarations, + the namespace in the XML is used. - o The set of variable bindings is empty. + o The set of variable bindings is empty. - o The function library is the core function library, and - the XPath functions defined in section 10 in RFC 7950. + o The function library is comprised of the core + function library and the XPath functions defined in + Section 10 in RFC 7950. - o The context node is the root node of the target - datastore."; + o The context node is the root node of the target + datastore."; + reference + "XML Path Language (XPath) Version 1.0 + (https://www.w3.org/TR/1999/REC-xpath-19991116) + RFC 7950: The YANG 1.1 Data Modeling Language, + Section 10"; } } } @@ -346,23 +329,23 @@ module ietf-yang-push { choice selection-filter { description "The source of the selection filter applied to the - subscription. This will come either referenced from a global - list, or be provided within the subscription itself."; + subscription. This will either (1) come referenced from a + global list or (2) be provided in the subscription itself."; case by-reference { description - "Incorporate a filter that has been configured + "Incorporates a filter that has been configured separately."; leaf selection-filter-ref { type selection-filter-ref; mandatory true; description - "References an existing selection filter which is to be + "References an existing selection filter that is to be applied to the subscription."; } } case within-subscription { description - "Local definition allows a filter to have the same + "A local definition allows a filter to have the same lifecycle as the subscription."; uses selection-filter-types; } @@ -371,7 +354,7 @@ module ietf-yang-push { grouping update-policy-modifiable { description - "This grouping describes the datastore specific subscription + "This grouping describes the datastore-specific subscription conditions that can be changed during the lifetime of the subscription."; choice update-trigger { @@ -382,26 +365,27 @@ module ietf-yang-push { container periodic { presence "indicates a periodic subscription"; description - "The publisher is requested to notify periodically the - current values of the datastore as defined by the - selection filter."; + "The publisher is requested to periodically notify the + receiver regarding the current values of the datastore + as defined by the selection filter."; leaf period { type centiseconds; mandatory true; description - "Duration of time which should occur between periodic - push updates, in one hundredths of a second."; + "Duration of time that should occur between periodic + push updates, in units of 0.01 seconds."; } leaf anchor-time { type yang:date-and-time; description "Designates a timestamp before or after which a series - of periodic push updates are determined. The next - update will take place at a whole multiple interval - from the anchor time. For example, for an anchor time - is set for the top of a particular minute and a period - interval of a minute, updates will be sent at the top - of every minute this subscription is active."; + of periodic push updates are determined. The next + update will take place at a point in time that is a + multiple of a period from the 'anchor-time'. + For example, for an 'anchor-time' that is set for the + top of a particular minute and a period interval of a + minute, updates will be sent at the top of every + minute that this subscription is active."; } } } @@ -410,22 +394,22 @@ module ietf-yang-push { container on-change { presence "indicates an on-change subscription"; description - "The publisher is requested to notify changes in values - in the datastore subset as defined by a selection - filter."; + "The publisher is requested to notify the receiver + regarding changes in values in the datastore subset as + defined by a selection filter."; leaf dampening-period { type centiseconds; default "0"; description "Specifies the minimum interval between the assembly of successive update records for a single receiver of a - subscription. Whenever subscribed objects change, and - a dampening period interval (which may be zero) has + subscription. Whenever subscribed objects change and + a dampening-period interval (which may be zero) has elapsed since the previous update record creation for - a receiver, then any subscribed objects and properties - which have changed since the previous update record + a receiver, any subscribed objects and properties + that have changed since the previous update record will have their current values marshalled and placed - into a new update record."; + in a new update record."; } } } @@ -439,44 +423,45 @@ module ietf-yang-push { uses update-policy-modifiable { augment "update-trigger/on-change/on-change" { description - "Includes objects not modifiable once subscription is - established."; + "Includes objects that are not modifiable once a + subscription is established."; leaf sync-on-start { type boolean; default "true"; description - "When this object is set to false, it restricts an - on-change subscription from sending push-update - notifications. When false, pushing a full selection per - the terms of the selection filter MUST NOT be done for - this subscription. Only updates about changes, - i.e. only push-change-update notifications are sent. - When true (default behavior), in order to facilitate a - receiver's synchronization, a full update is sent when - the subscription starts using a push-update - notification. After that, push-change-update - notifications are exclusively sent unless the publisher - chooses to resync the subscription via a new push-update - notification."; + "When this object is set to 'false', (1) it restricts an + on-change subscription from sending 'push-update' + notifications and (2) pushing a full selection per the + terms of the selection filter MUST NOT be done for + this subscription. Only updates about changes + (i.e., only 'push-change-update' notifications) + are sent. When set to 'true' (the default behavior), + in order to facilitate a receiver's synchronization, + a full update is sent, via a 'push-update' notification, + when the subscription starts. After that, + 'push-change-update' notifications are exclusively sent, + unless the publisher chooses to resync the subscription + via a new 'push-update' notification."; } leaf-list excluded-change { type change-type; description - "Use to restrict which changes trigger an update. For - example, if modify is excluded, only creation and - deletion of objects is reported."; + "Used to restrict which changes trigger an update. For + example, if a 'replace' operation is excluded, only the + creation and deletion of objects are reported."; } } } } + grouping hints { description - "Parameters associated with some error for a subscription + "Parameters associated with an error for a subscription made upon a datastore."; leaf period-hint { type centiseconds; description - "Returned when the requested time period is too short. This + "Returned when the requested time period is too short. This hint can assert a viable period for either a periodic push cadence or an on-change dampening interval."; } @@ -489,31 +474,31 @@ module ietf-yang-push { leaf object-count-estimate { type uint32; description - "If there are too many objects which could potentially be + "If there are too many objects that could potentially be returned by the selection filter, this identifies the - estimate of the number of objects which the filter would + estimate of the number of objects that the filter would potentially pass."; } leaf object-count-limit { type uint32; description - "If there are too many objects which could be returned by + "If there are too many objects that could be returned by the selection filter, this identifies the upper limit of - the publisher's ability to service for this subscription."; + the publisher's ability to service this subscription."; } leaf kilobytes-estimate { type uint32; description "If the returned information could be beyond the capacity - of the publisher, this would identify the data size which - could result from this selection filter."; + of the publisher, this would identify the estimated + data size that could result from this selection filter."; } leaf kilobytes-limit { type uint32; description "If the returned information would be beyond the capacity of the publisher, this identifies the upper limit of the - publisher's ability to service for this subscription."; + publisher's ability to service this subscription."; } } @@ -527,11 +512,11 @@ module ietf-yang-push { "This RPC allows a subscriber of an active on-change subscription to request a full push of objects. - A successful invocation results in a push-update of all + A successful invocation results in a 'push-update' of all datastore nodes that the subscriber is permitted to access. This RPC can only be invoked on the same session on which the - subscription is currently active. In case of an error, a - resync-subscription-error is sent as part of an error + subscription is currently active. In the case of an error, a + 'resync-subscription-error' is sent as part of an error response."; input { leaf id { @@ -548,9 +533,9 @@ module ietf-yang-push { description "If a 'resync-subscription' RPC fails, the subscription is not resynced and the RPC error response MUST indicate the - reason for this failure. This YANG-data MAY be inserted as - structured data within a subscription's RPC error response - to indicate the failure reason."; + reason for this failure. This yang-data MAY be inserted as + structured data in a subscription's RPC error response + to indicate the reason for the failure."; leaf reason { type identityref { base resync-subscription-error; @@ -577,7 +562,7 @@ module ietf-yang-push { for the subscription to RPC input."; case datastore { description - "Information specifying the parameters of an request for a + "Information specifying the parameters of a request for a datastore subscription."; uses datastore-criteria; } @@ -589,11 +574,11 @@ module ietf-yang-push { "If any 'establish-subscription' RPC parameters are unsupportable against the datastore, a subscription is not created and the RPC error response MUST indicate the reason - why the subscription failed to be created. This YANG-data - MAY be inserted as structured data within a subscription's - RPC error response to indicate the failure reason. This - YANG-data MUST be inserted if hints are to be provided back - to the subscriber."; + why the subscription failed to be created. This yang-data + MAY be inserted as structured data in a subscription's + RPC error response to indicate the reason for the failure. + This yang-data MUST be inserted if hints are to be provided + back to the subscriber."; leaf reason { type identityref { base sn:establish-subscription-error; @@ -619,7 +604,7 @@ module ietf-yang-push { for the subscription to RPC input."; case datastore { description - "Information specifying the parameters of an request for a + "Information specifying the parameters of a request for a datastore subscription."; uses datastore-criteria; } @@ -628,11 +613,11 @@ module ietf-yang-push { rc:yang-data modify-subscription-datastore-error-info { container modify-subscription-datastore-error-info { description - "This YANG-data MAY be provided as part of a subscription's + "This yang-data MAY be provided as part of a subscription's RPC error response when there is a failure of a - 'modify-subscription' RPC which has been made against a - datastore. This YANG-data MUST be used if hints are to be - provides back to the subscriber."; + 'modify-subscription' RPC that has been made against a + datastore. This yang-data MUST be used if hints are to be + provided back to the subscriber."; leaf reason { type identityref { base sn:modify-subscription-error; @@ -651,36 +636,36 @@ module ietf-yang-push { notification push-update { description - "This notification contains a push update, containing data - subscribed to via a subscription. This notification is sent - for periodic updates, for a periodic subscription. It can - also be used for synchronization updates of an on-change - subscription. This notification shall only be sent to - receivers of a subscription. It does not constitute a - general-purpose notification that would be subscribable as + "This notification contains a push update that in turn contains + data subscribed to via a subscription. In the case of a + periodic subscription, this notification is sent for periodic + updates. It can also be used for synchronization updates of + an on-change subscription. This notification shall only be + sent to receivers of a subscription. It does not constitute + a general-purpose notification that would be subscribable as part of the NETCONF event stream by any receiver."; leaf id { type sn:subscription-id; description - "This references the subscription which drove the + "This references the subscription that drove the notification to be sent."; } anydata datastore-contents { description "This contains the updated data. It constitutes a snapshot - at the time-of-update of the set of data that has been + at the time of update of the set of data that has been subscribed to. The snapshot corresponds to the same - snapshot that would be returned in a corresponding get + snapshot that would be returned in a corresponding 'get' operation with the same selection filter parameters applied."; } leaf incomplete-update { type empty; description - "This is a flag which indicates that not all datastore + "This is a flag that indicates that not all datastore nodes subscribed to are included with this update. In other words, the publisher has failed to fulfill its full - subscription obligations, and despite its best efforts is + subscription obligations and, despite its best efforts, is providing an incomplete set of objects."; } } @@ -688,33 +673,33 @@ module ietf-yang-push { notification push-change-update { if-feature "on-change"; description - "This notification contains an on-change push update. This + "This notification contains an on-change push update. This notification shall only be sent to the receivers of a - subscription. It does not constitute ageneral-purpose + subscription. It does not constitute a general-purpose notification that would be subscribable as part of the NETCONF event stream by any receiver."; leaf id { type sn:subscription-id; description - "This references the subscription which drove the + "This references the subscription that drove the notification to be sent."; } container datastore-changes { description "This contains the set of datastore changes of the target - datastore starting at the time of the previous update, per + datastore, starting at the time of the previous update, per the terms of the subscription."; uses ypatch:yang-patch; } leaf incomplete-update { type empty; description - "The presence of this object indicates not all changes which - have occurred since the last update are included with this - update. In other words, the publisher has failed to - fulfill its full subscription obligations, for example in - cases where it was not able to keep up with a change - burst."; + "The presence of this object indicates that not all changes + that have occurred since the last update are included with + this update. In other words, the publisher has failed to + fulfill its full subscription obligations -- for example, + in cases where it was not able to keep up with a burst of + changes."; } } @@ -735,9 +720,9 @@ module ietf-yang-push { description "Specifies the selection filter and where it originated from. If the 'selection-filter-ref' is populated, the - filter within the subscription came from the 'filters' - container. Otherwise it is populated in-line as part of - the subscription itself."; + filter in the subscription came from the 'filters' + container. Otherwise, it is populated in-line as part + of the subscription itself."; } } } @@ -761,9 +746,9 @@ module ietf-yang-push { description "Specifies the selection filter and where it originated from. If the 'selection-filter-ref' is populated, the - filter within the subscription came from the 'filters' - container. Otherwise it is populated in-line as part of - the subscription itself."; + filter in the subscription came from the 'filters' + container. Otherwise, it is populated in-line as part + of the subscription itself."; } } } @@ -776,11 +761,11 @@ module ietf-yang-push { augment "/sn:filters" { description "This augmentation allows the datastore to be included as part - of the selection filtering criteria for a subscription."; + of the selection-filtering criteria for a subscription."; list selection-filter { key "filter-id"; description - "A list of pre-configured filters that can be applied + "A list of preconfigured filters that can be applied to datastore subscriptions."; leaf filter-id { type string; @@ -795,15 +780,16 @@ module ietf-yang-push { augment "/sn:subscriptions/sn:subscription" { when 'yp:datastore'; description - "This augmentation adds many datastore specific objects to a - subscription."; + "This augmentation adds objects to a subscription that are + specific to a datastore subscription, i.e., a subscription to + a stream of datastore node updates."; uses update-policy; } augment "/sn:subscriptions/sn:subscription/sn:target" { description "This augmentation allows the datastore to be included as - part of the selection filtering criteria for a subscription."; + part of the selection-filtering criteria for a subscription."; case datastore { uses datastore-criteria; } diff --git a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang similarity index 82% rename from experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang rename to experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang index 35ed77854..0ff7991df 100644 --- a/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2024-07-02.yang +++ b/experimental/ietf-extracted-YANG-modules/ietf-yang-semver@2025-01-07.yang @@ -50,8 +50,8 @@ module ietf-yang-semver { // note. // RFC Ed. update the ys:version to "1.0.0". - revision 2024-07-02 { - ys:version "1.0.0-draft-ietf-netmod-yang-semver-17"; + revision 2025-01-07 { + ys:version "0.18.0"; description "Initial revision"; reference @@ -87,7 +87,7 @@ module ietf-yang-semver { version."; reference "XXXX: YANG Semantic Versioning; - Section 3.2, YANG Semantic Version Extension"; + Section 4.2, YANG Semantic Version Extension"; } extension recommended-min-version { @@ -97,40 +97,34 @@ module ietf-yang-semver { one that is greater than or equal to the specified version. The format of the recommended-min-version extension argument - MUST conform to the 'version' typedef defined in this module. + must be the MAJOR.MINOR.PATCH components from the + 'version' typedef defined in this module (i.e., excluding + the '_compatible' and '_non_compatible' modifiers as + well as any metadata). The statement MUST only be a substatement of the import - statement. Zero, one or more 'recommended-min-version' + statement. Zero or one 'recommended-min-version' statements per parent statement are allowed. No substatements for this extension have been standardized. - If specified multiple times, then any module revision that - satisfies at least one of the 'recommended-min-version' - statements is an acceptable recommended version for - import. - A module to be imported is considered as meeting the recommended minimum version criteria if it meets one of the following conditions: - * Has the exact MAJOR, MINOR, PATCH and '_compatible' or - '_non_compatible' modifiers as in the + * Has the exact same MAJOR, MINOR, PATCH as in the recommend-min-version value. * Has the same MAJOR and MINOR version numbers and a - greater PATCH number. In this case, '_compatible' and - '_non_compatible modifiers' are ignored. + greater PATCH number. * Has the same MAJOR version number and greater MINOR number. - In this case the PATCH number and the '_compatible' and - '_non_compatible' modifiers are ignored. + In this case the PATCH number is ignored. * Has a greater MAJOR version number. In this case MINOR - and PATCH numbers and '_compatible' and '_non_compatible' - modifiers are ignored. + and PATCH numbers are ignored. Adding, removing or updating a 'recommended-min-version' statement to an import is a backwards-compatible change."; reference - "XXXX: YANG Semantic Versioning; Section 4, + "XXXX: YANG Semantic Versioning; Section 5, Import Module by Semantic Version"; } @@ -140,6 +134,7 @@ module ietf-yang-semver { typedef version { type string { + length "5..128"; pattern '[0-9]+[.][0-9]+[.][0-9]+(_(non_)?compatible)?' + '(-[A-Za-z0-9.-]+[.-][0-9]+)?([+][A-Za-z0-9.-]+)?'; } @@ -151,3 +146,4 @@ module ietf-yang-semver { "RFC XXXX: YANG Semantic Versioning."; } } + diff --git a/standard/ietf/RFC/iana-msd-types.yang b/standard/ietf/RFC/iana-msd-types.yang new file mode 120000 index 000000000..52cb1dabc --- /dev/null +++ b/standard/ietf/RFC/iana-msd-types.yang @@ -0,0 +1 @@ +iana-msd-types@2025-01-10.yang \ No newline at end of file diff --git a/standard/ietf/RFC/iana-msd-types@2025-01-10.yang b/standard/ietf/RFC/iana-msd-types@2025-01-10.yang new file mode 100644 index 000000000..491c40fda --- /dev/null +++ b/standard/ietf/RFC/iana-msd-types@2025-01-10.yang @@ -0,0 +1,130 @@ +module iana-msd-types { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:iana-msd-types"; + prefix iana-msd-types; + + organization + "Internet Assigned Numbers Authority (IANA)"; + + contact + "Internet Assigned Numbers Authority + + ICANN + 12025 Waterfront Drive, Suite 300 + Los Angeles, CA 90094-2536 + United States of America + + Tel: +1 310 301 5800 + "; + + description + "The YANG module defines the identities for Maximum Segment + Identifier (SID) Depth (MSD) Types. + + This YANG module is maintained by IANA and reflects the 'IGP + MSD-Types' registry. + + Copyright (c) 2025 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 Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This initial version of this YANG module is part of RFC 9702 + (https://www.rfc-editor.org/info/rfc9702); see the RFC itself + for full legal notices. + + The latest version of this YANG module is available at + https://www.iana.org/assignments/yang-parameters."; + + revision 2025-01-10 { + description + "Initial Version"; + reference + "RFC 9702: YANG Data Model for Maximum Segment Identifier (SID) + Depth Types and MPLS Maximum SID Depth"; + } + + identity msd-base { + description + "Base identity for Maximum SID Depth (MSD) Type. The MSD type + definition is defined in the IANA 'IGP MSD-Types' registry."; + } + + identity msd-base-mpls { + base msd-base; + description + "Base identity of MSD types for the MPLS data plane."; + } + + identity base-mpls-imposition-msd { + base msd-base-mpls; + description + "Base MPLS Imposition MSD."; + reference + "RFC 8491: Signaling Maximum SID Depth (MSD) Using IS-IS + RFC 8476: Signaling Maximum SID Depth (MSD) Using OSPF + RFC 8664: Path Computation Element Communication Protocol + (PCEP) Extensions for Segment Routing + RFC 8814: Signaling Maximum SID Depth (MSD) Using the Border + Gateway Protocol - Link State"; + } + + identity erld-msd { + base msd-base-mpls; + description + "msd-erld is defined to advertise the Entropy Readable + Label Depth (ERLD)."; + reference + "RFC 8662: Entropy Label for Source Packet Routing in + Networking (SPRING) Tunnels + RFC 9088: Signaling Entropy Label Capability and Entropy + Readable Label Depth Using IS-IS"; + } + + identity msd-base-srh { + base msd-base; + description + "Base identity of MSD types for Segment Routing Header (SRH)."; + } + + identity srh-max-sl { + base msd-base-srh; + description + "The Maximum Segments Left MSD type."; + reference + "RFC 9352: IS-IS Extensions to Support Segment Routing + over the IPv6 Data Plane"; + } + + identity srh-max-end-pop { + base msd-base-srh; + description + "The Maximum End Pop MSD Type."; + reference + "RFC 9352: IS-IS Extensions to Support Segment Routing + over the IPv6 Data Plane"; + } + + identity srh-max-h-encaps { + base msd-base-srh; + description + "The Maximum H.Encaps MSD Type."; + reference + "RFC 9352: IS-IS Extensions to Support Segment Routing + over the IPv6 Data Plane"; + } + + identity srh-max-end-d { + base msd-base-srh; + description + "The Maximum End D MSD Type."; + reference + "RFC 9352: IS-IS Extensions to Support Segment Routing + over the IPv6 Data Plane"; + } +} diff --git a/standard/ietf/RFC/ietf-mpls-msd.yang b/standard/ietf/RFC/ietf-mpls-msd.yang new file mode 120000 index 000000000..a61df94a4 --- /dev/null +++ b/standard/ietf/RFC/ietf-mpls-msd.yang @@ -0,0 +1 @@ +ietf-mpls-msd@2025-01-10.yang \ No newline at end of file diff --git a/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang b/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang new file mode 100644 index 000000000..6161cea3d --- /dev/null +++ b/standard/ietf/RFC/ietf-mpls-msd@2025-01-10.yang @@ -0,0 +1,118 @@ +module ietf-mpls-msd { + yang-version 1.1; + namespace "urn:ietf:params:xml:ns:yang:ietf-mpls-msd"; + prefix mpls-msd; + + import ietf-routing { + prefix rt; + reference + "RFC 8349: A YANG Data Model for Routing + Management (NMDA Version)"; + } + import ietf-mpls { + prefix mpls; + reference + "RFC 8960: A YANG Data Model for MPLS Base"; + } + import iana-msd-types { + prefix iana-msd-types; + } + + organization + "IETF Multiprotocol Label Switching (MPLS) Working Group"; + contact + "WG Web: + WG List: + + Author: Yingzhen Qu + + Author: Acee Lindem + + Author: Stephane Litkowski + + Author: Jeff Tantsura + + + "; + description + "This YANG module augments the base MPLS model, and it is to + provide support for different types of Maximum SID Depth (MSD). + + This YANG module conforms to the Network Management + Datastore Architecture (NMDA) as described in RFC 8342. + + Copyright (c) 2025 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 Revised BSD License set + forth in Section 4.c of the IETF Trust's Legal Provisions + Relating to IETF Documents + (https://trustee.ietf.org/license-info). + + This version of this YANG module is part of RFC 9702; + see the RFC itself for full legal notices."; + + revision 2025-01-10 { + description + "Initial Version"; + reference + "RFC 9702: YANG Data Model for Maximum Segment Identifier (SID) + Depth Types and MPLS Maximum SID Depth"; + } + + grouping msd-type-value { + description + "Grouping for MSD type and value."; + leaf msd-type { + type identityref { + base iana-msd-types:msd-base-mpls; + } + description + "MSD types. The MSD type is defined in IANA 'IGP + MSD-Types' registry."; + } + leaf msd-value { + type uint8; + description + "MSD value, in the range of 0-255. 0 represents the lack + of ability to support a SID stack of any depth."; + } + } + augment "/rt:routing/mpls:mpls" { + description + "This module augments MPLS data model (RFC 8960) + with Node MSD."; + container node-msds { + config false; + description + "Maximum SID Depth (MSD) of a node."; + list node-msd { + key "msd-type"; + uses msd-type-value; + description + "List of different types of Node MSDs. For the same + type, the value of Node MSD is the smallest among Link MSD + values."; + } + } + } + + augment "/rt:routing/mpls:mpls/mpls:interfaces/mpls:interface" { + description + "This module augments MPLS data model (RFC 8960) + with Link MSD."; + container link-msds { + config false; + description + "Maximum SID Depth (MSD) of an interface."; + list link-msd { + key "msd-type"; + uses msd-type-value; + description + "List of different types of MSDs on the link."; + } + } + } +}