<?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.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-netmod-schedule-yang-06" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-schedule-yang-06"/>
    <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="May" day="30"/>
    <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 (iclander like) are defined.
   To allow for different options, two features are defined in the data model:</t>
        <ul spacing="normal">
          <li>
            <t>"basic-recurrence"</t>
          </li>
          <li>
            <t>"icalendar-recurrence"</t>
          </li>
        </ul>
        <t>Refer to Sections <xref format="counter" target="sec-aug"/> and <xref format="counter" target="features"/> for the use of these features.</t>
      </section>
      <section anchor="sec-types">
        <name>Types and Identities</name>
        <t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following identities:</t>
        <ul spacing="normal">
          <li>
            <t>"schedule-type": Indicates the type of a schedule. The following types are defined so far:
            </t>
            <ul spacing="normal">
              <li>
                <t>one-shot: The schedule will trigger an action 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" 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 only not have its occurrences that starts
   later than the configured value to 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 <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).</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. 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" and "schedule-status-with-name" Groupings</name>
          <t>The "schedule-status" and "schedule-status-with-name" groupings (<xref target="sche-status-tree"/>) define common parameters
   for scheduling management/status exposure. The "schedule-status-with-name" grouping has the same
   structure as "schedule-status" but with an additional parameter to identify a schedule "schedule-name". Both
   structures are defined in the module to allow for better modularity and flexibility.</t>
          <figure anchor="sche-status-tree">
            <name>Schedule Status with and without Name Groupings Tree Structure</name>
            <artwork><![CDATA[
  grouping schedule-status:
    +-- state?                    identityref
    +-- version?                  uint16
    +-- schedule-type?            identityref
    +--ro local-time?               yang:date-and-time
    +--ro last-update?              yang:date-and-time
    +--ro counter?                  yang:counter32
    +--ro last-occurrence?          yang:date-and-time
    +--ro upcoming-occurrence?      yang:date-and-time
    +--ro last-failed-occurrence?   yang:date-and-time
    +--ro failure-counter?          yang:counter32
  grouping schedule-status-with-name:
    +-- schedule-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 avaliable when the "schedule-type" is "recurrence".</t>
          <t>"local-time" reports the actual local time as seen by the entity that
   host a schedule. This paramter can be used by a controller to infer the offset to UTC.</t>
          <t>"last-failed-occurrence" and "failure-counter" report the last failure that occurred and
   the count of failures for this schedule. Unless new parameters/operations are defined to allow the count of failures to be reset,
   "failure-counter" is reset by default only when the schedule starts.</t>
          <t>The current groupings capture common parameters that are applicable
   to typical scheduling contexts known so far. Future modules can define other
   useful parameters as needed. For example, in a scheduling context with multiple
   system sources to feed the schedules, the "source" and "precedence" parameters
   may be needed to reflect how schedules from different sources should be prioritised.</t>
        </section>
      </section>
      <section anchor="sec-aug">
        <name>Features Use and Augmentations</name>
        <t><xref target="features"/> provides an example about how the features defined in <xref target="sec-features"/> can be used. Implementations
   may support a basic recurrence rule or an advanced one as needed, by declaring
   different features. Whether only one or both features are supported is implementation
   specific and depend on specific scheduling context.</t>
        <t>The common schedule groupings (<xref target="sec-grp"/>) can also be augmented to support specific needs. As an example,
   <xref target="augments"/> demonstrates how additional parameters can be added to comply with specifc schedule needs.</t>
      </section>
    </section>
    <section anchor="some-usage-restrictions">
      <name>Some Usage Restrictions</name>
      <t>There are some restrictions that need to be followed when using groupings defined
   in the "ietf-schedule" YANG module (<xref target="sec-grp"/>):</t>
      <ul spacing="normal">
        <li>
          <t>The instant in time represented by "period-start" <bcp14>MUST</bcp14> be before the
"period-end" for "period-of-time" grouping (<xref target="sec-period"/>).</t>
        </li>
        <li>
          <t>The combination of the day, month, and year represented for date and time
values <bcp14>MUST</bcp14> be valid. See <xref section="5.7" sectionFormat="of" target="RFC3339"/> for the maxinum day
number based on the month and year.</t>
        </li>
        <li>
          <t>The second for date and time values <bcp14>MUST</bcp14> have the value "60" at the end of months in which a leap
second occurs.</t>
        </li>
        <li>
          <t>Schedules received with a starting time in the past with respect to
current time <bcp14>SHOULD</bcp14> be ignored. When a local policy is provided, an implementation <bcp14>MAY</bcp14> omit the past occurrences and
start immediately (e.g., for a period-based schedule) or starts from the
date and time when the recurrence pattern is first satisfied from the current time (e.g., for a recurrence-based schedule).</t>
        </li>
      </ul>
    </section>
    <section anchor="sec-mib">
      <name>Relationship to the DISMAN-SCHEDULE-MIB</name>
      <t><xref target="RFC3231"/> specifies a Management Information Base (MIB) used to
schedule management operations periodically or at specified dates and times.</t>
      <t>Although no data nodes are defined in this document, <xref target="mapping"/> lists
how the main objects in the DISMAN-SCHEDULE-MIB can be mapped to YANG
parameters.</t>
      <table anchor="mapping">
        <name>YANG/MIB Mapping</name>
        <thead>
          <tr>
            <th align="left">MIB Object</th>
            <th align="left">YANG</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">schedLocalTime</td>
            <td align="left">local-time</td>
          </tr>
          <tr>
            <td align="left">schedType</td>
            <td align="left">schedule-type</td>
          </tr>
          <tr>
            <td align="left">schedName</td>
            <td align="left">schedule-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).

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

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

  revision 2025-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";
      }
      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.";
      }
      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-name {
    description
      "This grouping defines common properties of scheduling
       status.";
    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 protocols have to use
   a secure transport layer (e.g., SSH <xref target="RFC4252"/>, TLS <xref target="RFC8446"/>, and QUIC <xref target="RFC9000"/>)
   and have to use mutual authentication.</t>
      <t>The Network Configuration Access Control Model (NACM) <xref target="RFC8341"/>
   provides the means to restrict access for particular NETCONF or
   RESTCONF users to a preconfigured subset of all available NETCONF or
   RESTCONF protocol operations and content.</t>
      <t>The "ietf-schedule" module defines a set of types and
   groupings.  These nodes are intended to be reused by other YANG
   modules.  The module by itself does not expose any data nodes that
   are writable, data nodes that contain read-only state, or RPCs.  As
   such, there are no additional security issues related to the "ietf-schedule"
   module that need to be considered.</t>
      <t>Modules that use the groupings that are defined in this document
   should identify the corresponding security considerations, e.g.,:</t>
      <ul spacing="normal">
        <li>
          <t>Scheduling depends on reliable and accurate time synchronization. Inaccurate date
and time setting can lead to scheduling events being triggered at incorrect
intervals, potentially causing system failures or security vulnerabilities.</t>
        </li>
        <li>
          <t>Recurring events may conceal abnormal behavior or security threats, which
may be drowned out by normal events, especially when they are triggered frequently.</t>
        </li>
        <li>
          <t>The absence of detailed logs and audit records of each occurrence trigger time
and action results, and so on, may make security incidents difficient to trace.</t>
        </li>
        <li>
          <t>Care must be taken when defining recurrences occurring very often and
frequent that can be an additional source of attacks by keeping the system
permanently busy with the management of scheduling.</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="the-ietf-xml-registry">
        <name>The "IETF XML" Registry</name>
        <t>This document registers the following URI in the "IETF XML Registry" <xref target="RFC3688"/>.</t>
        <artwork><![CDATA[
        URI: urn:ietf:params:xml:ns:yang:ietf-schedule
        Registrant Contact: The IESG.
        XML: N/A, the requested URI is an XML namespace.
]]></artwork>
      </section>
      <section anchor="the-yang-module-names-registry">
        <name>The "YANG Module Names" Registry</name>
        <t>This document registers the following YANG module in the "YANG Module Names"
   registry <xref target="RFC6020"/>.</t>
        <artwork><![CDATA[
        name:               ietf-schedule
        namespace:          urn:ietf:params:xml:ns:yang:ietf-schedule
        prefix:             schedule
        maintained by IANA? N
        reference:          RFC XXXX
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3231">
          <front>
            <title>Definitions of Managed Objects for Scheduling Management Operations</title>
            <author fullname="D. Levi" initials="D." surname="Levi"/>
            <author fullname="J. Schoenwaelder" initials="J." surname="Schoenwaelder"/>
            <date month="January" year="2002"/>
            <abstract>
              <t>This memo defines a portion of the Management Information Base (MIB) for use with network management protocols in the Internet community. In particular, it describes a set of managed objects that are used to schedule management operations periodically or at specified dates and times. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3231"/>
          <seriesInfo name="DOI" value="10.17487/RFC3231"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC7950">
          <front>
            <title>The YANG 1.1 Data Modeling Language</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="August" year="2016"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration data, state data, Remote Procedure Calls, and notifications for network management protocols. This document describes the syntax and semantics of version 1.1 of the YANG language. YANG version 1.1 is a maintenance release of the YANG language, addressing ambiguities and defects in the original specification. There are a small number of backward incompatibilities from YANG version 1. This document also specifies the YANG mappings to the Network Configuration Protocol (NETCONF).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7950"/>
          <seriesInfo name="DOI" value="10.17487/RFC7950"/>
        </reference>
        <reference anchor="RFC5545">
          <front>
            <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
            <author fullname="B. Desruisseaux" initials="B." role="editor" surname="Desruisseaux"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5545"/>
          <seriesInfo name="DOI" value="10.17487/RFC5545"/>
        </reference>
        <reference anchor="RFC7317">
          <front>
            <title>A YANG Data Model for System Management</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="August" year="2014"/>
            <abstract>
              <t>This document defines a YANG data model for the configuration and identification of some common system properties within a device containing a Network Configuration Protocol (NETCONF) server. This document also includes data node definitions for system identification, time-of-day management, user management, DNS resolver configuration, and some protocol operations for system management.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7317"/>
          <seriesInfo name="DOI" value="10.17487/RFC7317"/>
        </reference>
        <reference anchor="RFC6991">
          <front>
            <title>Common YANG Data Types</title>
            <author fullname="J. Schoenwaelder" initials="J." role="editor" surname="Schoenwaelder"/>
            <date month="July" year="2013"/>
            <abstract>
              <t>This document introduces a collection of common data types to be used with the YANG data modeling language. This document obsoletes RFC 6021.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6991"/>
          <seriesInfo name="DOI" value="10.17487/RFC6991"/>
        </reference>
        <reference anchor="RFC8341">
          <front>
            <title>Network Configuration Access Control Model</title>
            <author fullname="A. Bierman" initials="A." surname="Bierman"/>
            <author fullname="M. Bjorklund" initials="M." surname="Bjorklund"/>
            <date month="March" year="2018"/>
            <abstract>
              <t>The standardization of network configuration interfaces for use with the Network Configuration Protocol (NETCONF) or the RESTCONF protocol requires a structured and secure operating environment that promotes human usability and multi-vendor interoperability. There is a need for standard mechanisms to restrict NETCONF or RESTCONF protocol access for particular users to a preconfigured subset of all available NETCONF or RESTCONF protocol operations and content. This document defines such an access control model.</t>
              <t>This document obsoletes RFC 6536.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="91"/>
          <seriesInfo name="RFC" value="8341"/>
          <seriesInfo name="DOI" value="10.17487/RFC8341"/>
        </reference>
        <reference anchor="RFC3688">
          <front>
            <title>The IETF XML Registry</title>
            <author fullname="M. Mealling" initials="M." surname="Mealling"/>
            <date month="January" year="2004"/>
            <abstract>
              <t>This document describes an IANA maintained registry for IETF standards which use Extensible Markup Language (XML) related items such as Namespaces, Document Type Declarations (DTDs), Schemas, and Resource Description Framework (RDF) Schemas.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="81"/>
          <seriesInfo name="RFC" value="3688"/>
          <seriesInfo name="DOI" value="10.17487/RFC3688"/>
        </reference>
        <reference anchor="RFC6020">
          <front>
            <title>YANG - A Data Modeling Language for the Network Configuration Protocol (NETCONF)</title>
            <author fullname="M. Bjorklund" initials="M." role="editor" surname="Bjorklund"/>
            <date month="October" year="2010"/>
            <abstract>
              <t>YANG is a data modeling language used to model configuration and state data manipulated by the Network Configuration Protocol (NETCONF), NETCONF remote procedure calls, and NETCONF notifications. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6020"/>
          <seriesInfo name="DOI" value="10.17487/RFC6020"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-opsawg-ucl-acl">
          <front>
            <title>A YANG Data Model and RADIUS Extension for Policy-based Network Access Control</title>
            <author fullname="Qiufang Ma" initials="Q." surname="Ma">
              <organization>Huawei</organization>
            </author>
            <author fullname="Qin Wu" initials="Q." surname="Wu">
              <organization>Huawei</organization>
            </author>
            <author fullname="Mohamed Boucadair" initials="M." surname="Boucadair">
              <organization>Orange</organization>
            </author>
            <author fullname="Daniel King" initials="D." surname="King">
              <organization>Lancaster University</organization>
            </author>
            <date day="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="May" year="2025"/>
            <abstract>
              <t>   This memo provides guidelines for authors and reviewers of
   specifications containing YANG modules, including IANA-maintained
   modules.  Recommendations and procedures are defined, which are
   intended to increase interoperability and usability of Network
   Configuration Protocol (NETCONF) and RESTCONF Protocol
   implementations that utilize YANG modules.  This document obsoletes
   RFC 8407.

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-netmod-rfc8407bis-25"/>
        </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 1586?>

<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 feaure 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 feaure 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
          "Default bandwidth values when unspecified.";
      }

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

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

  import ietf-schedule {
    prefix "schedule";
  }

  container link-capability-reservations {
    list scheduled-link-capacity {
      key "schedule-id";
      leaf schedule-id {
        type string;
      }
      leaf link-id {
        type nt:link-id;
      }
      leaf reserved-capability {
        type uint64;
        units "Mbps";
      }
      uses schedule:period-of-time;
    }
  }
}
]]></artwork>
      <t><xref section="4" sectionFormat="of" target="RFC8413"/> defines the reference architecture for scheduled use
   of resources, the service requester sends a request to a Path Computation Element (PCE) and includes the
   parameters of the Label Switched Path (LSP) that the requester wishes to supply, the configuration
   example to provide the scheduled resource is shown in <xref target="ex-14"/>.</t>
      <figure anchor="ex-14">
        <name>Example of Scheduled Link's Bandwidth Reservation</name>
        <artwork><![CDATA[
<?xml version="1.0" encoding="utf-8"?>
<link-capability-reservations
  xmlns="http://example.com/example-sch-capacity-res"
  xmlns:schedule="urn:ietf:params:xml:ns:yang:ietf-schedule">
   <scheduled-link-capacity>
      <schedule-id>1</schedule-id>
      <link-id>1-2-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-03-10T08:00:00Z</period-start>
      <period-end>2025-03-10T09:00:00Z</period-end>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>2</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>400</reserved-capability>
      <period-start>2025-04-01T00:00:00Z</period-start>
      <duration>PT09:00:00</duration>
   </scheduled-link-capacity>
   <scheduled-link-capacity>
      <schedule-id>3</schedule-id>
      <link-id>2-1-1</link-id>
      <reserved-capability>500</reserved-capability>
      <period-start>2025-04-01T09:00:00Z</period-start>
      <period-end>2025-04-01T23:59:59Z</period-end>
   </scheduled-link-capacity>
</link-capability-reservations>
]]></artwork>
      </figure>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>This work is derived from the <xref target="I-D.ietf-opsawg-ucl-acl"/>. There is a desire
   from the OPSAWG to see this model be separately defined for wide use in scheduling context.</t>
      <t>Thanks to Adrian Farrel, Wei Pan, Tianran Zhou, Joe Clarke, Steve Baillargeon, Dhruv Dhody, and Robert Wilton
   for their valuable comments and inputs to this work.</t>
      <t>Many thanks to the authors of <xref target="I-D.ietf-tvr-schedule-yang"/>, <xref target="I-D.ietf-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-netmod-eca-policy"/>
   for the constructive discussion during IETF#118.</t>
      <t>Other related efforts were explored in the past, e.g., <xref target="I-D.liu-netmod-yang-schedule"/>.</t>
      <t>Thanks to Reshad Rahman for the great YANGDOCTORS review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
