<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-05"/>
    <author fullname="Qiufang Ma" role="editor">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>maqiufang1@huawei.com</email>
      </address>
    </author>
    <author fullname="Qin Wu">
      <organization>Huawei</organization>
      <address>
        <postal>
          <street>101 Software Avenue, Yuhua District</street>
          <city>Jiangsu</city>
          <code>210012</code>
          <country>China</country>
        </postal>
        <email>bill.wu@huawei.com</email>
      </address>
    </author>
    <author fullname="Mohamed Boucadair" role="editor">
      <organization>Orange</organization>
      <address>
        <postal>
          <city>Rennes</city>
          <code>35000</code>
          <country>France</country>
        </postal>
        <email>mohamed.boucadair@orange.com</email>
      </address>
    </author>
    <author fullname="Daniel King">
      <organization>Lancaster University</organization>
      <address>
        <postal>
          <country>United Kingdom</country>
        </postal>
        <email>d.king@lancaster.ac.uk</email>
      </address>
    </author>
    <date year="2025" month="March" day="17"/>
    <area>Operations and Management</area>
    <workgroup>netmod</workgroup>
    <keyword>calendaring</keyword>
    <keyword>scheduling</keyword>
    <keyword>YANG</keyword>
    <keyword>groupings</keyword>
    <abstract>
      <?line 57?>

<t>This document defines a common schedule YANG module which is
   designed to be applicable for scheduling purposes such as event, policy,
   services, or resources based on date and time. For the sake of better modularity,
   the module includes a set of recurrence related groupings with varying levels of representation
   (i.e., from basic to advanced) to accommodate a variety of requirements. It also defines groupings for validating requested
   schedules and reporting scheduling status.</t>
    </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>
  <middle>
    <?line 66?>

<section anchor="intro">
      <name>Introduction</name>
      <t>This document defines a common schedule YANG module ("ietf-schedule") that can
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-scheduling-oam-tests"/>,
and <xref target="I-D.ietf-tvr-schedule-yang"/>. The module includes a set of reusable groupings which
are designed to be applicable for scheduling purposes such as event, policy,
services or resources based on date and time. It also defines groupings for validating
requested schedules and reporting scheduling status.</t>
      <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
are beyond the scope of this document.</t>
      <t><xref target="sec-mib"/> discusses the relationship with the Management Information Base (MIB)
managed objects for scheduling management operations defined in <xref target="RFC3231"/>.</t>
      <t><xref target="usage"/> describes a set of examples to illustrate the use of the common schedule groupings (<xref target="sec-grp"/>).
And <xref target="sec-ext"/> provides sample modules to exemplify how future modules can use the extensibility
provisions in "ietf-schedule" (<xref target="sec-schedule"/>). Also, <xref target="ex-framework"/> provides
an example of using "ietf-schedule" module for scheduled use of 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 publication.</t>
        <t>This document contains placeholder values that need to be replaced with finalized
   values at the time of publication.  This note summarizes all of the
   substitutions that are needed.  No other RFC Editor instructions are specified
   elsewhere in this document.</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-03-17 --&gt; the actual date of the publication of this document</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The meanings of the symbols in tree diagrams are defined in
   <xref target="RFC8340"/>.</t>
      <t>This document uses the YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t>
      <t>The document makes use of the following terms:</t>
      <dl>
        <dt>Recurrence Rule:</dt>
        <dd>
          <t>Refers to a rule or repeating pattern for recurring events. See also <xref section="3.8.5.3" sectionFormat="of" target="RFC5545"/> for a comprehensive iCalendar recurrence rule specification.</t>
        </dd>
        <dt>Frequency:</dt>
        <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>
        </dd>
        <dt/>
        <dd>
          <t>For example, repeating events based on an interval of a second or more are
classified as recurrence with a frequency value of "SECONDLY". Frequency values defined as identities
in the YANG module are used in lowercase.</t>
        </dd>
        <dt>iCalendar:</dt>
        <dd>
          <t>Refers to Internet Calendaring per <xref target="RFC5545"/>.</t>
        </dd>
        <dt>Interval:</dt>
        <dd>
          <t>Refers to an integer that specifies at which interval a recurrence rule repeats. Values are taken from "INTERVAL" rule in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t>
        </dd>
        <dt/>
        <dd>
          <t>For example, "1", means every second for a secondly rule, every minute for a minutely rule, every hour for an hourly rule, etc.</t>
        </dd>
        <dt>System:</dt>
        <dd>
          <t>Refers to an entity that hosts a schedule that is managed using the YANG module defined in this document.</t>
        </dd>
      </dl>
    </section>
    <section anchor="sec-overview">
      <name>Module Overview</name>
      <section anchor="sec-features">
        <name>Features</name>
        <t>The "ietf-schedule" data model defines the recurrence related groupings using
   a modular approach. To that aim, a variety of representations of recurrence
   groupings ranging from basic to advanced (iclander like) are defined.
   To allow for different options, two features are defined in the data model:</t>
        <ul spacing="normal">
          <li>
            <t>"basic-recurrence"</t>
          </li>
          <li>
            <t>"icalendar-recurrence"</t>
          </li>
        </ul>
        <t>Refer to Sections <xref format="counter" target="sec-aug"/> and <xref format="counter" target="features"/> for the use of these features.</t>
      </section>
      <section anchor="sec-types">
        <name>Types and Identities</name>
        <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following identities:</t>
        <ul spacing="normal">
          <li>
            <t>"schedule-type": Indicates the type of a schedule. The following types are defined so far:
            </t>
            <ul spacing="normal">
              <li>
                <t>one-shot: The schedule will trigger an action without the duration/end time being
  specified or the duration being specified as 0/end time being specified the same as start time, and then the schedule will disable itself (<xref section="3.3" sectionFormat="of" target="RFC3231"/>).</t>
              </li>
              <li>
                <t>period: The schedule is a period-based schedule consisting either a start and end or a start and positive duration of time.</t>
              </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 five minutes) or not (i.e., repeat in a non-regular manner, e.g., every day at 8 and 9 AM).</t>
              </li>
            </ul>
          </li>
          <li>
            <t>"frequency-type": Characterizes the repeating interval rule of a recurrence schedule (secondly, minutely, etc.).</t>
          </li>
          <li>
            <t>"schedule-state": Indicates the status of a schedule (enabled, disabled, conflicted, finished, etc.). This identity can also be used
to manage the state of individual instances of a recurrence-based schedule.</t>
          </li>
          <li>
            <t>"discard-action-type": Specifies the action for the responder to take (e.g., generate a warning or an error message) when
a requested schedule cannot be accepted for any reason and is discarded.</t>
          </li>
        </ul>
      </section>
      <section anchor="sec-grp">
        <name>Scheduling Groupings</name>
        <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following groupings:</t>
        <ul spacing="normal">
          <li>
            <t>"generic-schedule-params" (<xref target="sec-gen"/>)</t>
          </li>
          <li>
            <t>"period-of-time" (<xref target="sec-period"/>)</t>
          </li>
          <li>
            <t>"recurrence-basic" (<xref target="sec-rec"/>)</t>
          </li>
          <li>
            <t>"recurrence-utc" (<xref target="sec-rec-utc"/>)</t>
          </li>
          <li>
            <t>"recurrence-with-time-zone" (<xref target="sec-rec-tz"/>)</t>
          </li>
          <li>
            <t>"recurrence-utc-with-periods" (<xref target="sec-rec-utc-dt"/>)</t>
          </li>
          <li>
            <t>"recurrence-time-zone-with-periods" (<xref target="sec-rec-tz-dt"/>)</t>
          </li>
          <li>
            <t>"icalendar-recurrence" (<xref target="sec-ical-rec"/>)</t>
          </li>
          <li>
            <t>"schedule-status" and "schedule-status-with-name" (<xref target="sec-schedule-status"/>)</t>
          </li>
        </ul>
        <!--
   {{schedule-tree}} provides an overview of the tree structure of
   the "ietf-schedule" module in terms of its groupings.

