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.