| rfc9922.original | rfc9922.txt | |||
|---|---|---|---|---|
| netmod Q. Ma, Ed. | Internet Engineering Task Force (IETF) Q. Ma, Ed. | |||
| Internet-Draft Q. Wu | Request for Comments: 9922 Q. Wu | |||
| Intended status: Standards Track Huawei | Category: Standards Track Huawei | |||
| Expires: 8 February 2026 M. Boucadair, Ed. | ISSN: 2070-1721 M. Boucadair, Ed. | |||
| Orange | Orange | |||
| D. King | D. King | |||
| Lancaster University | Lancaster University | |||
| 7 August 2025 | February 2026 | |||
| A Common YANG Data Model for Scheduling | A Common YANG Data Model for Scheduling | |||
| draft-ietf-netmod-schedule-yang-10 | ||||
| Abstract | Abstract | |||
| This document defines common types and groupings that are meant to be | This document defines common types and groupings that are meant to be | |||
| used for scheduling purposes such as event, policy, services, or | used for scheduling purposes, such as events, policies, services, or | |||
| resources based on date and time. For the sake of better modularity, | resources based on date and time. For the sake of better modularity, | |||
| the YANG module includes a set of recurrence-related groupings with | the YANG module includes a set of recurrence-related groupings with | |||
| varying levels of representation (i.e., from basic to advanced) to | varying levels of representation (i.e., from basic to advanced) to | |||
| accommodate a variety of requirements. It also defines groupings for | accommodate a variety of requirements. It also defines groupings for | |||
| validating requested schedules and reporting scheduling status. | validating requested schedules and reporting scheduling statuses. | |||
| Discussion Venues | ||||
| This note is to be removed before publishing as an RFC. | ||||
| Discussion of this document takes place on the Network Modeling | ||||
| (NETMOD) Working Group mailing list (netmod@ietf.org), which is | ||||
| archived at https://mailarchive.ietf.org/arch/browse/netmod/. | ||||
| Source for this draft and an issue tracker can be found at | ||||
| https://github.com/netmod-wg/schedule-yang. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | This document is a product of the Internet Engineering Task Force | |||
| Task Force (IETF). Note that other groups may also distribute | (IETF). It represents the consensus of the IETF community. It has | |||
| working documents as Internet-Drafts. The list of current Internet- | received public review and has been approved for publication by the | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | Information about the current status of this document, any errata, | |||
| and may be updated, replaced, or obsoleted by other documents at any | and how to provide feedback on it may be obtained at | |||
| time. It is inappropriate to use Internet-Drafts as reference | https://www.rfc-editor.org/info/rfc9922. | |||
| material or to cite them other than as "work in progress." | ||||
| This Internet-Draft will expire on 8 February 2026. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2025 IETF Trust and the persons identified as the | Copyright (c) 2026 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Editorial Note (To be removed by RFC Editor) . . . . . . 4 | 2. Conventions and Definitions | |||
| 2. Conventions and Definitions . . . . . . . . . . . . . . . . . 4 | 3. Module Overview | |||
| 3. Module Overview . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.1. Features | |||
| 3.1. Features . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3.2. Types and Identities | |||
| 3.2. Types and Identities . . . . . . . . . . . . . . . . . . 5 | 3.3. Scheduling Groupings | |||
| 3.3. Scheduling Groupings . . . . . . . . . . . . . . . . . . 6 | 3.3.1. The "generic-schedule-params" Grouping | |||
| 3.3.1. The "generic-schedule-params" Grouping . . . . . . . 7 | 3.3.2. The "period-of-time" Grouping | |||
| 3.3.2. The "period-of-time" Grouping . . . . . . . . . . . . 8 | 3.3.3. The "recurrence-basic" Grouping | |||
| 3.3.3. The "recurrence-basic" Grouping . . . . . . . . . . . 9 | 3.3.4. The "recurrence-utc" Grouping | |||
| 3.3.4. The "recurrence-utc" Grouping . . . . . . . . . . . . 9 | 3.3.5. The "recurrence-with-time-zone" Grouping | |||
| 3.3.5. The "recurrence-with-time-zone" Grouping . . . . . . 11 | 3.3.6. The "recurrence-utc-with-periods" Grouping | |||
| 3.3.6. The "recurrence-utc-with-periods" Grouping . . . . . 12 | 3.3.7. The "recurrence-time-zone-with-periods" Grouping | |||
| 3.3.7. The "recurrence-time-zone-with-periods" Grouping . . 12 | 3.3.8. The "icalendar-recurrence" Grouping | |||
| 3.3.8. The "icalendar-recurrence" Grouping . . . . . . . . . 13 | ||||
| 3.3.9. The "schedule-status", | 3.3.9. The "schedule-status", | |||
| "schedule-status-with-time-zone", and | "schedule-status-with-time-zone", and | |||
| "schedule-status-with-name" Groupings . . . . . . . . 16 | "schedule-status-with-name" Groupings | |||
| 3.4. Features Use and Augmentations . . . . . . . . . . . . . 18 | 3.4. Features Use and Augmentations | |||
| 4. Some Usage Restrictions . . . . . . . . . . . . . . . . . . . 18 | 4. Some Usage Restrictions | |||
| 5. Relationship to the DISMAN-SCHEDULE-MIB . . . . . . . . . . . 19 | 5. Relationship to the DISMAN-SCHEDULE-MIB | |||
| 6. The "ietf-schedule" YANG Module . . . . . . . . . . . . . . . 21 | 6. The "ietf-schedule" YANG Module | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 39 | 7. Security Considerations | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 40 | 8. IANA Considerations | |||
| 8.1. The "IETF XML" Registry . . . . . . . . . . . . . . . . . 40 | 8.1. The IETF XML Registry | |||
| 8.2. The "YANG Module Names" Registry . . . . . . . . . . . . 40 | 8.2. The YANG Module Names Registry | |||
| 9. References . . . . . . . . . . . . . . . . . . . . . . . . . 40 | 9. References | |||
| 9.1. Normative References . . . . . . . . . . . . . . . . . . 40 | 9.1. Normative References | |||
| 9.2. Informative References . . . . . . . . . . . . . . . . . 41 | 9.2. Informative References | |||
| Appendix A. Examples of Scheduling Format Representation . . . . 43 | Appendix A. Examples of Scheduling Format Representation | |||
| A.1. The "generic-schedule-params" Grouping . . . . . . . . . 46 | A.1. The "generic-schedule-params" Grouping | |||
| A.2. The "period-of-time" Grouping . . . . . . . . . . . . . . 47 | A.2. The "period-of-time" Grouping | |||
| A.3. The "recurrence-basic" Grouping . . . . . . . . . . . . . 48 | A.3. The "recurrence-basic" Grouping | |||
| A.4. The "recurrence-utc" Grouping . . . . . . . . . . . . . . 48 | A.4. The "recurrence-utc" Grouping | |||
| A.5. The "recurrence-with-time-zone" Grouping . . . . . . . . 49 | A.5. The "recurrence-with-time-zone" Grouping | |||
| A.6. The "recurrence-utc-with-periods" Grouping . . . . . . . 49 | A.6. The "recurrence-utc-with-periods" Grouping | |||
| A.7. The "recurrence-time-zone-with-periods" Grouping . . . . 50 | A.7. The "recurrence-time-zone-with-periods" Grouping | |||
| A.8. The "icalendar-recurrence" Grouping . . . . . . . . . . . 50 | A.8. The "icalendar-recurrence" Grouping | |||
| A.9. The "schedule-status" Grouping . . . . . . . . . . . . . 53 | A.9. The "schedule-status" Grouping | |||
| Appendix B. Examples of Using/Extending the "ietf-schedule" | Appendix B. Examples of Using/Extending the "ietf-schedule" Module | |||
| Module . . . . . . . . . . . . . . . . . . . . . . . . . 54 | ||||
| B.1. Example: Schedule Tasks to Execute Based on a Recurrence | B.1. Example: Schedule Tasks to Execute Based on a Recurrence | |||
| Rule . . . . . . . . . . . . . . . . . . . . . . . . . . 54 | Rule | |||
| B.2. Example: Schedule Network Properties to Change Based on | B.2. Example: Schedule Network Properties to Change Based on | |||
| Date and Time . . . . . . . . . . . . . . . . . . . . . . 57 | Date and Time | |||
| Appendix C. Examples of Using "ietf-schedule" Module for Scheduled | Appendix C. Examples of Using the "ietf-schedule" Module for | |||
| Use of Resources Framework . . . . . . . . . . . . . . . 60 | Scheduled Use of Resources Framework | |||
| Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 61 | Acknowledgments | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 62 | Authors' Addresses | |||
| 1. Introduction | 1. Introduction | |||
| This document defines a common schedule YANG module ("ietf-schedule") | This document defines a common schedule YANG module ("ietf-schedule") | |||
| that can be used in several scheduling contexts, e.g., (but not | that can be used in several scheduling contexts, e.g., (but not | |||
| limited to) [I-D.ietf-opsawg-ucl-acl], | limited to) [YANG-NAC], [YANG-OAM], and [YANG-SCHEDULE]. The module | |||
| [I-D.ietf-opsawg-scheduling-oam-tests], and | includes a set of reusable groupings that are designed to be | |||
| [I-D.ietf-tvr-schedule-yang]. The module includes a set of reusable | applicable for scheduling purposes, such as events, policies, | |||
| groupings which are designed to be applicable for scheduling purposes | services, or resources based on date and time. It also defines | |||
| such as event, policy, services or resources based on date and time. | groupings for validating requested schedules and reporting scheduling | |||
| It also defines groupings for validating requested schedules and | statuses. | |||
| reporting scheduling status. | ||||
| This document does not make any assumption about the nature of | This document does not make any assumption about the nature of | |||
| actions that are triggered by the schedules. Detection and | actions that are triggered by the schedules. Detection and | |||
| resolution of any schedule conflicts are beyond the scope of this | resolution of any schedule conflicts are beyond the scope of this | |||
| document. | document. | |||
| Section 5 discusses the relationship with the Management Information | Section 5 discusses the relationship with the Management Information | |||
| Base (MIB) managed objects for scheduling management operations | Base (MIB) managed objects for scheduling management operations | |||
| defined in [RFC3231]. | defined in [RFC3231]. | |||
| Appendix A describes a set of examples to illustrate the use of the | Appendix A describes a set of examples to illustrate the use of the | |||
| common schedule groupings (Section 3.3). Appendix B provides sample | common schedule groupings (Section 3.3). Appendix B provides sample | |||
| modules to exemplify how future modules can use the extensibility | modules to exemplify how future modules can use the extensibility | |||
| provisions in the "ietf-schedule" module (Section 6). Also, | provisions in the "ietf-schedule" module (Section 6). Also, | |||
| Appendix C provides an example of using the "ietf-schedule" module | Appendix C provides an example of using the "ietf-schedule" module | |||
| for scheduled use of a resources framework (e.g., [RFC8413]). | for scheduled use of a resources framework (e.g., [RFC8413]). | |||
| 1.1. Editorial Note (To be removed by RFC Editor) | ||||
| Note to the RFC Editor: This section is to be removed prior to | ||||
| publication. | ||||
| This document contains placeholder values that need to be replaced | ||||
| with finalized values at the time of publication. This note | ||||
| summarizes all of the substitutions that are needed. No other RFC | ||||
| Editor instructions are specified elsewhere in this document. | ||||
| Please apply the following replacements: | ||||
| * XXXX --> the assigned RFC number for this draft | ||||
| * 2025-05-30 --> the actual date of the publication of this document | ||||
| 2. Conventions and Definitions | 2. Conventions and Definitions | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
| "OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
| BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| The meanings of the symbols in tree diagrams are defined in | The meanings of the symbols in tree diagrams are defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| This document uses the YANG terminology defined in Section 3 of | This document uses the YANG terminology defined in Section 3 of | |||
| [RFC7950]. | [RFC7950]. | |||
| The document makes use of the following terms: | This document makes use of the following terms: | |||
| Recurrence rule: Refers to a rule or repeating pattern for recurring | Recurrence rule: Refers to a rule or repeating pattern for recurring | |||
| events. See also Section 3.8.5.3 of [RFC5545] for a comprehensive | events. See also Section 3.8.5.3 of [RFC5545] for a comprehensive | |||
| iCalendar recurrence rule specification. | iCalendar recurrence rule specification. | |||
| Recurrence instance (or Recurrence, for short): Refers to an | Recurrence instance (or Recurrence, for short): Refers to an | |||
| instance that matches a recurrence rule. | instance that matches a recurrence rule. | |||
| Recurrence set: Refers to a set of recurrence instances. | Recurrence set: Refers to a set of recurrence instances. | |||
| Frequency: Characterizes the type of a recurrence rule. Values are | Frequency: Characterizes the type of a recurrence rule. Values are | |||
| taken from "FREQ" rule in Section 3.3.10 of [RFC5545]. | taken from the "FREQ" rule in Section 3.3.10 of [RFC5545]. | |||
| For example, repeating events based on an interval of a second or | For example, repeating events based on an interval of a second or | |||
| more are classified as recurrence with a frequency value of | more are classified as recurrence with a frequency value of | |||
| "SECONDLY". Frequency values defined as identities in the YANG | "SECONDLY". Frequency values defined as identities in the YANG | |||
| module are used in lowercase. | module are used in lowercase. | |||
| iCalendar: Refers to Internet Calendaring per [RFC5545]. | iCalendar: Refers to Internet Calendaring per [RFC5545]. | |||
| Interval: Refers to an integer that specifies interval at which a | Interval: Refers to an integer that specifies the interval at which | |||
| recurrence rule repeats. Values are taken from "INTERVAL" rule in | a recurrence rule repeats. Values are taken from the "INTERVAL" | |||
| Section 3.3.10 of [RFC5545]. | rule in Section 3.3.10 of [RFC5545]. | |||
| For example, "1", means every second for a secondly rule, every | For example, "1" means every second for a secondly rule, every | |||
| minute for a minutely rule, every hour for an hourly rule, etc. | minute for a minutely rule, every hour for an hourly rule, etc. | |||
| System: Refers to an entity that hosts a schedule that is managed | System: Refers to an entity that hosts a schedule that is managed | |||
| using the YANG module defined in this document. | using the YANG module defined in this document. | |||
| 3. Module Overview | 3. Module Overview | |||
| 3.1. Features | 3.1. Features | |||
| The "ietf-schedule" data model defines the recurrence related | The "ietf-schedule" data model defines the recurrence-related | |||
| groupings using a modular approach. To that aim, a variety of | groupings using a modular approach. To that aim, a variety of | |||
| representations of recurrence groupings ranging from basic to | representations of recurrence groupings ranging from basic to | |||
| advanced (iCalender-like) are defined. To allow for different | advanced (iCalender-like) are defined. To allow for different | |||
| options, two features are defined in the data model: | options, two features are defined in the data model: | |||
| * "basic-recurrence" | * "basic-recurrence" | |||
| * "icalendar-recurrence" | * "icalendar-recurrence" | |||
| Refer to Sections 3.4 and B.1 for the use of these features. | Refer to Section 3.4 and Appendix B.1 for the use of these features. | |||
| 3.2. Types and Identities | 3.2. Types and Identities | |||
| The "ietf-schedule" module (Section 6) defines the following | The "ietf-schedule" module (Section 6) defines the following | |||
| identities: | identities: | |||
| * "schedule-type": Indicates the type of a schedule. The following | * "schedule-type": Indicates the type of schedule. The following | |||
| types are defined so far: | types are defined so far: | |||
| - one-shot: The schedule will trigger an action that has either | - one-shot: The schedule will trigger an action that has either | |||
| the duration specified as 0 or the end time specified the same | the duration specified as 0 or the end time specified as the | |||
| as start time, and then the schedule will disable itself | same as the start time, and then the schedule will disable | |||
| (Section 3.3 of [RFC3231]). | itself (Section 3.3 of [RFC3231]). | |||
| - period: The schedule is a period-based schedule consisting | - period: This type is used for a period-based schedule | |||
| either (1) a start and end or (2) a start and positive duration | consisting of either (1) a start and end or (2) a start and | |||
| of time. If neither an end nor a duration is indicated, the | positive duration of time. If neither an end nor a duration is | |||
| period is considered to last forever. | indicated, the period is considered to last forever. | |||
| - recurrence: This type is used for a recurrence-based schedule. | - recurrence: This type is used for a recurrence-based schedule. | |||
| A recurrence may be periodic (i.e., repeat over the same | A recurrence may be periodic (i.e., repeat over the same | |||
| period, e.g., every five minutes) or not (i.e., repeat in a | period, e.g., every five minutes) or not (i.e., repeat in a | |||
| non-regular manner, e.g., every day at 8 and 9 AM). | non-regular manner, e.g., every day at 8 and 9 AM). | |||
| * "frequency-type": Characterizes the repeating interval rule of a | * "frequency-type": Characterizes the repeating interval rule of a | |||
| recurrence schedule (secondly, minutely, etc.). | recurrence schedule (secondly, minutely, etc.). | |||
| * "schedule-state": Indicates the status of a schedule (enabled, | * "schedule-state": Indicates the status of a schedule (enabled, | |||
| skipping to change at page 7, line 8 ¶ | skipping to change at line 255 ¶ | |||
| * "icalendar-recurrence" (Section 3.3.8) | * "icalendar-recurrence" (Section 3.3.8) | |||
| * "schedule-status", "schedule-status-with-time-zone", and | * "schedule-status", "schedule-status-with-time-zone", and | |||
| "schedule-status-with-name" (Section 3.3.9) | "schedule-status-with-name" (Section 3.3.9) | |||
| Examples are provided in Appendix A. | Examples are provided in Appendix A. | |||
| 3.3.1. The "generic-schedule-params" Grouping | 3.3.1. The "generic-schedule-params" Grouping | |||
| A system accepts and handles schedule requests, which may help | A system accepts and handles schedule requests, which may help | |||
| further automate the scheduling process of events, policy, services, | further automate the scheduling process of events, policies, | |||
| or resources based on date and time. The "generic-schedule-params" | services, or resources based on date and time. The "generic- | |||
| grouping (Figure 1) specifies a set of configuration parameters that | schedule-params" grouping (Figure 1) specifies a set of configuration | |||
| are used by a system for validating requested schedules. | parameters that are used by a system for validating requested | |||
| schedules. | ||||
| grouping generic-schedule-params: | grouping generic-schedule-params: | |||
| +-- description? string | +-- description? string | |||
| +-- time-zone-identifier? sys:timezone-name | +-- time-zone-identifier? sys:timezone-name | |||
| +-- validity? yang:date-and-time | +-- validity? yang:date-and-time | |||
| +-- max-allowed-start? yang:date-and-time | +-- max-allowed-start? yang:date-and-time | |||
| +-- min-allowed-start? yang:date-and-time | +-- min-allowed-start? yang:date-and-time | |||
| +-- max-allowed-end? yang:date-and-time | +-- max-allowed-end? yang:date-and-time | |||
| +-- discard-action? identityref | +-- discard-action? identityref | |||
| Figure 1: 'generic-schedule-params' Tree Structure | Figure 1: 'generic-schedule-params' Grouping Tree Structure | |||
| The "description" includes a description of the schedule. No | The "description" parameter includes a description of the schedule. | |||
| constraint is imposed on the structure nor the use of this parameter. | No constraint is imposed on the structure nor the use of this | |||
| parameter. | ||||
| The "time-zone-identifier" parameter, if provided, specifies the time | The "time-zone-identifier" parameter, if provided, specifies the time | |||
| zone reference [RFC7317] of the local date and time values. This | zone reference [RFC7317] of the local date and time values. This | |||
| parameter MUST be specified if any of the date and time values are in | parameter MUST be specified if any of the date and time values are in | |||
| the format of local time. It MUST NOT be applied to date and time | the format of local time. It MUST NOT be applied to date and time | |||
| values which are specified in the format of UTC or time zone offset | values that are specified in the format of UTC or time zone offset to | |||
| to UTC. | UTC. | |||
| The "validity" parameter specifies the date and time after which a | The "validity" parameter specifies the date and time after which a | |||
| schedule will not be considered as valid. It determines the latest | schedule will not be considered as valid. It determines the latest | |||
| time that a schedule can be started to execute independent of when it | time that a schedule can be started to execute independent of when it | |||
| ends and takes precedence over similar attributes that are provided | ends, and it takes precedence over similar attributes that are | |||
| at the schedule instance itself. A requested schedule may still be | provided at the schedule instance itself. A requested schedule may | |||
| accepted but any occurrences that start later than the configured | still be accepted, but any occurrences that start later than the | |||
| value will not be executed. | configured value will not be executed. | |||
| The "max/min-allowed-start" parameters specify the maximum/minimum | The "max/min-allowed-start" parameters specify the maximum/minimum | |||
| scheduled start date and time. A requested schedule will be rejected | scheduled start date and time. A requested schedule will be rejected | |||
| if the first occurrence of the schedule starts later/earlier than the | if the first occurrence of the schedule starts later/earlier than the | |||
| configured values. | configured values. | |||
| The "max-allowed-end" parameter specifies the maximum allowed end | The "max-allowed-end" parameter specifies the maximum allowed end | |||
| time of the last occurrence. A requested schedule will be rejected | time of the last occurrence. A requested schedule will be rejected | |||
| if the end time of last occurrence is later than the configured "max- | if the end time of the last occurrence is later than the configured | |||
| allowed-end" value. | "max-allowed-end" value. | |||
| The "discard-action" parameter specifies the action if a requested | The "discard-action" parameter specifies the action if a requested | |||
| schedule cannot be accepted for any reason and is discarded. | schedule cannot be accepted for any reason and is discarded. | |||
| Possible reasons include, but are not limited to, the requested | Possible reasons include, but are not limited to, the requested | |||
| schedule failing to satisfy the guards in this grouping, conflicting | schedule failing to satisfy the guards in this grouping, conflicting | |||
| with existing schedules, or being out-of-date (e.g., the expected | with existing schedules, or being out-of-date (e.g., the expected | |||
| start is already passed). | start has already passed). | |||
| * | ||||
| These parameters apply to all schedules on a system and are meant to | These parameters apply to all schedules on a system and are meant to | |||
| provide guards against stale configuration, too short schedule | provide guards against stale configuration, too short schedule | |||
| requests that would prevent validation by admins of some critical | requests that would prevent validation by admins of some critical | |||
| systems, etc. | systems, etc. | |||
| 3.3.2. The "period-of-time" Grouping | 3.3.2. The "period-of-time" Grouping | |||
| The "period-of-time" grouping (Figure 2) represents a time period | The "period-of-time" grouping (Figure 2) represents a time period | |||
| using either a start date and time ("period-start") and end date and | using either a start date and time ("period-start") and end date and | |||
| time ("period-end"), or a start date and time ("period-start") and a | time ("period-end") or a start date and time ("period-start") and a | |||
| non-negative time duration ("duration"). For the first format, the | non-negative time duration ("duration"). For the first format, the | |||
| start of the period MUST be no later than the end of the period. If | start of the period MUST be no later than the end of the period. If | |||
| neither an end date and time ("period-end") nor a duration | neither an end date and time ("period-end") nor a duration | |||
| ("duration") is indicated, the period is considered to last forever. | ("duration") is indicated, the period is considered to last forever. | |||
| If the duration ("duration") value is 0 or the end time ("period- | If the duration ("duration") value is 0 or the end time ("period- | |||
| end") is the same as the start time ("period-start"), the period is | end") is the same as the start time ("period-start"), the period is | |||
| considered as a one-shot schedule. If no start date and time | considered as a one-shot schedule. If no start date and time | |||
| ("period-start") is specified, the period is considered to start | ("period-start") is specified, the period is considered to start | |||
| immediately. | immediately. | |||
| The "time-zone-identifier" parameter indicates the identifier for the | The "time-zone-identifier" parameter indicates the identifier for the | |||
| time zone. This parameter MUST be specified if either the "period- | time zone. This parameter MUST be specified if either the "period- | |||
| start" or "period-end" value is reported in local time format. It | start" or "period-end" value is reported in local time format. It | |||
| MUST NOT be applied to date and time values which are specified in | MUST NOT be applied to date and time values that are specified in the | |||
| the format of UTC or time zone offset to UTC. | format of UTC or time zone offset to UTC. | |||
| The "period-description" includes a description of the period. No | The "period-description" parameter includes a description of the | |||
| constraint is imposed on the structure nor the use of this parameter. | period. No constraint is imposed on the structure nor the use of | |||
| this parameter. | ||||
| grouping period-of-time: | grouping period-of-time: | |||
| +-- period-description? string | +-- period-description? string | |||
| +-- period-start? yang:date-and-time | +-- period-start? yang:date-and-time | |||
| +-- time-zone-identifier? sys:timezone-name | +-- time-zone-identifier? sys:timezone-name | |||
| +-- (period-type)? | +-- (period-type)? | |||
| +--:(explicit) | +--:(explicit) | |||
| | +-- period-end? yang:date-and-time | | +-- period-end? yang:date-and-time | |||
| +--:(duration) | +--:(duration) | |||
| +-- duration? duration | +-- duration? duration | |||
| Figure 2: 'period-of-time' Grouping Tree Structure | Figure 2: 'period-of-time' Grouping Tree Structure | |||
| 3.3.3. The "recurrence-basic" Grouping | 3.3.3. The "recurrence-basic" Grouping | |||
| The "recurrence-basic" grouping (Figure 3) specifies a simple | The "recurrence-basic" grouping (Figure 3) specifies a simple | |||
| recurrence rule which starts immediately and repeats forever. | recurrence rule that starts immediately and repeats forever. | |||
| grouping recurrence-basic: | grouping recurrence-basic: | |||
| +-- recurrence-description? string | +-- recurrence-description? string | |||
| +-- frequency? identityref | +-- frequency? identityref | |||
| +-- interval? uint32 | +-- interval? uint32 | |||
| Figure 3: 'recurrence-basic' Grouping Tree Structure | Figure 3: 'recurrence-basic' Grouping Tree Structure | |||
| The frequency parameter ("frequency") identifies the type of a | The frequency parameter ("frequency") identifies the type of | |||
| recurrence rule. For example, a "daily" frequency value specifies | recurrence rule. For example, a "daily" frequency value specifies | |||
| repeating events based on an interval of a day or more. | repeating events based on an interval of a day or more. | |||
| Consistent with Section 3.3.10 of [RFC5545], the interval | Consistent with Section 3.3.10 of [RFC5545], the interval parameter | |||
| ("interval") represents at which interval the recurrence rule | ("interval") represents at which interval the recurrence rule | |||
| repeats. For example, within a "daily" recurrence rule, an interval | repeats. For example, within a "daily" recurrence rule, an interval | |||
| value of "8" means every eight days. | value of "8" means every eight days. | |||
| Note that per Section 4.13 of [I-D.ietf-netmod-rfc8407bis], neither a | Note that, per Section 4.13 of [YANG-GUIDE], neither a "default" nor | |||
| "default" nor a "mandatory" substatement is defined here for both | a "mandatory" substatement is defined here for both "frequency" and | |||
| "frequency" and "interval" parameters because there are cases (e.g., | "interval" parameters because there are cases (e.g., profiling) where | |||
| profiling) where using these statements is problematic. YANG modules | using these statements is problematic. YANG modules using this | |||
| using this grouping SHOULD refine these two nodes with either a | grouping SHOULD refine these two nodes with either a "mandatory" or a | |||
| "mandatory" or a "default" statement, if they always need to be | "default" statement if they always need to be configured or have | |||
| configured or have default values. This recommendation MAY be | default values. This recommendation MAY be ignored in cases such as | |||
| ignored in cases such as when this grouping is used by another | when this grouping is used by another grouping. | |||
| grouping. | ||||
| The "recurrence-description" includes a description of the period. | The "recurrence-description" parameter includes a description of the | |||
| No constraint is imposed on the structure nor the use of this | period. No constraint is imposed on the structure nor the use of | |||
| parameter. | this parameter. | |||
| 3.3.4. The "recurrence-utc" Grouping | 3.3.4. The "recurrence-utc" Grouping | |||
| The "recurrence-utc" grouping (Figure 4) uses the "recurrence-basic" | The "recurrence-utc" grouping (Figure 4) uses the "recurrence-basic" | |||
| grouping (Section 3.3.3) and specifies a simple recurrence rule in | grouping (Section 3.3.3) and specifies a simple recurrence rule in | |||
| UTC format. | UTC format. | |||
| grouping recurrence-utc: | grouping recurrence-utc: | |||
| +-- recurrence-first | +-- recurrence-first | |||
| | +-- start-time-utc? yang:date-and-time | | +-- start-time-utc? yang:date-and-time | |||
| skipping to change at page 10, line 20 ¶ | skipping to change at line 407 ¶ | |||
| | +--:(until) | | +--:(until) | |||
| | | +-- utc-until? yang:date-and-time | | | +-- utc-until? yang:date-and-time | |||
| | +--:(count) | | +--:(count) | |||
| | +-- count? uint32 | | +-- count? uint32 | |||
| +-- recurrence-description? string | +-- recurrence-description? string | |||
| +-- frequency? identityref | +-- frequency? identityref | |||
| +-- interval? uint32 | +-- interval? uint32 | |||
| Figure 4: 'recurrence-utc' Grouping Tree Structure | Figure 4: 'recurrence-utc' Grouping Tree Structure | |||
| The "start-time-utc" indicates the start time in UTC format. | The "start-time-utc" parameter indicates the start time in UTC | |||
| format. | ||||
| The "duration" parameter specifies, in units of seconds, the time | The "duration" parameter specifies, in units of seconds, the time | |||
| period of the first occurrence. Unless specified otherwise (e.g., | period of the first occurrence. Unless specified otherwise (e.g., | |||
| through additional augmented parameters), the "duration" also applies | through additional augmented parameters), the "duration" also applies | |||
| to subsequent recurrence instances. When unspecified, each | to subsequent recurrence instances. When unspecified, each | |||
| occurrence is considered as immediate completion (e.g., execute an | occurrence is considered as immediate completion (e.g., execute an | |||
| immediate command that is considered to complete quickly) or hard to | immediate command that is considered to complete quickly) or hard to | |||
| compute an exact duration (e.g., run a data analysis script whose | compute an exact duration (e.g., run a data analysis script whose | |||
| execution time may depend on the data volume and computation resource | execution time may depend on the data volume and computation resource | |||
| availability). The behavior to follow when a task takes more time | availability). The behavior to follow when a task takes more time | |||
| than specified by the "duration" is out of scope. Such | than specified by the "duration" is out of scope. Such | |||
| considerations belong to task management, not schedule management. | considerations belong to task management, not schedule management. | |||
| Note that the "interval" and "duration" cover two distinct properties | Note that the "interval" and "duration" cover two distinct properties | |||
| of a schedule event. The interval specifies when a schedule will | of a schedule event. The interval specifies when a schedule will | |||
| occur, combined with the frequency parameter; while the duration | occur, combined with the frequency parameter, while the duration | |||
| indicates how long an occurrence will last. This document allows the | indicates how long an occurrence will last. This document allows the | |||
| interval between occurrences to be shorter than the duration of each | interval between occurrences to be shorter than the duration of each | |||
| occurrence (e.g., a recurring event is scheduled to start every day | occurrence (e.g., a recurring event is scheduled to start every day | |||
| for a duration of 2 days). | for a duration of 2 days). | |||
| The repetition can be scoped by a specified end time or by a count of | The repetition can be scoped by a specified end time or by a count of | |||
| occurrences, indicated by the "recurrence-end" choice. The "count" | occurrences, indicated by the "recurrence-end" choice. The "count" | |||
| value MUST be greater than 1, the "start-time-utc" value always | value MUST be greater than 1, and the "start-time-utc" value always | |||
| counts as the first occurrence. | counts as the first occurrence. | |||
| The "recurrence-utc" grouping is designed to be reused in scheduling | The "recurrence-utc" grouping is designed to be reused in scheduling | |||
| contexts where machine readability is more desirable. | contexts where machine readability is more desirable. | |||
| 3.3.5. The "recurrence-with-time-zone" Grouping | 3.3.5. The "recurrence-with-time-zone" Grouping | |||
| The "recurrence-with-time-zone" grouping (Figure 5) uses the | The "recurrence-with-time-zone" grouping (Figure 5) uses the | |||
| "recurrence-basic" grouping (Section 3.3.3) and specifies a simple | "recurrence-basic" grouping (Section 3.3.3) and specifies a simple | |||
| recurrence rule with a time zone. | recurrence rule with a time zone. | |||
| skipping to change at page 11, line 37 ¶ | skipping to change at line 470 ¶ | |||
| The "recurrence-first" container includes "start-time" and "duration" | The "recurrence-first" container includes "start-time" and "duration" | |||
| parameters to specify the start time and period of the first | parameters to specify the start time and period of the first | |||
| occurrence. Unless specified otherwise (e.g., through additional | occurrence. Unless specified otherwise (e.g., through additional | |||
| augmented parameters), the "duration" also applies to subsequent | augmented parameters), the "duration" also applies to subsequent | |||
| recurrence instances. When unspecified, each occurrence is | recurrence instances. When unspecified, each occurrence is | |||
| considered as immediate completion (e.g., execute an immediate | considered as immediate completion (e.g., execute an immediate | |||
| command that is considered to complete quickly) or hard to compute an | command that is considered to complete quickly) or hard to compute an | |||
| exact duration (e.g., run a data analysis script whose execution time | exact duration (e.g., run a data analysis script whose execution time | |||
| may depend on the data volume and computation resource availability). | may depend on the data volume and computation resource availability). | |||
| The grouping also includes a "time-zone-identifier" parameter which | The grouping also includes a "time-zone-identifier" parameter, which | |||
| MUST be specified if either the "start-time" or "until" value is | MUST be specified if either the "start-time" or "until" value is | |||
| reported in local time format. It MUST NOT be applied to date and | reported in local time format. It MUST NOT be applied to date and | |||
| time values which are specified in the format of UTC or time zone | time values that are specified in the format of UTC or time zone | |||
| offset to UTC. | offset to UTC. | |||
| The repetition can be scoped by a specified end time or by a count of | The repetition can be scoped by a specified end time or by a count of | |||
| occurrences, indicated by the "recurrence-end" choice. The "count" | occurrences, indicated by the "recurrence-end" choice. The "count" | |||
| value MUST be greater than 1, the "start-time" value always counts as | value MUST be greater than 1, and the "start-time" value always | |||
| the first occurrence. | counts as the first occurrence. | |||
| The considerations discussed in Section 3.3.4 for "interval" and | The considerations discussed in Section 3.3.4 for "interval" and | |||
| "duration" are also applicable to "recurrence-with-time-zone". | "duration" are also applicable to "recurrence-with-time-zone". | |||
| Unlike the definition of "recurrence-utc" grouping (Section 3.3.4), | Unlike the definition of the "recurrence-utc" grouping | |||
| "recurrence-with-time-zone" is intended to promote human readability | (Section 3.3.4), "recurrence-with-time-zone" is intended to promote | |||
| over machine readability. | human readability over machine readability. | |||
| 3.3.6. The "recurrence-utc-with-periods" Grouping | 3.3.6. The "recurrence-utc-with-periods" Grouping | |||
| The "recurrence-utc-with-periods" grouping (Figure 6) uses the | The "recurrence-utc-with-periods" grouping (Figure 6) uses the | |||
| "recurrence-utc" grouping (Section 3.3.4) and adds a "period- | "recurrence-utc" grouping (Section 3.3.4) and adds a "period- | |||
| timeticks" list to define an aggregate set of repeating occurrences. | timeticks" list to define an aggregate set of repeating occurrences. | |||
| grouping recurrence-utc-with-periods: | grouping recurrence-utc-with-periods: | |||
| +-- recurrence-first | +-- recurrence-first | |||
| | +-- start-time-utc? yang:date-and-time | | +-- start-time-utc? yang:date-and-time | |||
| skipping to change at page 12, line 35 ¶ | skipping to change at line 514 ¶ | |||
| +-- frequency? identityref | +-- frequency? identityref | |||
| +-- interval? uint32 | +-- interval? uint32 | |||
| +-- period-timeticks* [period-start] | +-- period-timeticks* [period-start] | |||
| +-- period-start yang:timeticks | +-- period-start yang:timeticks | |||
| +-- period-end? yang:timeticks | +-- period-end? yang:timeticks | |||
| Figure 6: 'recurrence-utc-with-periods' Grouping Tree Structure | Figure 6: 'recurrence-utc-with-periods' Grouping Tree Structure | |||
| The recurrence instances are specified by the union of occurrences | The recurrence instances are specified by the union of occurrences | |||
| defined by both the recurrence rule and "period-timeticks" list. | defined by both the recurrence rule and "period-timeticks" list. | |||
| This list uses "yang:timeticks" type defined in [RFC6991]. Duplicate | This list uses the "yang:timeticks" type defined in [RFC6991]. | |||
| instances are ignored. The value of the "period-start" instance MUST | Duplicate instances are ignored. The value of the "period-start" | |||
| NOT exceed the value indicated by the value of "frequency" instance, | instance MUST NOT exceed the value indicated by the value of the | |||
| i.e., the timeticks value must not exceed 100 in a secondly | "frequency" instance, i.e., the "timeticks" value must not exceed 100 | |||
| recurrence rule, and it must not exceed 6000 in a minutely recurrence | in a secondly recurrence rule, and it must not exceed 6000 in a | |||
| rule, and so on. | minutely recurrence rule, and so on. | |||
| 3.3.7. The "recurrence-time-zone-with-periods" Grouping | 3.3.7. The "recurrence-time-zone-with-periods" Grouping | |||
| The "recurrence-time-zone-with-periods" grouping (Figure 7) uses the | The "recurrence-time-zone-with-periods" grouping (Figure 7) uses the | |||
| "recurrence-with-time-zone" grouping (Section 3.3.5) and adds a | "recurrence-with-time-zone" grouping (Section 3.3.5) and adds a | |||
| "period" list to define an aggregate set of repeating occurrences. | "period" list to define an aggregate set of repeating occurrences. | |||
| grouping recurrence-time-zone-with-periods: | grouping recurrence-time-zone-with-periods: | |||
| +-- recurrence-first | +-- recurrence-first | |||
| | +-- start-time? yang:date-and-time | | +-- start-time? yang:date-and-time | |||
| skipping to change at page 13, line 39 ¶ | skipping to change at line 561 ¶ | |||
| The recurrence instances are specified by the union of occurrences | The recurrence instances are specified by the union of occurrences | |||
| defined by both the recurrence rule and "period" list. Duplicate | defined by both the recurrence rule and "period" list. Duplicate | |||
| instances are ignored. | instances are ignored. | |||
| 3.3.8. The "icalendar-recurrence" Grouping | 3.3.8. The "icalendar-recurrence" Grouping | |||
| The "icalendar-recurrence" grouping (Figure 8) uses the "recurrence- | The "icalendar-recurrence" grouping (Figure 8) uses the "recurrence- | |||
| time-zone-with-periods" grouping (Section 3.3.7) and defines more | time-zone-with-periods" grouping (Section 3.3.7) and defines more | |||
| data nodes to enrich the definition of recurrence. The structure of | data nodes to enrich the definition of recurrence. The structure of | |||
| the "icalendar-recurrence" grouping refers to the definition of | the "icalendar-recurrence" grouping refers to the definition of the | |||
| recurrence component defined in Sections 3.3.10 and 3.8.5 of | recurrence component defined in Sections 3.3.10 and 3.8.5 of | |||
| [RFC5545]. | [RFC5545]. | |||
| grouping icalendar-recurrence: | grouping icalendar-recurrence: | |||
| +-- recurrence-first | +-- recurrence-first | |||
| | +-- start-time? yang:date-and-time | | +-- start-time? yang:date-and-time | |||
| | +-- duration? duration | | +-- duration? duration | |||
| +-- time-zone-identifier? sys:timezone-name | +-- time-zone-identifier? sys:timezone-name | |||
| +-- (recurrence-end)? | +-- (recurrence-end)? | |||
| | +--:(until) | | +--:(until) | |||
| skipping to change at page 14, line 43 ¶ | skipping to change at line 603 ¶ | |||
| +-- bymonthday* int32 | +-- bymonthday* int32 | |||
| +-- byyearday* int32 | +-- byyearday* int32 | |||
| +-- byyearweek* int32 | +-- byyearweek* int32 | |||
| +-- byyearmonth* uint32 | +-- byyearmonth* uint32 | |||
| +-- bysetpos* int32 | +-- bysetpos* int32 | |||
| +-- workweek-start? schedule:weekday | +-- workweek-start? schedule:weekday | |||
| +-- exception-dates* yang:date-and-time | +-- exception-dates* yang:date-and-time | |||
| Figure 8: 'icalendar-recurrence' Grouping Tree Structure | Figure 8: 'icalendar-recurrence' Grouping Tree Structure | |||
| An array of the "bysecond" (or "byminute", "byhour") specifies a list | An array of the "bysecond" (or "byminute" or "byhour") specifies a | |||
| of seconds within a minute (or minutes within an hour, hours of the | list of seconds within a minute (or minutes within an hour or hours | |||
| day). For example, within a "minutely" recurrence rule, the values | of the day). For example, within a "minutely" recurrence rule, the | |||
| of "byminute" node "10" and "20" means the occurrences are generated | values of "byminute" node "10" and "20" mean the occurrences are | |||
| at the 10th and 20th minute within an hour, reducing the number of | generated at the 10th and 20th minute within an hour, reducing the | |||
| recurrence instances from all minutes. | number of recurrence instances from all minutes. | |||
| The parameter "byday" specifies a list of days of the week, with an | The parameter "byday" specifies a list of days of the week, with an | |||
| optional direction which indicates the nth occurrence of a specific | optional direction that indicates the nth occurrence of a specific | |||
| day within the "monthly" or "yearly" frequency instance. Valid | day within the "monthly" or "yearly" frequency instance. Valid | |||
| values of "direction" are 1 to 5 or -5 to -1 within a "monthly" | values of "direction" are 1 to 5 or -5 to -1 within a "monthly" | |||
| recurrence rule; and 1 to 53 or -53 to -1 within a "yearly" | recurrence rule and 1 to 53 or -53 to -1 within a "yearly" recurrence | |||
| recurrence rule. For example, within a "monthly" rule, the "weekday" | rule. For example, within a "monthly" rule, the "weekday" with a | |||
| with a value of "monday" and the "direction" with a value of "-1" | value of "monday" and the "direction" with a value of "-1" represents | |||
| represents the last Monday of the month. | the last Monday of the month. | |||
| An array of the "bymonthday" (or byyearday", "byyearweek", or | An array of the "bymonthday" (or byyearday", "byyearweek", or | |||
| "byyearmonth") specifies a list of days of the month (or days of the | "byyearmonth") specifies a list of days of the month (or days of the | |||
| year, weeks of the year, or months of the year). For example, within | year, weeks of the year, or months of the year). For example, within | |||
| a "yearly" recurrence rule, the values of "byyearmonth" instance "1" | a "yearly" recurrence rule, the values of "byyearmonth" instances "1" | |||
| and "2" means the occurrences are generated in January and February, | and "2" mean the occurrences are generated in January and February, | |||
| increasing the "yearly" recurrence from every year to every January | increasing the "yearly" recurrence from every year to every January | |||
| and February of the year. | and February of the year. | |||
| The "bysetpos" conveys a list of values that corresponds to the nth | The "bysetpos" conveys a list of values that corresponds to the nth | |||
| occurrence within the set of recurrence instances to be specified. | occurrence within the set of recurrence instances to be specified. | |||
| For example, in a "monthly" recurrence rule, the "byday" data node | For example, in a "monthly" recurrence rule, the "byday" data node | |||
| specifies every Monday of the week, the "bysetpos" with value of "-1" | specifies every Monday of the week, and the "bysetpos" with a value | |||
| represents the last Monday of the month. Not setting the "bysetpos" | of "-1" represents the last Monday of the month. Not setting the | |||
| data node represents every Monday of the month. | "bysetpos" data node represents every Monday of the month. | |||
| The "workweek-start" data node specifies the day on which the week | The "workweek-start" data node specifies the day on which the week | |||
| starts. This is significant when a "weekly" recurrence rule has an | starts. This is significant when a "weekly" recurrence rule has an | |||
| interval greater than 1, and a "byday" data node is specified. This | interval greater than 1, and a "byday" data node is specified. This | |||
| is also significant when in a "yearly" rule and a "byyearweek" is | is also significant when in a "yearly" rule and a "byyearweek" is | |||
| specified. Note that per Section 4.13 of | specified. Note that, per Section 4.13 of [YANG-GUIDE], neither a | |||
| [I-D.ietf-netmod-rfc8407bis], neither a "default" nor a "mandatory" | "default" nor a "mandatory" substatement is defined here because | |||
| substatement is defined here because there are cases (e.g., | there are cases (e.g., profiling) where using these statements is | |||
| profiling) where using these statements is problematic. YANG modules | problematic. YANG modules using this grouping SHOULD refine the | |||
| using this grouping SHOULD refine the "workweek-start" node with | "workweek-start" node with either a "mandatory" or a "default" | |||
| either a "mandatory" or a "default" statement, if it always needs to | statement if it always needs to be configured or has a default value. | |||
| be configured or has a default value. This MAY be ignored in cases | This MAY be ignored in cases such as when this grouping is used by | |||
| such as when this grouping is used by another grouping. | another grouping. | |||
| The "exception-dates" data node specifies a list of exceptions for | The "exception-dates" data node specifies a list of exceptions for | |||
| recurrence. The final recurrence set is generated by gathering all | recurrence. The final recurrence set is generated by gathering all | |||
| of the date and time values created by any of the specified | of the date and time values created by any of the specified | |||
| recurrence rule and date-times, and then excluding any start date and | recurrence rules and date-times and then excluding any start date and | |||
| time values specified by "exception-dates" parameter. | time values specified by "exception-dates" parameter. | |||
| 3.3.9. The "schedule-status", "schedule-status-with-time-zone", and | 3.3.9. The "schedule-status", "schedule-status-with-time-zone", and | |||
| "schedule-status-with-name" Groupings | "schedule-status-with-name" Groupings | |||
| The "schedule-status", "schedule-status-with-time-zone", and | The "schedule-status", "schedule-status-with-time-zone", and | |||
| "schedule-status-with-name" groupings (Figure 9) define common | "schedule-status-with-name" groupings (Figure 9) define common | |||
| parameters for scheduling management/status exposure. The "schedule- | parameters for scheduling management/status exposure. The "schedule- | |||
| status-with-time-zone" grouping has the same structure as "schedule- | status-with-time-zone" grouping has the same structure as "schedule- | |||
| status" but with an additional parameter to identify a time zone. | status" but with an additional parameter to identify a time zone. | |||
| skipping to change at page 18, line 39 ¶ | skipping to change at line 749 ¶ | |||
| to typical scheduling contexts known so far. Future modules can | to typical scheduling contexts known so far. Future modules can | |||
| define other useful parameters as needed. For example, in a | define other useful parameters as needed. For example, in a | |||
| scheduling context with multiple system sources to feed the | scheduling context with multiple system sources to feed the | |||
| schedules, the "source" and "precedence" parameters may be needed to | schedules, the "source" and "precedence" parameters may be needed to | |||
| reflect how schedules from different sources should be prioritized. | reflect how schedules from different sources should be prioritized. | |||
| 3.4. Features Use and Augmentations | 3.4. Features Use and Augmentations | |||
| Appendix B.1 provides an example about how the features defined in | Appendix B.1 provides an example about how the features defined in | |||
| Section 3.1 can be used. Implementations may support a basic | Section 3.1 can be used. Implementations may support a basic | |||
| recurrence rule or an advanced one as needed, by declaring different | recurrence rule or an advanced one, as needed, by declaring different | |||
| features. Whether only one or both features are supported is | features. Whether only one or both features are supported is | |||
| implementation specific and depends on the specific scheduling | implementation specific and depends on the specific scheduling | |||
| context. | context. | |||
| The common schedule groupings (Section 3.3) can also be augmented to | The common schedule groupings (Section 3.3) can also be augmented to | |||
| support specific needs. As an example, Appendix B.2 demonstrates how | support specific needs. As an example, Appendix B.2 demonstrates how | |||
| additional parameters can be added to comply with specific schedule | additional parameters can be added to comply with specific schedule | |||
| needs. | needs. | |||
| 4. Some Usage Restrictions | 4. Some Usage Restrictions | |||
| There are some restrictions that need to be followed when using | There are some restrictions that need to be followed when using | |||
| groupings defined in the "ietf-schedule" YANG module (Section 3.3): | groupings defined in the "ietf-schedule" YANG module (Section 3.3): | |||
| * The instant in time represented by "period-start" MUST be before | * The instant in time represented by "period-start" MUST be before | |||
| the "period-end" for "period-of-time" grouping (Section 3.3.2). | the "period-end" for the "period-of-time" grouping | |||
| (Section 3.3.2). | ||||
| * The combination of the day, month, and year represented for date | * The combination of the day, month, and year represented for date | |||
| and time values MUST be valid. See Section 5.7 of [RFC3339] for | and time values MUST be valid. See Section 5.7 of [RFC3339] for | |||
| the maximum day number based on the month and year. | the maximum day number based on the month and year. | |||
| * Unless deployed in contexts where time synchronization is not | * Unless deployed in contexts where time synchronization is not | |||
| subject to leap second adjustments (e.g., Section 4.3 of | subject to leap second adjustments (e.g., Section 4.3 of [NTPv5]), | |||
| [I-D.ietf-ntp-ntpv5]), the second for date and time values SHOULD | the second for date and time values SHOULD have the value "60" at | |||
| have the value "60" at the end of months in which a leap second | the end of months in which a leap second occurs. | |||
| occurs. | ||||
| * Schedules received with a starting time in the past with respect | * Schedules received with a starting time in the past with respect | |||
| to current time SHOULD be ignored. When a local policy is | to current time SHOULD be ignored. When a local policy is | |||
| provided, an implementation MAY omit the past occurrences and | provided, an implementation MAY omit the past occurrences and | |||
| start immediately (e.g., for a period-based schedule) or starts | start immediately (e.g., for a period-based schedule) or start | |||
| from the date and time when the recurrence pattern is first | from the date and time when the recurrence pattern is first | |||
| satisfied from the current time (e.g., for a recurrence-based | satisfied from the current time (e.g., for a recurrence-based | |||
| schedule). | schedule). | |||
| 5. Relationship to the DISMAN-SCHEDULE-MIB | 5. Relationship to the DISMAN-SCHEDULE-MIB | |||
| [RFC3231] specifies a Management Information Base (MIB) used to | [RFC3231] specifies a Management Information Base (MIB) used to | |||
| schedule management operations periodically or at specified dates and | schedule management operations periodically or at specified dates and | |||
| times. | times. | |||
| skipping to change at page 21, line 7 ¶ | skipping to change at line 845 ¶ | |||
| +------------------+-------------------------+ | +------------------+-------------------------+ | |||
| | schedValue | Not applicable | | | schedValue | Not applicable | | |||
| +------------------+-------------------------+ | +------------------+-------------------------+ | |||
| | schedTriggers | counter/failure-counter | | | schedTriggers | counter/failure-counter | | |||
| +------------------+-------------------------+ | +------------------+-------------------------+ | |||
| Table 1: YANG/MIB Mapping | Table 1: YANG/MIB Mapping | |||
| 6. The "ietf-schedule" YANG Module | 6. The "ietf-schedule" YANG Module | |||
| This module imports types defined in [RFC6991] and [RFC7317]. | This module imports types defined in [RFC5545], [RFC6991], and | |||
| [RFC7317]. | ||||
| <CODE BEGINS> file "ietf-schedule@2025-05-30.yang" | <CODE BEGINS> | |||
| file "ietf-schedule@2026-02-18.yang" | ||||
| module ietf-schedule { | module ietf-schedule { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; | namespace "urn:ietf:params:xml:ns:yang:ietf-schedule"; | |||
| prefix schedule; | prefix schedule; | |||
| import ietf-yang-types { | import ietf-yang-types { | |||
| prefix yang; | prefix yang; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| } | } | |||
| import ietf-system { | import ietf-system { | |||
| prefix sys; | prefix sys; | |||
| reference | reference | |||
| "RFC 7317: A YANG Data Model for System Management"; | "RFC 7317: A YANG Data Model for System Management"; | |||
| } | } | |||
| organization | organization | |||
| "IETF NETMOD Working Group"; | "IETF NETMOD Working Group"; | |||
| contact | contact | |||
| "WG Web: <https://datatracker.ietf.org/wg/netmod/> | "WG Web: <https://datatracker.ietf.org/wg/netmod/> | |||
| WG List: <mailto:netmod@ietf.org> | WG List: <mailto:netmod@ietf.org> | |||
| Editor: Qiufang Ma | Editor: Qiufang Ma | |||
| <mailto:maqiufang1@huawei.com | <mailto:maqiufang1@huawei.com> | |||
| Author: Qin Wu | Author: Qin Wu | |||
| <mailto:bill.wu@huawei.com> | <mailto:bill.wu@huawei.com> | |||
| Editor: Mohamed Boucadair | Editor: Mohamed Boucadair | |||
| <mailto:mohamed.boucadair@orange.com> | <mailto:mohamed.boucadair@orange.com> | |||
| Author: Daniel King | Author: Daniel King | |||
| <mailto:d.king@lancaster.ac.uk>"; | <mailto:d.king@lancaster.ac.uk>"; | |||
| description | description | |||
| "This YANG module defines a set of common types and groupings | "This YANG module defines a set of common types and groupings | |||
| which are applicable for scheduling purposes such as events, | that are applicable for scheduling purposes, such as events, | |||
| policy, services, or resources based on date and time. | policies, services, or resources based on date and time. | |||
| Copyright (c) 2025 IETF Trust and the persons identified | The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | |||
| as authors of the code. All rights reserved. | 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) 2026 IETF Trust and the persons identified | ||||
| as authors of the code. All rights reserved. | ||||
| Redistribution and use in source and binary forms, with | Redistribution and use in source and binary forms, with | |||
| or without modification, is permitted pursuant to, and | or without modification, is permitted pursuant to, and | |||
| subject to the license terms contained in, the Revised | subject to the license terms contained in, the Revised | |||
| BSD License set forth in Section 4.c of the IETF Trust's | BSD License set forth in Section 4.c of the IETF Trust's | |||
| Legal Provisions Relating to IETF Documents | Legal Provisions Relating to IETF Documents | |||
| (https://trustee.ietf.org/license-info). | (https://trustee.ietf.org/license-info). | |||
| All revisions of IETF and IANA published modules can be found | This version of this YANG module is part of RFC 9922; see | |||
| at the YANG Parameters registry group | ||||
| (https://www.iana.org/assignments/yang-parameters). | ||||
| This version of this YANG module is part of RFC XXXX; see | ||||
| the RFC itself for full legal notices. | the RFC itself for full legal notices. | |||
| The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL | All revisions of IETF and IANA-maintained modules can be found | |||
| NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED', | in the 'YANG Parameters' registry group | |||
| 'MAY', and 'OPTIONAL' in this document are to be interpreted as | (https://www.iana.org/assignments/yang-parameters)."; | |||
| described in BCP 14 (RFC 2119) (RFC 8174) when, and only when, | ||||
| they appear in all capitals, as shown here."; | ||||
| revision 2025-05-30 { | revision 2026-02-18 { | |||
| description | description | |||
| "Initial revision."; | "Initial revision."; | |||
| reference | reference | |||
| "RFC XXXX: A Common YANG Data Model for Scheduling"; | "RFC 9922: A Common YANG Data Model for Scheduling"; | |||
| } | } | |||
| feature basic-recurrence { | feature basic-recurrence { | |||
| description | description | |||
| "Indicates that the server supports configuring a basic | "Indicates that the server supports configuring a basic | |||
| scheduled recurrence."; | scheduled recurrence."; | |||
| } | } | |||
| feature icalendar-recurrence { | feature icalendar-recurrence { | |||
| description | description | |||
| "Indicates that the server supports configuring a comprehensive | "Indicates that the server supports configuring a comprehensive | |||
| scheduled iCalendar recurrence"; | scheduled iCalendar recurrence."; | |||
| reference | reference | |||
| "RFC 5545: Internet Calendaring and Scheduling Core Object | "RFC 5545: Internet Calendaring and Scheduling Core Object | |||
| Specification (iCalendar), | Specification (iCalendar), | |||
| Sections 3.3.10 and 3.8.5"; | Sections 3.3.10 and 3.8.5"; | |||
| } | } | |||
| typedef weekday { | typedef weekday { | |||
| type enumeration { | type enumeration { | |||
| enum sunday { | enum sunday { | |||
| value 0; | value 0; | |||
| skipping to change at page 23, line 43 ¶ | skipping to change at line 980 ¶ | |||
| description | description | |||
| "Seven days of the week."; | "Seven days of the week."; | |||
| } | } | |||
| typedef duration { | typedef duration { | |||
| type string { | type string { | |||
| pattern '((\+)?|\-)P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' | pattern '((\+)?|\-)P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' | |||
| + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; | + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; | |||
| } | } | |||
| description | description | |||
| "Duration of the time. The format can represent nominal | "Duration of the time. The format can represent nominal | |||
| durations (weeks designated by 'W' and days designated by 'D') | durations (weeks designated by 'W' and days designated by 'D') | |||
| and accurate durations (hours:minutes:seconds follows the | and accurate durations (hours:minutes:seconds follows the | |||
| designator 'T'). | designator 'T'). | |||
| Note that this value type doesn't support the 'Y' and 'M' | Note that this value type doesn't support the 'Y' and 'M' | |||
| designators to specify durations in terms of years and months. | designators to specify durations in terms of years and months. | |||
| Negative durations are typically used to schedule an alarm to | Negative durations are typically used to schedule an alarm to | |||
| trigger before an associated time."; | trigger before an associated time."; | |||
| reference | reference | |||
| skipping to change at page 24, line 19 ¶ | skipping to change at line 1004 ¶ | |||
| } | } | |||
| identity schedule-type { | identity schedule-type { | |||
| description | description | |||
| "Base identity for schedule type."; | "Base identity for schedule type."; | |||
| } | } | |||
| identity one-shot { | identity one-shot { | |||
| base schedule-type; | base schedule-type; | |||
| description | description | |||
| "Indicates a one-shot schedule. That is a schedule that | "Indicates a one-shot schedule. That is a schedule that | |||
| will trigger an action with the duration being specified as | will trigger an action with the duration being specified as | |||
| 0 or end time being specified the same as start time, | 0 or end time being specified as the same as the start time, | |||
| and then the schedule will disable itself."; | and then the schedule will disable itself."; | |||
| } | } | |||
| identity period { | identity period { | |||
| base schedule-type; | base schedule-type; | |||
| description | description | |||
| "Indicates a period-based schedule consisting of either a | "Indicates a period-based schedule consisting of either a | |||
| start and end or a start and positive duration of time. If | start and end or a start and positive duration of time. If | |||
| neither an end nor a duration is indicated, the period is | neither an end nor a duration is indicated, the period is | |||
| considered to last forever."; | considered to last forever."; | |||
| } | } | |||
| identity recurrence { | identity recurrence { | |||
| base schedule-type; | base schedule-type; | |||
| description | description | |||
| "Indicates a recurrence-based schedule."; | "Indicates a recurrence-based schedule."; | |||
| } | } | |||
| skipping to change at page 27, line 30 ¶ | skipping to change at line 1159 ¶ | |||
| Such parameters are used as guards to prevent, e.g., stale | Such parameters are used as guards to prevent, e.g., stale | |||
| configuration."; | configuration."; | |||
| leaf description { | leaf description { | |||
| type string; | type string; | |||
| description | description | |||
| "Provides a description of the schedule."; | "Provides a description of the schedule."; | |||
| } | } | |||
| leaf time-zone-identifier { | leaf time-zone-identifier { | |||
| type sys:timezone-name; | type sys:timezone-name; | |||
| description | description | |||
| "Indicates the identifier for the time zone. This parameter | "Indicates the identifier for the time zone. This parameter | |||
| MUST be specified if any of the date and time values are | MUST be specified if any of the date and time values are | |||
| in the format of local time. It MUST NOT be applied to | in the format of local time. It MUST NOT be applied to | |||
| date and time values which are specified in the format of | date and time values that are specified in the format of | |||
| UTC or time zone offset to UTC."; | UTC or time zone offset to UTC."; | |||
| } | } | |||
| leaf validity { | leaf validity { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Specifies the date and time after which a schedule will not | "Specifies the date and time after which a schedule will not | |||
| be considered as valid. This parameter takes precedence | be considered as valid. This parameter takes precedence | |||
| over similar attributes that are provided at the schedule | over similar attributes that are provided at the schedule | |||
| instance itself."; | instance itself."; | |||
| } | } | |||
| leaf max-allowed-start { | leaf max-allowed-start { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Specifies the maximum scheduled start date and time. | "Specifies the maximum scheduled start date and time. | |||
| A requested schedule whose first instance occurs after | A requested schedule whose first instance occurs after | |||
| this value cannot be accepted by the entity. Specifically, | this value cannot be accepted by the entity. Specifically, | |||
| a requested schedule will be rejected if the first | a requested schedule will be rejected if the first | |||
| occurrence of that schedule exceeds 'max-allowed-start'."; | occurrence of that schedule exceeds 'max-allowed-start'."; | |||
| } | } | |||
| leaf min-allowed-start { | leaf min-allowed-start { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Specifies the minimum scheduled start date and time. | "Specifies the minimum scheduled start date and time. | |||
| A requested schedule whose first instance occurs before | A requested schedule whose first instance occurs before | |||
| this value cannot be accepted by the entity. Specifically, | this value cannot be accepted by the entity. Specifically, | |||
| a requested schedule will be rejected if the first | a requested schedule will be rejected if the first | |||
| occurrence of that schedule is scheduled before | occurrence of that schedule is scheduled before | |||
| 'min-allowed-start'."; | 'min-allowed-start'."; | |||
| } | } | |||
| leaf max-allowed-end { | leaf max-allowed-end { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "A requested schedule will be rejected if the end time of | "A requested schedule will be rejected if the end time of | |||
| the last occurrence exceeds 'max-allowed-end'."; | the last occurrence exceeds 'max-allowed-end'."; | |||
| } | } | |||
| leaf discard-action { | leaf discard-action { | |||
| type identityref { | type identityref { | |||
| base discard-action-type; | base discard-action-type; | |||
| } | } | |||
| description | description | |||
| "Specifies the behavior when a schedule is discarded for | "Specifies the behavior when a schedule is discarded for | |||
| any reason, e.g., failing to satisfy the guards in this | any reason, e.g., failing to satisfy the guards in this | |||
| grouping or it is received out-of-date."; | grouping or being received out-of-date."; | |||
| } | } | |||
| } | } | |||
| grouping period-of-time { | grouping period-of-time { | |||
| description | description | |||
| "This grouping is defined for period of time property."; | "This grouping is defined for the period of time property."; | |||
| reference | reference | |||
| "RFC 5545: Internet Calendaring and Scheduling Core Object | "RFC 5545: Internet Calendaring and Scheduling Core Object | |||
| Specification (iCalendar), Section 3.3.9"; | Specification (iCalendar), Section 3.3.9"; | |||
| leaf period-description { | leaf period-description { | |||
| type string; | type string; | |||
| description | description | |||
| "Provides a description of the period."; | "Provides a description of the period."; | |||
| } | } | |||
| leaf period-start { | leaf period-start { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Period start time."; | "Period start time."; | |||
| } | } | |||
| leaf time-zone-identifier { | leaf time-zone-identifier { | |||
| type sys:timezone-name; | type sys:timezone-name; | |||
| description | description | |||
| "Indicates the identifier for the time zone. This parameter | "Indicates the identifier for the time zone. This parameter | |||
| MUST be specified if either the 'period-start' or | MUST be specified if either the 'period-start' or | |||
| 'period-end' value is reported in local time format. | 'period-end' value is reported in local time format. | |||
| It MUST NOT be applied to date and time values which are | It MUST NOT be applied to date and time values that are | |||
| specified in the format of UTC or time zone offset | specified in the format of UTC or time zone offset | |||
| to UTC."; | to UTC."; | |||
| } | } | |||
| choice period-type { | choice period-type { | |||
| description | description | |||
| "Indicates the type of the time period. Two types are | "Indicates the type of the time period. Two types are | |||
| supported. If no choice is indicated, the period is | supported. If no choice is indicated, the period is | |||
| considered to last forever."; | considered to last forever."; | |||
| case explicit { | case explicit { | |||
| description | description | |||
| "A period of time is identified by its start and its end. | "A period of time is identified by its start and its end. | |||
| 'period-start' indicates the period start."; | 'period-start' indicates the period start."; | |||
| leaf period-end { | leaf period-end { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "A period of time is defined by a start and end time. | "A period of time is defined by a start and end time. | |||
| The start MUST be no later than the end. The period | The start MUST be no later than the end. The period | |||
| is considered as a one-shot schedule if the end time | is considered as a one-shot schedule if the end time | |||
| is the same as the start time."; | is the same as the start time."; | |||
| } | } | |||
| } | } | |||
| case duration { | case duration { | |||
| description | description | |||
| "A period of time is defined by a start and a non-negative | "A period of time is defined by a start and a non-negative | |||
| duration of time."; | duration of time."; | |||
| leaf duration { | leaf duration { | |||
| type duration { | type duration { | |||
| pattern 'P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' | pattern 'P((([0-9]+)D)?(T(0[0-9]|1[0-9]|2[0-3])' | |||
| + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; | + ':[0-5][0-9]:[0-5][0-9]))|P([0-9]+)W'; | |||
| } | } | |||
| description | description | |||
| "A non-negative duration of time. This value is | "A non-negative duration of time. This value is | |||
| equivalent to the format of duration type except that | equivalent to the format of 'duration' type except that | |||
| the value cannot be negative. The period is considered | the value cannot be negative. The period is considered | |||
| to be a one-shot schedule if the value is 0."; | to be a one-shot schedule if the value is 0."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| grouping recurrence-basic { | grouping recurrence-basic { | |||
| description | description | |||
| "A simple definition of recurrence."; | "A simple definition of recurrence."; | |||
| leaf recurrence-description { | leaf recurrence-description { | |||
| skipping to change at page 30, line 19 ¶ | skipping to change at line 1292 ¶ | |||
| base frequency-type; | base frequency-type; | |||
| } | } | |||
| description | description | |||
| "Specifies the frequency type of the recurrence rule."; | "Specifies the frequency type of the recurrence rule."; | |||
| } | } | |||
| leaf interval { | leaf interval { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| must '../frequency' { | must '../frequency' { | |||
| error-message | error-message "Frequency must be provided."; | |||
| "Frequency must be provided."; | ||||
| } | } | |||
| description | description | |||
| "A positive integer representing interval at which the | "A positive integer representing the interval at which the | |||
| recurrence rule repeats. For example, within a 'daily' | recurrence rule repeats. For example, within a 'daily' | |||
| recurrence rule, a value of '8' means every eight days."; | recurrence rule, a value of '8' means every eight days."; | |||
| } | } | |||
| } | } | |||
| grouping recurrence-utc { | grouping recurrence-utc { | |||
| description | description | |||
| "A simple definition of recurrence with time specified in | "A simple definition of recurrence with time specified in | |||
| UTC format."; | UTC format."; | |||
| container recurrence-first { | container recurrence-first { | |||
| description | description | |||
| "Specifies the first instance of the recurrence. If | "Specifies the first instance of the recurrence. If | |||
| unspecified, the recurrence is considered to start from | unspecified, the recurrence is considered to start from | |||
| the date and time when the recurrence pattern is first | the date and time when the recurrence pattern is first | |||
| satisfied."; | satisfied."; | |||
| leaf start-time-utc { | leaf start-time-utc { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Defines the date and time of the first instance | "Defines the date and time of the first instance | |||
| in the recurrence set. A UTC format MUST be used."; | in the recurrence set. A UTC format MUST be used."; | |||
| } | } | |||
| leaf duration { | leaf duration { | |||
| type uint32; | type uint32; | |||
| units "seconds"; | units "seconds"; | |||
| description | description | |||
| "When specified, it indicates how long the first occurrence | "When specified, it indicates how long the first occurrence | |||
| lasts. Unless specified otherwise, it also applies to all | lasts. Unless specified otherwise, it also applies to all | |||
| the other instances in the recurrence set."; | the other instances in the recurrence set."; | |||
| } | } | |||
| } | } | |||
| choice recurrence-end { | choice recurrence-end { | |||
| description | description | |||
| "Modes to control the end of a recurrence rule. If no | "Modes to control the end of a recurrence rule. If no | |||
| choice is indicated, the recurrence rule is considered | choice is indicated, the recurrence rule is considered | |||
| to repeat forever."; | to repeat forever."; | |||
| case until { | case until { | |||
| description | description | |||
| "This case defines a way that limits the end of | "This case defines a way that limits the end of | |||
| a recurrence rule in an inclusive manner."; | a recurrence rule in an inclusive manner."; | |||
| leaf utc-until { | leaf utc-until { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "This parameter specifies a date and time value to | "This parameter specifies a date and time value to | |||
| skipping to change at page 31, line 49 ¶ | skipping to change at line 1368 ¶ | |||
| } | } | |||
| uses recurrence-basic; | uses recurrence-basic; | |||
| } | } | |||
| grouping recurrence-with-time-zone { | grouping recurrence-with-time-zone { | |||
| description | description | |||
| "A simple definition of recurrence to specify a recurrence | "A simple definition of recurrence to specify a recurrence | |||
| rule with a time zone."; | rule with a time zone."; | |||
| container recurrence-first { | container recurrence-first { | |||
| description | description | |||
| "Specifies the first instance of the recurrence. If | "Specifies the first instance of the recurrence. If | |||
| unspecified, the recurrence is considered to start from | unspecified, the recurrence is considered to start from | |||
| the date and time when the recurrence pattern is first | the date and time when the recurrence pattern is first | |||
| satisfied."; | satisfied."; | |||
| leaf start-time { | leaf start-time { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Defines the date and time of the first instance | "Defines the date and time of the first instance | |||
| in the recurrence set."; | in the recurrence set."; | |||
| } | } | |||
| leaf duration { | leaf duration { | |||
| type duration; | type duration; | |||
| description | description | |||
| "When specified, it indicates how long the first | "When specified, it indicates how long the first | |||
| occurrence last. Unless specified otherwise, it also | occurrence lasts. Unless specified otherwise, it also | |||
| applies to all the other instances in the recurrence | applies to all the other instances in the recurrence | |||
| set."; | set."; | |||
| } | } | |||
| } | } | |||
| leaf time-zone-identifier { | leaf time-zone-identifier { | |||
| type sys:timezone-name; | type sys:timezone-name; | |||
| description | description | |||
| "Indicates the identifier for the time zone in a time | "Indicates the identifier for the time zone in a time | |||
| zone database. This parameter MUST be specified if either | zone database. This parameter MUST be specified if either | |||
| the 'start-time' or 'until' value is reported in local | the 'start-time' or 'until' value is reported in local | |||
| time format. It MUST NOT be applied to date and time | time format. It MUST NOT be applied to date and time | |||
| values which are specified in the format of UTC or time | values that are specified in the format of UTC or time | |||
| zone offset to UTC."; | zone offset to UTC."; | |||
| } | } | |||
| choice recurrence-end { | choice recurrence-end { | |||
| description | description | |||
| "Modes to terminate the recurrence rule. If no choice is | "Modes to terminate the recurrence rule. If no choice is | |||
| indicated, the recurrence rule is considered to repeat | indicated, the recurrence rule is considered to repeat | |||
| forever."; | forever."; | |||
| case until { | case until { | |||
| description | description | |||
| "The end of the recurrence rule is indicated by a specific | "The end of the recurrence rule is indicated by a specific | |||
| date-and-time value in an inclusive manner."; | date-and-time value in an inclusive manner."; | |||
| leaf until { | leaf until { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Specifies a date and time value to inclusively terminate | "Specifies a date and time value to inclusively terminate | |||
| the recurrence. Thats is, if the value specified by this | the recurrence. That is, if the value specified by | |||
| parameter is synchronized with the specified recurrence, | this parameter is synchronized with the specified | |||
| it becomes the last instance of the recurrence."; | recurrence, it becomes the last instance of the | |||
| recurrence."; | ||||
| } | } | |||
| } | } | |||
| case count { | case count { | |||
| description | description | |||
| "The end of the recurrence is indicated by the number | "The end of the recurrence is indicated by the number | |||
| of occurrences."; | of occurrences."; | |||
| leaf count { | leaf count { | |||
| type uint32 { | type uint32 { | |||
| range "1..max"; | range "1..max"; | |||
| } | } | |||
| skipping to change at page 33, line 19 ¶ | skipping to change at line 1436 ¶ | |||
| terminate the recurrence."; | terminate the recurrence."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| uses recurrence-basic; | uses recurrence-basic; | |||
| } | } | |||
| grouping recurrence-utc-with-periods { | grouping recurrence-utc-with-periods { | |||
| description | description | |||
| "This grouping defines an aggregate set of repeating | "This grouping defines an aggregate set of repeating | |||
| occurrences with UTC time format. The recurrence instances | occurrences with UTC time format. The recurrence instances | |||
| are specified by the occurrences defined by both the | are specified by the occurrences defined by both the | |||
| recurrence rule and 'period-timeticks' list. Duplicate | recurrence rule and 'period-timeticks' list. Duplicate | |||
| instances are ignored."; | instances are ignored."; | |||
| uses recurrence-utc; | uses recurrence-utc; | |||
| list period-timeticks { | list period-timeticks { | |||
| key "period-start"; | key "period-start"; | |||
| description | description | |||
| "A list of periods with timeticks formats."; | "A list of periods with timeticks formats."; | |||
| leaf period-start { | leaf period-start { | |||
| type yang:timeticks; | type yang:timeticks; | |||
| must "(not(derived-from(../../frequency," | must "(not(derived-from(../../frequency," | |||
| + "'schedule:secondly')) or (current() < 100)) and " | + "'schedule:secondly')) or (current() < 100)) and " | |||
| skipping to change at page 33, line 45 ¶ | skipping to change at line 1462 ¶ | |||
| + " or (current() < 360000)) and " | + " or (current() < 360000)) and " | |||
| + "(not(derived-from(../../frequency,'schedule:daily'))" | + "(not(derived-from(../../frequency,'schedule:daily'))" | |||
| + " or (current() < 8640000)) and " | + " or (current() < 8640000)) and " | |||
| + "(not(derived-from(../../frequency,'schedule:weekly'))" | + "(not(derived-from(../../frequency,'schedule:weekly'))" | |||
| + " or (current() < 60480000)) and " | + " or (current() < 60480000)) and " | |||
| + "(not(derived-from(../../frequency," | + "(not(derived-from(../../frequency," | |||
| + "'schedule:monthly')) or (current() < 267840000)) and " | + "'schedule:monthly')) or (current() < 267840000)) and " | |||
| + "(not(derived-from(../../frequency,'schedule:yearly'))" | + "(not(derived-from(../../frequency,'schedule:yearly'))" | |||
| + " or (current() < 3162240000))" { | + " or (current() < 3162240000))" { | |||
| error-message | error-message | |||
| "The period-start must not exceed the frequency | "The 'period-start' must not exceed the frequency | |||
| interval."; | interval."; | |||
| } | } | |||
| description | description | |||
| "Start time of the schedule within one recurrence. | "Start time of the schedule within one recurrence. | |||
| Given that the value is in timeticks format | Given that the value is in timeticks format | |||
| (i.e., 1/100 of a second), the values in the must | (i.e., 1/100 of a second), the values in the must | |||
| statement translate to: 100 = 1s (secondly), | statement translate to 100 = 1 s (secondly), | |||
| 6000 = 60 s = 1 min (minutely), and so on for all | 6000 = 60 s = 1 min (minutely), and so on for all | |||
| instances in the must statement invariant."; | instances in the must statement invariant."; | |||
| } | } | |||
| leaf period-end { | leaf period-end { | |||
| type yang:timeticks; | type yang:timeticks; | |||
| description | description | |||
| "End time of the schedule within one recurrence. | "End time of the schedule within one recurrence. | |||
| The period start MUST be no later than the period | The period start MUST be no later than the period | |||
| end."; | end."; | |||
| } | } | |||
| skipping to change at page 35, line 31 ¶ | skipping to change at line 1543 ¶ | |||
| when "derived-from(../../frequency, 'schedule:monthly') or " | when "derived-from(../../frequency, 'schedule:monthly') or " | |||
| + "(derived-from(../../frequency, 'schedule:yearly') " | + "(derived-from(../../frequency, 'schedule:yearly') " | |||
| + " and not(../../byyearweek))"; | + " and not(../../byyearweek))"; | |||
| type int32 { | type int32 { | |||
| range "-53..-1|1..53"; | range "-53..-1|1..53"; | |||
| } | } | |||
| description | description | |||
| "When specified, it indicates the nth occurrence of a | "When specified, it indicates the nth occurrence of a | |||
| specific day within the monthly or yearly recurrence | specific day within the monthly or yearly recurrence | |||
| rule. For example, within a monthly rule, +1 monday | rule. For example, within a monthly rule, +1 monday | |||
| represents the first monday within the month, whereas | represents the first Monday within the month, whereas | |||
| -1 monday represents the last monday of the month."; | -1 monday represents the last Monday of the month."; | |||
| } | } | |||
| leaf weekday { | leaf weekday { | |||
| type schedule:weekday; | type schedule:weekday; | |||
| description | description | |||
| "Corresponds to seven days of the week."; | "Corresponds to seven days of the week."; | |||
| } | } | |||
| } | } | |||
| leaf-list bymonthday { | leaf-list bymonthday { | |||
| type int32 { | type int32 { | |||
| range "-31..-1|1..31"; | range "-31..-1|1..31"; | |||
| skipping to change at page 36, line 28 ¶ | skipping to change at line 1589 ¶ | |||
| description | description | |||
| "Specifies a list of months of the year."; | "Specifies a list of months of the year."; | |||
| } | } | |||
| leaf-list bysetpos { | leaf-list bysetpos { | |||
| type int32 { | type int32 { | |||
| range "-366..-1|1..366"; | range "-366..-1|1..366"; | |||
| } | } | |||
| description | description | |||
| "Specifies a list of values that corresponds to the nth | "Specifies a list of values that corresponds to the nth | |||
| occurrence within the set of recurrence instances | occurrence within the set of recurrence instances | |||
| specified by the rule. It must only be used in conjunction | specified by the rule. It must only be used in conjunction | |||
| with another 'byxxx' (bysecond, byminute, etc.) rule | with another 'byxxx' (bysecond, byminute, etc.) rule | |||
| part ."; | part."; | |||
| } | } | |||
| leaf workweek-start { | leaf workweek-start { | |||
| type schedule:weekday; | type schedule:weekday; | |||
| description | description | |||
| "Specifies the day on which the workweek starts."; | "Specifies the day on which the workweek starts."; | |||
| } | } | |||
| leaf-list exception-dates { | leaf-list exception-dates { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| description | description | |||
| "Defines a list of exceptions for recurrence."; | "Defines a list of exceptions for recurrence."; | |||
| skipping to change at page 37, line 30 ¶ | skipping to change at line 1639 ¶ | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| config false; | config false; | |||
| description | description | |||
| "Reports the local time as used by the entity that | "Reports the local time as used by the entity that | |||
| hosts the schedule."; | hosts the schedule."; | |||
| } | } | |||
| leaf last-update { | leaf last-update { | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| config false; | config false; | |||
| description | description | |||
| "Reports the timestamp that the schedule is last updated."; | "Reports the timestamp of when the schedule is last | |||
| updated."; | ||||
| } | } | |||
| leaf counter { | leaf counter { | |||
| when "derived-from-or-self(../schedule-type, " | when "derived-from-or-self(../schedule-type, " | |||
| + "'schedule:recurrence')"; | + "'schedule:recurrence')"; | |||
| type yang:counter32; | type yang:counter32; | |||
| config false; | config false; | |||
| description | description | |||
| "The number of occurrences while invoking the scheduled | "The number of occurrences while invoking the scheduled | |||
| action successfully. The count wraps around when it reaches | action successfully. The count wraps around when it reaches | |||
| the maximum value."; | the maximum value."; | |||
| } | } | |||
| leaf last-occurrence { | leaf last-occurrence { | |||
| when "derived-from-or-self(../schedule-type, " | when "derived-from-or-self(../schedule-type, " | |||
| + "'schedule:recurrence')"; | + "'schedule:recurrence')"; | |||
| type yang:date-and-time; | type yang:date-and-time; | |||
| config false; | config false; | |||
| description | description | |||
| "Indicates the timestamp of last occurrence."; | "Indicates the timestamp of last occurrence."; | |||
| } | } | |||
| skipping to change at page 38, line 34 ¶ | skipping to change at line 1692 ¶ | |||
| config false; | config false; | |||
| description | description | |||
| "Counts the number of failures while invoking the scheduled | "Counts the number of failures while invoking the scheduled | |||
| action."; | action."; | |||
| } | } | |||
| } | } | |||
| grouping schedule-status-with-time-zone { | grouping schedule-status-with-time-zone { | |||
| description | description | |||
| "This grouping defines common properties of scheduling | "This grouping defines common properties of scheduling | |||
| status, including timezone"; | status, including timezone."; | |||
| leaf time-zone-identifier { | leaf time-zone-identifier { | |||
| type sys:timezone-name; | type sys:timezone-name; | |||
| config false; | config false; | |||
| description | description | |||
| "Indicates the identifier for the time zone in a time | "Indicates the identifier for the time zone in a time | |||
| zone database."; | zone database."; | |||
| } | } | |||
| uses schedule-status; | uses schedule-status; | |||
| } | } | |||
| skipping to change at page 39, line 15 ¶ | skipping to change at line 1721 ¶ | |||
| schedule within a device, controller, network, etc. | schedule within a device, controller, network, etc. | |||
| The unicity scope depends on the implementation."; | The unicity scope depends on the implementation."; | |||
| } | } | |||
| uses schedule-status; | uses schedule-status; | |||
| } | } | |||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 7. Security Considerations | 7. Security Considerations | |||
| This section uses the template described in Section 3.7 of | This section is modeled after the template described in Section 3.7 | |||
| [I-D.ietf-netmod-rfc8407bis]. | of [YANG-GUIDE]. | |||
| The "ietf-schedule" YANG module specified in this document defines | The "ietf-schedule" YANG module defines a data model that is designed | |||
| schema for data that is designed to be accessed via YANG-based | to be accessed via YANG-based management protocols, such as NETCONF | |||
| management protocols, such as NETCONF [RFC6241] or RESTCONF | [RFC6241] and RESTCONF [RFC8040]. These YANG-based management | |||
| [RFC8040]. These YANG-based management protocols (1) have to use a | protocols (1) have to use a secure transport layer (e.g., SSH | |||
| secure transport layer (e.g., SSH [RFC4252], TLS [RFC8446], and QUIC | [RFC4252], TLS [RFC8446], and QUIC [RFC9000]) and (2) have to use | |||
| [RFC9000]) and (2) have to use mutual authentication. | mutual authentication. | |||
| The Network Configuration Access Control Model (NACM) [RFC8341] | The Network Configuration Access Control Model (NACM) [RFC8341] | |||
| provides the means to restrict access for particular NETCONF or | provides the means to restrict access for particular NETCONF or | |||
| RESTCONF users to a preconfigured subset of all available NETCONF or | RESTCONF users to a preconfigured subset of all available NETCONF or | |||
| RESTCONF protocol operations and content. | RESTCONF protocol operations and content. | |||
| The "ietf-schedule" module defines a set of types and groupings. | The "ietf-schedule" module defines a set of identities, types, and | |||
| These nodes are intended to be reused by other YANG modules. The | groupings. These nodes are intended to be reused by other YANG | |||
| module by itself does not expose any data nodes that are writable, | modules. The module by itself does not expose any data nodes that | |||
| data nodes that contain read-only state, or RPCs. As such, there are | are writable, data nodes that contain read-only state, or RPCs. As | |||
| no additional security issues related to the "ietf-schedule" module | such, there are no additional security issues related to the "ietf- | |||
| that need to be considered. | schedule" module that need to be considered. | |||
| Modules that use the groupings that are defined in this document | Modules that use the groupings that are defined in this document | |||
| should identify the corresponding security considerations, e.g.,: | should identify the corresponding security considerations, for | |||
| example: | ||||
| * Scheduling depends on reliable and accurate time synchronization. | * Scheduling depends on reliable and accurate time synchronization. | |||
| Inaccurate date and time setting can lead to scheduling events | Inaccurate date and time setting can lead to scheduling events | |||
| being triggered at incorrect intervals, potentially causing system | being triggered at incorrect intervals, potentially causing system | |||
| failures or security vulnerabilities. | failures or security vulnerabilities. | |||
| * Recurring events may conceal abnormal behavior or security | * Recurring events may conceal abnormal behavior or security | |||
| threats, which may be drowned out by normal events, especially | threats, which may be drowned out by normal events, especially | |||
| when they are triggered frequently. | when they are triggered frequently. | |||
| * The absence of detailed logs and audit records of each occurrence | * The absence of detailed logs and audit records of each occurrence | |||
| trigger time and action results, and so on, may make security | trigger time and action results and therefore may make security | |||
| incidents difficult to trace. | incidents difficult to trace. | |||
| * Care must be taken when defining recurrences occurring very often | * Care must be taken when defining recurrences occurring very often | |||
| and frequent that can be an additional source of attacks by | and frequent that can be an additional source of attacks by | |||
| keeping the system permanently busy with the management of | keeping the system permanently busy with the management of | |||
| scheduling. | scheduling. | |||
| 8. IANA Considerations | 8. IANA Considerations | |||
| 8.1. The "IETF XML" Registry | 8.1. The IETF XML Registry | |||
| This document registers the following URI in the "IETF XML Registry" | This document has registered the following URI in the "IETF XML | |||
| [RFC3688]. | Registry" [RFC3688]. | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-schedule | URI: urn:ietf:params:xml:ns:yang:ietf-schedule | |||
| Registrant Contact: The IESG. | ||||
| XML: N/A, the requested URI is an XML namespace. | ||||
| 8.2. The "YANG Module Names" Registry | Registrant Contact: The IESG. | |||
| This document registers the following YANG module in the "YANG Module | XML: N/A; the requested URI is an XML namespace. | |||
| Names" registry [RFC6020]. | ||||
| name: ietf-schedule | 8.2. The YANG Module Names Registry | |||
| namespace: urn:ietf:params:xml:ns:yang:ietf-schedule | ||||
| prefix: schedule | This document has registered the following YANG module in the "YANG | |||
| maintained by IANA? N | Module Names" registry [RFC6020]. | |||
| reference: RFC XXXX | ||||
| Name: ietf-schedule | ||||
| Maintained by IANA: N | ||||
| Namespace: urn:ietf:params:xml:ns:yang:ietf-schedule | ||||
| Prefix: schedule | ||||
| Reference: RFC 9922 | ||||
| 9. References | 9. References | |||
| 9.1. Normative References | 9.1. Normative References | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
| DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
| <https://www.rfc-editor.org/rfc/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
| [RFC3231] Levi, D. and J. Schoenwaelder, "Definitions of Managed | [RFC3231] Levi, D. and J. Schoenwaelder, "Definitions of Managed | |||
| Objects for Scheduling Management Operations", RFC 3231, | Objects for Scheduling Management Operations", RFC 3231, | |||
| DOI 10.17487/RFC3231, January 2002, | DOI 10.17487/RFC3231, January 2002, | |||
| <https://www.rfc-editor.org/rfc/rfc3231>. | <https://www.rfc-editor.org/info/rfc3231>. | |||
| [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688, | |||
| DOI 10.17487/RFC3688, January 2004, | DOI 10.17487/RFC3688, January 2004, | |||
| <https://www.rfc-editor.org/rfc/rfc3688>. | <https://www.rfc-editor.org/info/rfc3688>. | |||
| [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and | [RFC5545] Desruisseaux, B., Ed., "Internet Calendaring and | |||
| Scheduling Core Object Specification (iCalendar)", | Scheduling Core Object Specification (iCalendar)", | |||
| RFC 5545, DOI 10.17487/RFC5545, September 2009, | RFC 5545, DOI 10.17487/RFC5545, September 2009, | |||
| <https://www.rfc-editor.org/rfc/rfc5545>. | <https://www.rfc-editor.org/info/rfc5545>. | |||
| [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| DOI 10.17487/RFC6020, October 2010, | DOI 10.17487/RFC6020, October 2010, | |||
| <https://www.rfc-editor.org/rfc/rfc6020>. | <https://www.rfc-editor.org/info/rfc6020>. | |||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", | |||
| RFC 6991, DOI 10.17487/RFC6991, July 2013, | RFC 6991, DOI 10.17487/RFC6991, July 2013, | |||
| <https://www.rfc-editor.org/rfc/rfc6991>. | <https://www.rfc-editor.org/info/rfc6991>. | |||
| [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for | [RFC7317] Bierman, A. and M. Bjorklund, "A YANG Data Model for | |||
| System Management", RFC 7317, DOI 10.17487/RFC7317, August | System Management", RFC 7317, DOI 10.17487/RFC7317, August | |||
| 2014, <https://www.rfc-editor.org/rfc/rfc7317>. | 2014, <https://www.rfc-editor.org/info/rfc7317>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | RFC 7950, DOI 10.17487/RFC7950, August 2016, | |||
| <https://www.rfc-editor.org/rfc/rfc7950>. | <https://www.rfc-editor.org/info/rfc7950>. | |||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
| May 2017, <https://www.rfc-editor.org/rfc/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
| [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration | |||
| Access Control Model", STD 91, RFC 8341, | Access Control Model", STD 91, RFC 8341, | |||
| DOI 10.17487/RFC8341, March 2018, | DOI 10.17487/RFC8341, March 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8341>. | <https://www.rfc-editor.org/info/rfc8341>. | |||
| [W3C.XML1.0] | ||||
| Bray, T., Ed., Paoli, J., Ed., Sperberg-McQueen, C. M., | ||||
| Ed., Maler, E., Ed., and F. Yergeau, Ed., "Extensible | ||||
| Markup Language (XML) 1.0 (Fifth Edition)", W3C | ||||
| Recommendation, 26 November 2008, | ||||
| <https://www.w3.org/TR/2008/REC-xml-20081126/>. | ||||
| 9.2. Informative References | 9.2. Informative References | |||
| [I-D.ietf-netmod-eca-policy] | [NETMOD-ECA-POLICY] | |||
| Wu, Q., Bryskin, I., Birkholz, H., Liu, X., and B. Claise, | Wu, Q., Bryskin, I., Birkholz, H., Liu, X., and B. Claise, | |||
| "A YANG Data model for ECA Policy Management", Work in | "A YANG Data model for ECA Policy Management", Work in | |||
| Progress, Internet-Draft, draft-ietf-netmod-eca-policy-01, | Progress, Internet-Draft, draft-ietf-netmod-eca-policy-01, | |||
| 19 February 2021, <https://datatracker.ietf.org/doc/html/ | 19 February 2021, <https://datatracker.ietf.org/doc/html/ | |||
| draft-ietf-netmod-eca-policy-01>. | draft-ietf-netmod-eca-policy-01>. | |||
| [I-D.ietf-netmod-rfc8407bis] | [NTPv5] Lichvar, M. and T. Mizrahi, "Network Time Protocol Version | |||
| Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for | ||||
| Authors and Reviewers of Documents Containing YANG Data | ||||
| Models", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netmod-rfc8407bis-28, 5 June 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | ||||
| rfc8407bis-28>. | ||||
| [I-D.ietf-ntp-ntpv5] | ||||
| Lichvar, M. and T. Mizrahi, "Network Time Protocol Version | ||||
| 5", Work in Progress, Internet-Draft, draft-ietf-ntp- | 5", Work in Progress, Internet-Draft, draft-ietf-ntp- | |||
| ntpv5-05, 2 July 2025, | ntpv5-07, 16 October 2025, | |||
| <https://datatracker.ietf.org/doc/html/draft-ietf-ntp- | <https://datatracker.ietf.org/doc/html/draft-ietf-ntp- | |||
| ntpv5-05>. | ntpv5-07>. | |||
| [I-D.ietf-opsawg-scheduling-oam-tests] | ||||
| Contreras, L. M. and V. Lopez, "A YANG Data Model for | ||||
| Network Diagnosis using Scheduled Sequences of OAM Tests", | ||||
| Work in Progress, Internet-Draft, draft-ietf-opsawg- | ||||
| scheduling-oam-tests-01, 7 July 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg- | ||||
| scheduling-oam-tests-01>. | ||||
| [I-D.ietf-opsawg-ucl-acl] | ||||
| Ma, Q., Wu, Q., Boucadair, M., and D. King, "A YANG Data | ||||
| Model and RADIUS Extension for Policy-based Network Access | ||||
| Control", Work in Progress, Internet-Draft, draft-ietf- | ||||
| opsawg-ucl-acl-07, 20 March 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg- | ||||
| ucl-acl-07>. | ||||
| [I-D.ietf-tvr-schedule-yang] | ||||
| Qu, Y., Lindem, A., Kinzie, E., Fedyk, D., and M. | ||||
| Blanchet, "YANG Data Model for Scheduled Attributes", Work | ||||
| in Progress, Internet-Draft, draft-ietf-tvr-schedule-yang- | ||||
| 05, 4 July 2025, <https://datatracker.ietf.org/doc/html/ | ||||
| draft-ietf-tvr-schedule-yang-05>. | ||||
| [I-D.liu-netmod-yang-schedule] | ||||
| Liu, X., Bryskin, I., Beeram, V. P., Saad, T., Shah, H., | ||||
| and O. G. de Dios, "A YANG Data Model for Configuration | ||||
| Scheduling", Work in Progress, Internet-Draft, draft-liu- | ||||
| netmod-yang-schedule-05, 1 March 2018, | ||||
| <https://datatracker.ietf.org/doc/html/draft-liu-netmod- | ||||
| yang-schedule-05>. | ||||
| [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | [RFC3339] Klyne, G. and C. Newman, "Date and Time on the Internet: | |||
| Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002, | |||
| <https://www.rfc-editor.org/rfc/rfc3339>. | <https://www.rfc-editor.org/info/rfc3339>. | |||
| [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | [RFC4252] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | |||
| Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | Authentication Protocol", RFC 4252, DOI 10.17487/RFC4252, | |||
| January 2006, <https://www.rfc-editor.org/rfc/rfc4252>. | January 2006, <https://www.rfc-editor.org/info/rfc4252>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/rfc/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | [RFC7951] Lhotka, L., "JSON Encoding of Data Modeled with YANG", | |||
| RFC 7951, DOI 10.17487/RFC7951, August 2016, | RFC 7951, DOI 10.17487/RFC7951, August 2016, | |||
| <https://www.rfc-editor.org/rfc/rfc7951>. | <https://www.rfc-editor.org/info/rfc7951>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | |||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | |||
| <https://www.rfc-editor.org/rfc/rfc8040>. | <https://www.rfc-editor.org/info/rfc8040>. | |||
| [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams", | |||
| BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8340>. | <https://www.rfc-editor.org/info/rfc8340>. | |||
| [RFC8413] Zhuang, Y., Wu, Q., Chen, H., and A. Farrel, "Framework | [RFC8413] Zhuang, Y., Wu, Q., Chen, H., and A. Farrel, "Framework | |||
| for Scheduled Use of Resources", RFC 8413, | for Scheduled Use of Resources", RFC 8413, | |||
| DOI 10.17487/RFC8413, July 2018, | DOI 10.17487/RFC8413, July 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8413>. | <https://www.rfc-editor.org/info/rfc8413>. | |||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018, | |||
| <https://www.rfc-editor.org/rfc/rfc8446>. | <https://www.rfc-editor.org/info/rfc8446>. | |||
| [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | [RFC9000] Iyengar, J., Ed. and M. Thomson, Ed., "QUIC: A UDP-Based | |||
| Multiplexed and Secure Transport", RFC 9000, | Multiplexed and Secure Transport", RFC 9000, | |||
| DOI 10.17487/RFC9000, May 2021, | DOI 10.17487/RFC9000, May 2021, | |||
| <https://www.rfc-editor.org/rfc/rfc9000>. | <https://www.rfc-editor.org/info/rfc9000>. | |||
| [RFC9657] Birrane, III, E., Kuhn, N., Qu, Y., Taylor, R., and L. | [RFC9657] Birrane, III, E., Kuhn, N., Qu, Y., Taylor, R., and L. | |||
| Zhang, "Time-Variant Routing (TVR) Use Cases", RFC 9657, | Zhang, "Time-Variant Routing (TVR) Use Cases", RFC 9657, | |||
| DOI 10.17487/RFC9657, October 2024, | DOI 10.17487/RFC9657, October 2024, | |||
| <https://www.rfc-editor.org/rfc/rfc9657>. | <https://www.rfc-editor.org/info/rfc9657>. | |||
| [YANG-CONFIG-SCHEDULE] | ||||
| Liu, X., Bryskin, I., Beeram, V. P., Saad, T., Shah, H. | ||||
| C., and O. G. de Dios, "A YANG Data Model for | ||||
| Configuration Scheduling", Work in Progress, Internet- | ||||
| Draft, draft-liu-netmod-yang-schedule-05, 1 March 2018, | ||||
| <https://datatracker.ietf.org/doc/html/draft-liu-netmod- | ||||
| yang-schedule-05>. | ||||
| [YANG-GUIDE] | ||||
| Bierman, A., Boucadair, M., and Q. Wu, "Guidelines for | ||||
| Authors and Reviewers of Documents Containing YANG Data | ||||
| Models", Work in Progress, Internet-Draft, draft-ietf- | ||||
| netmod-rfc8407bis-28, 5 June 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-netmod- | ||||
| rfc8407bis-28>. | ||||
| [YANG-NAC] Ma, Q., Wu, Q., Boucadair, M., and D. King, "A YANG Data | ||||
| Model and RADIUS Extension for Policy-Based Network Access | ||||
| Control", Work in Progress, Internet-Draft, draft-ietf- | ||||
| opsawg-ucl-acl-12, 3 February 2026, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg- | ||||
| ucl-acl-12>. | ||||
| [YANG-OAM] Contreras, L. M., Lopez, V., and Q. Wu, "A YANG Data Model | ||||
| for Network Diagnosis using Scheduled Sequences of OAM | ||||
| Tests", Work in Progress, Internet-Draft, draft-ietf- | ||||
| opsawg-scheduling-oam-tests-03, 20 October 2025, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-opsawg- | ||||
| scheduling-oam-tests-03>. | ||||
| [YANG-SCHEDULE] | ||||
| Qu, Y., Lindem, A., Kinzie, E., Fedyk, D., and M. | ||||
| Blanchet, "YANG Data Model for Scheduled Attributes", Work | ||||
| in Progress, Internet-Draft, draft-ietf-tvr-schedule-yang- | ||||
| 08, 9 February 2026, | ||||
| <https://datatracker.ietf.org/doc/html/draft-ietf-tvr- | ||||
| schedule-yang-08>. | ||||
| Appendix A. Examples of Scheduling Format Representation | Appendix A. Examples of Scheduling Format Representation | |||
| This section provides some examples to illustrate the use of the | This section provides some examples to illustrate the use of the | |||
| period and recurrence formats defined in Section 6. The following | period and recurrence formats defined in Section 6. The following | |||
| modules are used for illustration purposes and make examples | modules are used for illustration purposes and make examples | |||
| verifiable: | verifiable: | |||
| module example-sch-usage-1 { | module example-sch-usage-1 { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| skipping to change at page 46, line 29 ¶ | skipping to change at line 2074 ¶ | |||
| container icalendar-recurrence { | container icalendar-recurrence { | |||
| uses schedule:icalendar-recurrence { | uses schedule:icalendar-recurrence { | |||
| refine workweek-start { | refine workweek-start { | |||
| default monday; | default monday; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| For each example, only the message body is provided with JSON used | For each example, only the message body is provided with JSON, which | |||
| for encoding per the guidance in [RFC7951]. | is used for encoding per the guidance in [RFC7951]. | |||
| A.1. The "generic-schedule-params" Grouping | A.1. The "generic-schedule-params" Grouping | |||
| Figure 10 illustrates the example of a requested schedule that needs | Figure 10 illustrates the example of a requested schedule that needs | |||
| to start no earlier than 08:00 AM, January 1, 2025 and end no later | to start no earlier than 08:00 AM, January 1, 2025 and end no later | |||
| than 8:00 PM, January 31, 2025 (Beijing time). Schedule requests | than 8:00 PM, January 31, 2025 (Beijing time). Schedule requests | |||
| that fail to meet the requirements are ignored by the system as | that fail to meet the requirements are ignored by the system, as | |||
| indicated by "discard-action". | indicated by "discard-action". | |||
| { | { | |||
| "example-sch-usage-1:generic-schedule-params": { | "example-sch-usage-1:generic-schedule-params": { | |||
| "time-zone-identifier": "China/Beijing", | "time-zone-identifier": "China/Beijing", | |||
| "min-allowed-start": "2025-01-01T08:00:00", | "min-allowed-start": "2025-01-01T08:00:00", | |||
| "max-allowed-end": "2025-01-31T20:00:00", | "max-allowed-end": "2025-01-31T20:00:00", | |||
| "discard-action": "ietf-schedule:silently-discard" | "discard-action": "ietf-schedule:silently-discard" | |||
| } | } | |||
| } | } | |||
| Figure 10: Generic Parameters with 'max-allowed-end' for Schedule | Figure 10: Generic Parameters with 'max-allowed-end' for Schedule | |||
| Validation | Validation | |||
| To illustrate the difference between "max-allowed-end" and "validity" | To illustrate the difference between "max-allowed-end" and "validity" | |||
| parameters, Figure 11 shows the example of a requested schedule that | parameters, Figure 11 shows the example of a requested schedule that | |||
| needs to start no earlier than 08:00 AM, January 1, 2025 (Beijing | needs to start no earlier than 08:00 AM, January 1, 2025 (Beijing | |||
| time). Schedule requests that fail to meet the requirements are | time). Schedule requests that fail to meet the requirements are | |||
| ignored by the system as indicated by "discard-action". The | ignored by the system, as indicated by "discard-action". The | |||
| requested schedule may end after 8:00 PM, January 31, 2025, but any | requested schedule may end after 8:00 PM, January 31, 2025, but any | |||
| occurrences that are generated after that time would not be | occurrences that are generated after that time would not be | |||
| considered as valid. | considered as valid. | |||
| { | { | |||
| "example-sch-usage-1:generic-schedule-params": { | "example-sch-usage-1:generic-schedule-params": { | |||
| "time-zone-identifier": "China/Beijing", | "time-zone-identifier": "China/Beijing", | |||
| "validity": "2025-01-31T20:00:00", | "validity": "2025-01-31T20:00:00", | |||
| "min-allowed-start": "2025-01-01T08:00:00", | "min-allowed-start": "2025-01-01T08:00:00", | |||
| "discard-action": "ietf-schedule:silently-discard" | "discard-action": "ietf-schedule:silently-discard" | |||
| } | } | |||
| } | } | |||
| Figure 11: Generic Parameters with 'validity' for Schedule Validation | Figure 11: Generic Parameters with 'validity' for Schedule Validation | |||
| A.2. The "period-of-time" Grouping | A.2. The "period-of-time" Grouping | |||
| Figure 12 shows an example of a period that starts at 08:00:00 UTC, | Figure 12 shows an example of a period that starts at 08:00:00 UTC on | |||
| on January 1, 2025 and ends at 18:00:00 UTC on December 31, 2027. | January 1, 2025 and ends at 18:00:00 UTC on December 31, 2027. | |||
| { | { | |||
| "example-sch-usage-2:period-of-time": { | "example-sch-usage-2:period-of-time": { | |||
| "period-start": "2025-01-01T08:00:00Z", | "period-start": "2025-01-01T08:00:00Z", | |||
| "period-end": "2027-12-31T18:00:00Z" | "period-end": "2027-12-31T18:00:00Z" | |||
| } | } | |||
| } | } | |||
| Figure 12: Simple Start/End Schedule | Figure 12: Simple Start/End Schedule | |||
| An example of a period that starts at 08:00:00 UTC, on January 1, | An example of a period that starts at 08:00:00 UTC on January 1, 2025 | |||
| 2025 and lasts 15 days and 5 hours and 20 minutes is encoded as shown | and lasts 15 days and 5 hours and 20 minutes is encoded as shown in | |||
| in Figure 13. | Figure 13. | |||
| { | { | |||
| "example-sch-usage-2:period-of-time": { | "example-sch-usage-2:period-of-time": { | |||
| "period-start": "2025-01-01T08:00:00Z", | "period-start": "2025-01-01T08:00:00Z", | |||
| "duration": "P15DT05:20:00" | "duration": "P15DT05:20:00" | |||
| } | } | |||
| } | } | |||
| Figure 13: Simple Schedule with Duration | Figure 13: Simple Schedule with Duration | |||
| An example of a period that starts at 2:00 A.M. in Los Angeles on | An example of a period that starts at 2:00 AM in Los Angeles on | |||
| November 19, 2025 and lasts 20 weeks is depicted in Figure 14. | November 19, 2025 and lasts 20 weeks is depicted in Figure 14. | |||
| { | { | |||
| "example-sch-usage-2:period-of-time": { | "example-sch-usage-2:period-of-time": { | |||
| "period-start": "2025-11-19T02:00:00", | "period-start": "2025-11-19T02:00:00", | |||
| "time-zone-identifier": "America/Los_Angeles", | "time-zone-identifier": "America/Los_Angeles", | |||
| "duration": "P20W" | "duration": "P20W" | |||
| } | } | |||
| } | } | |||
| Figure 14: Simple Schedule with Time Zone Indication | Figure 14: Simple Schedule with Time Zone Indication | |||
| A.3. The "recurrence-basic" Grouping | A.3. The "recurrence-basic" Grouping | |||
| Figure 17 indicates a recurrence of every 2 days which starts | Figure 15 indicates a recurrence of every 2 days, which starts | |||
| immediately and repeats forever: | immediately and repeats forever: | |||
| { | { | |||
| "example-sch-usage-3:recurrence-basic": { | "example-sch-usage-3:recurrence-basic": { | |||
| "recurrence-description": "forever recurrence rule", | "recurrence-description": "forever recurrence rule", | |||
| "frequency": "ietf-schedule:daily", | "frequency": "ietf-schedule:daily", | |||
| "interval": 2 | "interval": 2 | |||
| } | } | |||
| } | } | |||
| skipping to change at page 49, line 7 ¶ | skipping to change at line 2193 ¶ | |||
| "frequency": "ietf-schedule:daily", | "frequency": "ietf-schedule:daily", | |||
| "interval": 1, | "interval": 1, | |||
| "utc-until": "2025-12-31T23:59:59Z" | "utc-until": "2025-12-31T23:59:59Z" | |||
| } | } | |||
| } | } | |||
| Figure 16: Simple Schedule with Recurrence in UTC | Figure 16: Simple Schedule with Recurrence in UTC | |||
| A.5. The "recurrence-with-time-zone" Grouping | A.5. The "recurrence-with-time-zone" Grouping | |||
| Figure 17 indicates a recurrence of every 2 hours for 10 occurrences, | Figure 17 indicates a recurrence of every 2 hours for 10 occurrences | |||
| lasting 10 minutes, and starting at 3 p.m. on December 1, 2025 in New | that lasts 10 minutes and starts at 3 PM on December 1, 2025 in New | |||
| York: | York: | |||
| { | { | |||
| "example-sch-usage-5:recurrence-with-time-zone": { | "example-sch-usage-5:recurrence-with-time-zone": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time": "2025-12-01T15:00:00", | "start-time": "2025-12-01T15:00:00", | |||
| "duration": "PT00:10:00", | "duration": "PT00:10:00", | |||
| "time-zone-identifier": "America/New_York" | "time-zone-identifier": "America/New_York" | |||
| }, | }, | |||
| "frequency": "ietf-schedule:hourly", | "frequency": "ietf-schedule:hourly", | |||
| "interval": 2, | "interval": 2, | |||
| "count": 10 | "count": 10 | |||
| } | } | |||
| } | } | |||
| Figure 17: Simple Schedule with Recurrence with Time Zone Indication | Figure 17: Simple Schedule with Recurrence with Time Zone Indication | |||
| A.6. The "recurrence-utc-with-periods" Grouping | A.6. The "recurrence-utc-with-periods" Grouping | |||
| Figure 18 indicates a recurrence that occurs every two days starting | Figure 18 indicates a recurrence that occurs every two days starting | |||
| at 9:00 AM and 3:00 PM for a duration of 30 minutes and 40 minutes | at 9:00 AM and 3:00 PM for a duration of 30 minutes and 40 minutes, | |||
| respectively, from 2025-06-01 to 2025-06-30 in UTC: | respectively, from 2025-06-01 to 2025-06-30 in UTC: | |||
| { | { | |||
| "example-sch-usage-6:recurrence-utc-with-periods": { | "example-sch-usage-6:recurrence-utc-with-periods": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time-utc": "2025-06-01T09:00:00Z" | "start-time-utc": "2025-06-01T09:00:00Z" | |||
| }, | }, | |||
| "frequency": "ietf-schedule:daily", | "frequency": "ietf-schedule:daily", | |||
| "interval": 2, | "interval": 2, | |||
| "utc-until": "2025-06-30T23:59:59Z", | "utc-until": "2025-06-30T23:59:59Z", | |||
| skipping to change at page 50, line 4 ¶ | skipping to change at line 2238 ¶ | |||
| "period-start": "3240000", | "period-start": "3240000", | |||
| "period-end": "3420000" | "period-end": "3420000" | |||
| }, | }, | |||
| { | { | |||
| "period-start": "5400000", | "period-start": "5400000", | |||
| "period-end": "5640000" | "period-end": "5640000" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 18: Example of Recurrence With Date Times | Figure 18: Example of Recurrence With Date Times | |||
| A.7. The "recurrence-time-zone-with-periods" Grouping | A.7. The "recurrence-time-zone-with-periods" Grouping | |||
| Figure 19 indicates a recurrence that occurs every 30 minutes and | Figure 19 indicates a recurrence that occurs every 30 minutes and | |||
| lasts for 15 minutes from 9:00 AM to 5:00 PM and an extra two | lasts for 15 minutes from 9:00 AM to 5:00 PM and two extra | |||
| occurrences at 6:00 PM and 6:30 PM with each lasting for 20 minutes | occurrences at 6:00 PM and 6:30 PM with each lasting for 20 minutes | |||
| on 2025-12-01 (New York): | on 2025-12-01 (New York): | |||
| { | { | |||
| "example-sch-usage-7:recurrence-time-zone-with-periods": { | "example-sch-usage-7:recurrence-time-zone-with-periods": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time": "2025-12-01T09:00:00", | "start-time": "2025-12-01T09:00:00", | |||
| "duration": "PT00:15:00", | "duration": "PT00:15:00", | |||
| "time-zone-identifier": "America/New_York" | "time-zone-identifier": "America/New_York" | |||
| }, | }, | |||
| skipping to change at page 50, line 40 ¶ | skipping to change at line 2275 ¶ | |||
| "duration": "PT00:20:00" | "duration": "PT00:20:00" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 19: Example of Advanced Recurrence Schedule | Figure 19: Example of Advanced Recurrence Schedule | |||
| A.8. The "icalendar-recurrence" Grouping | A.8. The "icalendar-recurrence" Grouping | |||
| Figure 20 indicates 10 occurrences that occur at 8:00 AM (EST), every | Figure 20 indicates 10 occurrences at 8:00 AM (EST) every last | |||
| last Saturday of the month starting in January 2024: | Saturday of the month starting in January 2024: | |||
| { | { | |||
| "example-sch-usage-8:icalendar-recurrence": { | "example-sch-usage-8:icalendar-recurrence": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time": "2024-01-27T08:00:00", | "start-time": "2024-01-27T08:00:00", | |||
| "time-zone-identifier": "America/New_York" | "time-zone-identifier": "America/New_York" | |||
| }, | }, | |||
| "frequency": "ietf-schedule:monthly", | "frequency": "ietf-schedule:monthly", | |||
| "count": 10, | "count": 10, | |||
| "byday": [ | "byday": [ | |||
| skipping to change at page 51, line 27 ¶ | skipping to change at line 2300 ¶ | |||
| ], | ], | |||
| "weekday": "saturday" | "weekday": "saturday" | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 20: Simple iCalendar Recurrence | Figure 20: Simple iCalendar Recurrence | |||
| Figure 21 is an example of a recurrence that occurs on the last | Figure 21 is an example of a recurrence that occurs on the last | |||
| workday of the month until December 25, 2025, from January 1, 2025: | workday of the month until December 25, 2025, starting January 1, | |||
| 2025: | ||||
| { | { | |||
| "example-sch-usage-8:icalendar-recurrence": { | "example-sch-usage-8:icalendar-recurrence": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time": "2025-01-01" | "start-time": "2025-01-01" | |||
| }, | }, | |||
| "frequency": "ietf-schedule:monthly", | "frequency": "ietf-schedule:monthly", | |||
| "until": "2025-12-25", | "until": "2025-12-25", | |||
| "byday": [ | "byday": [ | |||
| { | { | |||
| skipping to change at page 52, line 38 ¶ | skipping to change at line 2336 ¶ | |||
| ], | ], | |||
| "bysetpos": [ | "bysetpos": [ | |||
| -1 | -1 | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 21: Example of Advanced iCalendar Recurrence | Figure 21: Example of Advanced iCalendar Recurrence | |||
| Figure 22 indicates a recurrence that occurs every 20 minutes from | Figure 22 indicates a recurrence that occurs every 20 minutes from | |||
| 9:00 AM to 4:40 PM (UTC), with the occurrence starting at 10:20 AM | 9:00 AM to 4:40 PM (UTC), with the exclusion of the occurrence | |||
| being excluded on 2025-12-01: | starting at 10:20 AM on 2025-12-01: | |||
| { | { | |||
| "example-sch-usage-8:icalendar-recurrence": { | "example-sch-usage-8:icalendar-recurrence": { | |||
| "recurrence-first": { | "recurrence-first": { | |||
| "start-time": "2025-12-01T09:00:00Z" | "start-time": "2025-12-01T09:00:00Z" | |||
| }, | }, | |||
| "until": "2025-12-01T16:40:00Z", | "until": "2025-12-01T16:40:00Z", | |||
| "frequency": "ietf-schedule:minutely", | "frequency": "ietf-schedule:minutely", | |||
| "byminute": [ | "byminute": [ | |||
| 0, | 0, | |||
| skipping to change at page 53, line 38 ¶ | skipping to change at line 2372 ¶ | |||
| "2025-12-01T10:20:00Z" | "2025-12-01T10:20:00Z" | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 22: Example of Advanced iCalendar Recurrence with Exceptions | Figure 22: Example of Advanced iCalendar Recurrence with Exceptions | |||
| A.9. The "schedule-status" Grouping | A.9. The "schedule-status" Grouping | |||
| Figure 23 indicates the scheduled recurrence status of Figure 22 at | Figure 23 indicates the scheduled recurrence status of Figure 22 at | |||
| the time of 12:15 PM, 2025-12-01 (UTC): | the time of 12:15 PM on 2025-12-01 (UTC): | |||
| { | { | |||
| "example-sch-usage-1:schedule-status": { | "example-sch-usage-1:schedule-status": { | |||
| "state": "ietf-schedule:enabled", | "state": "ietf-schedule:enabled", | |||
| "version": 1, | "version": 1, | |||
| "schedule-type": "ietf-schedule:recurrence", | "schedule-type": "ietf-schedule:recurrence", | |||
| "counter": 9, | "counter": 9, | |||
| "last-occurrence": [ | "last-occurrence": [ | |||
| "2025-12-01T12:00:00Z" | "2025-12-01T12:00:00Z" | |||
| ], | ], | |||
| "upcoming-occurrence": [ | "upcoming-occurrence": [ | |||
| "2025-12-01T12:20:00Z" | "2025-12-01T12:20:00Z" | |||
| ] | ] | |||
| } | } | |||
| } | } | |||
| Figure 23: Example of a Schedule Status | Figure 23: Example of a Schedule Status | |||
| At the time of 12:15 PM, 2025-12-01 (UTC), the recurring event | At the time of 12:15 PM on 2025-12-01 (UTC), the recurring event | |||
| occurred at (note that occurrence at 10:20 AM is excluded): 9:00, | occurred at (note that the occurrence at 10:20 AM is excluded): 9:00, | |||
| 9:20, 9:40, 10:00, 10:40, 11:00, 11:20, 11:40, 12:00. The last | 9:20, 9:40, 10:00, 10:40, 11:00, 11:20, 11:40, and 12:00. The last | |||
| occurrence was at 12:00, the upcoming one is at 12:20. | occurrence was at 12:00, and the upcoming one is at 12:20. | |||
| Appendix B. Examples of Using/Extending the "ietf-schedule" Module | Appendix B. Examples of Using/Extending the "ietf-schedule" Module | |||
| This non-normative section shows two examples for how the "ietf- | This non-normative section shows two examples for how the "ietf- | |||
| schedule" module can be used or extended for scheduled events or | schedule" module can be used or extended for scheduled events or | |||
| attributes based on date and time. | attributes based on date and time. | |||
| B.1. Example: Schedule Tasks to Execute Based on a Recurrence Rule | B.1. Example: Schedule Tasks to Execute Based on a Recurrence Rule | |||
| Scheduled tasks can be used to execute specific actions based on | Scheduled tasks can be used to execute specific actions based on | |||
| certain recurrence rules (e.g., every Friday at 8:00 AM). The | certain recurrence rules (e.g., every Friday at 8:00 AM). The | |||
| following example module which "uses" the "icalendar-recurrence" | following example module, which "uses" the "icalendar-recurrence" | |||
| grouping from "ietf-schedule" module shows how a scheduled task could | grouping from the "ietf-schedule" module, shows how a scheduled task | |||
| be defined with different features used for options. | could be defined with different features used for options. | |||
| module example-scheduled-backup { | module example-scheduled-backup { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "http://example.com/example-scheduled-backup"; | namespace "http://example.com/example-scheduled-backup"; | |||
| prefix "ex-scback"; | prefix "ex-scback"; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| skipping to change at page 55, line 4 ¶ | skipping to change at line 2422 ¶ | |||
| namespace "http://example.com/example-scheduled-backup"; | namespace "http://example.com/example-scheduled-backup"; | |||
| prefix "ex-scback"; | prefix "ex-scback"; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| } | } | |||
| import ietf-schedule { | import ietf-schedule { | |||
| prefix "schedule"; | prefix "schedule"; | |||
| } | } | |||
| organization | organization | |||
| "Example, Inc."; | "Example, Inc."; | |||
| contact | contact | |||
| "Support at example.com"; | "Support at example.com"; | |||
| description | description | |||
| "Example of a module defining a scheduled based backup | "Example of a module defining a scheduled-based backup | |||
| operation."; | operation."; | |||
| revision "2023-01-19" { | revision "2023-01-19" { | |||
| description | description | |||
| "Initial Version."; | "Initial version."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Scheduling."; | "RFC 9922: A YANG Data Model for Scheduling."; | |||
| } | } | |||
| container scheduled-backup-tasks { | container scheduled-backup-tasks { | |||
| description | description | |||
| "A container for backing up all current running configuration | "A container for backing up all current running configurations | |||
| on the device."; | on the device."; | |||
| list tasks { | list tasks { | |||
| key "task-id"; | key "task-id"; | |||
| description | description | |||
| "The list of backing up tasks on this device."; | "The list of backing up tasks on this device."; | |||
| leaf task-id { | leaf task-id { | |||
| type string; | type string; | |||
| description | description | |||
| "The task identifier that uniquely identifies a scheduled | "The task identifier that uniquely identifies a scheduled | |||
| backup task."; | backup task."; | |||
| } | } | |||
| choice local-or-remote { | choice local-or-remote { | |||
| description | description | |||
| "Specifies whether the configuration to be backed up is | "Specifies whether the configuration to be backed up is | |||
| local or remote."; | local or remote."; | |||
| case local { | case local { | |||
| description | description | |||
| "Configuration parameters for backing up of local | "Configuration parameters for the backing up of local | |||
| devices."; | devices."; | |||
| leaf local { | leaf local { | |||
| type empty; | type empty; | |||
| description | description | |||
| "The parameter specifies the configuration to be | "The parameter specifies the configuration to be | |||
| backed up is on the local device."; | backed up is on the local device."; | |||
| } | } | |||
| } | } | |||
| case remote { | case remote { | |||
| description | description | |||
| skipping to change at page 56, line 18 ¶ | skipping to change at line 2485 ¶ | |||
| description | description | |||
| "The parameter specifies the remote device domain | "The parameter specifies the remote device domain | |||
| name."; | name."; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container basic-recurrence-schedules { | container basic-recurrence-schedules { | |||
| if-feature schedule:basic-recurrence; | if-feature schedule:basic-recurrence; | |||
| description | description | |||
| "Basic recurrence schedule specification, only applies when | "Basic recurrence schedule specification, which only | |||
| schedule:basic-recurrence feature is supported."; | applies when the schedule:basic-recurrence feature | |||
| is supported."; | ||||
| leaf schedule-id { | leaf schedule-id { | |||
| type string; | type string; | |||
| description | description | |||
| "The schedule identifier for this recurrence rule."; | "The schedule identifier for this recurrence rule."; | |||
| } | } | |||
| uses schedule:recurrence-basic { | uses schedule:recurrence-basic { | |||
| refine frequency { | refine frequency { | |||
| mandatory true; | mandatory true; | |||
| } | } | |||
| refine interval { | refine interval { | |||
| default 1; | default 1; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| container icalendar-recurrence-schedules { | container icalendar-recurrence-schedules { | |||
| if-feature schedule:icalendar-recurrence; | if-feature schedule:icalendar-recurrence; | |||
| description | description | |||
| "Basic recurrence schedule specification, only applies when | "Basic recurrence schedule specification, which only | |||
| schedule:icalendar-recurrence feature is supported."; | applies when the schedule:icalendar-recurrence feature | |||
| is supported."; | ||||
| leaf schedule-id { | leaf schedule-id { | |||
| type string; | type string; | |||
| description | description | |||
| "The schedule identifier for this recurrence rule."; | "The schedule identifier for this recurrence rule."; | |||
| } | } | |||
| uses schedule:icalendar-recurrence { | uses schedule:icalendar-recurrence { | |||
| refine workweek-start { | refine workweek-start { | |||
| default monday; | default monday; | |||
| } | } | |||
| } | } | |||
| skipping to change at page 57, line 4 ¶ | skipping to change at line 2521 ¶ | |||
| description | description | |||
| "The schedule identifier for this recurrence rule."; | "The schedule identifier for this recurrence rule."; | |||
| } | } | |||
| uses schedule:icalendar-recurrence { | uses schedule:icalendar-recurrence { | |||
| refine workweek-start { | refine workweek-start { | |||
| default monday; | default monday; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| list schedule-set { | list schedule-set { | |||
| key "schedule-name"; | key "schedule-name"; | |||
| description | description | |||
| "The list of schedule status for the backup tasks."; | "Schedule status list for the backup tasks."; | |||
| uses schedule:schedule-status-with-name; | uses schedule:schedule-status-with-name; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| B.2. Example: Schedule Network Properties to Change Based on Date and | B.2. Example: Schedule Network Properties to Change Based on Date and | |||
| Time | Time | |||
| Network properties may change over a specific period of time or based | Network properties may change over a specific period of time or based | |||
| on a recurrence rule, e.g., [RFC9657]. The following example module | on a recurrence rule, e.g., [RFC9657]. The following example module, | |||
| which augments the "recurrence-utc-with-periods" grouping from "ietf- | which augments the "recurrence-utc-with-periods" grouping from the | |||
| schedule" module shows how a scheduled attribute could be defined. | "ietf-schedule" module, shows how a scheduled attribute could be | |||
| defined. | ||||
| module example-scheduled-link-bandwidth { | module example-scheduled-link-bandwidth { | |||
| yang-version 1.1; | yang-version 1.1; | |||
| namespace "http://example.com/example-scheduled-link-bandwidth"; | namespace "http://example.com/example-scheduled-link-bandwidth"; | |||
| prefix "ex-scattr"; | prefix "ex-scattr"; | |||
| import ietf-network { | import ietf-network { | |||
| prefix "nw"; | prefix "nw"; | |||
| reference | reference | |||
| "RFC 8345: A YANG Data Model for Network Topologies"; | "RFC 8345: A YANG Data Model for Network Topologies"; | |||
| } | } | |||
| import ietf-schedule { | import ietf-schedule { | |||
| prefix "schedule"; | prefix "schedule"; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Scheduling"; | "RFC 9922: A YANG Data Model for Scheduling"; | |||
| } | } | |||
| organization | organization | |||
| "Example, Inc."; | "Example, Inc."; | |||
| contact | contact | |||
| "Support at example.com"; | "Support at example.com"; | |||
| description | description | |||
| "Example of a module defining a scheduled link bandwidth."; | "Example of a module defining a scheduled link bandwidth."; | |||
| revision "2023-01-19" { | revision "2023-01-19" { | |||
| description | description | |||
| "Initial Version."; | "Initial version."; | |||
| reference | reference | |||
| "RFC XXXX: A YANG Data Model for Scheduling."; | "RFC 9922: A YANG Data Model for Scheduling"; | |||
| } | } | |||
| grouping link-bandwidth-grouping { | grouping link-bandwidth-grouping { | |||
| description | description | |||
| "Grouping of the link bandwidth definition."; | "Grouping of the link bandwidth definition."; | |||
| leaf scheduled-bandwidth { | leaf scheduled-bandwidth { | |||
| type uint64; | type uint64; | |||
| units "Kbps"; | units "Kbps"; | |||
| description | description | |||
| "Bandwidth values, expressed in kilobits per second."; | "Bandwidth values, expressed in kilobits per second."; | |||
| skipping to change at page 58, line 40 ¶ | skipping to change at line 2606 ¶ | |||
| leaf destination-node { | leaf destination-node { | |||
| type nw:node-id; | type nw:node-id; | |||
| description | description | |||
| "Indicates the source node identifier."; | "Indicates the source node identifier."; | |||
| } | } | |||
| leaf default-bandwidth { | leaf default-bandwidth { | |||
| type uint64; | type uint64; | |||
| units "Kbps"; | units "Kbps"; | |||
| description | description | |||
| "Bandwidth value used for perdiods that don't match | "Bandwidth value used for periods that don't match | |||
| a schedule."; | a schedule."; | |||
| } | } | |||
| choice time-variant-type { | choice time-variant-type { | |||
| description | description | |||
| "Controls the schedule type."; | "Controls the schedule type."; | |||
| case period { | case period { | |||
| uses schedule:period-of-time; | uses schedule:period-of-time; | |||
| } | } | |||
| case recurrence { | case recurrence { | |||
| uses schedule:recurrence-utc-with-periods { | uses schedule:recurrence-utc-with-periods { | |||
| augment "period-timeticks" { | augment "period-timeticks" { | |||
| description | description | |||
| "Specifies the attributes inside each | "Specifies the attributes inside each | |||
| period-timeticks entry."; | 'period-timeticks' entry."; | |||
| uses link-bandwidth-grouping; | uses link-bandwidth-grouping; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Figure 24 shows a configuration example of a link's bandwidth that is | Figure 24 shows a configuration example in XML [W3C.XML1.0] of a | |||
| scheduled between 2025-12-01 0:00 UTC to the end of 2025-12-31 with a | link's bandwidth that is scheduled between 2025-12-01 0:00 UTC to the | |||
| daily schedule. In each day, the bandwidth value is scheduled to be | end of 2025-12-31 with a daily schedule. In each day, the bandwidth | |||
| 500 Kbps between 1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to | value is scheduled to be 500 Kbps between 1:00 AM to 6:00 AM and 800 | |||
| 11:00 PM. The bandwidth value that is not covered by the period | Kbps between 10:00 PM to 11:00 PM. The bandwidth value that is not | |||
| above is 1000 Kbps. | covered by the period above is 1000 Kbps. | |||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | |||
| <link-attributes | <link-attributes | |||
| xmlns="http://example.com/example-scheduled-link-bandwidth" | xmlns="http://example.com/example-scheduled-link-bandwidth" | |||
| xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> | xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> | |||
| <link> | <link> | |||
| <source-node>ne1</source-node> | <source-node>ne1</source-node> | |||
| <destination-node>ne2</destination-node> | <destination-node>ne2</destination-node> | |||
| <default-bandwidth>1000</default-bandwidth> | <default-bandwidth>1000</default-bandwidth> | |||
| <recurrence-first> | <recurrence-first> | |||
| skipping to change at page 60, line 5 ¶ | skipping to change at line 2666 ¶ | |||
| <period-timeticks> | <period-timeticks> | |||
| <period-start>7920000</period-start> | <period-start>7920000</period-start> | |||
| <period-end>8280000</period-end> | <period-end>8280000</period-end> | |||
| <scheduled-bandwidth>800</scheduled-bandwidth> | <scheduled-bandwidth>800</scheduled-bandwidth> | |||
| </period-timeticks> | </period-timeticks> | |||
| </link> | </link> | |||
| </link-attributes> | </link-attributes> | |||
| Figure 24: Example of Scheduled Link's Bandwidth | Figure 24: Example of Scheduled Link's Bandwidth | |||
| Appendix C. Examples of Using "ietf-schedule" Module for Scheduled Use | Appendix C. Examples of Using the "ietf-schedule" Module for Scheduled | |||
| of Resources Framework | Use of Resources Framework | |||
| This section exemplifies how the architecture for supporting | This section exemplifies how the architecture for supporting | |||
| scheduled reservation of Traffic Engineering (TE) resources in | scheduled reservation of Traffic Engineering (TE) resources in | |||
| [RFC8413] might leverage the "period-of-time" grouping defined in the | [RFC8413] might leverage the "period-of-time" grouping defined in the | |||
| "ietf-schedule" module to implement scheduled use of resources. | "ietf-schedule" module to implement scheduled use of resources. | |||
| The following example module shows how a scheduled link capacity | The following example module shows how a scheduled link capacity | |||
| reservation could be defined. | reservation could be defined. | |||
| module example-sch-capacity-res { | module example-sch-capacity-res { | |||
| skipping to change at page 60, line 48 ¶ | skipping to change at line 2709 ¶ | |||
| leaf reserved-capability { | leaf reserved-capability { | |||
| type uint64; | type uint64; | |||
| units "Mbps"; | units "Mbps"; | |||
| } | } | |||
| uses schedule:period-of-time; | uses schedule:period-of-time; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| Section 4 of [RFC8413] defines the reference architecture for | Section 4 of [RFC8413] defines the reference architecture for | |||
| scheduled use of resources, the service requester sends a request to | scheduled use of resources. The service requester sends a request to | |||
| a Path Computation Element (PCE) and includes the parameters of the | a Path Computation Element (PCE) and includes the parameters of the | |||
| Label Switched Path (LSP) that the requester wishes to supply, the | Label Switched Path (LSP) that the requester wishes to supply. The | |||
| configuration example to provide the scheduled resource is shown in | configuration example to provide the scheduled resource is shown in | |||
| Figure 25. | Figure 25. | |||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | |||
| <link-capability-reservations | <link-capability-reservations | |||
| xmlns="http://example.com/example-sch-capacity-res" | xmlns="http://example.com/example-sch-capacity-res" | |||
| xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> | xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule"> | |||
| <scheduled-link-capacity> | <scheduled-link-capacity> | |||
| <schedule-id>1</schedule-id> | <schedule-id>1</schedule-id> | |||
| <link-id>1-2-1</link-id> | <link-id>1-2-1</link-id> | |||
| skipping to change at page 61, line 36 ¶ | skipping to change at line 2746 ¶ | |||
| <reserved-capability>500</reserved-capability> | <reserved-capability>500</reserved-capability> | |||
| <period-start>2025-04-01T09:00:00Z</period-start> | <period-start>2025-04-01T09:00:00Z</period-start> | |||
| <period-end>2025-04-01T23:59:59Z</period-end> | <period-end>2025-04-01T23:59:59Z</period-end> | |||
| </scheduled-link-capacity> | </scheduled-link-capacity> | |||
| </link-capability-reservations> | </link-capability-reservations> | |||
| Figure 25: Example of Scheduled Link's Bandwidth Reservation | Figure 25: Example of Scheduled Link's Bandwidth Reservation | |||
| Acknowledgments | Acknowledgments | |||
| This work is derived from the [I-D.ietf-opsawg-ucl-acl]. There is a | This work is derived from [YANG-NAC]. There is a desire from the | |||
| desire from the OPSAWG to see this model be separately defined for | OPSAWG to see this module separately defined for wide use in | |||
| wide use in scheduling context. | scheduling context. | |||
| Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve | Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve | |||
| Baillargeon, Dhruv Dhody, Robert Wilton, and Italo Busi for their | Baillargeon, Dhruv Dhody, Robert Wilton, and Italo Busi for their | |||
| valuable comments and inputs to this work. | valuable comments and inputs to this work. | |||
| Many thanks to the authors of [I-D.ietf-tvr-schedule-yang], | Many thanks to the authors of [YANG-SCHEDULE], [YANG-OAM], and | |||
| [I-D.ietf-opsawg-scheduling-oam-tests], and | [NETMOD-ECA-POLICY] for the constructive discussion during IETF#118. | |||
| [I-D.ietf-netmod-eca-policy] for the constructive discussion during | ||||
| IETF#118. | ||||
| Other related efforts were explored in the past, e.g., | Other related efforts were explored in the past, e.g., | |||
| [I-D.liu-netmod-yang-schedule]. | [YANG-CONFIG-SCHEDULE]. | |||
| Thanks to Reshad Rahman for the great YANG Doctors review, Mahesh | Thanks to Reshad Rahman for the great YANG Doctors review, Mahesh | |||
| Jethanandani for the AD review, Per Andersson for the OPSDIR review, | Jethanandani for the AD review, Per Andersson for the OPSDIR review, | |||
| Peter Yee for genart review, and Acee Lindem for the rtgdir review. | Peter Yee for the GENART review, and Acee Lindem for the RTGDIR | |||
| review. | ||||
| Thanks to Éric Vyncke, Erik Kline, and Mike Bishop for the IESG | Thanks to Éric Vyncke, Erik Kline, and Mike Bishop for the IESG | |||
| review. | review. | |||
| Authors' Addresses | Authors' Addresses | |||
| Qiufang Ma (editor) | Qiufang Ma (editor) | |||
| Huawei | Huawei | |||
| 101 Software Avenue, Yuhua District | 101 Software Avenue, Yuhua District | |||
| Jiangsu | Jiangsu | |||
| End of changes. 188 change blocks. | ||||
| 440 lines changed or deleted | 430 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||