~~~~
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
~~~~
{: #schedule-tree title="Overall Schedule Tree Structure"}

   Each of these groupings is presented in the following subsections.
-->

<t>Examples are provided in <xref target="usage"/>.</t>
        <section anchor="sec-gen">
          <name>The "generic-schedule-params" Grouping</name>
          <t>A system accepts and handles schedule requests, which may help further
   automate the scheduling process of events, policy, services, or resources
   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
   validating requested schedules.</t>
          <figure anchor="gsp-tree">
            <name>Generic Schedule Configuration Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    +-- description?            string
    +-- time-zone-identifier?   sys:timezone-name
    +-- validity?               yang:date-and-time
    +-- max-allowed-start?      yang:date-and-time
    +-- min-allowed-start?      yang:date-and-time
    +-- max-allowed-end?        yang:date-and-time
    +-- discard-action?         identityref
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "description" includes a description of the schedule. No constraint is imposed
   on the structure nor the use of this parameter.</t>
          <t>The "time-zone-identifier" parameter, if provided, specifies the
   time zone reference <xref target="RFC7317"/> of the local date and time values. This parameter
   <bcp14>MUST</bcp14> be specified if any of the date and time values are in the format of local time.
   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>
          <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 schedule
   can be started to execute by a system and takes precedence over similar attributes
   that are provided at the schedule instance itself.</t>
          <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
   occurrence of the schedule starts later/earlier than the configured values.</t>
          <t>The "max-allowed-end" parameter specifies the maximum allowed end time of
   the last occurrence. A requested schedule will be rejected if the end time
   of last occurrence starts later than the configured "max-allowed-end" value.</t>
          <t>The "discard-action" parameter specifies the action if a requested schedule
   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,
   conflicting with existing schedules, or being out-of-date.</t>
          <t>These parameters apply to all schedules on a system and are meant
   to provide guards against stale configuration, too short schedule requests
   that would prevent validation by admins of some critical systems, etc.</t>
        </section>
        <section anchor="sec-period">
          <name>The "period-of-time" Grouping</name>
          <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
   start date and time ("period-start") and a non-negative time duration ("duration"). For the first
   format, the start of the period <bcp14>MUST</bcp14> be no later 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 forever or as a one-shot schedule.
   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 also considered as a one-shot schedule.</t>
          <t>The "time-zone-identifier" parameter indicates the identifier for the
   time zone. This parameter <bcp14>MUST</bcp14> be specified if either the "period-start" or "period-end"
   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>
          <t>The "period-description" includes a description of the period. No constraint is imposed
   on the structure nor the use of this parameter.</t>
          <figure anchor="pt-tree">
            <name>Period of Time Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    +-- period-description?     string
    +-- period-start            yang:date-and-time
    +-- time-zone-identifier?   sys:timezone-name
    +-- (period-type)?
       +--:(explicit)
       |  +-- period-end?       yang:date-and-time
       +--:(duration)
          +-- duration?         duration
  grouping recurrence-basic:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
        </section>
        <section anchor="sec-rec">
          <name>The "recurrence-basic" Grouping</name>
          <t>The "recurrence-basic" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rule which starts immediately and repeats forever.</t>
          <figure anchor="rec-grp-tree">
            <name>recurrence Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The frequency parameter ("frequency"), which is mandatory, identifies the type of recurrence rule. For example,
  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="RFC5545"/>, the interval ("interval") represents at which interval the recurrence rule repeats. For example,
  within a daily recurrence rule, an interval value of "8" means every eight days.
  The default value is "1", meaning every second for a secondly recurrence rule,
  every minute for a minutely rule, every hour for an hourly rule, every day for a
  daily rule, and so on. Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, no "default" substatement is used here because there are cases (e.g., profiling) where the use of the default is problematic.</t>
          <t>The "recurrence-description" includes a description of the period. No constraint is imposed
  on the structure nor the use of this parameter.</t>
        </section>
        <section anchor="sec-rec-utc">
          <name>The "recurrence-utc" Grouping</name>
          <t>The "recurrence-utc" grouping (<xref target="rec-utc-grp-tree"/>) uses the "recurrence-basic"
   grouping and specifies a simple recurrence rule in UTC format.</t>
          <figure anchor="rec-utc-grp-tree">
            <name>recurrence-utc Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    +-- recurrence-first
    |  +-- start-time-utc?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- utc-until?          yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "start-time-utc" indicates the start time in UTC format.</t>
          <t>The "duration" parameter specifies, in units of seconds, the time period of the first occurrence. Unless specified otherwise (e.g., described in the "description" statement), the "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as
   immediate completion or hard to compute an exact duration.</t>
          <t>Note that the "interval" and "duration" cover two distinct properties of a schedule event.
The interval specifies when a schedule will occur, combined with the frequency parameter; while the duration indicates how long
an occurrence will last. This document allows the interval between occurrences to be shorter than the duration of each occurrence (e.g., a recurring event is scheduled 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,
  indicated by the "recurrence-end" choice. The value of the "count" node <bcp14>MUST</bcp14> be greater than 1, the "start-time-utc" value always counts
  as the first occurrence.</t>
          <t>The "recurrence-utc" grouping is designed to be reused in scheduling contexts
   where machine readability is more desirable.</t>
        </section>
        <section anchor="sec-rec-tz">
          <name>The "recurrence-with-time-zone" Grouping</name>
          <t>The "recurrence-with-time-zone" grouping (<xref target="rec-tz-grp-tree"/>) uses the
   "recurrence-basic" grouping and specifies a simple recurrence rule with a time zone.</t>
          <figure anchor="rec-tz-grp-tree">
            <name>recurrence-with-time-zone Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The "recurrence-first" container includes "start-time" and "duration" parameters
   to specify the start time and period of the first occurrence. Unless specified otherwise (e.g., described in the "description" statement), the
   "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as
   immediate completion or hard to compute an exact duration.</t>
          <t>The grouping also includes a
   "time-zone-identifier" parameter which <bcp14>MUST</bcp14> be specified if either the "start-time" or "until"
   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>
          <t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-end" choice. The value of the "count" node <bcp14>MUST</bcp14> be greater than 1, the "start-time" value always counts
  as the first occurrence.</t>
          <t>Unlike the definition of "recurrence-utc" grouping (<xref target="sec-rec-utc"/>),
   "recurrence-with-time-zone" is intended to promote human readability over
   machine readability.</t>
        </section>
        <section anchor="sec-rec-utc-dt">
          <name>The "recurrence-utc-with-periods" Grouping</name>
          <t>The "recurrence-utc-with-periods" grouping (<xref target="rec-utc-dt-grp-tree"/>) uses
   the "recurrence-utc" grouping (<xref target="sec-rec-utc"/>) and adds a "period-timeticks"
   list to define an aggregate set of repeating occurrences.</t>
          <figure anchor="rec-utc-dt-grp-tree">
            <name>recurrence-utc-with-periods Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    +-- recurrence-first
    |  +-- start-time-utc?   yang:date-and-time
    |  +-- duration?         uint32
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- utc-until?          yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period-timeticks* [period-start]
       +-- period-start    yang:timeticks
       +-- period-end?     yang:timeticks
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The recurrence instances are specified by the union of occurrences defined
  by both the recurrence rule and "period-timeticks" list. Duplicate instances
  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 must not exceed 100 in a secondly recurrence rule, and it must not
  exceed 6000 in a minutely recurrence rule, and so on.</t>
        </section>
        <section anchor="sec-rec-tz-dt">
          <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
  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>
          <figure anchor="rec-tz-dt-grp-tree">
            <name>recurrence-time-zone-with-periods Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period* [period-start]
       +-- period-description?     string
       +-- period-start            yang:date-and-time
       +-- time-zone-identifier?   sys:timezone-name
       +-- (period-type)?
          +--:(explicit)
          |  +-- period-end?       yang:date-and-time
          +--:(duration)
             +-- duration?         duration
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>The recurrence instances are specified by the union of occurrences defined
  by both the recurrence rule and "period" list. Duplicate instances
  are ignored.</t>
        </section>
        <section anchor="sec-ical-rec">
          <name>The "icalendar-recurrence" Grouping</name>
          <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 define
  more data nodes to enrich the definition of recurrence. The structure of the
  "icalendar-recurrence" grouping refers to the definition of recurrence
  component defined in Sections <xref target="RFC5545" section="3.3.10" sectionFormat="bare"/> and <xref target="RFC5545" section="3.8.5" sectionFormat="bare"/> of <xref target="RFC5545"/>.</t>
          <figure anchor="ical-grp-tree">
            <name>icalendar-recurrence Grouping Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    +-- recurrence-first
    |  +-- start-time?   yang:date-and-time
    |  +-- duration?     duration
    +-- time-zone-identifier?     sys:timezone-name
    +-- (recurrence-end)?
    |  +--:(until)
    |  |  +-- until?              yang:date-and-time
    |  +--:(count)
    |     +-- count?              uint32
    +-- recurrence-description?   string
    +-- frequency                 identityref
    +-- interval?                 uint32
    +-- period* [period-start]
    |  +-- period-description?     string
    |  +-- period-start            yang:date-and-time
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- (period-type)?
    |     +--:(explicit)
    |     |  +-- period-end?       yang:date-and-time
    |     +--:(duration)
    |        +-- duration?         duration
    +-- bysecond*                 uint32
    +-- byminute*                 uint32
    +-- byhour*                   uint32
    +-- byday* [weekday]
    |  +-- direction*   int32
    |  +-- weekday      schedule:weekday
    +-- bymonthday*               int32
    +-- byyearday*                int32
    +-- byyearweek*               int32
    +-- byyearmonth*              uint32
    +-- bysetpos*                 int32
    +-- workweek-start?           schedule:weekday
    +-- exception-dates*          yang:date-and-time
  grouping schedule-status:
    ...
  grouping schedule-status-with-name:
    ...
]]></artwork>
          </figure>
          <t>An array of the "bysecond" (or "byminute", "byhour") specifies a list of
   seconds within a minute (or minutes within an hour, hours of the day). For
   example, within a "minutely" recurrence rule, the values of "byminute" node
   "10" and "20" means the occurrences generates at the 10th and 20th minute
   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
   direction which indicates the nth occurrence of a specific day within
   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 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"
   represents the last Monday of the month.</t>
          <t>An array of the "bymonthday" (or byyearday", "byyearweek", or "byyearmonth") specifies a list of
   days of the month (or days of the year, weeks of the year, or months of the year).
   For example, within a "yearly" recurrence rule, the values of "byyearmonth"
   instance "1" and "2" means the occurrences generates in January and February,
   increasing the "yearly" recurrence from every year to every January and February
   of the year.</t>
          <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 "monthly"
   recurrence rule, the "byday" data node specifies every Monday of the week, the
   "bysetpos" with value of "-1" represents the last Monday of the month.
   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
   significant when a "weekly" recurrence rule has an interval greater than 1, and
   a "byday" data node is specified. This is also significant when in a "yearly" rule
   and a "byyearweek" is specified. The default value is "monday".</t>
          <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 values
   generated by any of the specified recurrence rule and date-times, and then
   excluding any start date and time values specified by "exception-dates" parameter.</t>
        </section>
        <section anchor="sec-schedule-status">
          <name>The "schedule-status" and "schedule-status-with-name" Groupings</name>
          <t>The "schedule-status" and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters
   for scheduling management/status exposure. The "schedule-status-with-name" grouping has the same
   structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-id". Both
   structures are defined in the module to allow for better modularity and flexibility.</t>
          <figure anchor="sche-status-tree">
            <name>Schedule Status with and without Name Groupings Tree Structure</name>
            <artwork><![CDATA[
module: ietf-schedule

  grouping generic-schedule-params:
    ...
  grouping period-of-time:
    ...
  grouping recurrence-basic:
    ...               
  grouping recurrence-utc:
    ...
  grouping recurrence-with-time-zone:
    ...
  grouping recurrence-utc-with-periods:
    ...
  grouping recurrence-time-zone-with-periods:
    ...
  grouping icalendar-recurrence:
    ...
  grouping schedule-status:
    +-- state?                    identityref
    +-- version?                  uint16
    +-- schedule-type?            identityref
    +--ro local-time?               yang:date-and-time
    +--ro last-update?              yang:date-and-time
    +--ro counter?                  yang:counter32
    +--ro last-occurrence?          yang:date-and-time
    +--ro upcoming-occurrence?      yang:date-and-time
    +--ro last-failed-occurrence?   yang:date-and-time
    +--ro failure-counter?          yang:counter32
  grouping schedule-status-with-name:
    +-- schedule-id?              string
    +-- state?                    identityref
    +-- version?                  uint16
    +-- schedule-type?            identityref
    +--ro local-time?               yang:date-and-time
    +--ro last-update?              yang:date-and-time
    +--ro counter?                  yang:counter32
    +--ro last-occurrence?          yang:date-and-time
    +--ro upcoming-occurrence?      yang:date-and-time
    +--ro last-failed-occurrence?   yang:date-and-time
    +--ro failure-counter?          yang:counter32
]]></artwork>
          </figure>
          <t>The "schedule-id" parameter is useful to uniquely identify a schedule in
   a network device or controller if multiple scheduling contexts exists.</t>
          <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
   represents the state of the overall recurrence. The "identityref" type is used for this
   parameter to allow extensibility in future modules.</t>
          <t>The "version" parameter is used to track the current schedule version
   information. The version can be bumped by the entity who create the schedule.
   The "last-update" parameter identifies when the schedule was last modified.
   In some contexts, this parameter can be used to track the configuration of a
   given schedule. In such cases, the "version" may not be used.</t>
          <t>The "schedule-type" parameter identifies the type of the current schedule.
   The "counter", "last-occurrence", and "upcoming-occurrence" data nodes are
   only avaliable when the "schedule-type" is "recurrence".</t>
          <t>"local-time" reports the actual local time as seen by the entity that
   host a schedule. This paramter can be used by a controller to infer the offset to UTC.</t>
          <t>"last-failed-occurrence" and "failure-counter" report the last failure that occurred and
   the count of failures for this schedule. Unless new parameters/operations are defined to allow the count of failures to be reset,
   "failure-counter" is reset by default only when the schedule starts.</t>
          <t>The current groupings capture common parameters that are applicable
   to typical scheduling contexts known so far. Future modules can define other
   useful parameters as needed. For example, in a scheduling context with multiple
   system sources to feed the schedules, the "source" and "precedence" parameters
   may be needed to reflect how schedules from different sources should be prioritised.</t>
        </section>
      </section>
      <section anchor="sec-aug">
        <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
   may support a basic recurrence rule or an advanced one as needed, by declaring
   different features. Whether only one or both features are supported is implementation
   specific and depend on specific scheduling context.</t>
        <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 specifc schedule needs.</t>
      </section>
    </section>
    <section anchor="some-usage-restrictions">
      <name>Some Usage Restrictions</name>
      <t>There are some restrictions that need to be followed when using groupings defined
   in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t>
      <ul spacing="normal">
        <li>
          <t>The instant in time represented by "period-start" <bcp14>MUST</bcp14> be before the
"period-end" for "period-of-time" grouping (<xref target="sec-period"/>).</t>
        </li>
        <li>
          <t>The combination of the day, month, and year represented for date and time
values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maxinum day
number based on the month and year.</t>
        </li>
        <li>
          <t>The second for date and time values <bcp14>MUST</bcp14> have the value "60" at the end of months in which a leap
second occurs.</t>
        </li>
        <li>
          <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
start immediately (e.g., for a period-based schedule) or starts from the
date and time when the recurrence pattern is first satisfied from the current time (e.g., for a recurrence-based schedule).</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-mib">
      <name>Relationship to the DISMAN-SCHEDULE-MIB</name>
      <t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to
schedule management operations periodically or at specified dates and times.</t>
      <t>Although no data nodes are defined in this document, <xref target="mapping"/> lists
how the main objects in the DISMAN-SCHEDULE-MIB can be mapped to YANG
parameters.</t>
      <table anchor="mapping">
        <name>YANG/MIB Mapping</name>
        <thead>
          <tr>
            <th align="left">MIB Object</th>
            <th align="left">YANG</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">schedLocalTime</td>
            <td align="left">local-time</td>
          </tr>
          <tr>
            <td align="left">schedType</td>
            <td align="left">schedule-type</td>
          </tr>
          <tr>
            <td align="left">schedName</td>
            <td align="left">schedule-id</td>
          </tr>
          <tr>
            <td align="left">schedOwner</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedDescr</td>
            <td align="left">description</td>
          </tr>
          <tr>
            <td align="left">schedInterval</td>
            <td align="left">interval</td>
          </tr>
          <tr>
            <td align="left">schedWeekDay</td>
            <td align="left">weekday</td>
          </tr>
          <tr>
            <td align="left">schedMonth</td>
            <td align="left">byyearmonth</td>
          </tr>
          <tr>
            <td align="left">schedDay</td>
            <td align="left">bymonthday</td>
          </tr>
          <tr>
            <td align="left">schedHour</td>
            <td align="left">byhour</td>
          </tr>
          <tr>
            <td align="left">schedMinute</td>
            <td align="left">byminute</td>
          </tr>
          <tr>
            <td align="left">schedContextName</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedAdminStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedOperStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedFailures</td>
            <td align="left">failure-counter</td>
          </tr>
          <tr>
            <td align="left">schedLastFailure</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedLastFailed</td>
            <td align="left">last-failed-occurrence</td>
          </tr>
          <tr>
            <td align="left">schedStorageType</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedVariable</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedValue</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedTriggers</td>
            <td align="left">counter/failure-counter</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sec-schedule">
      <name>The "ietf-schedule" YANG Module</name>
      <t>This module imports types defined in <xref target="RFC6991"/> and <xref target="RFC7317"/>.</t>
      <sourcecode markers="true" name="ietf-schedule@2025-03-17.yang"><![CDATA[
module ietf-schedule {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schedule";
  prefix schedule;

  import ietf-yang-types {
    prefix yang;
    reference
      "RFC 6991: Common YANG Data Types";
  }

  import ietf-system {
    prefix sys;
    reference
      "RFC 7317: A YANG Data Model for System Management";
  }

  organization
    "IETF NETMOD Working Group";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/netmod/>
     WG List: <mailto:netmod@ietf.org>

     Editor:   Qiufang Ma
               <mailto:maqiufang1@huawei.com
     Author:   Qin Wu
               <mailto:bill.wu@huawei.com>
     Editor:   Mohamed Boucadair
               <mailto:mohamed.boucadair@orange.com>
     Author:   Daniel King
               <mailto:d.king@lancaster.ac.uk>";
  description
    "This YANG module defines a set of common types and groupings
     which are applicable for scheduling purposes such as events,
     policy, services, or resources based on date and time.

     Copyright (c) 2025 IETF Trust and the persons identified
     as authors of the code. All rights reserved.

     Redistribution and use in source and binary forms, with
     or without modification, is permitted pursuant to, and
     subject to the license terms contained in, the Revised
     BSD License set forth in Section 4.c of the IETF Trust's
     Legal Provisions Relating to IETF Documents
     (https://trustee.ietf.org/license-info).

     This version of this YANG module is part of RFC XXXX
     (https://www.rfc-editor.org/info/rfcXXXX); see the RFC
     itself for full legal notices.

     The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
     NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
     'MAY', and 'OPTIONAL' in this document are to be interpreted as
     described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
     they appear in all capitals, as shown here.";

  revision 2025-03-17 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A Common YANG Data Model for Scheduling";
  }
  
  feature basic-recurrence {
    description
      "Indicates that the server supports configuring a basic
       scheduled recurrence.";
  }

  feature icalendar-recurrence {
    description
      "Indicates that the server supports configuring a comprehensive
       scheduled icalendar recurrence";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar),
                 Sections 3.3.10 and 3.8.5";
  }

  typedef weekday {
    type enumeration {
      enum sunday {
        value 0;
        description
          "Sunday of the week.";
      }
      enum monday {
        value 1;
        description
          "Monday of the week.";
      }
      enum tuesday {
        value 2;
        description
          "Tuesday of the week.";
      }
      enum wednesday {
        value 3;
        description
          "Wednesday of the week.";
      }
      enum thursday {
        value 4;
        description
          "Thursday of the week.";
      }
      enum friday {
        value 5;
        description
          "Friday of the week.";
      }
      enum saturday {
        value 6;
        description
          "Saturday of the week.";
      }
    }
    description
      "Seven days of the week.";
  }

  typedef duration {
    type string {
      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';
    }
    description
      "Duration of the time. The format can represent nominal
       durations (weeks designated by 'W' and days designated by 'D')
       and accurate durations (hours:minutes:seconds follows the
       designator 'T').

       Note that this value type doesn't support the 'Y' and 'M'
       designators to specify durations in terms of years and months.

       Negative durations are typically used to schedule an alarm to
       trigger before an associated time.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Sections 3.3.6 and
                 3.8.6.3";
  }

  identity schedule-type {
    description
      "Base identity for schedule type.";
  }

  identity one-shot {
    base schedule-type;
    description
      "Indicates a one-shot schedule. That is a schedule that
       will trigger an action without the duration/end time being
       specified or the duration being specified as 0/end time being
       specified the same as start time, and then the schedule will
       disable itself.";
  }

  identity period {
    base schedule-type;
    description
      "Indicates a period-based schedule consisting either a
       start and end or a start and positive duration of time.";
  }
  
  identity recurrence {
    base schedule-type;
    description
      "Indicates a recurrence-based schedule.";
  }

  identity frequency-type {
    description
      "Base identity for frequency type.";
  }

  identity secondly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a second or more.";
  }

  identity minutely {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a minute or more.";
  }

  identity hourly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       an hour or more.";
  }

  identity daily {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a day or more.";
  }

  identity weekly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a week or more.";
  }

  identity monthly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a month or more.";
  }

  identity yearly {
    base frequency-type;
    description
      "Indicates a repeating rule based on an interval of
       a year or more.";
  }

  identity schedule-state {
    description
      "Base identity for schedule state.";
  }

  identity enabled {
    base schedule-state;
    description
      "Indicates a schedule with an enabled state.";
  }

  identity finished {
    base schedule-state;
    description
      "Indicates a schedule with a finished state.
       The finished state indicates that the schedule has ended.";
  }

  identity disabled {
    base schedule-state;
    description
      "Indicates a schedule with a disabled state.";
  }

  identity out-of-date {
    base schedule-state;
    description
      "Indicates a schedule with an out-of-date state.";
  }

  identity conflicted {
    base schedule-state;
    description
      "Indicates a schedule with a conflicted state with other 
       schedules.";
  }
  
  identity discard-action-type {
    description
      "Indicates the action for the responder to take when a
       requested schedule cannot be accepted for any reason
       and is discarded.";
  }
  
  identity warning {
    base discard-action-type;
    description
      "Indicates that a warning message is generated
       when a schedule is discarded.";
  }

  identity error {
    base discard-action-type;
    description
      "Indicates that an error message is generated
       when a schedule is discarded.";
  }

  identity silently-discard {
    base discard-action-type;
    description
      "Indicates that a schedule that is not valid is silently 
       discarded.";
  }

  grouping generic-schedule-params {
    description
      "Includes a set of generic parameters that are followed by
       the entity that supports schedules.

       Such parameters are used as guards to prevent, e.g., stale
       configuration.";
    leaf description {
      type string;
      description
        "Provides a description of the schedule.";
    }
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone. This parameter
         MUST be specified if any of the date and time values are
         in the format of local time. It MUST NOT be applied to
         date and time values which are specified in the format of
         UTC or time zone offset to UTC.";
    }
    leaf validity {
      type yang:date-and-time;
      description
        "Specifies the date and time after which a schedule will not
         be considered as valid. This parameter takes precedence
         over similar attributes that are provided at the schedule
         instance itself.";
    }
    leaf max-allowed-start {
      type yang:date-and-time;
      description
        "Specifies the maximum scheduled start date and time. 
         A requested schedule whose first instance occurs after 
         this value cannot be accepted by the entity. Specifically, 
         a requested schedule will be rejected if the first 
         occurrence of that schedule exceeds 'max-allowed-start'.";
    }
    leaf min-allowed-start {
      type yang:date-and-time;
      description
        "Specifies the minimum scheduled start date and time. 
         A requested schedule whose first instance occurs before 
         this value cannot be accepted by the entity. Specifically, 
         a requested schedule will be rejected if the first  
         occurrence of that schedule is scheduled before 
         'min-allowed-start'.";
    }
    leaf max-allowed-end {
      type yang:date-and-time;
      description
        "A requested schedule will be rejected if the end time of 
         the last occurrence exceeds 'max-allowed-end'.";
    }
    leaf discard-action {
      type identityref {
        base discard-action-type;
      }
      description
        "Specifies the behavior when a schedule is discarded for
         any reason, e.g., failing to satisfy the guards in this
         grouping or it is received out-of-date.";    
    }
  }

  grouping period-of-time {
    description
      "This grouping is defined for period of time property.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Section 3.3.9";
    leaf period-description {
      type string;
      description
        "Provides a description of the period.";
    }
    leaf period-start {
      type yang:date-and-time;
      mandatory true;
      description
        "Period start time.";
    }
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone in a time zone
         database. This parameter MUST be specified if either the
         'period-start' or 'period-end' value is reported in local
         time format. It MUST NOT be applied to date and time
         values which are specified in the format of UTC or time
         zone offset to UTC.";
    }
    choice period-type {
      description
        "Indicates the type of the time period. Two types are
         supported. If no choice is indicated, the period is 
         considered to last forever or as a one-shot schedule.";
      case explicit {
        description
          "A period of time is identified by its start and its end.
           'period-start' indicates the period start.";
        leaf period-end {
          type yang:date-and-time;
          description
            "A period of time is defined by a start and end time.
             The start MUST be no later than the end. The period
             is considered as a one-shot schedule if the end time
             is the same as the start time.";
        }
      }
      case duration {
        description
          "A period of time is defined by a start and a non-negative
           duration of time.";
        leaf duration {
          type duration {
            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';
          }
          description
            "A non-negative duration of the time. This value is
             equivalent to the format of duration type except that
             the value cannot be negative. The period is considered
             as a one-shot schedule if the value is 0";
        }
      }
    }
  }

  grouping recurrence-basic {
    description
      "A simple definition of recurrence.";
    leaf recurrence-description {
      type string;
      description
        "Provides a description of the recurrence.";
    }
    leaf frequency {
      type identityref {
        base frequency-type;
      }
      mandatory true;
      description
        "Specifies the frequency type of the recurrence rule.";
    }
    leaf interval {
      type uint32;
      description
        "A positive integer representing at which interval the
         recurrence rule repeats. For example, within a 'daily'
         recurrence rule, a value of '8' means every eight days.
         The default value is '1', means every second for a 
         'secondly' recurrence rule, every minute for a 'minutely'
         rule, and so on.";
    }
  }

  grouping recurrence-utc {
    description
      "A simple definition of recurrence with time specified in
       UTC format.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence. If 
         unspecified, the recurrence is considered to start from
         the date and time when the recurrence pattern is first 
         satisfied.";
      leaf start-time-utc {
        type yang:date-and-time;
        description
          "Defines the instant date and time of the first instance
           in the recurrence set. A UTC format MUST be used.";
      }
      leaf duration {
        type uint32;
        units "seconds";
        description
          "When specified, it indicates how long the first occurrence
           last. Unless specified otherwise, it also applies to all
           the other instances in the recurrence set.";
      }
    }
    choice recurrence-end {
      description
        "Modes to control the end of a recurrence rule. If no
         choice is indicated, the recurrence rule is considered
         to repeat forever.";
      case until {
        description
          "This case defines a way that limits the end of a
           recurrence rule in an inclusive manner.";
        leaf utc-until {
          type yang:date-and-time;
          description
            "This parameter specifies a date and time value to
             inclusively terminate the recurrence in UTC format. If
             the value specified by this parameter is synchronized
             with the specified recurrence, it becomes the last
             instance of the recurrence.";
        }
      }
      case count {
        description
          "This case defines the number of occurrences at which
           to terminate the recurrence.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             terminate the recurrence.";
        }
      }
    }
    uses recurrence-basic;
  }
  
  grouping recurrence-with-time-zone {
    description
      "A simple definition of recurrence to specify a recurrence
       rule with a time zone.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence. If 
         unspecified, the recurrence is considered to start from
         the date and time when the recurrence pattern is first 
         satisfied.";
      leaf start-time {
        type yang:date-and-time;
        description
          "Defines the instant date and time of the first instance 
           in the recurrence set.";
      }
      leaf duration {
        type duration;
        description
          "When specified, it indicates how long the first
           occurrence last. Unless specified otherwise, it also
           applies to all the other instances in the recurrence
           set.";
      }
    }
    leaf time-zone-identifier {
      type sys:timezone-name;
      description
        "Indicates the identifier for the time zone in a time
         zone database. This parameter MUST be specified if either
         the 'start-time' or 'until' value is reported in local
         time format. It MUST NOT be applied to date and time
         values which are specified in the format of UTC or time
         zone offset to UTC.";
    }    
    choice recurrence-end {
      description
        "Modes to terminate the recurrence rule. If no choice is
         indicated, the recurrence rule is considered to repeat
         forever.";
      case until {
        description
          "The end of the recurrence is indicated by a specific
           date-and-time value.";
        leaf until {
          type yang:date-and-time;
          description
            "Specifies a date and time value to terminate the
             recurrence. If the value specified by this parameter
             is synchronized with the specified recurrence, it
             becomes the last instance of the recurrence.";
        }
      }
      case count {
        description
          "The end of the recurrence is indicated by the number
           of occurrences.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             terminate the recurrence.";
        }
      }
    }
    uses recurrence-basic;
  }

  grouping recurrence-utc-with-periods {
    description
      "This grouping defines an aggregate set of repeating 
       occurrences with UTC time format. The recurrence instances 
       are specified by the occurrences defined by both the
       recurrence rule and 'period-timeticks' list. Duplicate 
       instances are ignored.";
    uses recurrence-utc;
    list period-timeticks {
      key "period-start";
      description
        "A list of periods with timeticks formats.";      
      leaf period-start {
        type yang:timeticks;
        must
          "(not(derived-from(../../frequency,"
         +"'schedule:secondly')) or (current() < 100)) and "
         +"(not(derived-from(../../frequency,"
         +"'schedule:minutely')) or (current() < 6000)) and "
         +"(not(derived-from(../../frequency,'schedule:hourly'))"
         +" or (current() < 360000)) and "
         +"(not(derived-from(../../frequency,'schedule:daily'))"
         +" or (current() < 8640000)) and "
         +"(not(derived-from(../../frequency,'schedule:weekly'))"
         +" or (current() < 60480000)) and "
         +"(not(derived-from(../../frequency,"
         +"'schedule:monthly')) or (current() < 267840000)) and "
         +"(not(derived-from(../../frequency,'schedule:yearly'))"
         +" or (current() < 3162240000))" {
        error-message
          "The period-start must not exceed the frequency 
           interval.";
        }        
        description
          "Start time of the schedule within one recurrence.";
      }
      leaf period-end {
        type yang:timeticks;
        description
          "End time of the schedule within one recurrence.";
      }
    }
  }
  
  grouping recurrence-time-zone-with-periods {
    description
      "This grouping defines an aggregate set of repeating 
       occurrences with local time format and time zone specified. 
       The recurrence instances are specified by the occurrences
       defined by both the recurrence rule and 'period' list. 
       Duplicate instances are ignored.";  
    uses recurrence-with-time-zone;
    list period {
      key "period-start";
      description
        "A list of periods with date-and-time formats.";
      uses period-of-time;
    }
  }

  grouping icalendar-recurrence {
    description
      "This grouping specifies properties of a recurrence rule.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling Core Object
                 Specification (iCalendar), Section 3.8.5";
    uses recurrence-time-zone-with-periods;
    leaf-list bysecond {
      type uint32 {
        range "0..60";
      }
      description
        "Specifies a list of seconds within a minute.";
    }
    leaf-list byminute {
      type uint32 {
        range "0..59";
      }
      description
        "Specifies a list of minutes within an hour.";
    }
    leaf-list byhour {
      type uint32 {
        range "0..23";
      }
      description
        "Specifies a list of hours of the day.";
    }
    list byday {
      key "weekday";
      description
        "Specifies a list of days of the week.";
      leaf-list direction {
        when "derived-from(../../frequency, 'schedule:monthly') or "
          +  "(derived-from(../../frequency, 'schedule:yearly') "
          +  " and not(../../byyearweek))";
        type int32 {
          range "-53..-1|1..53";
        }
        description
          "When specified, it indicates the nth occurrence of a
           specific day within the monthly or yearly recurrence
           rule. For example, within a monthly rule, +1 monday 
           represents the first monday within the month, whereas 
           -1 monday represents the last monday of the month.";
      }
      leaf weekday {
        type schedule:weekday;
        description
          "Corresponds to seven days of the week.";
      }
    }
    leaf-list bymonthday {
      type int32 {
        range "-31..-1|1..31";
      }
      description
        "Specifies a list of days of the month.";
    }
    leaf-list byyearday {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of days of the year.";
    }
    leaf-list byyearweek {
      when "derived-from(../frequency, 'schedule:yearly')";
      type int32 {
        range "-53..-1|1..53";
      }
      description
        "Specifies a list of weeks of the year.";
    }
    leaf-list byyearmonth {
      type uint32 {
        range "1..12";
      }
      description
        "Specifies a list of months of the year.";
    }
    leaf-list bysetpos {
      type int32 {
        range "-366..-1|1..366";
      }
      description
        "Specifies a list of values that corresponds to the nth
         occurrence within the set of recurrence instances
         specified by the rule. It must only be used in conjunction
         with another by the rule part.";
    }
    leaf workweek-start {
      type schedule:weekday;
      description
        "Specifies the day on which the workweek starts. The 
         default value is 'monday'.";
    }
    leaf-list exception-dates {
      type yang:date-and-time;
      description
        "Defines a list of exceptions for recurrence.";
    }
  }

  grouping schedule-status {
    description
      "This grouping defines common properties of scheduling
       status.";
    leaf state {
      type identityref {
        base schedule-state;
      }
      description
        "Indicates the current state of the schedule.";
    }
    leaf version {
      type uint16;
      description
        "Indicates the version number of the schedule.";
    }
    leaf schedule-type {
      type identityref {
        base schedule-type;
      }
      description
        "Indicates the schedule type.";
    }
    leaf local-time {
      type yang:date-and-time;
      config false;
      description
        "Reports the local time as used by the entity that
         hosts the schedule.";
    }
    leaf last-update {
      type yang:date-and-time;
      config false;
      description
        "Reports the timestamp that the schedule is last updated.";
    }
    leaf counter {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:counter32;
      config false;
      description
        "The number of occurrences while invoking the scheduled 
         action successfully. The count wraps around when it reaches
         the maximum value.";
    }
    leaf last-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of last occurrence.";    
    }
    leaf upcoming-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')"
         + "and derived-from-or-self(../state, 'schedule:enabled')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of next occurrence.";
    }
    leaf last-failed-occurrence {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:date-and-time;
      config false;
      description
        "Indicates the timestamp of last failed action triggered by
         the schedule.";    
    }
    leaf failure-counter {
      when "derived-from-or-self(../schedule-type, "
         + "'schedule:recurrence')";
      type yang:counter32;
      config false;
      description
        "Counts the number of failures while invoking the scheduled
         action.";
    }
  }

  grouping schedule-status-with-name {
    description
      "This grouping defines common properties of scheduling
       status.";
    leaf schedule-id {
      type string;
      description
        "The schedule identifier that uniquely identifies a
         schedule within a device, controller, network, etc. 
         The unicity scope depends on the implementation.";
    }
    uses schedule-status;
  }
}
]]></sourcecode>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section uses the template described in <xref section="3.7" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>.</t>
      <t>The "ietf-schedule" YANG module specified in this document defines schema for data
   that is designed to be accessed via YANG-based management protocols, such
   as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  These protocols have to use
   a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
   and have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>The "ietf-schedule" module defines a set of types and
   groupings.  These nodes are intended to be reused by other YANG
   modules.  The module by itself does not expose any data nodes that
   are writable, data nodes that contain read-only state, or RPCs.  As
   such, there are no additional security issues related to the "ietf-schedule"
   module that need to be considered.</t>
      <t>Modules that use the groupings that are defined in this document
   should identify the corresponding security considerations, e.g.,:</t>
      <ul spacing="normal">
        <li>
          <t>Scheduling depends on reliable and accurate time synchronization. Inaccurate date
