<?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.23 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-04" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.26.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-04"/>
    <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="February" day="08"/>
    <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-01-27 --&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@2024-04-16.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-01-27 {
    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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
jsJ+0Il+R+rfQUN38MB36vwq1M1PsNs11UI+oMf8YZrV7+6tr/Gn29d//GyR
lMoBACCUgvnl9PTQ02Z02gnPllG00Sf/f92P1MCRJZZa5dvFMNgaQXA2Pa2s
ouOR3Y/Eoj33yZekEnGH3HWrazxrsNtevunWLvIrz0VMx2pczZNy9dbXySi7
TftqAru5evNxkdapT6+dXylbyxeCDtFnf2sRw1tKrf3b6MsDskObFISdgx2S
9eugzG50TFyfFf5o69l9ZOmiaHPMafKeSseOXGXgyxK0K/Q9ZTgoZPdg2baQ
vYUgVwldrJ3eUnQz0L/tbHnkgeaZ1eWhatjXXfp9/dtA/7atf9vRv+3q3/ac
SbwH0tZsztpFKguaguTZvy15MuGc6DfUtoD2wqSCnvyBQ9Hu20c7vzEHYwE0
5iDIi1EVnAvf9Qeg3ZHWa2unSOBLyLLvh3QZiqQA+DpxyAs8fSvDF/SW78Z5
rVXvbxG/LUpJOguJtL2HmE3bOnCoX9FE4Clj8wBL6WIQoIvY+ApOGWnEqg7N
tizeEzudro4mV/xnxOoYJsazeRtTg8WP6D5BOBHsckQsrgP/H9D/d+D/5H+h
f+ivPv/VpxbwD32IOMRQ3rNJvXjmdcz3QgPqSDGcglvKBZeqbwdbPT+g9EcM
sd88eY8PPFR4tf9+RAJzP3yFAZ5gqVnBpVRiimJBMfGqCjWVa12w5nSYKZpn
mIo7ND7Hl+CYEg5OcRWUX0fenWBvc+okqD93ig/zs6c880rF0lmXBR8YcjiL
y3d0k3zyHnYXOnynusc263jD6x4nqN4lJS/8VANS0Sg20BUumUfUaYb4wtKC
cJgU8obFcZyX8lYK52D5+JSkOm6e6PwbXlCtVgklRIfvBNoYC9MWVIeEGc6g
3yOS2G14MsQbifsWW/jHZeOb7umInkVwCDBpm5RpTqIDqkihzcTJ5MyCe43R
vTxDF0Of55efH13kDFcPMcLP6yFYsJqqy2+j3CAs/MIEpt0pmi0vLmL1vIa5
4ImKPXqWDXtWvJM8jmmfcoVGJAJrkdzQf+Hp8j772RfnxrMrCRMxMmKY4+pX
ZQJFkVylhHTkxNuomfcfqjSdgUeuz7DGQzyN/sFbtTCBHwa6H0SH/BTgGF94
8WM86+od32noF6CtUPiz2tYun8JGwA6tvjgB9kJ0AH3hszuVQaSYZ4Slof1m
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

-->

</rfc>