npTZWqUPG3Dua78wuGuv1po9l3aqKwMkqgukLQL+0GnD+jz7dy04VM0J8yGp
FXz+B9qAOmTXtjUdjsTF3Phtdc1X8dJji7LMxymhlNbtf1S2uKJk33L7Wj8o
WvYHO5bVrQppOr65dhFNDlH9kWUT8boOAj3rihLcKdo+7mg/LNcHgnUpziR/
l1fdWs26pVCvTp2pWQUXpLFr9KoutjZ18ie/kQoJbavUq6nGiQRpFuwNYUzS
tn0VvlYt46tdCn4l39Xr96oevMIqqxfwVR0sKJli67oaTw2d8p64aj1oCC2O
W1r3LjvFXDtr2yo63Ys1HXe8FeejspjQoXZL9n7N/vWJl+TxDwCmU8l8W8DE
eb4AMJRR3xosvju5CCoqNPCNcWVXYgiAxNd8vjFMdA9pEVnx5a5vTVV0sLMA
LL6N9I2hohP4BUA5cdj3k9D0ZahvqcEd5KL00UoztsQc339Q3baOq4p7P+zA
plseWOGYtGrnlXO52C8kiRc/KIdhcIdLsfIHhlx324oyq27eQy+X3XXr+KY2
+wNP3eqY14ae8w0wraOoKIywPhAo0r6as2mF2u18XVIBcp9y7La55RRuDM5F
VYa3kByY3gqYllKtqj+pLu/cbdMas5d6PgSlwzaoXv0DQZhJdw8JYJmCdVTN
bvvS6sGw6RgcCAYuPcVC0T1VGVbTbQjIZYW4F1GuriEjB1rSRTDqVQe8nauQ
Kz+y2XhXzf7SpvMpHm/ZQa2qBjlwRymxSSle6firF3H8DhXbtLR6E66ubORZ
Ek+dyA3lnbE8Nso3FHIodd/qoNGFVa+7tv+FBg0l2/FG99PuLATkxZJKhO1l
CHUf9y5YbXpYVLm6Pc+y+f5+9astBSZalna5uRKqmrWL/eado4XoP71z+Wtd
+9qA3lYE2ysb6ReqNh1Q9Y/7lKu2V9CtW93El11+mE3zh0OcKrxsDk+CNaUN
uOGqy5TcnEP99Hw4kFIWw3RgeQQDotO5fzEwbq/Z7LZndRIqn7y4xrX1sV/q
OrYuEnEy1TJaayB9LbQyfhnvh1wZv+D3g6+MODT/55dmxbVxqsM0gF9rLEZw
xdxS3l+1XvcqQI7TsjHeKGweJkH4PDQdV5lxZ2Pd17OObRbrQObYZwUKPU8u
4+sU40AWqGcoMSzi0FqxUhlWKjhuOtDaEwybVnyVSOKy7cri3R+wscaWq3i5
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
ZtD5/wsPgLRxQgEA

-->

</rfc>