and time setting can lead to scheduling events being triggered at incorrect
intervals, potentially causing system failures or security vulnerabilities.</t>
        </li>
        <li>
          <t>Recurring events may conceal abnormal behavior or security threats, which
may be drowned out by normal events, especially when they are triggered frequently.</t>
        </li>
        <li>
          <t>The absence of detailed logs and audit records of each occurrence trigger time
and action results, and so on, may make security incidents difficient to trace.</t>
        </li>
        <li>
          <t>Care must be taken when defining recurrences occurring very often and
frequent that can be an additional source of attacks by keeping the system
permanently busy with the management of scheduling.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry">
        <name>The "IETF XML" Registry</name>
        <t>This document registers the following URI in the "IETF XML Registry" <xref target="RFC3688"/>.</t>
        <artwork><![CDATA[
        URI: urn:ietf:params:xml:ns:yang:ietf-schedule
        Registrant Contact: The IESG.
        XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="the-yang-module-names-registry">
        <name>The "YANG Module Names" Registry</name>
        <t>This document registers the following YANG module in the "YANG Module Names"
   registry <xref target="RFC6020"/>.</t>
        <artwork><![CDATA[
        name:               ietf-schedule
        namespace:          urn:ietf:params:xml:ns:yang:ietf-schedule
        prefix:             schedule
        maintained by IANA? N
        reference:          RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3231">
          <front>
            <title>Definitions of Managed Objects for Scheduling Management Operations</title>
            <author fullname="D. Levi" initials="D." surname="Levi"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <date month="January" year="2002"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes a set of managed objects that are used to schedule management operations periodically or at specified dates and times. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3231"/>
          <seriesInfo name="DOI" value="10.17487/RFC3231"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <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 signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, 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</title>
            <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 protocol 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 data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the 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 also 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" surname="Desruisseaux"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar 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 and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</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" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be 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 requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured 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 standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (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 and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF 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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-opsawg-ucl-acl">
          <front>
            <title>A YANG Data Model and RADIUS Extension for Policy-based Network Access Control</title>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Daniel King" initials="D." surname="King">
              <organization>Lancaster University</organization>
            </author>
            <date day="11" month="October" year="2024"/>
            <abstract>
              <t>   This document defines a YANG data model for policy-based network
   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-06"/>
        </reference>
        <reference anchor="I-D.ietf-opsawg-scheduling-oam-tests">
          <front>
            <title>A YANG Data Model for Network Diagnosis using Scheduled Sequences of OAM Tests</title>
            <author fullname="Luis M. Contreras" initials="L. M." surname="Contreras">
              <organization>Telefonica</organization>
            </author>
            <author fullname="Victor Lopez" initials="V." surname="Lopez">
              <organization>Nokia</organization>
            </author>
            <date day="29" month="January" year="2025"/>
            <abstract>
              <t>   This document defines a YANG data model for network diagnosis 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-opsawg-scheduling-oam-tests-00"/>
        </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>LabN Consulting, L.L.C.</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="20" month="October" year="2024"/>
            <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-03"/>
        </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) resources 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 network resource usage at any moment in time, including network usage that is planned for the future. This document provides a framework that describes and discusses the architecture for supporting scheduled reservation of TE resources. This document does not describe specific protocols or protocol extensions needed to realize 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="Berger"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>This document captures the current syntax used in YANG module tree diagrams. The purpose of this document is to provide a single location for this definition. This syntax may be updated from time to time based on the evolution 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="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <date day="14" month="January" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, 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.  The document also updates RFC 6020 by
   clarifying how modules and their revisions are handled by IANA.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-22"/>
        </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 Internet protocols that is a profile of the ISO 8601 standard for representation of dates and times using the Gregorian calendar.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3339"/>
          <seriesInfo name="DOI" value="10.17487/RFC3339"/>
        </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" surname="Schoenwaelder"/>
            <author fullname="A. Bierman" initials="A." role="editor" surname="Bierman"/>
            <date month="June" year="2011"/>
            <abstract>
              <t>The Network Configuration Protocol (NETCONF) defined in this document provides mechanisms to install, manipulate, and delete the configuration of network devices. It uses an Extensible Markup Language (XML)-based data encoding for the configuration data as well as the protocol messages. The NETCONF protocol operations are realized as remote procedure calls (RPCs). This document obsoletes 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 concepts 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="Lonvick"/>
            <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, and host-based client authentication methods. Additional authentication methods are described in separate documents. The SSH authentication protocol runs on top of the SSH transport layer protocol and provides a single authenticated tunnel for 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</title>
            <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 Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</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="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <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 communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration 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 configuration data, state data, parameters of Remote Procedure Call (RPC) operations or actions, 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, III"/>
            <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 convergence 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>
            <title>A YANG Data Model for Configuration Scheduling</title>
            <author fullname="Xufeng Liu" initials="X." surname="Liu">
              <organization>Jabil</organization>
            </author>
            <author fullname="Igor Bryskin" initials="I." surname="Bryskin">
              <organization>Huawei Technologies</organization>
            </author>
            <author fullname="Vishnu Pavan Beeram" initials="V. P." surname="Beeram">
              <organization>Juniper Networks</organization>
            </author>
            <author fullname="Tarek Saad" initials="T." surname="Saad">
              <organization>Cisco Systems Inc</organization>
            </author>
            <author fullname="Himanshu C. Shah" initials="H. C." surname="Shah">
              <organization>Ciena</organization>
            </author>
            <author fullname="Oscar Gonzalez de Dios" initials="O. G." surname="de Dios">
              <organization>Telefonica</organization>
            </author>
            <date day="1" month="March" year="2018"/>
            <abstract>
              <t>   This document describes a data model for configuration scheduling.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-liu-netmod-yang-schedule-05"/>
        </reference>
      </references>
    </references>
    <?line 1774?>

<section anchor="usage">
      <name>Examples of Scheduling Format Representation</name>
      <t>This section provides some examples to illustrate the use of the
   period and recurrence formats defined in <xref target="sec-schedule"/>. The following
   modules are used for illustration purposes:</t>
      <artwork><![CDATA[
module example-sch-usage-1 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-1";
  prefix "ex-schu-1";

  import ietf-schedule {
    prefix "schedule";
  }

  container generic-schedule-params {
    uses schedule:generic-schedule-params;
  }
  container schedule-status {
    uses schedule:schedule-status;
  }
}

module example-sch-usage-2 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-2";
  prefix "ex-schu2";

  import ietf-schedule {
    prefix "schedule";
  }

  container period-of-time {
    uses schedule:period-of-time;
  }
}

module example-sch-usage-3 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-3";
  prefix "ex-schu-3";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-basic {
    uses schedule:recurrence-basic;
  }
}

module example-sch-usage-4 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-4";
  prefix "ex-schu-4";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-utc {
    uses schedule:recurrence-utc;
  }
}

module example-sch-usage-5 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-5";
  prefix "ex-schu-5";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-with-time-zone {
    uses schedule:recurrence-with-time-zone;
  }
}

module example-sch-usage-6 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-6";
  prefix "ex-schu-6";

  import ietf-schedule {
    prefix "schedule";
  }

  container recurrence-utc-with-date-times {
    uses schedule:recurrence-utc-with-periods;
  }  
}

