<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.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-08"/>
    <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="July" day="04"/>
    <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 common types and groupings that are meant to be used
   for scheduling purposes such as event, policy, services, or resources based on
   date and time. For the sake of better modularity, the YANG 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-05-30 --&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 (iCalender 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 that has either the duration specified as 0 or the end time 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 (1) a start and end or (2) a start and positive duration of time. If neither an end nor a duration is indicated, the period is considered to last forever.</t>
              </li>
              <li>
                <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", "schedule-status-with-time-zone", and "schedule-status-with-name" (<xref target="sec-schedule-status"/>)</t>
          </li>
        </ul>
        <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[
  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
]]></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 independent of when it ends and takes precedence over
   similar attributes that are provided at the schedule instance itself. A requested
   schedule may still be accepted but any occurrences that start later than the configured value will not be executed.</t>
          <t>The "max/min-allowed-start" parameters specify the maximum/minimum scheduled
   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 is 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.
   If the duration ("duration") value is 0 or the end time ("period-end") is the same as the start time ("period-start"), the period
   is considered as a one-shot schedule. If no start date and time ("period-start")
   is specified, the period is considered to start immediately.</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[
  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
]]></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[
  grouping recurrence-basic:
    +-- recurrence-description?   string
    +-- frequency?                identityref
    +-- interval?                 uint32
]]></artwork>
          </figure>
          <t>The frequency parameter ("frequency") identifies the type of a 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.</t>
          <t>Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, neither a "default"
  nor a "mandatory" substatement is defined here for both "frequency" and "interval"
  parameters because there are cases (e.g., profiling) where using these statements is problematic.
  YANG modules using this grouping <bcp14>SHOULD</bcp14> refine these two nodes with either a
  "mandatory" or a "default" statement, if they always need to be configured or have default values.
  This recommendation <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</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[
  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
]]></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., through additional
   augmented parameters), the "duration" also applies to subsequent recurrence
   instances. When unspecified, each occurrence is considered as
   immediate completion (e.g., execute an immediate command that is considered
   to complete quickly) or hard to compute an exact duration (e.g., run a data
   analysis script whose execution time may depend on the data volume and
   computation resource availability). The behavior to follow when a task takes
   more time than specified by the "duration" is out of scope. Such considerations
   belong to task management, not schedule management.</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[
  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
]]></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., through additional
   augmented parameters), the "duration" also applies to subsequent recurrence instances. When unspecified, each occurrence is considered as
   immediate completion (e.g., execute an immediate command that is considered
   to complete quickly) or hard to compute an exact duration (e.g., run a data
   analysis script whose execution time may depend on the data volume and
   computation resource availability).</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[
  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
]]></artwork>
          </figure>
          <t>The recurrence instances are specified by the union of occurrences defined
  by both the recurrence rule and "period-timeticks" list. This list uses
  "yang:timeticks" type defined in <xref target="RFC6991"/>. 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[
  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
]]></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[
  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
]]></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. Note that per <xref section="4.13" sectionFormat="of" target="I-D.ietf-netmod-rfc8407bis"/>, neither a "default"
   nor a "mandatory" substatement is defined here because there are cases (e.g., profiling)
   where using these statements is problematic.
   YANG modules using this grouping <bcp14>SHOULD</bcp14> refine the "workweek-start" node with either a
   "mandatory" or a "default" statement, if it always needs to be configured or has a default value.
   This <bcp14>MAY</bcp14> be ignored in cases such as when this grouping is used by another grouping.</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", "schedule-status-with-time-zone", and "schedule-status-with-name" Groupings</name>
          <t>The "schedule-status", "schedule-status-with-time-zone", and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters
   for scheduling management/status exposure. The "schedule-status-with-time-zone" grouping has the same
   structure as "schedule-status" but with an additional parameter to identify a time zone. Similarly, the "schedule-status-with-name" grouping has the same structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-name". These
   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[
  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-time-zone:
    +--ro time-zone-identifier?  sys:timezone-name
    +-- schedule-name?            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
  grouping schedule-status-with-name:
    +-- schedule-name?            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-name" 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 available when the "schedule-type" is "recurrence".</t>
          <t>When no time zone is included, "local-time" reports the actual local time as seen by the entity that
   host a schedule. This parameter can be used by a controller to infer the offset to UTC. This use
   is similar to the use of "schedLocalTime" in <xref target="RFC3231"/>.</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 prioritized.</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 specific 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 maximum 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-name</td>
          </tr>
          <tr>
            <td align="left">schedOwner</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedDescr</td>
            <td align="left">description</td>
          </tr>
          <tr>
            <td align="left">schedInterval</td>
            <td align="left">interval</td>
          </tr>
          <tr>
            <td align="left">schedWeekDay</td>
            <td align="left">weekday</td>
          </tr>
          <tr>
            <td align="left">schedMonth</td>
            <td align="left">byyearmonth</td>
          </tr>
          <tr>
            <td align="left">schedDay</td>
            <td align="left">bymonthday</td>
          </tr>
          <tr>
            <td align="left">schedHour</td>
            <td align="left">byhour</td>
          </tr>
          <tr>
            <td align="left">schedMinute</td>
            <td align="left">byminute</td>
          </tr>
          <tr>
            <td align="left">schedContextName</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedAdminStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedOperStatus</td>
            <td align="left">state</td>
          </tr>
          <tr>
            <td align="left">schedFailures</td>
            <td align="left">failure-counter</td>
          </tr>
          <tr>
            <td align="left">schedLastFailure</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedLastFailed</td>
            <td align="left">last-failed-occurrence</td>
          </tr>
          <tr>
            <td align="left">schedStorageType</td>
            <td align="left">Not Supported</td>
          </tr>
          <tr>
            <td align="left">schedVariable</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedValue</td>
            <td align="left">Not applicable</td>
          </tr>
          <tr>
            <td align="left">schedTriggers</td>
            <td align="left">counter/failure-counter</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="sec-schedule">
      <name>The "ietf-schedule" YANG Module</name>
      <t>This module imports types defined in <xref target="RFC6991"/> and <xref target="RFC7317"/>.</t>
      <sourcecode markers="true" name="ietf-schedule@2025-05-30.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).

     All revisions of IETF and IANA published modules can be found
     at the YANG Parameters registry group
     (https://www.iana.org/assignments/yang-parameters).

     This version of this YANG module is part of RFC XXXX; see
     the RFC itself for full legal notices.

     The 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-05-30 {
    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 with 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. If
       neither an end nor a duration is indicated, the period is
       considered to last forever.";
  }
  
  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;
      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.";
      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;
      }
      description
        "Specifies the frequency type of the recurrence rule.";
    }
    leaf interval {
      type uint32 {
        range "1..max";
      }
      must '../frequency' {
        error-message
          "Frequency must be provided.";
      }
      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.";
    }
  }

  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 {
            range "1..max";
          }
          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 {
            range "1..max";        
          }
          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.
           
           Given that the value is in timeticks format
           (i.e., 1/100 of a second), the values in the must
           statement translate to: 100 = 1s (secondly), 
           6000 = 60 s = 1 min (minutely), and so on for all
           instances in the must statement invariant.";
      }
      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.";
    }
    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-time-zone {
    description
      "This grouping defines common properties of scheduling
       status, including timezone";
    leaf time-zone-identifier {
      type sys:timezone-name;
      config false;
      description
        "Indicates the identifier for the time zone in a time
         zone database.";
    } 
    uses schedule-status;
  }

  grouping schedule-status-with-name {
    description
      "This grouping defines common properties of scheduling
       status, including a schedule name.";
    leaf schedule-name {
      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 YANG-based management protocols (1) have to use
   a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
   and (2) 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 difficult  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="20" month="March" year="2025"/>
            <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-07"/>
        </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="22" month="April" year="2025"/>
            <abstract>
              <t>   The YANG model in this document includes three modules, and can be
   used to manage network resources and topologies with scheduled
   attributes, such as predictable link loss and link connectivity as a
   function of time.  The intent is to have this information be utilized
   by Time-Variant Routing systems.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-tvr-schedule-yang-04"/>
        </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="5" month="June" year="2025"/>
            <abstract>
              <t>   This document provides guidelines for authors and reviewers of
   specifications containing YANG data models, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

   Also, this document updates RFC 8126 by providing additional
   guidelines for writing the IANA considerations for RFCs that specify
   IANA-maintained modules.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-28"/>
        </reference>
        <reference anchor="RFC3339">
          <front>
            <title>Date and Time on the Internet: Timestamps</title>
            <author fullname="G. Klyne" initials="G." surname="Klyne"/>
            <author fullname="C. Newman" initials="C." surname="Newman"/>
            <date month="July" year="2002"/>
            <abstract>
              <t>This document defines a date and time format for use in 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 1626?>

<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 and make examples verifiable:</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 {
      refine frequency {
        mandatory true;
      }
      refine interval {
        default 1;
      }
    }
  }
}

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 {
      refine workweek-start {
        default monday;
      }
    }
  }
}
]]></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 indicated 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 (Beijing time), schedule requests that fail to meet the
requirements are ignored by the system as indicated by "discard-action". The
requested schedule may end after 8:00 PM, January 31, 2025, but any occurrences that are generated
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": "China/Beijing",
    "validity": "2025-01-31T20:00:00",
    "min-allowed-start": "2025-01-01T08:00:00",
    "discard-action": "ietf-schedule:silently-discard"
  }
}
]]></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 a 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 feature is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }            
        uses schedule:recurrence-basic {
          refine frequency {
            mandatory true;
          }
          refine interval {
            default 1;
          }
        }
      }

      container icalendar-recurrence-schedules {
        if-feature schedule:icalendar-recurrence;
        description
          "Basic recurrence schedule specification, only applies when
           schedule:icalendar-recurrence feature is supported.";
        leaf schedule-id {
          type string;
          description
            "The schedule identifier for this recurrence rule.";
        }           
        uses schedule:icalendar-recurrence {
          refine workweek-start {
            default monday;
          }
        }
      }      
    }
  
    list schedule-set {
      key "schedule-name";
      description
        "The list of schedule status for the backup tasks.";
      uses schedule:schedule-status-with-name;
    }
  }
}
]]></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
          "Bandwidth value used for perdiods that don't match
           a schedule.";
      }

      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 is not covered by the period above is 1000 Kbps.</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, Robert Wilton, and Italo Busi
   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 YANG Doctors review, Mahesh Jethanandani for the AD review, and Per Andersson for the OPSDIR review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
6WWZm76BWI+fv5WGg87/A8d25keoSwEA

-->

</rfc>
