rfc9922.original.xml   rfc9922.xml 
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [ <!DOCTYPE rfc [
<!ENTITY nbsp "&#160;"> <!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;"> <!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;"> <!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;"> <!ENTITY wj "&#8288;">
]> ]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4. <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft
4) --> -ietf-netmod-schedule-yang-rfceditor-latest-10" category="std" consensus="true"
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft submissionType="IETF" xml:lang="en" number="9922" tocInclude="true" sortRefs="tr
-ietf-netmod-schedule-yang-10" category="std" consensus="true" submissionType="I ue" symRefs="true" version="3">
ETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
<!-- xml2rfc v2v3 conversion 3.30.0 -->
<front> <front>
<title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling <title abbrev="YANG Scheduling">A Common YANG Data Model for Scheduling</tit
</title> le>
<seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-10" <seriesInfo name="RFC" value="9922"/>
/>
<author fullname="Qiufang Ma" role="editor"> <author fullname="Qiufang Ma" role="editor">
<organization>Huawei</organization> <organization>Huawei</organization>
<address> <address>
<postal> <postal>
<street>101 Software Avenue, Yuhua District</street> <street>101 Software Avenue, Yuhua District</street>
<city>Jiangsu</city> <city>Jiangsu</city>
<code>210012</code> <code>210012</code>
<country>China</country> <country>China</country>
</postal> </postal>
<email>maqiufang1@huawei.com</email> <email>maqiufang1@huawei.com</email>
skipping to change at line 59 skipping to change at line 57
</author> </author>
<author fullname="Daniel King"> <author fullname="Daniel King">
<organization>Lancaster University</organization> <organization>Lancaster University</organization>
<address> <address>
<postal> <postal>
<country>United Kingdom</country> <country>United Kingdom</country>
</postal> </postal>
<email>d.king@lancaster.ac.uk</email> <email>d.king@lancaster.ac.uk</email>
</address> </address>
</author> </author>
<date year="2025" month="August" day="07"/> <date year="2026" month="March"/>
<area>Operations and Management</area> <area>OPS</area>
<workgroup>netmod</workgroup> <workgroup>netmod</workgroup>
<keyword>calendaring</keyword> <keyword>calendaring</keyword>
<keyword>scheduling</keyword> <keyword>scheduling</keyword>
<keyword>YANG</keyword> <keyword>YANG</keyword>
<keyword>groupings</keyword> <keyword>groupings</keyword>
<abstract> <abstract>
<?line 57?> <?line 96?>
<t>This document defines common types and groupings that are meant to be used <t>This document defines common types and groupings that are meant to be used
for scheduling purposes such as event, policy, services, or resources based o n for scheduling purposes, such as events, policies, services, or resources bas ed on
date and time. For the sake of better modularity, the YANG module includes a date and time. For the sake of better modularity, the YANG module includes a
set of recurrence-related groupings with varying levels of representation set of recurrence-related groupings with varying levels of representation
(i.e., from basic to advanced) to accommodate a variety of requirements. (i.e., from basic to advanced) to accommodate a variety of requirements.
It also defines groupings for validating requested schedules and reporting sc heduling status.</t> It also defines groupings for validating requested schedules and reporting sc heduling statuses.</t>
</abstract> </abstract>
<note removeInRFC="true">
<name>Discussion Venues</name>
<t>This note is to be removed before publishing as an RFC.</t>
<t>Discussion of this document takes place on the
Network Modeling (NETMOD) Working Group mailing list (netmod@ietf.org),
which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/
netmod/"/>.</t>
<t>Source for this draft and an issue tracker can be found at
<eref target="https://github.com/netmod-wg/schedule-yang"/>.</t>
</note>
</front> </front>
<middle> <middle>
<?line 66?> <?line 110?>
<section anchor="intro"> <section anchor="intro">
<name>Introduction</name> <name>Introduction</name>
<t>This document defines a common schedule YANG module ("ietf-schedule") t hat can <t>This document defines a common schedule YANG module ("ietf-schedule") t hat can
be used in several scheduling contexts, e.g., (but not limited to) be used in several scheduling contexts, e.g., (but not limited to)
<xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.ietf-opsawg-scheduli ng-oam-tests"/>, <xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.ietf-opsawg-scheduli ng-oam-tests"/>,
and <xref target="I-D.ietf-tvr-schedule-yang"/>. The module includes a set of re and <xref target="I-D.ietf-tvr-schedule-yang"/>. The module includes a set of re
usable groupings which usable groupings that
are designed to be applicable for scheduling purposes such as event, policy, are designed to be applicable for scheduling purposes, such as events, policies,
services or resources based on date and time. It also defines groupings for vali services, or resources based on date and time. It also defines groupings for val
dating idating
requested schedules and reporting scheduling status.</t> requested schedules and reporting scheduling statuses.</t>
<t>This document does not make any assumption about the nature of actions that are <t>This document does not make any assumption about the nature of actions that are
triggered by the schedules. Detection and resolution of any schedule conflicts triggered by the schedules. Detection and resolution of any schedule conflicts
are beyond the scope of this document.</t> are beyond the scope of this document.</t>
<t><xref target="sec-mib"/> discusses the relationship with the Management Information Base (MIB) <t><xref target="sec-mib"/> discusses the relationship with the Management Information Base (MIB)
managed objects for scheduling management operations defined in <xref target="RF C3231"/>.</t> managed objects for scheduling management operations defined in <xref target="RF C3231"/>.</t>
<t><xref target="usage"/> describes a set of examples to illustrate the us e of the common schedule groupings (<xref target="sec-grp"/>). <t><xref target="usage"/> describes a set of examples to illustrate the us e of the common schedule groupings (<xref target="sec-grp"/>).
<xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility <xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility
provisions in the "ietf-schedule" module (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides provisions in the "ietf-schedule" module (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides
an example of using the "ietf-schedule" module for scheduled use of a resources framework (e.g., <xref target="RFC8413"/>).</t> an example of using the "ietf-schedule" module for scheduled use of a resources framework (e.g., <xref target="RFC8413"/>).</t>
<section anchor="editorial-note-to-be-removed-by-rfc-editor">
<name>Editorial Note (To be removed by RFC Editor)</name>
<t>Note to the RFC Editor: This section is to be removed prior to public
ation.</t>
<t>This document contains placeholder values that need to be replaced wi
th finalized
values at the time of publication. This note summarizes all of the
substitutions that are needed. No other RFC Editor instructions are specifie
d
elsewhere in this document.</t>
<t>Please apply the following replacements:</t>
<ul spacing="normal">
<li>
<t>XXXX --&gt; the assigned RFC number for this draft</t>
</li>
<li>
<t>2025-05-30 --&gt; the actual date of the publication of this docu
ment</t>
</li>
</ul>
</section>
</section> </section>
<section anchor="conventions-and-definitions"> <section anchor="conventions-and-definitions">
<name>Conventions and Definitions</name> <name>Conventions and Definitions</name>
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14 <t>
>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECO "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>
MMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", ",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be i "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
nterpreted as "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to
only when, they be
appear in all capitals, as shown here.</t> interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
target="RFC8174"/> when, and only when, they appear in all capitals, as
shown here.
</t>
<?line -18?> <?line -18?>
<t>The meanings of the symbols in tree diagrams are defined in <t>The meanings of the symbols in tree diagrams are defined in
<xref target="RFC8340"/>.</t> <xref target="RFC8340"/>.</t>
<t>This document uses the YANG terminology defined in <xref section="3" se ctionFormat="of" target="RFC7950"/>.</t> <t>This document uses the YANG terminology defined in <xref section="3" se ctionFormat="of" target="RFC7950"/>.</t>
<t>The document makes use of the following terms:</t> <t>This document makes use of the following terms:</t>
<dl> <dl>
<dt>Recurrence rule:</dt> <dt>Recurrence rule:</dt>
<dd> <dd>
<t>Refers to a rule or repeating pattern for recurring events. See als o <xref section="3.8.5.3" sectionFormat="of" target="RFC5545"/> for a comprehens ive iCalendar recurrence rule specification.</t> <t>Refers to a rule or repeating pattern for recurring events. See als o <xref section="3.8.5.3" sectionFormat="of" target="RFC5545"/> for a comprehens ive iCalendar recurrence rule specification.</t>
</dd> </dd>
<dt>Recurrence instance (or Recurrence, for short):</dt> <dt>Recurrence instance (or Recurrence, for short):</dt>
<dd> <dd>
<t>Refers to an instance that matches a recurrence rule.</t> <t>Refers to an instance that matches a recurrence rule.</t>
</dd> </dd>
<dt>Recurrence set:</dt> <dt>Recurrence set:</dt>
<dd> <dd>
<t>Refers to a set of recurrence instances.</t> <t>Refers to a set of recurrence instances.</t>
</dd> </dd>
<dt>Frequency:</dt> <dt>Frequency:</dt>
<dd> <dd>
<t>Characterizes the type of a recurrence rule. Values are taken from "FREQ" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t> <t>Characterizes the type of a recurrence rule. Values are taken from the "FREQ" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>. </t>
</dd> </dd>
<dt/> <dt/>
<dd> <dd>
<t>For example, repeating events based on an interval of a second or m ore are <t>For example, repeating events based on an interval of a second or m ore are
classified as recurrence with a frequency value of "SECONDLY". Frequency values defined as identities classified as recurrence with a frequency value of "SECONDLY". Frequency values defined as identities
in the YANG module are used in lowercase.</t> in the YANG module are used in lowercase.</t>
</dd> </dd>
<dt>iCalendar:</dt> <dt>iCalendar:</dt>
<dd> <dd>
<t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t> <t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t>
</dd> </dd>
<dt>Interval:</dt> <dt>Interval:</dt>
<dd> <dd>
<t>Refers to an integer that specifies interval at which a recurrence rule repeats. Values are taken from "INTERVAL" rule in <xref section="3.3.10" se ctionFormat="of" target="RFC5545"/>.</t> <t>Refers to an integer that specifies the interval at which a recurre nce rule repeats. Values are taken from the "INTERVAL" rule in <xref section="3. 3.10" sectionFormat="of" target="RFC5545"/>.</t>
</dd> </dd>
<dt/> <dt/>
<dd> <dd>
<t>For example, "1", means every second for a secondly rule, every min ute for a minutely rule, every hour for an hourly rule, etc.</t> <t>For example, "1" means every second for a secondly rule, every minu te for a minutely rule, every hour for an hourly rule, etc.</t>
</dd> </dd>
<dt>System:</dt> <dt>System:</dt>
<dd> <dd>
<t>Refers to an entity that hosts a schedule that is managed using the YANG module defined in this document.</t> <t>Refers to an entity that hosts a schedule that is managed using the YANG module defined in this document.</t>
</dd> </dd>
</dl> </dl>
<t>"schedule-status-*" refers to any of "schedule-status", "schedule-statu s-with-time-zone", and "schedule-status-with-name".</t>
</section> </section>
<section anchor="sec-overview"> <section anchor="sec-overview">
<name>Module Overview</name> <name>Module Overview</name>
<section anchor="sec-features"> <section anchor="sec-features">
<name>Features</name> <name>Features</name>
<t>The "ietf-schedule" data model defines the recurrence related groupin gs using <t>The "ietf-schedule" data model defines the recurrence-related groupin gs using
a modular approach. To that aim, a variety of representations of recurrence a modular approach. To that aim, a variety of representations of recurrence
groupings ranging from basic to advanced (iCalender-like) are defined. groupings ranging from basic to advanced (iCalender-like) are defined.
To allow for different options, two features are defined in the data model:</ t> To allow for different options, two features are defined in the data model:</ t>
<ul spacing="normal"> <ul spacing="normal">
<li> <li>
<t>"basic-recurrence"</t> <t>"basic-recurrence"</t>
</li> </li>
<li> <li>
<t>"icalendar-recurrence"</t> <t>"icalendar-recurrence"</t>
</li> </li>
</ul> </ul>
<t>Refer to Sections <xref format="counter" target="sec-aug"/> and <xref format="counter" target="features"/> for the use of these features.</t> <t>Refer to <xref target="sec-aug"/> and <xref target="features"/> for t he use of these features.</t>
</section> </section>
<section anchor="sec-types"> <section anchor="sec-types">
<name>Types and Identities</name> <name>Types and Identities</name>
<t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines th e following identities:</t> <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines th e following identities:</t>
<ul spacing="normal"> <ul spacing="normal">
<li> <li>
<t>"schedule-type": Indicates the type of a schedule. The following types are defined so far: <t>"schedule-type": Indicates the type of schedule. The following ty pes are defined so far:
</t> </t>
<ul spacing="normal"> <ul spacing="normal">
<li> <li>
<t>one-shot: The schedule will trigger an action that has either the duration specified as 0 or the end time specified the same as start time, a nd then the schedule will disable itself (<xref section="3.3" sectionFormat="of" target="RFC3231"/>).</t> <t>one-shot: This type is used for a schedule that triggers an a ction that has either the duration specified as 0 or the end time specified as t he same as the start time, and then the schedule will disable itself (<xref sect ion="3.3" sectionFormat="of" target="RFC3231"/>).</t>
</li> </li>
<li> <li>
<t>period: The schedule is a period-based schedule consisting ei ther (1) a start and end or (2) a start and positive duration of time. If neithe r an end nor a duration is indicated, the period is considered to last forever.< /t> <t>period: This type is used for a period-based schedule consist ing of either (1) a start and end or (2) a start and positive duration of time. If neither an end nor a duration is indicated, the period is considered to last forever.</t>
</li> </li>
<li> <li>
<t>recurrence: This type is used for a recurrence-based schedule . A recurrence may be periodic (i.e., repeat over the same period, e.g., every f ive minutes) or not (i.e., repeat in a non-regular manner, e.g., every day at 8 and 9 AM).</t> <t>recurrence: This type is used for a recurrence-based schedule . A recurrence may be periodic (i.e., repeat over the same period, e.g., every f ive minutes) or not (i.e., repeat in a non-regular manner, e.g., every day at 8 and 9 AM).</t>
</li> </li>
</ul> </ul>
</li> </li>
<li> <li>
<t>"frequency-type": Characterizes the repeating interval rule of a recurrence schedule (secondly, minutely, etc.).</t> <t>"frequency-type": Characterizes the repeating interval rule of a recurrence schedule (secondly, minutely, etc.).</t>
</li> </li>
<li> <li>
skipping to change at line 265 skipping to change at line 243
<t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t> <t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t>
</li> </li>
<li> <li>
<t>"schedule-status", "schedule-status-with-time-zone", and "schedul e-status-with-name" (<xref target="sec-schedule-status"/>)</t> <t>"schedule-status", "schedule-status-with-time-zone", and "schedul e-status-with-name" (<xref target="sec-schedule-status"/>)</t>
</li> </li>
</ul> </ul>
<t>Examples are provided in <xref target="usage"/>.</t> <t>Examples are provided in <xref target="usage"/>.</t>
<section anchor="sec-gen"> <section anchor="sec-gen">
<name>The "generic-schedule-params" Grouping</name> <name>The "generic-schedule-params" Grouping</name>
<t>A system accepts and handles schedule requests, which may help furt her <t>A system accepts and handles schedule requests, which may help furt her
automate the scheduling process of events, policy, services, or resources automate the scheduling process of events, policies, services, or resources
based on date and time. The "generic-schedule-params" grouping (<xref target= "gsp-tree"/>) based on date and time. The "generic-schedule-params" grouping (<xref target= "gsp-tree"/>)
specifies a set of configuration parameters that are used by a system for specifies a set of configuration parameters that are used by a system for
validating requested schedules.</t> validating requested schedules.</t>
<figure anchor="gsp-tree"> <figure anchor="gsp-tree">
<name>'generic-schedule-params' Tree Structure</name> <name>'generic-schedule-params' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
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
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The "description" includes a description of the schedule. No constr aint is imposed <t>The "description" parameter includes a description of the schedule. No constraint is imposed
on the structure nor the use of this parameter.</t> on the structure nor the use of this parameter.</t>
<t>The "time-zone-identifier" parameter, if provided, specifies the <t>The "time-zone-identifier" parameter, if provided, specifies the
time zone reference <xref target="RFC7317"/> of the local date and time value s. This parameter time zone reference <xref target="RFC7317"/> of the local date and time value s. This parameter
<bcp14>MUST</bcp14> be specified if any of the date and time values are in th e format of local time. <bcp14>MUST</bcp14> be specified if any of the date and time values are in th e format of local time.
It <bcp14>MUST NOT</bcp14> be applied to date and time values which are speci fied in the format It <bcp14>MUST NOT</bcp14> be applied to date and time values that are specif ied in the format
of UTC or time zone offset to UTC.</t> of UTC or time zone offset to UTC.</t>
<t>The "validity" parameter specifies the date and time after which a schedule <t>The "validity" parameter specifies the date and time after which a schedule
will not be considered as valid. It determines the latest time that a schedul e will not be considered as valid. It determines the latest time that a schedul e
can be started to execute independent of when it ends and takes precedence ov er can be started and thus executed independently from when it ends, and it take s precedence over
similar attributes that are provided at the schedule instance itself. A reque sted similar attributes that are provided at the schedule instance itself. A reque sted
schedule may still be accepted but any occurrences that start later than the configured value will not be executed.</t> schedule may still be accepted, but any occurrences that start later than the configured value will not be executed.</t>
<t>The "max/min-allowed-start" parameters specify the maximum/minimum scheduled <t>The "max/min-allowed-start" parameters specify the maximum/minimum scheduled
start date and time. A requested schedule will be rejected if the first start date and time. A requested schedule will be rejected if the first
occurrence of the schedule starts later/earlier than the configured values.</ t> occurrence of the schedule starts later/earlier than the configured values.</ t>
<t>The "max-allowed-end" parameter specifies the maximum allowed end t ime of <t>The "max-allowed-end" parameter specifies the maximum allowed end t ime of
the last occurrence. A requested schedule will be rejected if the end time the last occurrence. A requested schedule will be rejected if the end time
of last occurrence is later than the configured "max-allowed-end" value.</t> of the last occurrence is later than the configured "max-allowed-end" value.< /t>
<t>The "discard-action" parameter specifies the action if a requested schedule <t>The "discard-action" parameter specifies the action if a requested schedule
cannot be accepted for any reason and is discarded. Possible reasons include, cannot be accepted for any reason and is discarded. Possible reasons include,
but are not limited to, the requested schedule failing to satisfy the guards in this grouping, but are not limited to, the requested schedule failing to satisfy the guards in this grouping,
conflicting with existing schedules, or being out-of-date (e.g., the expected start is already passed).</t> conflicting with existing schedules, or being out-of-date (e.g., the expected start has already passed).</t>
<t>These parameters apply to all schedules on a system and are meant <t>These parameters apply to all schedules on a system and are meant
to provide guards against stale configuration, too short schedule requests to provide guards against stale configuration, schedule requests
that would prevent validation by admins of some critical systems, etc.</t> that are too short and that would thus prevent validation by admins of some c
ritical systems, etc.</t>
</section> </section>
<section anchor="sec-period"> <section anchor="sec-period">
<name>The "period-of-time" Grouping</name> <name>The "period-of-time" Grouping</name>
<t>The "period-of-time" grouping (<xref target="pt-tree"/>) represents a time period using <t>The "period-of-time" grouping (<xref target="pt-tree"/>) represents a time period using
either a start date and time ("period-start") and end date and time ("period- end"), or a 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 non-negative time duration ("durat ion"). For the first start date and time ("period-start") and a non-negative time duration ("durat ion"). For the first
format, the start of the period <bcp14>MUST</bcp14> be no later than the end of the period. If neither an end date and time ("period-end") format, the start of the period <bcp14>MUST</bcp14> be no later than the end of the period. If neither an end date and time ("period-end")
nor a duration ("duration") is indicated, the period is considered to last fo rever. nor a duration ("duration") is indicated, the period is considered to last fo rever.
If the duration ("duration") value is 0 or the end time ("period-end") is the same as the start time ("period-start"), the 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 considered as a one-shot schedule. If no start date and time ("period-star t") is considered as a one-shot schedule. If no start date and time ("period-star t")
is specified, the period is considered to start immediately.</t> is specified, the period is considered to start immediately.</t>
<t>The "time-zone-identifier" parameter indicates the identifier for t he <t>The "time-zone-identifier" parameter indicates the identifier for t he
time zone. This parameter <bcp14>MUST</bcp14> be specified if either the "per iod-start" or "period-end" time zone. This parameter <bcp14>MUST</bcp14> be specified if either the "per iod-start" or "period-end"
value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time
values which are specified in the format of UTC or time zone offset to UTC.</ values that are specified in the format of UTC or time zone offset to UTC.</t
t> >
<t>The "period-description" includes a description of the period. No c <t>The "period-description" parameter includes a description of the pe
onstraint is imposed riod. No constraint is imposed
on the structure nor the use of this parameter.</t> on the structure nor the use of this parameter.</t>
<figure anchor="pt-tree"> <figure anchor="pt-tree">
<name>'period-of-time' Grouping Tree Structure</name> <name>'period-of-time' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
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
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="sec-rec"> <section anchor="sec-rec">
<name>The "recurrence-basic" Grouping</name> <name>The "recurrence-basic" Grouping</name>
<t>The "recurrence-basic" grouping (<xref target="rec-grp-tree"/>) spe cifies a simple recurrence rule which starts immediately and repeats forever.</t > <t>The "recurrence-basic" grouping (<xref target="rec-grp-tree"/>) spe cifies a simple recurrence rule that starts immediately and repeats forever.</t>
<figure anchor="rec-grp-tree"> <figure anchor="rec-grp-tree">
<name>'recurrence-basic' Grouping Tree Structure</name> <name>'recurrence-basic' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
grouping recurrence-basic: grouping recurrence-basic:
+-- recurrence-description? string +-- recurrence-description? string
+-- frequency? identityref +-- frequency? identityref
+-- interval? uint32 +-- interval? uint32
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The frequency parameter ("frequency") identifies the type of a recu rrence rule. For example, <t>The frequency parameter ("frequency") identifies the type of recurr ence rule. For example,
a "daily" frequency value specifies repeating events based on an interval of a day or more.</t> a "daily" frequency value specifies repeating events based on an interval of a day or more.</t>
<t>Consistent with <xref section="3.3.10" sectionFormat="of" target="R FC5545"/>, the interval ("interval") represents at which interval the recurrence rule repeats. For example, <t>Consistent with <xref section="3.3.10" sectionFormat="of" target="R FC5545"/>, the interval parameter ("interval") represents at which interval the recurrence rule repeats. For example,
within a "daily" recurrence rule, an interval value of "8" means every eight d ays.</t> within a "daily" recurrence rule, an interval value of "8" means every eight d ays.</t>
<t>Note that per <xref section="4.13" sectionFormat="of" target="I-D.i <t>Note that, per <xref section="4.13" sectionFormat="of" target="I-D.
etf-netmod-rfc8407bis"/>, neither a "default" ietf-netmod-rfc8407bis"/>, no "default"
nor a "mandatory" substatement is defined here for both "frequency" and "inter substatement is defined here for both "frequency" and "interval"
val" parameters because there are cases (e.g., profiling) where using these stateme
parameters because there are cases (e.g., profiling) where using these stateme nts is problematic. No "mandatory" substatement is defined here for the same rea
nts is problematic. son.
YANG modules using this grouping <bcp14>SHOULD</bcp14> refine these two nodes with either a YANG modules using this grouping <bcp14>SHOULD</bcp14> refine these two nodes with either a
"mandatory" or a "default" statement, if they always need to be configured or have default values. "mandatory" or a "default" statement if they always need to be configured or h ave default values.
This recommendation <bcp14>MAY</bcp14> be ignored in cases such as when this g rouping is used by another grouping.</t> This recommendation <bcp14>MAY</bcp14> be ignored in cases such as when this g rouping is used by another grouping.</t>
<t>The "recurrence-description" includes a description of the period. No constraint is imposed <t>The "recurrence-description" parameter includes a description of th e period. No constraint is imposed
on the structure nor the use of this parameter.</t> on the structure nor the use of this parameter.</t>
</section> </section>
<section anchor="sec-rec-utc"> <section anchor="sec-rec-utc">
<name>The "recurrence-utc" Grouping</name> <name>The "recurrence-utc" Grouping</name>
<t>The "recurrence-utc" grouping (<xref target="rec-utc-grp-tree"/>) u ses the "recurrence-basic" <t>The "recurrence-utc" grouping (<xref target="rec-utc-grp-tree"/>) u ses the "recurrence-basic"
grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule in UTC format.</t> grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule in UTC format.</t>
<figure anchor="rec-utc-grp-tree"> <figure anchor="rec-utc-grp-tree">
<name>'recurrence-utc' Grouping Tree Structure</name> <name>'recurrence-utc' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
grouping recurrence-utc: grouping recurrence-utc:
+-- recurrence-first +-- recurrence-first
| +-- start-time-utc? yang:date-and-time | +-- start-time-utc? yang:date-and-time
| +-- duration? uint32 | +-- duration? uint32
+-- (recurrence-end)? +-- (recurrence-end)?
| +--:(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
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The "start-time-utc" indicates the start time in UTC format.</t> <t>The "start-time-utc" parameter indicates the start time in UTC form at.</t>
<t>The "duration" parameter specifies, in units of seconds, the time p eriod of <t>The "duration" parameter specifies, in units of seconds, the time p eriod of
the first occurrence. Unless specified otherwise (e.g., through additional the first occurrence. Unless specified otherwise (e.g., through additional
augmented parameters), the "duration" also applies to subsequent recurrence augmented parameters), the "duration" also applies to subsequent recurrence
instances. When unspecified, each occurrence is considered as instances. When unspecified, each occurrence is considered as
immediate completion (e.g., execute an immediate command that is considered immediate completion (e.g., execute an immediate command that is considered
to complete quickly) or hard to compute an exact duration (e.g., run a data to complete quickly) or hard to compute an exact duration (e.g., run a data
analysis script whose execution time may depend on the data volume and analysis script whose execution time may depend on the data volume and
computation resource availability). The behavior to follow when a task takes computation resource availability). The behavior to follow when a task takes
more time than specified by the "duration" is out of scope. Such consideratio ns more time than specified by the "duration" is out of scope. Such consideratio ns
belong to task management, not schedule management.</t> belong to task management, not schedule management.</t>
<t>Note that the "interval" and "duration" cover two distinct properti es of a schedule event. <t>Note that the "interval" and "duration" cover two distinct properti es of a schedule event.
The interval specifies when a schedule will occur, combined with the frequency p arameter; while the duration indicates how long The interval specifies when a schedule will occur, combined with the frequency p arameter, while the duration indicates how long
an occurrence will last. This document allows the interval between occurrences t o be shorter than the duration of each occurrence (e.g., a recurring event is sc heduled to start every day for a duration of 2 days).</t> an occurrence will last. This document allows the interval between occurrences t o be shorter than the duration of each occurrence (e.g., a recurring event is sc heduled to start every day for a duration of 2 days).</t>
<t>The repetition can be scoped by a specified end time or by a count of occurrences, <t>The repetition can be scoped by a specified end time or by a count of occurrences,
indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14 > be greater than 1, the "start-time-utc" value always counts indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14 > be greater than 1, and the "start-time-utc" value always counts
as the first occurrence.</t> as the first occurrence.</t>
<t>The "recurrence-utc" grouping is designed to be reused in schedulin g contexts <t>The "recurrence-utc" grouping is designed to be reused in schedulin g contexts
where machine readability is more desirable.</t> where machine readability is more desirable.</t>
</section> </section>
<section anchor="sec-rec-tz"> <section anchor="sec-rec-tz">
<name>The "recurrence-with-time-zone" Grouping</name> <name>The "recurrence-with-time-zone" Grouping</name>
<t>The "recurrence-with-time-zone" grouping (<xref target="rec-tz-grp- tree"/>) uses the <t>The "recurrence-with-time-zone" grouping (<xref target="rec-tz-grp- tree"/>) uses the
"recurrence-basic" grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule with a time zone.</t> "recurrence-basic" grouping (<xref target="sec-rec"/>) and specifies a simple recurrence rule with a time zone.</t>
<figure anchor="rec-tz-grp-tree"> <figure anchor="rec-tz-grp-tree">
<name>'recurrence-with-time-zone' Grouping Tree Structure</name> <name>'recurrence-with-time-zone' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
grouping recurrence-with-time-zone: grouping recurrence-with-time-zone:
+-- 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)
| | +-- until? yang:date-and-time | | +-- 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
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The "recurrence-first" container includes "start-time" and "duratio n" parameters <t>The "recurrence-first" container includes "start-time" and "duratio n" parameters
to specify the start time and period of the first occurrence. Unless specifie d otherwise (e.g., through additional to specify the start time and period of the first occurrence. Unless specifie d otherwise (e.g., through additional
augmented parameters), the "duration" also applies to subsequent recurrence i nstances. When unspecified, each occurrence is considered as augmented parameters), the "duration" also applies to subsequent recurrence i nstances. When unspecified, each occurrence is considered as
immediate completion (e.g., execute an immediate command that is considered immediate completion (e.g., execute an immediate command that is considered
to complete quickly) or hard to compute an exact duration (e.g., run a data to complete quickly) or hard to compute an exact duration (e.g., run a data
analysis script whose execution time may depend on the data volume and analysis script whose execution time may depend on the data volume and
computation resource availability).</t> computation resource availability).</t>
<t>The grouping also includes a <t>The grouping also includes a
"time-zone-identifier" parameter which <bcp14>MUST</bcp14> be specified if ei ther the "start-time" or "until" "time-zone-identifier" parameter, which <bcp14>MUST</bcp14> be specified if e ither the "start-time" or "until"
value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time value is reported in local time format. It <bcp14>MUST NOT</bcp14> be applied to date and time
values which are specified in the format of UTC or time zone offset to UTC.</ t> values that are specified in the format of UTC or time zone offset to UTC.</t >
<t>The repetition can be scoped by a specified end time or by a count of occurrences, <t>The repetition can be scoped by a specified end time or by a count of occurrences,
indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14 > be greater than 1, the "start-time" value always counts indicated by the "recurrence-end" choice. The "count" value <bcp14>MUST</bcp14 > be greater than 1, and the "start-time" value always counts
as the first occurrence.</t> as the first occurrence.</t>
<t>The considerations discussed in <xref target="sec-rec-utc"/> for "i nterval" and "duration" are also applicable to "recurrence-with-time-zone".</t> <t>The considerations discussed in <xref target="sec-rec-utc"/> for "i nterval" and "duration" are also applicable to "recurrence-with-time-zone".</t>
<t>Unlike the definition of "recurrence-utc" grouping (<xref target="s ec-rec-utc"/>), <t>Unlike the definition of the "recurrence-utc" grouping (<xref targe t="sec-rec-utc"/>),
"recurrence-with-time-zone" is intended to promote human readability over "recurrence-with-time-zone" is intended to promote human readability over
machine readability.</t> machine readability.</t>
</section> </section>
<section anchor="sec-rec-utc-dt"> <section anchor="sec-rec-utc-dt">
<name>The "recurrence-utc-with-periods" Grouping</name> <name>The "recurrence-utc-with-periods" Grouping</name>
<t>The "recurrence-utc-with-periods" grouping (<xref target="rec-utc-d t-grp-tree"/>) uses <t>The "recurrence-utc-with-periods" grouping (<xref target="rec-utc-d t-grp-tree"/>) uses
the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>) and adds a "peri od-timeticks" the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>) and adds a "peri od-timeticks"
list to define an aggregate set of repeating occurrences.</t> list to define an aggregate set of repeating occurrences.</t>
<figure anchor="rec-utc-dt-grp-tree"> <figure anchor="rec-utc-dt-grp-tree">
<name>'recurrence-utc-with-periods' Grouping Tree Structure</name> <name>'recurrence-utc-with-periods' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
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
| +-- duration? uint32 | +-- duration? uint32
+-- (recurrence-end)? +-- (recurrence-end)?
| +--:(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
+-- period-timeticks* [period-start] +-- period-timeticks* [period-start]
+-- period-start yang:timeticks +-- period-start yang:timeticks
+-- period-end? yang:timeticks +-- period-end? yang:timeticks
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The recurrence instances are specified by the union of occurrences defined <t>The recurrence instances are specified by the union of occurrences defined
by both the recurrence rule and "period-timeticks" list. This list uses by both the recurrence rule and "period-timeticks" list. This list uses the
"yang:timeticks" type defined in <xref target="RFC6991"/>. Duplicate instances "yang:timeticks" type defined in <xref target="RFC9911"/>. Duplicate instances
are ignored. The value of the "period-start" instance <bcp14>MUST NOT</bcp14> exceed the are ignored. The value of the "period-start" instance <bcp14>MUST NOT</bcp14> exceed the
value indicated by the value of "frequency" instance, i.e., the timeticks value of the "frequency" instance, i.e., the "timeticks"
value must not exceed 100 in a secondly recurrence rule, and it must not value must not exceed 100 in a secondly recurrence rule, and it must not
exceed 6000 in a minutely recurrence rule, and so on.</t> exceed 6000 in a minutely recurrence rule, and so on.</t>
</section> </section>
<section anchor="sec-rec-tz-dt"> <section anchor="sec-rec-tz-dt">
<name>The "recurrence-time-zone-with-periods" Grouping</name> <name>The "recurrence-time-zone-with-periods" Grouping</name>
<t>The "recurrence-time-zone-with-periods" grouping (<xref target="rec -tz-dt-grp-tree"/>) uses <t>The "recurrence-time-zone-with-periods" grouping (<xref target="rec -tz-dt-grp-tree"/>) uses
the "recurrence-with-time-zone" grouping (<xref target="sec-rec-tz"/>) and the "recurrence-with-time-zone" grouping (<xref target="sec-rec-tz"/>) and
adds a "period" list to define an aggregate set of repeating occurrences.</t> adds a "period" list to define an aggregate set of repeating occurrences.</t>
<figure anchor="rec-tz-dt-grp-tree"> <figure anchor="rec-tz-dt-grp-tree">
<name>'recurrence-time-zone-with-periods' Grouping Tree Structure</n ame> <name>'recurrence-time-zone-with-periods' Grouping Tree Structure</n ame>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
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
| +-- duration? duration | +-- duration? duration
+-- time-zone-identifier? sys:timezone-name +-- time-zone-identifier? sys:timezone-name
+-- (recurrence-end)? +-- (recurrence-end)?
| +--:(until) | +--:(until)
| | +-- until? yang:date-and-time | | +-- until? yang:date-and-time
| +--:(count) | +--:(count)
| +-- count? uint32 | +-- count? uint32
skipping to change at line 509 skipping to change at line 487
+-- interval? uint32 +-- interval? uint32
+-- period* [period-start] +-- period* [period-start]
+-- 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
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The recurrence instances are specified by the union of occurrences defined <t>The recurrence instances are specified by the union of occurrences defined
by both the recurrence rule and "period" list. Duplicate instances by both the recurrence rule and "period" list. Duplicate instances
are ignored.</t> are ignored.</t>
</section> </section>
<section anchor="sec-ical-rec"> <section anchor="sec-ical-rec">
<name>The "icalendar-recurrence" Grouping</name> <name>The "icalendar-recurrence" Grouping</name>
<t>The "icalendar-recurrence" grouping (<xref target="ical-grp-tree"/> ) uses the <t>The "icalendar-recurrence" grouping (<xref target="ical-grp-tree"/> ) uses the
"recurrence-time-zone-with-periods" grouping (<xref target="sec-rec-tz-dt"/>) and defines "recurrence-time-zone-with-periods" grouping (<xref target="sec-rec-tz-dt"/>) and defines
more data nodes to enrich the definition of recurrence. The structure of the more data nodes to enrich the definition of recurrence. The structure of the
"icalendar-recurrence" grouping refers to the definition of recurrence "icalendar-recurrence" grouping refers to the definition of the recurrence
component defined in Sections <xref target="RFC5545" section="3.3.10" sectionF ormat="bare"/> and <xref target="RFC5545" section="3.8.5" sectionFormat="bare"/> of <xref target="RFC5545"/>.</t> component defined in Sections <xref target="RFC5545" section="3.3.10" sectionF ormat="bare"/> and <xref target="RFC5545" section="3.8.5" sectionFormat="bare"/> of <xref target="RFC5545"/>.</t>
<figure anchor="ical-grp-tree"> <figure anchor="ical-grp-tree">
<name>'icalendar-recurrence' Grouping Tree Structure</name> <name>'icalendar-recurrence' Grouping Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
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)
| | +-- until? yang:date-and-time | | +-- until? yang:date-and-time
| +--:(count) | +--:(count)
| +-- count? uint32 | +-- count? uint32
skipping to change at line 560 skipping to change at line 538
+-- byday* [weekday] +-- byday* [weekday]
| +-- direction* int32 | +-- direction* int32
| +-- weekday schedule:weekday | +-- weekday schedule:weekday
+-- 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
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>An array of the "bysecond" (or "byminute", "byhour") specifies a li <t>An array of the "bysecond" (or "byminute" or "byhour") specifies a
st of list of
seconds within a minute (or minutes within an hour, hours of the day). For seconds within a minute (or minutes within an hour or hours of the day). For
example, within a "minutely" recurrence rule, the values of "byminute" node example, within a "minutely" recurrence rule, the values of "byminute" node
"10" and "20" means the occurrences are generated at the 10th and 20th minute "10" and "20" mean the occurrences are generated at the 10th and 20th minute
within an hour, reducing the number of recurrence instances from all minutes. </t> within an hour, reducing the number of recurrence instances from all minutes. </t>
<t>The parameter "byday" specifies a list of days of the week, with an optional <t>The parameter "byday" specifies a list of days of the week, with an optional
direction which indicates the nth occurrence of a specific day within direction that indicates the nth occurrence of a specific day within
the "monthly" or "yearly" frequency instance. Valid values of "direction" are the "monthly" or "yearly" frequency instance. Valid values of "direction" are
1 to 5 or -5 to -1 within a "monthly" recurrence rule; and 1 to 53 or -53 to -1 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. For example, within a "monthly" rule, within a "yearly" recurrence rule. For example, within a "monthly" rule,
the "weekday" with a value of "monday" and the "direction" with a value of "- 1" the "weekday" with a value of "monday" and the "direction" with a value of "- 1"
represents the last Monday of the month.</t> represents the last Monday of the month.</t>
<t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byye armonth") specifies a list of <t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byye armonth") specifies a list of
days of the month (or days of the year, weeks of the year, or months of the y ear). days of the month (or days of the year, weeks of the year, or months of the y ear).
For example, within a "yearly" recurrence rule, the values of "byyearmonth" For example, within a "yearly" recurrence rule, the values of "byyearmonth"
instance "1" and "2" means the occurrences are generated in January and Febru ary, instances "1" and "2" mean the occurrences are generated in January and Febru ary,
increasing the "yearly" recurrence from every year to every January and Febru ary increasing the "yearly" recurrence from every year to every January and Febru ary
of the year.</t> of the year.</t>
<t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence <t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence
within the set of recurrence instances to be specified. For example, in a "mo nthly" within the set of recurrence instances to be specified. For example, in a "mo nthly"
recurrence rule, the "byday" data node specifies every Monday of the week, th recurrence rule, the "byday" data node specifies every Monday of the week, an
e d the
"bysetpos" with value of "-1" represents the last Monday of the month. "bysetpos" with a value of "-1" represents the last Monday of the month.
Not setting the "bysetpos" data node represents every Monday of the month.</t > Not setting the "bysetpos" data node represents every Monday of the month.</t >
<t>The "workweek-start" data node specifies the day on which the week starts. This is <t>The "workweek-start" data node specifies the day on which the week starts. This is
significant when a "weekly" recurrence rule has an interval greater than 1, a nd significant when a "weekly" recurrence rule has an interval greater than 1, a nd
a "byday" data node is specified. This is also significant when in a "yearly" rule a "byday" data node is specified. This is also significant when in a "yearly" rule
and a "byyearweek" is specified. Note that per <xref section="4.13" sectionFo and a "byyearweek" is specified. Note that, per <xref section="4.13" sectionF
rmat="of" target="I-D.ietf-netmod-rfc8407bis"/>, neither a "default" ormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, no "default"
nor a "mandatory" substatement is defined here because there are cases (e.g., substatement is defined here because there are cases (e.g., profiling)
profiling) where using these statements is problematic. No "mandatory" substatement is d
where using these statements is problematic. efined here for the same reason.
YANG modules using this grouping <bcp14>SHOULD</bcp14> refine the "workweek-s tart" node with either a YANG modules using this grouping <bcp14>SHOULD</bcp14> refine the "workweek-s tart" node with either a
"mandatory" or a "default" statement, if it always needs to be configured or has a default value. "mandatory" or a "default" statement if it always needs to be configured or h as a default value.
This <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is use d by another grouping.</t> This <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is use d by another grouping.</t>
<t>The "exception-dates" data node specifies a list of exceptions for recurrence. The <t>The "exception-dates" data node specifies a list of exceptions for recurrence. The
final recurrence set is generated by gathering all of the date and time value s final recurrence set is generated by gathering all of the date and time value s
created by any of the specified recurrence rule and date-times, and then created by any of the specified recurrence rules and date-times and then
excluding any start date and time values specified by "exception-dates" param eter.</t> excluding any start date and time values specified by "exception-dates" param eter.</t>
</section> </section>
<section anchor="sec-schedule-status"> <section anchor="sec-schedule-status">
<name>The "schedule-status", "schedule-status-with-time-zone", and "sc hedule-status-with-name" Groupings</name> <name>The "schedule-status", "schedule-status-with-time-zone", and "sc hedule-status-with-name" Groupings</name>
<t>The "schedule-status", "schedule-status-with-time-zone", and "sched ule-status-with-name" groupings (<xref target="sche-status-tree"/>) define commo n parameters <t>The "schedule-status", "schedule-status-with-time-zone", and "sched ule-status-with-name" groupings (<xref target="sche-status-tree"/>) define commo n parameters
for scheduling management/status exposure. The "schedule-status-with-time-zon e" grouping has the same for scheduling management/status exposure. The "schedule-status-with-time-zon e" grouping has the same
structure as "schedule-status" but with an additional parameter to identify a time zone. Similarly, the "schedule-status-with-name" grouping has the same str ucture as "schedule-status" but with an additional parameter to identify a sched ule "schedule-name". These structure as "schedule-status" but with an additional parameter to identify a time zone. Similarly, the "schedule-status-with-name" grouping has the same str ucture as "schedule-status" but with an additional parameter to identify a sched ule "schedule-name". These
structures are defined in the module to allow for better modularity and flexi bility.</t> structures are defined in the module to allow for better modularity and flexi bility.</t>
<figure anchor="sche-status-tree"> <figure anchor="sche-status-tree">
<name>'schedule-status-*' Groupings Tree Structure</name> <name>'schedule-status-*' Groupings Tree Structure</name>
<artwork><![CDATA[ <sourcecode type="yangtree"><![CDATA[
grouping schedule-status: grouping schedule-status:
+-- state? identityref +-- state? identityref
+-- version? uint16 +-- version? uint16
+-- schedule-type? identityref +-- schedule-type? identityref
+--ro local-time? yang:date-and-time +--ro local-time? yang:date-and-time
+--ro last-update? yang:date-and-time +--ro last-update? yang:date-and-time
+--ro counter? yang:counter32 +--ro counter? yang:counter32
+--ro last-occurrence? yang:date-and-time +--ro last-occurrence? yang:date-and-time
+--ro upcoming-occurrence? yang:date-and-time +--ro upcoming-occurrence? yang:date-and-time
+--ro last-failed-occurrence? yang:date-and-time +--ro last-failed-occurrence? yang:date-and-time
skipping to change at line 642 skipping to change at line 620
+-- state? identityref +-- state? identityref
+-- version? uint16 +-- version? uint16
+-- schedule-type? identityref +-- schedule-type? identityref
+--ro local-time? yang:date-and-time +--ro local-time? yang:date-and-time
+--ro last-update? yang:date-and-time +--ro last-update? yang:date-and-time
+--ro counter? yang:counter32 +--ro counter? yang:counter32
+--ro last-occurrence? yang:date-and-time +--ro last-occurrence? yang:date-and-time
+--ro upcoming-occurrence? yang:date-and-time +--ro upcoming-occurrence? yang:date-and-time
+--ro last-failed-occurrence? yang:date-and-time +--ro last-failed-occurrence? yang:date-and-time
+--ro failure-counter? yang:counter32 +--ro failure-counter? yang:counter32
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>The "schedule-name" parameter is useful to uniquely identify a sche dule in <t>The "schedule-name" parameter is useful to uniquely identify a sche dule in
a network device or controller if multiple scheduling contexts exist.</t> a network device or controller if multiple scheduling contexts exist.</t>
<t>The "state" parameter is defined to configure/expose the scheduling state, <t>The "state" parameter is defined to configure/expose the scheduling state,
depending on the use of the grouping. For a recurrence-based schedule, it depending on the use of the grouping. For a recurrence-based schedule, it
represents the state of the overall recurrence. The "identityref" type is use d for this represents the state of the overall recurrence. The "identityref" type is use d for this
parameter to allow extensibility in future modules.</t> parameter to allow extensibility in future modules.</t>
<t>The "version" parameter is used to track the current schedule versi on <t>The "version" parameter is used to track the current schedule versi on
information. The version can be incremented by the entity that created the sc hedule. information. The version can be incremented by the entity that created the sc hedule.
The "last-update" parameter identifies when the schedule was last modified. The "last-update" parameter identifies when the schedule was last modified.
skipping to change at line 674 skipping to change at line 652
<t>The current groupings capture common parameters that are applicable <t>The current groupings capture common parameters that are applicable
to typical scheduling contexts known so far. Future modules can define other to typical scheduling contexts known so far. Future modules can define other
useful parameters as needed. For example, in a scheduling context with multip le useful parameters as needed. For example, in a scheduling context with multip le
system sources to feed the schedules, the "source" and "precedence" parameter s system sources to feed the schedules, the "source" and "precedence" parameter s
may be needed to reflect how schedules from different sources should be prior itized.</t> may be needed to reflect how schedules from different sources should be prior itized.</t>
</section> </section>
</section> </section>
<section anchor="sec-aug"> <section anchor="sec-aug">
<name>Features Use and Augmentations</name> <name>Features Use and Augmentations</name>
<t><xref target="features"/> provides an example about how the features defined in <xref target="sec-features"/> can be used. Implementations <t><xref target="features"/> provides an example about how the features defined in <xref target="sec-features"/> can be used. Implementations
may support a basic recurrence rule or an advanced one as needed, by declarin g may support a basic recurrence rule or an advanced one, as needed, by declari ng
different features. Whether only one or both features are supported is implem entation different features. Whether only one or both features are supported is implem entation
specific and depends on the specific scheduling context.</t> specific and depends on the specific scheduling context.</t>
<t>The common schedule groupings (<xref target="sec-grp"/>) can also be augmented to support specific needs. As an example, <t>The common schedule groupings (<xref target="sec-grp"/>) can also be augmented to support specific needs. As an example,
<xref target="augments"/> demonstrates how additional parameters can be added to comply with specific schedule needs.</t> <xref target="augments"/> demonstrates how additional parameters can be added to comply with specific schedule needs.</t>
</section> </section>
</section> </section>
<section anchor="some-usage-restrictions"> <section anchor="some-usage-restrictions">
<name>Some Usage Restrictions</name> <name>Some Usage Restrictions</name>
<t>There are some restrictions that need to be followed when using groupin gs defined <t>There are some restrictions that need to be followed when using groupin gs defined
in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t> in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t>
<ul spacing="normal"> <ul spacing="normal">
<li> <li>
<t>The instant in time represented by "period-start" <bcp14>MUST</bcp1 4> be before the <t>The instant in time represented by "period-start" <bcp14>MUST</bcp1 4> be before the
"period-end" for "period-of-time" grouping (<xref target="sec-period"/>).</t> "period-end" for the "period-of-time" grouping (<xref target="sec-period"/>).</t >
</li> </li>
<li> <li>
<t>The combination of the day, month, and year represented for date an d time <t>The combination of the day, month, and year represented for date an d time
values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maximum day values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maximum day
number based on the month and year.</t> number based on the month and year.</t>
</li> </li>
<li> <li>
<t>Unless deployed in contexts where time synchronization is not subje ct to leap second adjustments (e.g., <xref section="4.3" sectionFormat="of" targ et="I-D.ietf-ntp-ntpv5"/>), the second for date and time values <bcp14>SHOULD</b cp14> have the value "60" at the end of months in which a leap <t>Unless deployed in contexts where time synchronization is not subje ct to leap second adjustments (e.g., <xref section="4.3" sectionFormat="of" targ et="I-D.ietf-ntp-ntpv5"/>), the second for date and time values <bcp14>SHOULD</b cp14> have the value "60" at the end of months in which a leap
second occurs.</t> second occurs.</t>
</li> </li>
<li> <li>
<t>Schedules received with a starting time in the past with respect to <t>Schedules received with a starting time in the past with respect to
current time <bcp14>SHOULD</bcp14> be ignored. When a local policy is provided, an implementation <bcp14>MAY</bcp14> omit the past occurrences and current time <bcp14>SHOULD</bcp14> be ignored. When a local policy is provided, an implementation <bcp14>MAY</bcp14> omit the past occurrences and
start immediately (e.g., for a period-based schedule) or starts from the start immediately (e.g., for a period-based schedule) or start from the
date and time when the recurrence pattern is first satisfied from the current ti me (e.g., for a recurrence-based schedule).</t> date and time when the recurrence pattern is first satisfied from the current ti me (e.g., for a recurrence-based schedule).</t>
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="sec-mib"> <section anchor="sec-mib">
<name>Relationship to the DISMAN-SCHEDULE-MIB</name> <name>Relationship to the DISMAN-SCHEDULE-MIB</name>
<t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to <t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to
schedule management operations periodically or at specified dates and times.</t> schedule management operations periodically or at specified dates and times.</t>
<t>Although no data nodes are defined in this document, <xref target="mapp ing"/> lists <t>Although no data nodes are defined in this document, <xref target="mapp ing"/> lists
how the main objects in the DISMAN-SCHEDULE-MIB can be mapped to YANG how the main objects in the DISMAN-SCHEDULE-MIB can be mapped to YANG
skipping to change at line 812 skipping to change at line 790
</tr> </tr>
<tr> <tr>
<td align="left">schedTriggers</td> <td align="left">schedTriggers</td>
<td align="left">counter/failure-counter</td> <td align="left">counter/failure-counter</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section anchor="sec-schedule"> <section anchor="sec-schedule">
<name>The "ietf-schedule" YANG Module</name> <name>The "ietf-schedule" YANG Module</name>
<t>This module imports types defined in <xref target="RFC6991"/> and <xref <t>This module imports types defined in <xref target="RFC9911"/> and <xref
target="RFC7317"/>.</t> target="RFC7317"/>.</t>
<sourcecode markers="true" name="ietf-schedule@2025-05-30.yang"><![CDATA[ <sourcecode type="yang" markers="true"><![CDATA[
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 9911: 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 line 944 skipping to change at line 923
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 line 968 skipping to change at line 947
} }
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 line 1123 skipping to change at line 1102
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 line 1256 skipping to change at line 1235
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 line 1333 skipping to change at line 1311
} }
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 line 1400 skipping to change at line 1379
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-or-self(../../frequency,"
+ "'schedule:secondly')) or (current() < 100)) and " + "'schedule:secondly')) or (current() < 100)) and "
+ "(not(derived-from(../../frequency," + "(not(derived-from-or-self(../../frequency,"
+ "'schedule:minutely')) or (current() < 6000)) and " + "'schedule:minutely')) or (current() < 6000)) and "
+ "(not(derived-from(../../frequency,'schedule:hourly'))" + "(not(derived-from-or-self(../../frequency,"
+ " or (current() < 360000)) and " + "'schedule:hourly')) or (current() < 360000)) and "
+ "(not(derived-from(../../frequency,'schedule:daily'))" + "(not(derived-from-or-self(../../frequency,"
+ " or (current() < 8640000)) and " + "'schedule:daily')) or (current() < 8640000)) and "
+ "(not(derived-from(../../frequency,'schedule:weekly'))" + "(not(derived-from-or-self(../../frequency,"
+ " or (current() < 60480000)) and " + "'schedule:weekly')) or (current() < 60480000)) and "
+ "(not(derived-from(../../frequency," + "(not(derived-from-or-self(../../frequency,"
+ "'schedule:monthly')) or (current() < 267840000)) and " + "'schedule:monthly')) or (current() < 267840000)) and "
+ "(not(derived-from(../../frequency,'schedule:yearly'))" + "(not(derived-from-or-self(../../frequency,"
+ " or (current() < 3162240000))" { + "'schedule:yearly')) 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 line 1497 skipping to change at line 1476
range "0..23"; range "0..23";
} }
description description
"Specifies a list of hours of the day."; "Specifies a list of hours of the day.";
} }
list byday { list byday {
key "weekday"; key "weekday";
description description
"Specifies a list of days of the week."; "Specifies a list of days of the week.";
leaf-list direction { leaf-list direction {
when "derived-from(../../frequency, 'schedule:monthly') or " when "derived-from-or-self(../../frequency, "
+ "(derived-from(../../frequency, 'schedule:yearly') " + "'schedule:monthly') or "
+ " and not(../../byyearweek))"; + "(derived-from-or-self(../../frequency,"
+ "'schedule:yearly') 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 line 1532 skipping to change at line 1512
"Specifies a list of days of the month."; "Specifies a list of days of the month.";
} }
leaf-list byyearday { leaf-list byyearday {
type int32 { type int32 {
range "-366..-1|1..366"; range "-366..-1|1..366";
} }
description description
"Specifies a list of days of the year."; "Specifies a list of days of the year.";
} }
leaf-list byyearweek { leaf-list byyearweek {
when "derived-from(../frequency, 'schedule:yearly')"; when "derived-from-or-self(../frequency, 'schedule:yearly')";
type int32 { type int32 {
range "-53..-1|1..53"; range "-53..-1|1..53";
} }
description description
"Specifies a list of weeks of the year."; "Specifies a list of weeks of the year.";
} }
leaf-list byyearmonth { leaf-list byyearmonth {
type uint32 { type uint32 {
range "1..12"; range "1..12";
} }
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 line 1603 skipping to change at line 1583
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 line 1655 skipping to change at line 1636
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 line 1684 skipping to change at line 1665
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;
} }
} }
]]></sourcecode> ]]></sourcecode>
</section> </section>
<section anchor="security-considerations"> <section anchor="security-considerations">
<name>Security Considerations</name> <name>Security Considerations</name>
<t>This section uses the template described in <xref section="3.7" section <t>This section is modeled after the template described in <xref section="
Format="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t> 3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
<t>The "ietf-schedule" YANG module specified in this document defines sche <t>The "ietf-schedule" YANG module defines a data model
ma for data
that is designed to be accessed via YANG-based management protocols, such that is designed to be accessed via YANG-based management protocols, such
as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>. Th ese YANG-based management protocols (1) have to use as NETCONF <xref target="RFC6241"/> and RESTCONF <xref target="RFC8040"/>. T hese YANG-based management protocols (1) have to use
a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref targe t="RFC8446"/>, and QUIC <xref target="RFC9000"/>) a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref targe t="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
and (2) have to use mutual authentication.</t> and (2) have to use mutual authentication.</t>
<t>The Network Configuration Access Control Model (NACM) <xref target="RFC 8341"/> <t>The Network Configuration Access Control Model (NACM) <xref target="RFC 8341"/>
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.</t> RESTCONF protocol operations and content.</t>
<t>The "ietf-schedule" module defines a set of types and <t>The "ietf-schedule" module defines a set of identities, types, and
groupings. These nodes are intended to be reused by other YANG groupings. These nodes are intended to be reused by other YANG
modules. The module by itself does not expose any data nodes that modules. The module by itself does not expose any data nodes that
are writable, data nodes that contain read-only state, or RPCs. As are writable, data nodes that contain read-only state, or RPCs. As
such, there are no additional security issues related to the "ietf-schedule" such, there are no additional security issues related to the "ietf-schedule"
module that need to be considered.</t> module that need to be considered.</t>
<t>Modules that use the groupings that are defined in this document <t>Modules that use the groupings that are defined in this document
should identify the corresponding security considerations, e.g.,:</t> should identify the corresponding security considerations. For example,
reusing the following groupings will expose privacy-related information:</t>
<ul spacing="normal"> <ul spacing="normal">
<li> <li>
<t>Scheduling depends on reliable and accurate time synchronization. I naccurate date <t>Scheduling depends on reliable and accurate time synchronization. I naccurate date
and time setting can lead to scheduling events being triggered at incorrect and time setting can lead to scheduling events being triggered at incorrect
intervals, potentially causing system failures or security vulnerabilities.</t> intervals, potentially causing system failures or security vulnerabilities.</t>
</li> </li>
<li> <li>
<t>Recurring events may conceal abnormal behavior or security threats, which <t>Recurring events may conceal abnormal behavior or security threats, which
may be drowned out by normal events, especially when they are triggered frequent ly.</t> may be drowned out by normal events, especially when they are triggered frequent ly.</t>
</li> </li>
<li> <li>
<t>The absence of detailed logs and audit records of each occurrence t rigger time <t>The absence of detailed logs and audit records of each occurrence t rigger time
and action results, and so on, may make security incidents difficult to trace.< /t> and action results and therefore may make security incidents difficult to trace. </t>
</li> </li>
<li> <li>
<t>Care must be taken when defining recurrences occurring very often a nd <t>Care must be taken when defining recurrences occurring very often a nd
frequent that can be an additional source of attacks by keeping the system frequent that can be an additional source of attacks by keeping the system
permanently busy with the management of scheduling.</t> permanently busy with the management of scheduling.</t>
</li> </li>
</ul> </ul>
</section> </section>
<section anchor="iana-considerations"> <section anchor="iana-considerations">
<name>IANA Considerations</name> <name>IANA Considerations</name>
<section anchor="the-ietf-xml-registry"> <section anchor="the-ietf-xml-registry">
<name>The "IETF XML" Registry</name> <name>The IETF XML Registry</name>
<t>This document registers the following URI in the "IETF XML Registry" <t>This document has registered the following URI in the "IETF XML Regis
<xref target="RFC3688"/>.</t> try" <xref target="RFC3688"/>.</t>
<artwork><![CDATA[ <dl newline="false" spacing="compact">
URI: urn:ietf:params:xml:ns:yang:ietf-schedule <dt>URI:</dt>
Registrant Contact: The IESG. <dd>urn:ietf:params:xml:ns:yang:ietf-schedule</dd>
XML: N/A, the requested URI is an XML namespace. <dt>Registrant Contact:</dt>
]]></artwork> <dd>The IESG.</dd>
<dt>XML:</dt>
<dd>N/A; the requested URI is an XML namespace.</dd>
</dl>
</section> </section>
<section anchor="the-yang-module-names-registry"> <section anchor="the-yang-module-names-registry">
<name>The "YANG Module Names" Registry</name> <name>The YANG Module Names Registry</name>
<t>This document registers the following YANG module in the "YANG Module <t>This document has registered the following YANG module in the "YANG M
Names" odule Names"
registry <xref target="RFC6020"/>.</t> registry <xref target="RFC6020"/>.</t>
<artwork><![CDATA[ <dl newline="false" spacing="compact">
name: ietf-schedule <dt>Name:</dt>
namespace: urn:ietf:params:xml:ns:yang:ietf-schedule <dd>ietf-schedule</dd>
prefix: schedule <dt>Maintained by IANA:</dt>
maintained by IANA? N <dd>N</dd>
reference: RFC XXXX <dt>Namespace:</dt>
]]></artwork> <dd>urn:ietf:params:xml:ns:yang:ietf-schedule</dd>
<dt>Prefix:</dt>
<dd>schedule</dd>
<dt>Reference:</dt>
<dd>RFC 9922</dd>
</dl>
</section> </section>
</section> </section>
</middle> </middle>
<back> <back>
<displayreference target="I-D.ietf-netmod-eca-policy" to="NETMOD-ECA-POLICY"
/>
<displayreference target="I-D.ietf-netmod-rfc8407bis" to="YANG-GUIDE"/>
<displayreference target="I-D.ietf-ntp-ntpv5" to="NTPv5"/>
<displayreference target="I-D.ietf-opsawg-scheduling-oam-tests" to="YANG-OAM
"/>
<displayreference target="I-D.ietf-opsawg-ucl-acl" to="YANG-NAC"/>
<displayreference target="I-D.ietf-tvr-schedule-yang" to="YANG-SCHEDULE"/>
<displayreference target="I-D.liu-netmod-yang-schedule" to="YANG-CONFIG-SCHE
DULE"/>
<references anchor="sec-combined-references"> <references anchor="sec-combined-references">
<name>References</name> <name>References</name>
<references anchor="sec-normative-references"> <references anchor="sec-normative-references">
<name>Normative References</name> <name>Normative References</name>
<reference anchor="RFC3231"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
<front> 231.xml"/>
<title>Definitions of Managed Objects for Scheduling Management Oper <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
ations</title> 119.xml"/>
<author fullname="D. Levi" initials="D." surname="Levi"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
<author fullname="J. Schoenwaelder" initials="J." surname="Schoenwae 174.xml"/>
lder"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
<date month="January" year="2002"/> 950.xml"/>
<abstract> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5
<t>This memo defines a portion of the Management Information Base 545.xml"/>
(MIB) for use with network management protocols in the Internet community. In pa <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
rticular, it describes a set of managed objects that are used to schedule manage 317.xml"/>
ment operations periodically or at specified dates and times. [STANDARDS-TRACK]< <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9
/t> 911.xml"/>
</abstract> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
</front> 341.xml"/>
<seriesInfo name="RFC" value="3231"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
<seriesInfo name="DOI" value="10.17487/RFC3231"/> 688.xml"/>
</reference> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
<reference anchor="RFC2119"> 020.xml"/>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</tit
le>
<author fullname="S. Bradner" initials="S." surname="Bradner"/>
<date month="March" year="1997"/>
<abstract>
<t>In many standards track documents several words are used to sig
nify the requirements in the specification. These words are often capitalized. T
his document defines these words as they should be interpreted in IETF documents
. This document specifies an Internet Best Current Practices for the Internet Co
mmunity, and requests discussion and suggestions for improvements.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="2119"/>
<seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>
<reference anchor="RFC8174">
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</ti
tle>
<author fullname="B. Leiba" initials="B." surname="Leiba"/>
<date month="May" year="2017"/>
<abstract>
<t>RFC 2119 specifies common key words that may be used in protoco
l specifications. This document aims to reduce the ambiguity by clarifying that
only UPPERCASE usage of the key words have the defined special meanings.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="14"/>
<seriesInfo name="RFC" value="8174"/>
<seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>
<reference anchor="RFC7950">
<front>
<title>The YANG 1.1 Data Modeling Language</title>
<author fullname="M. Bjorklund" initials="M." role="editor" surname=
"Bjorklund"/>
<date month="August" year="2016"/>
<abstract>
<t>YANG is a data modeling language used to model configuration da
ta, state data, Remote Procedure Calls, and notifications for network management
protocols. This document describes the syntax and semantics of version 1.1 of t
he YANG language. YANG version 1.1 is a maintenance release of the YANG language
, addressing ambiguities and defects in the original specification. There are a
small number of backward incompatibilities from YANG version 1. This document al
so specifies the YANG mappings to the Network Configuration Protocol (NETCONF).<
/t>
</abstract>
</front>
<seriesInfo name="RFC" value="7950"/>
<seriesInfo name="DOI" value="10.17487/RFC7950"/>
</reference>
<reference anchor="RFC5545">
<front>
<title>Internet Calendaring and Scheduling Core Object Specification
(iCalendar)</title>
<author fullname="B. Desruisseaux" initials="B." role="editor" surna
me="Desruisseaux"/>
<date month="September" year="2009"/>
<abstract>
<t>This document defines the iCalendar data format for representin
g and exchanging calendaring and scheduling information such as events, to-dos,
journal entries, and free/busy information, independent of any particular calend
ar service or protocol. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="5545"/>
<seriesInfo name="DOI" value="10.17487/RFC5545"/>
</reference>
<reference anchor="RFC7317">
<front>
<title>A YANG Data Model for System Management</title>
<author fullname="A. Bierman" initials="A." surname="Bierman"/>
<author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
<date month="August" year="2014"/>
<abstract>
<t>This document defines a YANG data model for the configuration a
nd identification of some common system properties within a device containing a
Network Configuration Protocol (NETCONF) server. This document also includes dat
a node definitions for system identification, time-of-day management, user manag
ement, DNS resolver configuration, and some protocol operations for system manag
ement.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7317"/>
<seriesInfo name="DOI" value="10.17487/RFC7317"/>
</reference>
<reference anchor="RFC6991">
<front>
<title>Common YANG Data Types</title>
<author fullname="J. Schoenwaelder" initials="J." role="editor" surn
ame="Schoenwaelder"/>
<date month="July" year="2013"/>
<abstract>
<t>This document introduces a collection of common data types to b
e used with the YANG data modeling language. This document obsoletes RFC 6021.</
t>
</abstract>
</front>
<seriesInfo name="RFC" value="6991"/>
<seriesInfo name="DOI" value="10.17487/RFC6991"/>
</reference>
<reference anchor="RFC8341">
<front>
<title>Network Configuration Access Control Model</title>
<author fullname="A. Bierman" initials="A." surname="Bierman"/>
<author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
<date month="March" year="2018"/>
<abstract>
<t>The standardization of network configuration interfaces for use
with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requ
ires a structured and secure operating environment that promotes human usability
and multi-vendor interoperability. There is a need for standard mechanisms to r
estrict NETCONF or RESTCONF protocol access for particular users to a preconfigu
red subset of all available NETCONF or RESTCONF protocol operations and content.
This document defines such an access control model.</t>
<t>This document obsoletes RFC 6536.</t>
</abstract>
</front>
<seriesInfo name="STD" value="91"/>
<seriesInfo name="RFC" value="8341"/>
<seriesInfo name="DOI" value="10.17487/RFC8341"/>
</reference>
<reference anchor="RFC3688">
<front>
<title>The IETF XML Registry</title>
<author fullname="M. Mealling" initials="M." surname="Mealling"/>
<date month="January" year="2004"/>
<abstract>
<t>This document describes an IANA maintained registry for IETF st
andards which use Extensible Markup Language (XML) related items such as Namespa
ces, Document Type Declarations (DTDs), Schemas, and Resource Description Framew
ork (RDF) Schemas.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="81"/>
<seriesInfo name="RFC" value="3688"/>
<seriesInfo name="DOI" value="10.17487/RFC3688"/>
</reference>
<reference anchor="RFC6020">
<front>
<title>YANG - A Data Modeling Language for the Network Configuration
Protocol (NETCONF)</title>
<author fullname="M. Bjorklund" initials="M." role="editor" surname=
"Bjorklund"/>
<date month="October" year="2010"/>
<abstract>
<t>YANG is a data modeling language used to model configuration an
d state data manipulated by the Network Configuration Protocol (NETCONF), NETCON
F remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6020"/>
<seriesInfo name="DOI" value="10.17487/RFC6020"/>
</reference>
</references> </references>
<references anchor="sec-informative-references"> <references anchor="sec-informative-references">
<name>Informative References</name> <name>Informative References</name>
<reference anchor="I-D.ietf-opsawg-ucl-acl"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
<front> ietf-netmod-eca-policy.xml"/>
<title>A YANG Data Model and RADIUS Extension for Policy-based Netwo <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
rk Access Control</title> ietf-netmod-rfc8407bis.xml"/>
<author fullname="Qiufang Ma" initials="Q." surname="Ma"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
<organization>Huawei</organization> ietf-ntp-ntpv5.xml"/>
</author> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
<author fullname="Qin Wu" initials="Q." surname="Wu"> ietf-opsawg-scheduling-oam-tests.xml"/>
<organization>Huawei</organization> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
</author> ietf-opsawg-ucl-acl.xml"/>
<author fullname="Mohamed Boucadair" initials="M." surname="Boucadai <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
r"> ietf-tvr-schedule-yang.xml"/>
<organization>Orange</organization> <xi:include href="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.
</author> liu-netmod-yang-schedule.xml"/>
<author fullname="Daniel King" initials="D." surname="King"> <reference anchor="W3C.XML1.0" target="https://www.w3.org/TR/2008/REC-xm
<organization>Lancaster University</organization> l-20081126/">
</author>
<date day="20" month="March" year="2025"/>
<abstract>
<t> This document defines a YANG data model for policy-based net
work
access control, which provides consistent and efficient enforcement
of network access control policies based on group identity.
Moreover, this document defines a mechanism to ease the maintenance
of the mapping between a user group identifier and a set of IP/MAC
addresses to enforce policy-based network access control.
In addition, the document defines a Remote Authentication Dial-in
User Service (RADIUS) attribute that is used to communicate the user
group identifier as part of identification and authorization
information.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-ucl-acl-07"
/>
</reference>
<reference anchor="I-D.ietf-opsawg-scheduling-oam-tests">
<front>
<title>A YANG Data Model for Network Diagnosis using Scheduled Seque
nces of OAM Tests</title>
<author fullname="Luis M. Contreras" initials="L. M." surname="Contr
eras">
<organization>Telefonica</organization>
</author>
<author fullname="Victor Lopez" initials="V." surname="Lopez">
<organization>Nokia</organization>
</author>
<date day="7" month="July" year="2025"/>
<abstract>
<t> This document defines a YANG data model for network diagnosi
s on-
demand relying upon Operations, Administration, and Maintenance (OAM)
tests. This document defines both 'oam-unitary-test' and 'oam-test-
sequence' YANG modules to manage the lifecycle of network diagnosis
procedures, primarily intended for use by an SDN controller or
network orchestrator, rather than by individual network nodes.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-scheduling-
oam-tests-01"/>
</reference>
<reference anchor="I-D.ietf-tvr-schedule-yang">
<front>
<title>YANG Data Model for Scheduled Attributes</title>
<author fullname="Yingzhen Qu" initials="Y." surname="Qu">
<organization>Futurewei Technologies</organization>
</author>
<author fullname="Acee Lindem" initials="A." surname="Lindem">
<organization>Arrcus, Inc.</organization>
</author>
<author fullname="Eric Kinzie" initials="E." surname="Kinzie">
<organization>LabN Consulting, L.L.C.</organization>
</author>
<author fullname="Don Fedyk" initials="D." surname="Fedyk">
<organization>LabN Consulting, L.L.C.</organization>
</author>
<author fullname="Marc Blanchet" initials="M." surname="Blanchet">
<organization>Viagenie</organization>
</author>
<date day="4" month="July" year="2025"/>
<abstract>
<t> The YANG model in this document includes three modules, and
can be
used to manage network resources and topologies with scheduled
attributes, such as predictable link loss and link connectivity as a
function of time. The intent is to have this information be utilized
by Time-Variant Routing systems.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-tvr-schedule-yang-
05"/>
</reference>
<reference anchor="RFC8413">
<front>
<title>Framework for Scheduled Use of Resources</title>
<author fullname="Y. Zhuang" initials="Y." surname="Zhuang"/>
<author fullname="Q. Wu" initials="Q." surname="Wu"/>
<author fullname="H. Chen" initials="H." surname="Chen"/>
<author fullname="A. Farrel" initials="A." surname="Farrel"/>
<date month="July" year="2018"/>
<abstract>
<t>Time-Scheduled (TS) reservation of Traffic Engineering (TE) res
ources can be used to provide resource booking for TE Label Switched Paths so as
to better guarantee services for customers and to improve the efficiency of net
work resource usage at any moment in time, including network usage that is plann
ed for the future. This document provides a framework that describes and discuss
es the architecture for supporting scheduled reservation of TE resources. This d
ocument does not describe specific protocols or protocol extensions needed to re
alize this service.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8413"/>
<seriesInfo name="DOI" value="10.17487/RFC8413"/>
</reference>
<reference anchor="RFC8340">
<front>
<title>YANG Tree Diagrams</title>
<author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
<author fullname="L. Berger" initials="L." role="editor" surname="Be
rger"/>
<date month="March" year="2018"/>
<abstract>
<t>This document captures the current syntax used in YANG module t
ree diagrams. The purpose of this document is to provide a single location for t
his definition. This syntax may be updated from time to time based on the evolut
ion of the YANG language.</t>
</abstract>
</front>
<seriesInfo name="BCP" value="215"/>
<seriesInfo name="RFC" value="8340"/>
<seriesInfo name="DOI" value="10.17487/RFC8340"/>
</reference>
<reference anchor="I-D.ietf-netmod-rfc8407bis">
<front>
<title>Guidelines for Authors and Reviewers of Documents Containing
YANG Data Models</title>
<author fullname="Andy Bierman" initials="A." surname="Bierman">
<organization>YumaWorks</organization>
</author>
<author fullname="Mohamed Boucadair" initials="M." surname="Boucadai
r">
<organization>Orange</organization>
</author>
<author fullname="Qin Wu" initials="Q." surname="Wu">
<organization>Huawei</organization>
</author>
<date day="5" month="June" year="2025"/>
<abstract>
<t> This document provides guidelines for authors and reviewers
of
specifications containing YANG data models, including IANA-maintained
modules. Recommendations and procedures are defined, which are
intended to increase interoperability and usability of Network
Configuration Protocol (NETCONF) and RESTCONF Protocol
implementations that utilize YANG modules. This document obsoletes
RFC 8407.
Also, this document updates RFC 8126 by providing additional
guidelines for writing the IANA considerations for RFCs that specify
IANA-maintained modules.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-
28"/>
</reference>
<reference anchor="RFC3339">
<front>
<title>Date and Time on the Internet: Timestamps</title>
<author fullname="G. Klyne" initials="G." surname="Klyne"/>
<author fullname="C. Newman" initials="C." surname="Newman"/>
<date month="July" year="2002"/>
<abstract>
<t>This document defines a date and time format for use in Interne
t protocols that is a profile of the ISO 8601 standard for representation of dat
es and times using the Gregorian calendar.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="3339"/>
<seriesInfo name="DOI" value="10.17487/RFC3339"/>
</reference>
<reference anchor="I-D.ietf-ntp-ntpv5">
<front>
<title>Network Time Protocol Version 5</title>
<author fullname="Miroslav Lichvar" initials="M." surname="Lichvar">
<organization>Red Hat</organization>
</author>
<author fullname="Tal Mizrahi" initials="T." surname="Mizrahi">
<organization>Huawei</organization>
</author>
<date day="2" month="July" year="2025"/>
<abstract>
<t> The Network Time Protocol (NTP) is a widely deployed protoco
l that
allows hosts to obtain the current time of day from time servers.
This document specifies version 5 of the protocol (NTPv5), which
adopts a client-server model as its sole mode of operation. Legacy
operational modes supported in earlier versions have been removed to
improve protocol robustness and clarity. While this specification
defines the protocol used for time distribution, it does not define
the algorithms or heuristics employed by clients to determine or
adjust their local time.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-ntp-ntpv5-05"/>
</reference>
<reference anchor="RFC6241">
<front>
<title>Network Configuration Protocol (NETCONF)</title>
<author fullname="R. Enns" initials="R." role="editor" surname="Enns
"/>
<author fullname="M. Bjorklund" initials="M." role="editor" surname=
"Bjorklund"/>
<author fullname="J. Schoenwaelder" initials="J." role="editor" surn
ame="Schoenwaelder"/>
<author fullname="A. Bierman" initials="A." role="editor" surname="B
ierman"/>
<date month="June" year="2011"/>
<abstract>
<t>The Network Configuration Protocol (NETCONF) defined in this do
cument provides mechanisms to install, manipulate, and delete the configuration
of network devices. It uses an Extensible Markup Language (XML)-based data encod
ing for the configuration data as well as the protocol messages. The NETCONF pro
tocol operations are realized as remote procedure calls (RPCs). This document ob
soletes RFC 4741. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="6241"/>
<seriesInfo name="DOI" value="10.17487/RFC6241"/>
</reference>
<reference anchor="RFC8040">
<front>
<title>RESTCONF Protocol</title>
<author fullname="A. Bierman" initials="A." surname="Bierman"/>
<author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
<author fullname="K. Watsen" initials="K." surname="Watsen"/>
<date month="January" year="2017"/>
<abstract>
<t>This document describes an HTTP-based protocol that provides a
programmatic interface for accessing data defined in YANG, using the datastore c
oncepts defined in the Network Configuration Protocol (NETCONF).</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8040"/>
<seriesInfo name="DOI" value="10.17487/RFC8040"/>
</reference>
<reference anchor="RFC4252">
<front>
<title>The Secure Shell (SSH) Authentication Protocol</title>
<author fullname="T. Ylonen" initials="T." surname="Ylonen"/>
<author fullname="C. Lonvick" initials="C." role="editor" surname="L
onvick"/>
<date month="January" year="2006"/>
<abstract>
<t>The Secure Shell Protocol (SSH) is a protocol for secure remote
login and other secure network services over an insecure network. This document
describes the SSH authentication protocol framework and public key, password, a
nd host-based client authentication methods. Additional authentication methods a
re described in separate documents. The SSH authentication protocol runs on top
of the SSH transport layer protocol and provides a single authenticated tunnel f
or the SSH connection protocol. [STANDARDS-TRACK]</t>
</abstract>
</front>
<seriesInfo name="RFC" value="4252"/>
<seriesInfo name="DOI" value="10.17487/RFC4252"/>
</reference>
<reference anchor="RFC8446">
<front>
<title>The Transport Layer Security (TLS) Protocol Version 1.3</titl
e>
<author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
<date month="August" year="2018"/>
<abstract>
<t>This document specifies version 1.3 of the Transport Layer Secu
rity (TLS) protocol. TLS allows client/server applications to communicate over t
he Internet in a way that is designed to prevent eavesdropping, tampering, and m
essage forgery.</t>
<t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 50
77, 5246, and 6961. This document also specifies new requirements for TLS 1.2 im
plementations.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="8446"/>
<seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>
<reference anchor="RFC9000">
<front>
<title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
<author fullname="J. Iyengar" initials="J." role="editor" surname="I
yengar"/>
<author fullname="M. Thomson" initials="M." role="editor" surname="T
homson"/>
<date month="May" year="2021"/>
<abstract>
<t>This document defines the core of the QUIC transport protocol.
QUIC provides applications with flow-controlled streams for structured communica
tion, low-latency connection establishment, and network path migration. QUIC inc
ludes security measures that ensure confidentiality, integrity, and availability
in a range of deployment circumstances. Accompanying documents describe the int
egration of TLS for key negotiation, loss detection, and an exemplary congestion
control algorithm.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="9000"/>
<seriesInfo name="DOI" value="10.17487/RFC9000"/>
</reference>
<reference anchor="RFC7951">
<front>
<title>JSON Encoding of Data Modeled with YANG</title>
<author fullname="L. Lhotka" initials="L." surname="Lhotka"/>
<date month="August" year="2016"/>
<abstract>
<t>This document defines encoding rules for representing configura
tion data, state data, parameters of Remote Procedure Call (RPC) operations or a
ctions, and notifications defined using YANG as JavaScript Object Notation (JSON
) text.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="7951"/>
<seriesInfo name="DOI" value="10.17487/RFC7951"/>
</reference>
<reference anchor="RFC9657">
<front>
<title>Time-Variant Routing (TVR) Use Cases</title>
<author fullname="E. Birrane, III" initials="E." surname="Birrane, I
II"/>
<author fullname="N. Kuhn" initials="N." surname="Kuhn"/>
<author fullname="Y. Qu" initials="Y." surname="Qu"/>
<author fullname="R. Taylor" initials="R." surname="Taylor"/>
<author fullname="L. Zhang" initials="L." surname="Zhang"/>
<date month="October" year="2024"/>
<abstract>
<t>This document introduces use cases where Time-Variant Routing (
TVR) computations (i.e., routing computations that take into consideration time-
based or scheduled changes to a network) could improve routing protocol converge
nce and/or network performance.</t>
</abstract>
</front>
<seriesInfo name="RFC" value="9657"/>
<seriesInfo name="DOI" value="10.17487/RFC9657"/>
</reference>
<reference anchor="I-D.ietf-netmod-eca-policy">
<front>
<title>A YANG Data model for ECA Policy Management</title>
<author fullname="Qin Wu" initials="Q." surname="Wu">
<organization>Huawei</organization>
</author>
<author fullname="Igor Bryskin" initials="I." surname="Bryskin">
<organization>Individual</organization>
</author>
<author fullname="Henk Birkholz" initials="H." surname="Birkholz">
<organization>Fraunhofer SIT</organization>
</author>
<author fullname="Xufeng Liu" initials="X." surname="Liu">
<organization>Volta Networks</organization>
</author>
<author fullname="Benoît Claise" initials="B." surname="Claise">
<organization>Cisco</organization>
</author>
<date day="19" month="February" year="2021"/>
<abstract>
<t> This document defines a YANG data model for Event Condition
Action
(ECA) policy management. The ECA policy YANG module provides the
ability to delegate some network management functions to the server
(e.g., a NETCONF or RESTCONF server) which can take simple and
instant action when a trigger condition on the managed objects is
met.
</t>
</abstract>
</front>
<seriesInfo name="Internet-Draft" value="draft-ietf-netmod-eca-policy-
01"/>
</reference>
<reference anchor="I-D.liu-netmod-yang-schedule">
<front> <front>
<title>A YANG Data Model for Configuration Scheduling</title> <title>Extensible Markup Language (XML) 1.0 (Fifth Edition)</title>
<author fullname="Xufeng Liu" initials="X." surname="Liu"> <author initials="T." surname="Bray" fullname="Tim Bray" role="edito
<organization>Jabil</organization> r">
</author> <organization/>
<author fullname="Igor Bryskin" initials="I." surname="Bryskin">
<organization>Huawei Technologies</organization>
</author> </author>
<author fullname="Vishnu Pavan Beeram" initials="V. P." surname="Bee <author initials="J." surname="Paoli" fullname="Jean Paoli" role="ed
ram"> itor">
<organization>Juniper Networks</organization> <organization/>
</author> </author>
<author fullname="Tarek Saad" initials="T." surname="Saad"> <author initials="C. M." surname="Sperberg-McQueen" fullname="C. M.
<organization>Cisco Systems Inc</organization> Sperberg-McQueen" role="editor">
<organization/>
</author> </author>
<author fullname="Himanshu Shah" initials="H." surname="Shah"> <author initials="E." surname="Maler" fullname="Eve Maler" role="edi
<organization>Ciena</organization> tor">
<organization/>
</author> </author>
<author fullname="Oscar Gonzalez de Dios" initials="O. G." surname=" <author initials="F." surname="Yergeau" fullname="Francois Yergeau"
de Dios"> role="editor">
<organization>Telefonica</organization> <organization/>
</author> </author>
<date day="1" month="March" year="2018"/> <date year="2008" month="November" day="26"/>
<abstract>
<t> This document describes a data model for configuration sched
uling.
</t>
</abstract>
</front> </front>
<seriesInfo name="Internet-Draft" value="draft-liu-netmod-yang-schedul e-05"/> <refcontent>W3C Recommendation</refcontent>
</reference> </reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
413.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
340.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
339.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6
241.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
040.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
252.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
446.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9
000.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7
951.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9
657.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
345.xml"/>
</references> </references>
</references> </references>
<?line 1637?> <?line 1716?>
<section anchor="usage"> <section anchor="usage">
<name>Examples of Scheduling Format Representation</name> <name>Examples of Scheduling Format Representation</name>
<t>This section provides some examples to illustrate the use of the <t>This section provides some examples to illustrate the use of the
period and recurrence formats defined in <xref target="sec-schedule"/>. The f ollowing period and recurrence formats defined in <xref target="sec-schedule"/>. The f ollowing
modules are used for illustration purposes and make examples verifiable:</t> modules are used for illustration purposes and make examples verifiable:</t>
<artwork><![CDATA[ <sourcecode type="yang"><![CDATA[
module example-sch-usage-1 { module example-sch-usage-1 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-1"; namespace "http://example.com/example-sch-usage-1";
prefix "ex-schu-1"; prefix "ex-schu-1";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using 'generic-schedule-params' and
'schedule-status' groupings.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container generic-schedule-params { container generic-schedule-params {
description
"A collection of generic scheduling parameters.";
uses schedule:generic-schedule-params; uses schedule:generic-schedule-params;
} }
container schedule-status { container schedule-status {
description
"A collection of scheduling status.";
uses schedule:schedule-status; uses schedule:schedule-status;
} }
} }
module example-sch-usage-2 { module example-sch-usage-2 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-2"; namespace "http://example.com/example-sch-usage-2";
prefix "ex-schu2"; prefix "ex-schu2";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the 'period-of-time' grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container period-of-time { container period-of-time {
description
"A container for a time period.";
uses schedule:period-of-time; uses schedule:period-of-time;
} }
} }
module example-sch-usage-3 { module example-sch-usage-3 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-3"; namespace "http://example.com/example-sch-usage-3";
prefix "ex-schu-3"; prefix "ex-schu-3";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the 'recurrence-basic' grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container recurrence-basic { container recurrence-basic {
description
"A container for a simple recurrence rule.";
uses schedule:recurrence-basic { uses schedule:recurrence-basic {
refine frequency {
mandatory true;
}
refine interval { refine interval {
default 1; default 1;
} }
} }
} }
} }
module example-sch-usage-4 { module example-sch-usage-4 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-4"; namespace "http://example.com/example-sch-usage-4";
prefix "ex-schu-4"; prefix "ex-schu-4";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the 'recurrence-utc' grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container recurrence-utc { container recurrence-utc {
description
"A container for a simple recurrence rule in UTC format.";
uses schedule:recurrence-utc; uses schedule:recurrence-utc;
} }
} }
module example-sch-usage-5 { module example-sch-usage-5 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-5"; namespace "http://example.com/example-sch-usage-5";
prefix "ex-schu-5"; prefix "ex-schu-5";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the 'recurrence-with-time-zone'
grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container recurrence-with-time-zone { container recurrence-with-time-zone {
description
"A container for a simple recurrence rule with a time zone.";
uses schedule:recurrence-with-time-zone; uses schedule:recurrence-with-time-zone;
} }
} }
module example-sch-usage-6 { module example-sch-usage-6 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-6"; namespace "http://example.com/example-sch-usage-6";
prefix "ex-schu-6"; prefix "ex-schu-6";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
container recurrence-utc-with-date-times { organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the 'recurrence-utc-with-periods'
grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container recurrence-utc-with-periods {
description
"A container for an aggregate set of repeating occurrences in
UTC format.";
uses schedule:recurrence-utc-with-periods; uses schedule:recurrence-utc-with-periods;
} }
} }
module example-sch-usage-7 { module example-sch-usage-7 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-7"; namespace "http://example.com/example-sch-usage-7";
prefix "ex-schu-8"; prefix "ex-schu-8";
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
}
container recurrence-time-zone-with-date-times { organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using the
'recurrence-time-zone-with-periods' grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container recurrence-time-zone-with-periods {
description
"A container for an aggregate set of repeating occurrences
with a time zone.";
uses schedule:recurrence-time-zone-with-periods; uses schedule:recurrence-time-zone-with-periods;
} }
} }
module example-sch-usage-8 { module example-sch-usage-8 {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-usage-8"; namespace "http://example.com/example-sch-usage-8";
prefix "ex-schu-8"; prefix "ex-schu-8";
import ietf-schedule {
prefix "schedule";
}
organization
"Example, Inc.";
contact
"Support at example.com";
description
"Example of a module using 'icalendar-recurrence' grouping.";
revision "2026-02-20" {
description "Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container icalendar-recurrence { container icalendar-recurrence {
description
"A container for a scheduled iCalendar recurrence.";
uses schedule:icalendar-recurrence { uses schedule:icalendar-recurrence {
refine workweek-start { refine workweek-start {
default monday; default monday;
} }
} }
} }
} }
]]></artwork> ]]></sourcecode>
<t>For each example, only the message body is provided with <t>For each example, only the message body is provided with
JSON used for encoding per the guidance in <xref target="RFC7951"/>.</t> JSON, which is used for encoding per the guidance in <xref target="RFC7951"/> .</t>
<section anchor="the-generic-schedule-params-grouping"> <section anchor="the-generic-schedule-params-grouping">
<name>The "generic-schedule-params" Grouping</name> <name>The "generic-schedule-params" Grouping</name>
<t><xref target="ex-0"/> illustrates the example of a requested schedule that needs to start no earlier than <t><xref target="ex-0"/> illustrates the example of a requested schedule that needs to start no earlier than
08:00 AM, January 1, 2025 and end no later than 8:00 PM, January 31, 2025 (Beiji ng time). 08:00 AM, January 1, 2025 and end no later than 8:00 PM, January 31, 2025 (Beiji ng time).
Schedule requests that fail to meet the requirements are ignored by the system a s indicated by Schedule requests that fail to meet the requirements are ignored by the system, as indicated by
"discard-action".</t> "discard-action".</t>
<figure anchor="ex-0"> <figure anchor="ex-0">
<name>Generic Parameters with 'max-allowed-end' for Schedule Validatio n</name> <name>Generic Parameters with 'max-allowed-end' for Schedule Validatio n</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>To illustrate the difference between "max-allowed-end" and "validity" parameters, <t>To illustrate the difference between "max-allowed-end" and "validity" parameters,
<xref target="ex-00"/> shows the example of a requested schedule that needs to s tart no earlier than <xref target="ex-00"/> shows the example of a requested schedule that needs to s tart no earlier than
08:00 AM, January 1, 2025 (Beijing time). Schedule requests that fail to meet th e 08:00 AM, January 1, 2025 (Beijing time). Schedule requests that fail to meet th e
requirements are ignored by the system as indicated by "discard-action". The requirements are ignored by the system, as indicated by "discard-action". The
requested schedule may end after 8:00 PM, January 31, 2025, but any occurrences that are generated requested schedule may end after 8:00 PM, January 31, 2025, but any occurrences that are generated
after that time would not be considered as valid.</t> after that time would not be considered as valid.</t>
<figure anchor="ex-00"> <figure anchor="ex-00">
<name>Generic Parameters with 'validity' for Schedule Validation</name > <name>Generic Parameters with 'validity' for Schedule Validation</name >
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-period-of-time-grouping"> <section anchor="the-period-of-time-grouping">
<name>The "period-of-time" Grouping</name> <name>The "period-of-time" Grouping</name>
<t><xref target="ex-1"/> shows an example of a period that starts at 08: 00:00 UTC, on January 1, 2025 and ends at 18:00:00 UTC <t><xref target="ex-1"/> shows an example of a period that starts at 08: 00:00 UTC on January 1, 2025 and ends at 18:00:00 UTC
on December 31, 2027.</t> on December 31, 2027.</t>
<figure anchor="ex-1"> <figure anchor="ex-1">
<name>Simple Start/End Schedule</name> <name>Simple Start/End Schedule</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>An example of a period that starts at 08:00:00 UTC, on January 1, 202 5 and lasts 15 days and <t>An example of a period that starts at 08:00:00 UTC on January 1, 2025 and lasts 15 days and
5 hours and 20 minutes is encoded as shown in <xref target="ex-2"/>.</t> 5 hours and 20 minutes is encoded as shown in <xref target="ex-2"/>.</t>
<figure anchor="ex-2"> <figure anchor="ex-2">
<name>Simple Schedule with Duration</name> <name>Simple Schedule with Duration</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>An example of a period that starts at 2:00 A.M. in Los Angeles on Nov ember 19, <t>An example of a period that starts at 2:00 AM in Los Angeles on Novem ber 19,
2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t> 2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t>
<figure anchor="ex-3"> <figure anchor="ex-3">
<name>Simple Schedule with Time Zone Indication</name> <name>Simple Schedule with Time Zone Indication</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-recurrence-basic-grouping"> <section anchor="the-recurrence-basic-grouping">
<name>The "recurrence-basic" Grouping</name> <name>The "recurrence-basic" Grouping</name>
<t><xref target="ex-6"/> indicates a recurrence of every 2 days which st arts immediately and repeats forever:</t> <t><xref target="ex-4"/> indicates a recurrence of every 2 days, which s tarts immediately and repeats forever:</t>
<figure anchor="ex-4"> <figure anchor="ex-4">
<name>Simple Schedule with Recurrence</name> <name>Simple Schedule with Recurrence</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-recurrence-utc-grouping"> <section anchor="the-recurrence-utc-grouping">
<name>The "recurrence-utc" Grouping</name> <name>The "recurrence-utc" Grouping</name>
<t><xref target="ex-5"/> indicates a recurrence from 8:00 AM to 9:00 AM every day, from <t><xref target="ex-5"/> indicates a recurrence from 8:00 AM to 9:00 AM every day, from
December 1 to December 31, 2025 in UTC:</t> December 1 to December 31, 2025 in UTC:</t>
<figure anchor="ex-5"> <figure anchor="ex-5">
<name>Simple Schedule with Recurrence in UTC</name> <name>Simple Schedule with Recurrence in UTC</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"example-sch-usage-4:recurrence-utc": { "example-sch-usage-4:recurrence-utc": {
"recurrence-first": { "recurrence-first": {
"start-time-utc": "2025-12-01T08:00:00Z", "start-time-utc": "2025-12-01T08:00:00Z",
"duration": 3600 "duration": 3600
}, },
"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"
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-recurrence-with-time-zone-grouping"> <section anchor="the-recurrence-with-time-zone-grouping">
<name>The "recurrence-with-time-zone" Grouping</name> <name>The "recurrence-with-time-zone" Grouping</name>
<t><xref target="ex-6"/> indicates a recurrence of every 2 hours for 10 <t><xref target="ex-6"/> indicates a recurrence of every 2 hours for 10
occurrences, lasting occurrences that
10 minutes, and starting at 3 p.m. on December 1, 2025 in New York:</t> lasts 10 minutes and starts at 3 PM on December 1, 2025 in New York:</t>
<figure anchor="ex-6"> <figure anchor="ex-6">
<name>Simple Schedule with Recurrence with Time Zone Indication</name> <name>Simple Schedule with Recurrence with Time Zone Indication</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-recurrence-utc-with-periods-grouping"> <section anchor="the-recurrence-utc-with-periods-grouping">
<name>The "recurrence-utc-with-periods" Grouping</name> <name>The "recurrence-utc-with-periods" Grouping</name>
<t><xref target="ex-7"/> indicates a recurrence that occurs every two da ys starting at 9:00 AM <t><xref target="ex-7"/> indicates a recurrence that occurs every two da ys starting at 9:00 AM
and 3:00 PM for a duration of 30 minutes and 40 minutes respectively, and 3:00 PM for a duration of 30 minutes and 40 minutes, respectively,
from 2025-06-01 to 2025-06-30 in UTC:</t> from 2025-06-01 to 2025-06-30 in UTC:</t>
<figure anchor="ex-7"> <figure anchor="ex-7">
<name>Example of Recurrence With Date Times</name> <name>Example of Recurrence With Date Times</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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",
"period-timeticks": [ "period-timeticks": [
{ {
"period-start": "3240000", "period-start": 3240000,
"period-end": "3420000" "period-end": 3420000
}, },
{ {
"period-start": "5400000", "period-start": 5400000,
"period-end": "5640000" "period-end": 5640000
} }
] ]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-recurrence-time-zone-with-periods-grouping"> <section anchor="the-recurrence-time-zone-with-periods-grouping">
<name>The "recurrence-time-zone-with-periods" Grouping</name> <name>The "recurrence-time-zone-with-periods" Grouping</name>
<t><xref target="ex-8"/> indicates a recurrence that occurs every <t><xref target="ex-8"/> 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 occurrences 30 minutes and lasts for 15 minutes from 9:00 AM to 5:00 PM and two extra occ urrences
at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01 (New Yo rk):</t> at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01 (New Yo rk):</t>
<figure anchor="ex-8"> <figure anchor="ex-8">
<name>Example of Advanced Recurrence Schedule</name> <name>Example of Advanced Recurrence Schedule</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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",
"frequency": "ietf-schedule:minutely", "frequency": "ietf-schedule:minutely",
"interval": 30, "interval": 30,
"until": "2025-12-01T17:00:00Z", "until": "2025-12-01T17:00:00Z",
"period": [ "period": [
{ {
"period-start": "2025-12-01T18:00:00", "period-start": "2025-12-01T18:00:00",
"duration": "PT00:20:00" "duration": "PT00:20:00"
}, },
{ {
"period-start": "2025-12-01T18:30:00", "period-start": "2025-12-01T18:30:00",
"duration": "PT00:20:00" "duration": "PT00:20:00"
} }
] ]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-icalendar-recurrence-grouping"> <section anchor="the-icalendar-recurrence-grouping">
<name>The "icalendar-recurrence" Grouping</name> <name>The "icalendar-recurrence" Grouping</name>
<t><xref target="ex-9"/> indicates 10 occurrences that occur at <t><xref target="ex-9"/> indicates 10 occurrences at
8:00 AM (EST), every last Saturday of the month starting in January 2024:</t> 8:00 AM (EST) every last Saturday of the month starting in January 2024:</t>
<figure anchor="ex-9"> <figure anchor="ex-9">
<name>Simple iCalendar Recurrence</name> <name>Simple iCalendar Recurrence</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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": [
{ {
"direction": [ "direction": [
-1 -1
], ],
"weekday": "saturday" "weekday": "saturday"
} }
] ]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t><xref target="ex-10"/> is an example of a recurrence that occurs on t he last <t><xref target="ex-10"/> is an example of a recurrence that occurs on t he last
workday of the month until December 25, 2025, from January 1, 2025:</t> workday of the month until December 25, 2025, starting January 1, 2025:</t>
<figure anchor="ex-10"> <figure anchor="ex-10">
<name>Example of Advanced iCalendar Recurrence</name> <name>Example of Advanced iCalendar Recurrence</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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-01T00:00:00"
}, },
"frequency": "ietf-schedule:monthly", "frequency": "ietf-schedule:monthly",
"until": "2025-12-25", "until": "2025-12-25T23:59:59",
"byday": [ "byday": [
{ {
"weekday": "monday" "weekday": "monday"
}, },
{ {
"weekday": "tuesday" "weekday": "tuesday"
}, },
{ {
"weekday": "wednesday" "weekday": "wednesday"
}, },
skipping to change at line 2628 skipping to change at line 2348
}, },
{ {
"weekday": "friday" "weekday": "friday"
} }
], ],
"bysetpos": [ "bysetpos": [
-1 -1
] ]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t><xref target="ex-11"/> indicates a recurrence that occurs every 20 <t><xref target="ex-11"/> indicates a recurrence that occurs every 20
minutes from 9:00 AM to 4:40 PM (UTC), with the occurrence starting at 10:20 minutes from 9:00 AM to 4:40 PM (UTC), with the exclusion of the
AM occurrence starting at 10:20 AM on 2025-12-01:</t>
being excluded on 2025-12-01:</t>
<figure anchor="ex-11"> <figure anchor="ex-11">
<name>Example of Advanced iCalendar Recurrence with Exceptions</name> <name>Example of Advanced iCalendar Recurrence with Exceptions</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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,
20, 20,
skipping to change at line 2663 skipping to change at line 2383
13, 13,
14, 14,
15, 15,
16 16
], ],
"exception-dates": [ "exception-dates": [
"2025-12-01T10:20:00Z" "2025-12-01T10:20:00Z"
] ]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section anchor="the-schedule-status-grouping"> <section anchor="the-schedule-status-grouping">
<name>The "schedule-status" Grouping</name> <name>The "schedule-status" Grouping</name>
<t><xref target="ex-12"/> indicates the scheduled recurrence status of < xref target="ex-11"/> at the time <t><xref target="ex-12"/> indicates the scheduled recurrence status of < xref target="ex-11"/> at the time
of 12:15 PM, 2025-12-01 (UTC):</t> of 12:15 PM on 2025-12-01 (UTC):</t>
<figure anchor="ex-12"> <figure anchor="ex-12">
<name>Example of a Schedule Status</name> <name>Example of a Schedule Status</name>
<artwork><![CDATA[ <sourcecode type="json"><![CDATA[
{ {
"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": "2025-12-01T12:20:00Z"
],
"upcoming-occurrence": [
"2025-12-01T12:20:00Z"
]
} }
} }
]]></artwork> ]]></sourcecode>
</figure> </figure>
<t>At the time of 12:15 PM, 2025-12-01 (UTC), the recurring event occurr <t>At the time of 12:15 PM on 2025-12-01 (UTC), the recurring event occu
ed at rred at
(note that occurrence at 10:20 AM is excluded): (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. 9:00, 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.</t> The last occurrence was at 12:00, and the upcoming one is at 12:20.</t>
</section> </section>
</section> </section>
<section anchor="sec-ext"> <section anchor="sec-ext">
<name>Examples of Using/Extending the "ietf-schedule" Module</name> <name>Examples of Using/Extending the "ietf-schedule" Module</name>
<t>This non-normative section shows two examples for how the "ietf-schedul e" module <t>This non-normative section shows two examples for how the "ietf-schedul e" module
can be used or extended for scheduled events or attributes based on date and time.</t> can be used or extended for scheduled events or attributes based on date and time.</t>
<section anchor="features"> <section anchor="features">
<name>Example: Schedule Tasks to Execute Based on a Recurrence Rule</nam e> <name>Example: Schedule Tasks to Execute Based on a Recurrence Rule</nam e>
<t>Scheduled tasks can be used to execute specific actions based on cert ain recurrence rules (e.g., <t>Scheduled tasks can be used to execute specific actions based on cert ain recurrence rules (e.g.,
every Friday at 8:00 AM). The following example module which "uses" the "ical every Friday at 8:00 AM). The following example module, which "uses" the "ica
endar-recurrence" lendar-recurrence"
grouping from "ietf-schedule" module shows how a scheduled task could be defi grouping from the "ietf-schedule" module, shows how a scheduled task could be
ned defined
with different features used for options.</t> with different features used for options.</t>
<artwork><![CDATA[ <sourcecode type="yang"><![CDATA[
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";
} }
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 "2026-02-20" {
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 line 2781 skipping to change at line 2497
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;
} }
} }
} }
} }
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;
} }
} }
} }
]]></artwork> ]]></sourcecode>
</section> </section>
<section anchor="augments"> <section anchor="augments">
<name>Example: Schedule Network Properties to Change Based on Date and T ime</name> <name>Example: Schedule Network Properties to Change Based on Date and T ime</name>
<t>Network properties may change over a specific period of time or based on a <t>Network properties may change over a specific period of time or based on a
recurrence rule, e.g., <xref target="RFC9657"/>. recurrence rule, e.g., <xref target="RFC9657"/>.
The following example module which augments the "recurrence-utc-with-periods" The following example module, which augments the "recurrence-utc-with-periods
grouping from "ietf-schedule" module shows how a scheduled attribute "
could be defined.</t> grouping from the "ietf-schedule" module, shows how a scheduled attribute
<artwork><![CDATA[ could be defined. Note that
<xref target="RFC8345"/> and this document are referenced in the modul
e.</t>
<sourcecode type="yang"><![CDATA[
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 "2026-02-20" {
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 line 2900 skipping to change at line 2619
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;
} }
} }
} }
} }
} }
} }
} }
]]></artwork> ]]></sourcecode>
<t><xref target="ex-13"/> shows a configuration example of a link's band <t><xref target="ex-13"/> shows a configuration example in XML <xref tar
width that is get="W3C.XML1.0"/> of a link's bandwidth that is
scheduled between 2025-12-01 0:00 UTC to the end of 2025-12-31 with a daily scheduled between 2025-12-01 0:00 UTC to the end of 2025-12-31 with a daily
schedule. In each day, the bandwidth value is scheduled to be 500 Kbps between schedule. In each day, the bandwidth value is scheduled to be 500 Kbps between
1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to 11:00 PM. The bandwidth 1:00 AM to 6:00 AM and 800 Kbps between 10:00 PM to 11:00 PM. The bandwidth
value that is not covered by the period above is 1000 Kbps.</t> value that is not covered by the period above is 1000 Kbps.</t>
<figure anchor="ex-13"> <figure anchor="ex-13">
<name>Example of Scheduled Link's Bandwidth</name> <name>Example of Scheduled Link's Bandwidth</name>
<artwork><![CDATA[ <sourcecode type="xml"><![CDATA[
<?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>
<utc-start-time>2025-12-01T01:00:00Z</utc-start-time> <start-time-utc>2025-12-01T01:00:00Z</start-time-utc>
</recurrence-first> </recurrence-first>
<frequency>schedule:daily</frequency> <frequency>schedule:daily</frequency>
<utc-until>2025-12-31T23:59:59Z</utc-until> <utc-until>2025-12-31T23:59:59Z</utc-until>
<period-timeticks> <period-timeticks>
<period-start>360000</period-start> <period-start>360000</period-start>
<period-end>2160000</period-end> <period-end>2160000</period-end>
<scheduled-bandwidth>500</scheduled-bandwidth> <scheduled-bandwidth>500</scheduled-bandwidth>
</period-timeticks> </period-timeticks>
<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>
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
</section> </section>
<section anchor="ex-framework"> <section anchor="ex-framework">
<name>Examples of Using "ietf-schedule" Module for Scheduled Use of Resour ces Framework</name> <name>Examples of Using the "ietf-schedule" Module for Scheduled Use of Re sources Framework</name>
<t>This section exemplifies how the architecture for supporting scheduled <t>This section exemplifies how the architecture for supporting scheduled
reservation of Traffic Engineering (TE) resources in <xref target="RFC8413"/> might leverage the "period-of-time" reservation of Traffic Engineering (TE) resources in <xref target="RFC8413"/> might leverage the "period-of-time"
grouping defined in the "ietf-schedule" module to implement scheduled use of grouping defined in the "ietf-schedule" module to implement scheduled use of
resources.</t> resources.</t>
<t>The following example module shows how a scheduled link capacity reserv ation <t>The following example module shows how a scheduled link capacity reserv ation
could be defined.</t> could be defined.</t>
<artwork><![CDATA[ <sourcecode type="yang"><![CDATA[
module example-sch-capacity-res { module example-sch-capacity-res {
yang-version 1.1; yang-version 1.1;
namespace "http://example.com/example-sch-capacity-res"; namespace "http://example.com/example-sch-capacity-res";
prefix "ex-schecaparev"; prefix "ex-schecaparev";
import ietf-network-topology { import ietf-network-topology {
prefix "nt"; prefix "nt";
} }
import ietf-schedule { import ietf-schedule {
prefix "schedule"; prefix "schedule";
} }
organization
"Example, Inc.";
contact
"Support at example.com";
description
"An example to show a scheduled link capacity reservation.";
revision "2026-02-20" {
description
"Initial version.";
reference
"RFC 9922: A YANG Data Model for Scheduling";
}
container link-capability-reservations { container link-capability-reservations {
description
"A container for a scheduled link capability reservations.";
list scheduled-link-capacity { list scheduled-link-capacity {
key "schedule-id"; key "schedule-id";
description
"Definition of scheduled link capacity list.";
leaf schedule-id { leaf schedule-id {
type string; type string;
description
"The schedule identifier for this schedule rule.";
} }
leaf link-id { leaf link-id {
type nt:link-id; type nt:link-id;
description
"The identifier of a link in the topology.";
} }
leaf reserved-capability { leaf reserved-capability {
type uint64; type uint64;
units "Mbps"; units "Mbps";
description
"The reserved capability for a particular link.";
} }
uses schedule:period-of-time; uses schedule:period-of-time;
} }
} }
} }
]]></artwork> ]]></sourcecode>
<t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the ref erence architecture for scheduled use <t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the ref erence architecture for scheduled use
of resources, the service requester sends a request to a Path Computation Ele of resources. The service requester sends a request to a Path Computation Ele
ment (PCE) and includes the ment (PCE) and includes the
parameters of the Label Switched Path (LSP) that the requester wishes to supp parameters of the Label Switched Path (LSP) that the requester wishes to supp
ly, the configuration ly. The configuration
example to provide the scheduled resource is shown in <xref target="ex-14"/>. </t> example to provide the scheduled resource is shown in <xref target="ex-14"/>. </t>
<figure anchor="ex-14"> <figure anchor="ex-14">
<name>Example of Scheduled Link's Bandwidth Reservation</name> <name>Example of Scheduled Link's Bandwidth Reservation</name>
<artwork><![CDATA[ <sourcecode type="xml"><![CDATA[
<?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>
<reserved-capability>500</reserved-capability> <reserved-capability>500</reserved-capability>
<period-start>2025-03-10T08:00:00Z</period-start> <period-start>2025-03-10T08:00:00Z</period-start>
<period-end>2025-03-10T09:00:00Z</period-end> <period-end>2025-03-10T09:00:00Z</period-end>
skipping to change at line 3035 skipping to change at line 2780
<duration>PT09:00:00</duration> <duration>PT09:00:00</duration>
</scheduled-link-capacity> </scheduled-link-capacity>
<scheduled-link-capacity> <scheduled-link-capacity>
<schedule-id>3</schedule-id> <schedule-id>3</schedule-id>
<link-id>2-1-1</link-id> <link-id>2-1-1</link-id>
<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>
]]></artwork> ]]></sourcecode>
</figure> </figure>
</section> </section>
<section numbered="false" anchor="acknowledgments"> <section numbered="false" anchor="acknowledgments">
<name>Acknowledgments</name> <name>Acknowledgments</name>
<t>This work is derived from the <xref target="I-D.ietf-opsawg-ucl-acl"/>. <t>This work is derived from <xref target="I-D.ietf-opsawg-ucl-acl"/>. The
There is a desire re is a desire
from the OPSAWG to see this model be separately defined for wide use in sched from the OPSAWG to see this module separately defined for wide use in schedul
uling context.</t> ing context.</t>
<t>Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve Baill <t>Thanks to <contact fullname="Adrian Farrel"/>, <contact fullname="Wei P
argeon, Dhruv Dhody, Robert Wilton, and Italo Busi an"/>, <contact fullname="Tianran Zhou"/>, <contact fullname="Joe Clarke"/>, <co
ntact fullname="Steve Baillargeon"/>, <contact fullname="Dhruv Dhody"/>, <contac
t fullname="Robert Wilton"/>, and <contact fullname="Italo Busi"/>
for their valuable comments and inputs to this work.</t> for their valuable comments and inputs to this work.</t>
<t>Many thanks to the authors of <xref target="I-D.ietf-tvr-schedule-yang" />, <xref target="I-D.ietf-opsawg-scheduling-oam-tests"/>, and <xref target="I-D .ietf-netmod-eca-policy"/> <t>Many thanks to the authors of <xref target="I-D.ietf-tvr-schedule-yang" />, <xref target="I-D.ietf-opsawg-scheduling-oam-tests"/>, and <xref target="I-D .ietf-netmod-eca-policy"/>
for the constructive discussion during IETF#118.</t> for the constructive discussion during IETF#118.</t>
<t>Other related efforts were explored in the past, e.g., <xref target="I- D.liu-netmod-yang-schedule"/>.</t> <t>Other related efforts were explored in the past, e.g., <xref target="I- D.liu-netmod-yang-schedule"/>.</t>
<t>Thanks to Reshad Rahman for the great YANG Doctors review, Mahesh Jetha <t>Thanks to <contact fullname="Reshad Rahman"/> for the great YANG Doctor
nandani for the AD review, Per Andersson for the OPSDIR review, s review, <contact fullname="Mahesh Jethanandani"/> for the AD review, <contact
Peter Yee for genart review, and Acee Lindem for the rtgdir review.</t> fullname="Per Andersson"/> for the OPSDIR review,
<t>Thanks to Éric Vyncke, Erik Kline, and Mike Bishop for the IESG review. <contact fullname="Peter Yee"/> for the GENART review, and <contact fullname=
</t> "Acee Lindem"/> for the RTGDIR review.</t>
<t>Thanks to <contact fullname="Éric Vyncke"/>, <contact fullname="Erik Kl
ine"/>, and <contact fullname="Mike Bishop"/> for the IESG review.</t>
</section> </section>
</back> </back>
<!-- ##markdown-source:
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
+YnrivKzIaUtMaqZn8jPKIL/ib8t8ovaLoLLXBlQpX6QHRXKG1bqIx6Kp+Ou
lWgwGfSsAzoj0BU4oXsr9wiSU2C9CVqo4voi7OPVxoNwgW2kG6v44xH6rNgo
84VlpEpbjiRpk4Zioxdo23bd0uAS5SPITm0nMfro5CvJYI/ICdwH6RyfAb4y
0xR/2Aez+Y1+0EQ/oeG09kPAFb0yqekR+L5EY4Th0hGaQeYtI1R1UoaG2Fo6
xJl8uXyM62SchUfZXjrKW/3tCnO5BMEbGmZn+WTUp8tHmRRpaIzdpWM85Q+X
j1Ditg6NsbecstSnC0b51MYZTlGta9yNGjQ3ic6VZu0SDvnRICtv2Nr6+n99
vfHtx//qb7xeX1//62b/0d++3jje+Hb9bH2T/vo45H+24J/tv22sOdv362jt
AJ7v/o3aWL9ubHx8rXp7u/bN4okd2+WcLxOr6KWkGxtRYinxUYMon6VyBYw6
rJW/a52v9HAuThVOvfZ2TaKlbxqvjtd0XgK6Q4A+BdSCrS7pAt+B3GM7UFcA
+TChtByQumuQTmtna1qpcRPcpqWQCqeoyZMyW6v0yQvOfe0nBnftxVqz59LO
RGiARHWB1FTAH3qL2JBgx7IFh6p8ZD4ktYJPREEbUOEN2qink6K4mBmHsS5W
LicW2KIs81HKcRq4bv9U2eKKkj3L32z9oGjZG2xb5r6qBu04BdtFNHli9UeW
McbrOgj0rEsacadodLmjfbNcHwgWRjqT9IpW8JSKgcCflgrzOruxZhVcQ80u
Lq+6oPpPOj2f306HgbtV5u1tVa1SbD6ENEms+VkoW1qCPp84113wp1GIfuUi
9KqHO9eiVx0sqNxla7waVQ3N8o7oaj3nCK2PWyX+NvvF3Ktt2zA6sZU1HXe8
Feej8jXRYX9L6RhNrfrATYrIBADTSbO+LGDiu18AGEqqLw0WXw5fBBVVufnC
uLLLAAVA4juMXxgmumS5iKz45uqXpio6V1oAFl+1/MJQUUzCAqCcuOS7yWn6
MtR3kqFQCgsd+milGVuSjm8+qW5bx8UUReSEu9eBTbc8sMIx6dbOKyd7gl/1
GO97Ub7X4A5nOX7fkOtuW1FmF3y9p7FVsmodWGGNEQJBVai999lbHfPy0HO+
4arVFBUHElYJ3NLBtxbREnWL+or6U67yc4Qs1hLRWibHiQSq/rZXHVbfthUf
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
</rfc> </rfc>
 End of changes. 262 change blocks. 
1422 lines changed or deleted 637 lines changed or added

This html diff was produced by rfcdiff 1.48.