module example-sch-usage-7 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-7";
  prefix "ex-schu-8";

  import ietf-schedule {
    prefix "schedule";

  container recurrence-time-zone-with-date-times {
    uses schedule:recurrence-time-zone-with-periods;
  }  
}

module example-sch-usage-8 {
  yang-version 1.1;
  namespace "http://example.com/example-sch-usage-8";
  prefix "ex-schu-8";

  container icalendar-recurrence {
    uses schedule:icalendar-recurrence;
  }
}
]]></artwork>
      <t>For each example, only the message body is provided with
   JSON used for encoding per the guidance in <xref target="RFC7951"/>.</t>
      <section anchor="the-generic-schedule-params-grouping">
        <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
08:00 AM, January 1, 2025 and end no later than 8:00 PM, January 31, 2025 (Beijing time).
Schedule requests that fail to meet the requirements are ignored by the system as indicates by
"discard-action".</t>
        <figure anchor="ex-0">
          <name>Generic Parameters with 'max-allowed-end' for Schedule Validation</name>
          <artwork><![CDATA[
{
  "example-sch-usage-1:generic-schedule-params": {
    "time-zone-identifier": "China/Beijing",
    "min-allowed-start": "2025-01-01T08:00:00",
    "max-allowed-end": "2025-01-31T20:00:00",
    "discard-action": "ietf-schedule:silently-discard"
  }
}
]]></artwork>
        </figure>
        <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 start no earlier than
08:00 AM, January 1, 2025 (Paris time). Schedule requests that fail to meet the
requirements are discarded with warning messages. The 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>
        <figure anchor="ex-00">
          <name>Generic Parameters with 'validity' for Schedule Validation</name>
          <artwork><![CDATA[
{
  "example-sch-usage-1:generic-schedule-params": {
    "time-zone-identifier": "France/Paris",
    "validity": "2025-01-31T20:00:00",
    "min-allowed-start": "2025-01-01T08:00:00",
    "discard-action": "ietf-schedule:warning"
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-period-of-time-grouping">
        <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
   on December 31, 2027.</t>
        <figure anchor="ex-1">
          <name>Simple Start/End Schedule</name>
          <artwork><![CDATA[
{
  "example-sch-usage-2:period-of-time": {
    "period-start": "2025-01-01T08:00:00Z",
    "period-end": "2027-12-31T18:00:00Z"
  }
}
]]></artwork>
        </figure>
        <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>
        <figure anchor="ex-2">
          <name>Simple Schedule with Duration</name>
          <artwork><![CDATA[
{
  "example-sch-usage-2:period-of-time": {
    "period-start": "2025-01-01T08:00:00Z",
    "duration": "P15DT05:20:00"
  }
}
]]></artwork>
        </figure>
        <t>An example of a period that starts at 2:00 A.M. in Los Angeles on November 19,
   2025 and lasts 20 weeks is depicted in <xref target="ex-3"/>.</t>
        <figure anchor="ex-3">
          <name>Simple Schedule with Time Zone Indication</name>
          <artwork><![CDATA[
{
  "example-sch-usage-2:period-of-time": {
    "period-start": "2025-11-19T02:00:00",
    "time-zone-identifier": "America/Los_Angeles",
    "duration": "P20W"
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-basic-grouping">
        <name>The "recurrence-basic" Grouping</name>
        <t><xref target="ex-6"/> indicates a recurrence of every 2 days which starts immediately and repeats forever:</t>
        <figure anchor="ex-4">
          <name>Simple Schedule with Recurrence</name>
          <artwork><![CDATA[
{
  "example-sch-usage-3:recurrence-basic": {
    "recurrence-description": "forever recurrence rule",
    "frequency": "ietf-schedule:daily",
    "interval": 2
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-utc-grouping">
        <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
   December 1 to December 31, 2025 in UTC:</t>
        <figure anchor="ex-5">
          <name>Simple Schedule with Recurrence in UTC</name>
          <artwork><![CDATA[
{
  "example-sch-usage-4:recurrence-utc": {
    "recurrence-first": {
      "start-time-utc": "2025-12-01T08:00:00Z",
      "duration": 3600
    },
    "frequency": "ietf-schedule:daily",
    "interval": 1,
    "utc-until": "2025-12-31T23:59:59Z"
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-with-time-zone-grouping">
        <name>The "recurrence-with-time-zone" Grouping</name>
        <t><xref target="ex-6"/> indicates a recurrence of every 2 hours for 10 occurrences, lasting
   10 minutes, and starting at 3 p.m. on December 1, 2025 in New York:</t>
        <figure anchor="ex-6">
          <name>Simple Schedule with Recurrence with Time Zone Indication</name>
          <artwork><![CDATA[
{
  "example-sch-usage-5:recurrence-with-time-zone": {
    "recurrence-first": {
      "start-time": "2025-12-01T15:00:00",
      "duration": "PT00:10:00",
      "time-zone-identifier": "America/New_York"
    },
    "frequency": "ietf-schedule:hourly",
    "interval": 2,
    "count": 10
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-utc-with-periods-grouping">
        <name>The "recurrence-utc-with-periods" Grouping</name>
        <t><xref target="ex-7"/> indicates a recurrence that occurs every two days starting at 9:00 AM
   and 3:00 PM for a duration of 30 minutes and 40 minutes respectively,
   from 2025-06-01 to 2025-06-30 in UTC:</t>
        <figure anchor="ex-7">
          <name>Example of Recurrence With Date Times</name>
          <artwork><![CDATA[
{
  "example-sch-usage-6:recurrence-utc-with-periods": {
    "recurrence-first": {
      "start-time-utc": "2025-06-01T09:00:00Z"
    },
    "frequency": "ietf-schedule:daily",
    "interval": 2,
    "utc-until": "2025-06-30T23:59:59Z",
    "period-timeticks": [
      {
        "period-start": "3240000",
        "period-end": "3420000"
      },
      {
        "period-start": "5400000",
        "period-end": "5640000"
      }
    ]
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-recurrence-time-zone-with-periods-grouping">
        <name>The "recurrence-time-zone-with-periods" Grouping</name>
        <t><xref target="ex-8"/> indicates a recurrence that occurs every
   30 minutes and last for 15 minutes from 9:00 AM to 5:00 PM, and extra two occurrences
   at 6:00 PM and 6:30 PM with each lasting for 20 minutes on 2025-12-01 (New York):</t>
        <figure anchor="ex-8">
          <name>Example of Advanced Recurrence Schedule</name>
          <artwork><![CDATA[
{
  "example-sch-usage-7:recurrence-time-zone-with-periods": {
    "recurrence-first": {
      "start-time": "2025-12-01T09:00:00",
      "duration": "PT00:15:00",
      "time-zone-identifier": "America/New_York"
    },
    "frequency": "ietf-schedule:minutely",
    "interval": 30,
    "until": "2025-12-01T17:00:00Z",
    "period": [
      {
        "period-start": "2025-12-01T18:00:00",
        "duration": "PT00:20:00"
      },
      {
        "period-start": "2025-12-01T18:30:00",
        "duration": "PT00:20:00"
      }
    ]
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-icalendar-recurrence-grouping">
        <name>The "icalendar-recurrence" Grouping</name>
        <t><xref target="ex-9"/> indicates 10 occurrences that occur at
   8:00 AM (EST), every last Saturday of the month starting in January 2024:</t>
        <figure anchor="ex-9">
          <name>Simple iCalendar Recurrence</name>
          <artwork><![CDATA[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "2024-01-27T08:00:00",
      "time-zone-identifier": "America/New_York"
    },
    "frequency": "ietf-schedule:monthly",
    "count": 10,
    "byday": [
      {
        "direction": [
          -1
        ],
        "weekday": "saturday"
      }
    ]
  }
}
]]></artwork>
        </figure>
        <t><xref target="ex-10"/> is an example of a recurrence that occurs on the last
   workday of the month until December 25, 2025, from January 1, 2025:</t>
        <figure anchor="ex-10">
          <name>Example of Advanced iCalendar Recurrence</name>
          <artwork><![CDATA[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "2025-01-01"
    },
    "frequency": "ietf-schedule:monthly",
    "until": "2025-12-25",
    "byday": [
      {
        "weekday": "monday"
      },
      {
        "weekday": "tuesday"
      },
      {
        "weekday": "wednesday"
      },
      {
        "weekday": "thursday"
      },
      {
        "weekday": "friday"
      }
    ],
    "bysetpos": [
      -1
    ]
  }
}
]]></artwork>
        </figure>
        <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 AM
   being excluded on 2025-12-01:</t>
        <figure anchor="ex-11">
          <name>Example of Advanced iCalendar Recurrence with Exceptions</name>
          <artwork><![CDATA[
{
  "example-sch-usage-8:icalendar-recurrence": {
    "recurrence-first": {
      "start-time": "2025-12-01T09:00:00Z"
    },
    "until": "2025-12-01T16:40:00Z",
    "frequency": "ietf-schedule:minutely",
    "byminute": [
      0,
      20,
      40
    ],
    "byhour": [
      9,
      10,
      11,
      12,
      13,
      14,
      15,
      16
    ],
    "exception-dates": [
      "2025-12-01T10:20:00Z"
    ]
  }
}
]]></artwork>
        </figure>
      </section>
      <section anchor="the-schedule-status-grouping">
        <name>The "schedule-status" Grouping</name>
        <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>
        <figure anchor="ex-12">
          <name>Example of a Schedule Status</name>
          <artwork><![CDATA[
{
  "example-sch-usage-1:schedule-status": {
    "state": "ietf-schedule:enabled",
    "version": 1,
    "schedule-type": "ietf-schedule:recurrence",
    "counter": 9,
    "last-occurrence": [
      "2025-12-01T12:00:00Z"
    ],
    "upcoming-occurrence": [
      "2025-12-01T12:20:00Z"
    ]
  }
}
]]></artwork>
        </figure>
        <t>At the time of 12:15 PM, 2025-12-01 (UTC), the recurring event occurred at
  (note that occurrence at 10:20 AM is excluded):
  9:00, 9:20, 9:40, 10:00, 10:40, 11:00, 11:20, 11:40, 12:00.
  The last occurrence was at 12:00, the upcoming one is at 12:20.</t>
      </section>
    </section>
    <section anchor="sec-ext">
      <name>Examples of Using/Extending the "ietf-schedule" Module</name>
      <t>This non-normative section shows two examples for how the "ietf-schedule" module
   can be used or extended for scheduled events or attributes based on date and time.</t>
      <section anchor="features">
        <name>Example: Schedule Tasks to Execute Based on a Recurrence Rule</name>
        <t>Scheduled tasks can be used to execute specific actions based on certain recurrence rules (e.g.,
   every Friday at 8:00 AM). The following example module which "uses" the "icalendar-recurrence"
   grouping from "ietf-schedule" module shows how a scheduled task could be defined
   with different features used for options.</t>
        <artwork><![CDATA[
module example-scheduled-backup {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-backup";
  prefix "ex-scback";

  import ietf-inet-types {
    prefix "inet";
  }

  import ietf-schedule {
    prefix "schedule";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

  description
    "Example of a module defining an scheduled based backup
     operation.";

  revision "2023-01-19" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling.";
    }

  container scheduled-backup-tasks {
    description
      "A container for backing up all current running configuration
       on the device.";
    list tasks {
      key "task-id";
      description
        "The list of backing up tasks on this device.";
      leaf task-id {
        type string;
        description
          "The task identifier that uniquely identifies a scheduled 
           backup task.";
      }
      choice local-or-remote {
        description
          "Specifies whether the configuration to be backed up is
           local or remote.";
        case local {
          description
            "Configuration parameters for backing up of local
             devices.";
          leaf local {
            type empty;
            description
              "The parameter specifies the configuration to be
               backed up is on the local device.";
          }
        }
        case remote {
          description
            "Configuration parameters for backing up of remote
             devices.";
          leaf remote {
            type inet:domain-name;
            description
              "The parameter specifies the remote device domain
               name.";
          }
        }
      }

      container basic-recurrence-schedules {
        if-feature schedule:basic-recurrence;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:basic-recurrence feaure is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }            
        uses schedule:recurrence-basic;
       }

      container icalendar-recurrence-schedules {
        if-feature schedule:icalendar-recurrence;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:icalendar-recurrence feaure is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }           
        uses schedule:icalendar-recurrence;
      }      
    }
  
    list schedule-set {
      key "schedule-id";
      description
        "The list of schedule status for the backup tasks.";
      uses schedule:schedule-status;
    }
  }
}
]]></artwork>
      </section>
      <section anchor="augments">
        <name>Example: Schedule Network Properties to Change Based on Date and Time</name>
        <t>Network properties may change over a specific period of time or based on a
   recurrence rule, e.g., <xref target="RFC9657"/>.
   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>
        <artwork><![CDATA[
module example-scheduled-link-bandwidth {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-link-bandwidth";
  prefix "ex-scattr";

  import ietf-network {
    prefix "nw";
    reference
      "RFC 8345: A YANG Data Model for Network Topologies";
  }

  import ietf-schedule {
    prefix "schedule";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

  description
    "Example of a module defining a scheduled link bandwidth.";

  revision "2023-01-19" {
    description
      "Initial Version.";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling.";
    }

  grouping link-bandwidth-grouping {
    description
      "Grouping of the link bandwidth definition.";
    leaf scheduled-bandwidth {
      type uint64;
      units "Kbps";
      description
        "Bandwidth values, expressed in kilobits per second.";
    }
  }

  container link-attributes {
    description
      "Definition of link attributes.";
    list link {
      key "source-node destination-node";
      description
        "Definition of link attributes.";
      leaf source-node {
        type nw:node-id;
        description
          "Indicates the source node identifier.";
      }
      leaf destination-node {
        type nw:node-id;
        description
          "Indicates the source node identifier.";
      }

      leaf default-bandwidth {
        type uint64;
        units "Kbps";
        description
          "Default bandwidth values when unspecified.";
      }

      choice time-variant-type {
        description
          "Controls the schedule type.";
        case period {
          uses schedule:period-of-time;
        }
        case recurrence {
          uses schedule:recurrence-utc-with-periods {
            augment "period-timeticks" {
              description
                "Specifies the attributes inside each 
                 period-timeticks entry.";
              uses link-bandwidth-grouping;
            }
          }
        }
      }
    }
  }
}
]]></artwork>
        <t><xref target="ex-13"/> shows a configuration example 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
  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
  value that's not covered by the period above is 1000 Kbps by default.</t>
        <figure anchor="ex-13">
          <name>Example of Scheduled Link's Bandwidth</name>
          <artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<link-attributes
  xmlns="http://example.com/example-scheduled-link-bandwidth"
  xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule">
  <link>
    <source-node>ne1</source-node>
    <destination-node>ne2</destination-node>
    <default-bandwidth>1000</default-bandwidth>
    <recurrence-first>
      <utc-start-time>2025-12-01T01:00:00Z</utc-start-time>
    </recurrence-first>
    <frequency>schedule:daily</frequency>
    <utc-until>2025-12-31T23:59:59Z</utc-until>
    <period-timeticks>
      <period-start>360000</period-start>
      <period-end>2160000</period-end>
      <scheduled-bandwidth>500</scheduled-bandwidth>
    </period-timeticks>
    <period-timeticks>
      <period-start>7920000</period-start>
      <period-end>8280000</period-end>
      <scheduled-bandwidth>800</scheduled-bandwidth>
    </period-timeticks>
  </link>
</link-attributes>
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="ex-framework">
      <name>Examples of Using "ietf-schedule" Module for Scheduled Use of Resources Framework</name>
      <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"
   grouping defined in the "ietf-schedule" module to implement scheduled use of
   resources.</t>
      <t>The following example module shows how a scheduled link capacity reservation
   could be defined.</t>
      <artwork><![CDATA[
module example-sch-capacity-res {
  yang-version 1.1;
  namespace "http://example.com/example-sch-capacity-res";
  prefix "ex-schecaparev";

  import ietf-network-topology {
    prefix "nt";
  }

  import ietf-schedule {
    prefix "schedule";
  }

  container link-capability-reservations {
    list scheduled-link-capacity {
      key "schedule-id";
      leaf schedule-id {
        type string;
      }
      leaf link-id {
        type nt:link-id;
      }
      leaf reserved-capability {
        type uint64;
        units "Mbps";
      }
      uses schedule:period-of-time;
    }
  }
}
]]></artwork>
      <t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the reference architecture for scheduled use
   of resources, the service requester sends a request to a Path Computation Element (PCE) and includes the
   parameters of the Label Switched Path (LSP) that the requester wishes to supply, the configuration
   example to provide the scheduled resource is shown in <xref target="ex-14"/>.</t>
      <figure anchor="ex-14">
        <name>Example of Scheduled Link's Bandwidth Reservation</name>
        <artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<link-capability-reservations
  xmlns="http://example.com/example-sch-capacity-res"
  xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule">
   <scheduled-link-capacity>
      <schedule-id>1</schedule-id>
      <link-id>1-2-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-03-10T08:00:00Z</period-start>
      <period-end>2025-03-10T09:00:00Z</period-end>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>2</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>400</reserved-capability>
      <period-start>2025-04-01T00:00:00Z</period-start>
      <duration>PT09:00:00</duration>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>3</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-04-01T09:00:00Z</period-start>
      <period-end>2025-04-01T23:59:59Z</period-end>
   </scheduled-link-capacity>
</link-capability-reservations>
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work is derived from the <xref target="I-D.ietf-opsawg-ucl-acl"/>. There is a desire
   from the OPSAWG to see this model be separately defined for wide use in scheduling context.</t>
      <t>Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve Baillargeon, Dhruv Dhody, and Robert Wilton
   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"/>
   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>Thanks to Reshad Rahman for the great YANGDOCTORS review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
