<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc2629 version 1.6.5 (Ruby 2.7.0) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ma-opsawg-schedule-yang-03" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Common Schedule YANG">A Common YANG Data Model for Scheduling</title>

    <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="2024" month="February" day="02"/>

    <area>Operations and Management</area>
    <workgroup>OPSAWG</workgroup>
    <keyword>calendaring</keyword> <keyword>scheduling</keyword> <keyword>YANG</keyword> <keyword>groupings</keyword>

    <abstract>


<t>This document defines a common schedule YANG module which is
   designed to be applicable for scheduling information such as event, policy,
   services, or resources based on date and time. For the sake of better modularity,
   the module includes basic, intermediate, and advanced versions of schedule groupings.</t>



    </abstract>



  </front>

  <middle>


<section anchor="intro"><name>Introduction</name>

<t>Several specifications include a provision for scheduling. Examples of such specifications
are (but not limited to) <xref target="I-D.ietf-opsawg-ucl-acl"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.united-tvr-schedule-yang"/>.
Both <xref target="I-D.ietf-opsawg-ucl-acl"/> and <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/> use the "ietf-schedule" module
initially specified in <xref target="I-D.ietf-opsawg-ucl-acl"/>.</t>

<t>Given that the applicability of the "ietf-schedule" module is more general than scheduled
policy and OAM tests, this document defines "ietf-schedule" as a common schedule YANG module. The module includes a set of reusable groupings which
are designed to be applicable for scheduling information such as event, policy,
services or resources based on date and time.</t>

<t>Examples to illustrate the use of the common groupings are provided in <xref target="usage"/>. Also, sample modules to exemplify how future modules can use the extensibility provisions in "ietf-schedule" are provided in <xref target="sec-ext"/>.</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>

<t><list style="symbols">
  <t>XXXX --&gt; the assigned RFC number for this draft</t>
  <t>YYYY --&gt; the assigned RFC number for <xref target="I-D.ietf-netmod-rfc6991-bis"/></t>
  <t>2023-01-19 --&gt; the actual date of the publication of this document</t>
</list></t>

</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>

<t>The meanings of the symbols in tree diagrams are defined in
   <xref target="RFC8340"/>.</t>

<t>Also, this document uses the YANG terminology defined in <xref section="3" sectionFormat="of" target="RFC7950"/>.</t>

</section>
<section anchor="module-overview"><name>Module Overview</name>

<t>The "ietf-schedule" module (<xref target="sec-schedule"/>) defines the following groupings:</t>

<t><list style="symbols">
  <t>period-of-time (<xref target="sec-period"/>)</t>
  <t>recurrence (<xref target="sec-rec"/>)</t>
  <t>recurrence-with-date-times (<xref target="sec-rec-dt"/>)</t>
  <t>icalendar-recurrence (<xref target="sec-ical-rec"/>)</t>
</list></t>

<t><xref target="schedule-tree"/> provides an overview of the tree structure <xref target="RFC8340"/> of
   the "ietf-schedule" module in terms of its groupings.</t>

<figure title="Overall Schedule Tree Structure" anchor="schedule-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
]]></artwork></figure>

<t>Each of these groupings is presented in the following subsections. Examples
   are provided in <xref target="usage"/>.</t>

<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 ("period-start") and end date and time ("period-end"), or a
   start ("period-start") and a positive time duration ("duration"). For the first
   format, the start of the period <bcp14>MUST</bcp14> be before the end of the period
   (see <xref section="3.3.9" sectionFormat="of" target="RFC5545"/>).</t>

<figure title="Period of Time Grouping Tree Structure" anchor="pt-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping period-of-time:
    +-- period-start?           yang:date-and-time
    +-- time-zone-identifier?   sys:timezone-name
    +-- (period-type)?
       +--:(explicit)
       |  +-- period-end?       yang:date-and-time
       +--:(duration)
          +-- duration?         duration
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
]]></artwork></figure>

</section>
<section anchor="sec-rec"><name>The "recurrence" Grouping</name>

<t>The "recurrence" grouping (<xref target="rec-grp-tree"/>) specifies a simple recurrence rule, the definition
  conforms to part of the "recurrence rule" properties in <xref section="3.3.10" sectionFormat="of" target="RFC5545"/>.</t>

<figure title="Recurrence Grouping Tree Structure" anchor="rec-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping period-of-time:
    ...
  grouping recurrence:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?          identityref
    +-- interval?           uint32
    +-- (recurrence-bound)?
       +--:(until)
       |  +-- until?        union
       +--:(count)
          +-- count?        uint32
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    ...
]]></artwork></figure>

<t>The "recurrence-first" container defines the first instance in the recurrence set.
  It also determines the start time and duration (if specified) of subsequent recurrence instances. If the
  "date-time-start" node is specified as a date-no-zone value type with no duration specified,
  the recurrence's duration is taken to be one day.</t>

<t>The frequency ("frequency") identifies the type of recurrence rule. For example,
  a "daily" frequency value specifies repeating events based on an interval of a day or more.</t>

<t>The interval represents at which intervals the recurrence rule repeats. For example,
  within a daily recurrence rule, an interval value of "8" means every eight days.</t>

<t>The repetition can be scoped by a specified end time or by a count of occurrences,
  indicated by the "recurrence-bound" choice. The "date-time-start" value always counts
  as the first occurrence.</t>

</section>
<section anchor="sec-rec-dt"><name>The "recurrence-with-date-times" Grouping</name>

<t>The "recurrence-with-date-times" grouping (<xref target="rec-dt-grp-tree"/>) uses the "recurrence" grouping (<xref target="sec-rec"/>) and
  adds a "date-times-choice" statement to define an aggregate set of repeating occurrences.</t>

<figure title="Recurrence with Date Times Grouping Tree Structure" anchor="rec-dt-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?                identityref
    +-- interval?                 uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              union
    |  +--:(count)
    |     +-- count?              uint32
    +-- (date-times-choice)?
       +--:(date-time)
       |  +-- date-times*         yang:date-and-time
       +--:(date)
       |  +-- dates*              yang:date-no-zone
       +--:(period-timeticks)
       |  +-- period-timeticks* [period-start]
       |     +-- period-start?   yang:timeticks
       |     +-- period-end?     yang:timeticks
       +--:(period)
          +-- period* [period-start]
             +-- period-start?           yang:date-and-time
             +-- time-zone-identifier?   sys:timezone-name
             +-- (period-type)?
                +--:(explicit)
                |  +-- period-end?       yang:date-and-time
                +--:(duration)
                   +-- duration?         duration
  grouping icalendar-recurrence:
    ...
]]></artwork></figure>

<t>The recurrence instances are defined by the union of occurrences defined by
  both date-times and recurrence rule. When duplicate instances are generated,
  only one recurrence is considered.</t>

<t>Date-times definition inside "recurrence-with-date-times" grouping refers to
  but does not fully comply with <xref section="3.8.5.2" sectionFormat="of" target="RFC5545"/>. A timeticks
  type based period is added.</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-with-date-times" grouping (<xref target="sec-rec-dt"/>)
  and add more data nodes to enrich the definition of recurrence. The structure of the "icalendar-recurrence" grouping conforms to
  the definition of recurrence component defined in <xref section="3.8.5" sectionFormat="of" target="RFC5545"/>.</t>

<figure title="iCalendar Recurrence Grouping Tree Structure" anchor="ical-grp-tree"><artwork><![CDATA[
module: ietf-schedule

  grouping period-of-time:
    ...
  grouping recurrence:
    ...
  grouping recurrence-with-date-times:
    ...
  grouping icalendar-recurrence:
    +-- recurrence-first
    |  +-- date-time-start?        union
    |  +-- time-zone-identifier?   sys:timezone-name
    |  +-- duration?               duration
    +-- frequency?                identityref
    +-- interval?                 uint32
    +-- (recurrence-bound)?
    |  +--:(until)
    |  |  +-- until?              union
    |  +--:(count)
    |     +-- count?              uint32
    +-- (date-times-choice)?
    |  +--:(date-time)
    |  |  +-- date-times*         yang:date-and-time
    |  +--:(date)
    |  |  +-- dates*              yang:date-no-zone
    |  +--:(period-timeticks)
    |  |  +-- period-timeticks* [period-start]
    |  |     +-- period-start?   yang:timeticks
    |  |     +-- period-end?     yang:timeticks
    |  +--:(period)
    |     +-- period* [period-start]
    |        +-- 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*          union
]]></artwork></figure>

<t>An array of the "bysecond" (or "byminut", "byhour") specifies a list of
   seconds within a minute (or minutes within an hour, hours of the day).</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. 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).</t>

<t>The "bysetpos" conveys a list of values that corresponds to the nth occurrence
   within the set of recurrence instances to be specified. For example, in a "monthly"
   recurrence rule, the "byday" data node specifies every Monday of the week, the
   "bysetpos" with value of "-1" represents the last Monday of the month.
   Not setting the "bysetpos" data node represents every Monday of the month.</t>

<t>The "workweek-start" data node specifies the day on which the week starts. This is
   significant when a "weekly" recurrence rule has an interval greater than 1, and
   a "byday" data node is specified. This is also significant when in a "yearly" rule
   and a "byyearweek" is specified. The default value is "monday".</t>

<t>the "exception-dates" data node specifies a list of exceptions for recurrence. The
   final recurrence set is generated by gathering all of the date and time values
   generated by any of the specified recurrence rule and date-times, and then
   excluding any start date and time values specified by "exception-dates" parameter.</t>

</section>
</section>
<section anchor="features-and-augmentations"><name>Features and Augmentations</name>

<t>The "ietf-schedule" data model defines the recurrence related groupings using
   a modular approach. Basic, intermediate, and advanced representation of recurrence
   groupings are defined, with each reusing the previous one and adding more parameters.
   To allow for different options, two features are defined in the data model:</t>

<t><list style="symbols">
  <t>'basic-recurrence-supported'</t>
  <t>'icalendar-recurrence-supported'</t>
</list></t>

<t><xref target="features"/> provides an example about how that could 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>These groupings 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 anchor="sec-schedule"><name>The "ietf-schedule" YANG Module</name>

<t>This module imports types defined in <xref target="I-D.ietf-netmod-rfc6991-bis"/>.</t>

<figure><artwork><![CDATA[
<CODE BEGINS> file "ietf-schedule@2023-01-19.yang"
module ietf-schedule {
  yang-version 1.1;
  namespace "urn:ietf:params:xml:ns:yang:ietf-schedule";
  prefix schedule;

  import ietf-yang-types {
    prefix yang;
    revision-date 2023-01-23;
    reference
      "RFC YYYY: Common YANG Data Types";
  }

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

  organization
    "IETF OPSAWG Working Group";
  contact
    "WG Web: <https://datatracker.ietf.org/wg/opsawg/>
     WG List: <mailto:opsawg@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 two groupings for iCalendar (Internet
     Calendaring and Scheduling Core Object Specification) data
     types: period of time and recurrence rule, for representing and
     exchanging calendaring and scheduling information. The YANG
     module complies with Sections 3.3.9 and 3.3.10 of RFC 5545.

     Copyright (c) 2024 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 2023-01-19 {
    description
      "Initial revision.";
    reference
      "RFC XXXX: A YANG Data Model for Scheduling";
  }
  
  feature basic-recurrence-supported {
    description
      "Indicates that the server supports configuring a basic
       scheduled recurrence.";
  }

  feature icalendar-recurrence-supported {
    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 frequency-type {
    description
      "Base identity for frequency type.";
  }
  identity secondly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a second or more.";
  }
  identity minutely {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a minute or more.";
  }
  identity hourly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       an hour or more.";
  }
  identity daily {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a day or more.";
  }
  identity weekly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a week or more.";
  }
  identity monthly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a month or more.";
  }
  identity yearly {
    base frequency-type;
    description
      "Identity for a repeating event based on an interval of
       a year or more.";
  }

  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-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 'period-start'
         value is neither reported in the format of UTC nor time zone
         offset to UTC.";
    }
    choice period-type {
      description
        "Indicates the type of the time period. Two types are
          supported.";
      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
            "Period end time. The start MUST be before the end. If a
             local time without time zone offset to UTC time is
             specified, it MUST use the same time zone reference as
             'period-start' parameter. If 'period-start' also uses a
             local time without time zone offset to UTC, it MUST use
             the time zone as specified by the
             'time-zone-identifier' parameter.";
        }
      }
      case duration {
        description
          "A period of time is defined by a start and a
           positive 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 positive duration of the time. This value is
             equivalent to the format of duration type except that
             the value cannot be negative.";
        }
      }
    }
  }

  grouping recurrence {
    description
      "A simple definition of recurrence.";
    container recurrence-first {
      description
        "Specifies the first instance of the recurrence.";
      leaf date-time-start {
        type union {
          type yang:date-no-zone;
          type yang:date-and-time;
        }
        description
          "Defines the first instance in the recurrence set. If it is
           specified as a date-no-zone value type with no duration
           specified, the recurrence's duration is taken to be one
           day.";
        reference
          "RFC 5545: Internet Calendaring and Scheduling Core Object
                     Specification (iCalendar), Section 3.3.10";
      }
      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 'start'
           value is neither reported in the format of UTC nor time
           zone offset to UTC.";
      }
      leaf duration {
        type duration;
        description
          "When specified, it refers to the duration of
           the first occurrence. The exact duration also applies to
           all the recurrence instance.";
      }
    }
    leaf frequency {
      type identityref {
        base frequency-type;
      }
      description
        "This parameter is defined to identify the frequency type of
         the recurrence rule.";
    }
    leaf interval {
      type uint32;
      description
        "A positive integer representing at which intervals the
         recurrence rule repeats. For example, within a 'daily'
         recurrence rule, a value of '8' means every eight days.";
    }
    choice recurrence-bound {
      description
        "Modes to bound the recurrence rule. If no choice is
         indicated, the recurrence rule is considered to repeat
         forever.";
      case until {
        description
          "This case defines a way that bounds the recurrence
           rule in an inclusive manner.";
        leaf until {
          type union {
            type yang:date-no-zone;
            type yang:date-and-time;
          }
          description
            "This parameter specifies a date-no-zone or
             date-time value to bounds the recurrence. If the value
             specified by this parameter is synchronized with the
             specified recurrence, it becomes the last instance of
             the recurrence. The value MUST have the same value type
             as the value type of 'start' parameter.";
        }
      }
      case count {
        description
          "This case defines the number of occurrences at which
           to range-bound the recurrence.";
        leaf count {
          type uint32;
          description
            "The positive number of occurrences at which to
             range-bound the recurrence.";
        }
      }
    }
  }

  grouping recurrence-with-date-times {
    description
      "This grouping defines an aggregate set of repeating
       occurrences. The recurrence instances are defined by
       the union of occurrences defined by both the
       'recurrence' and 'date-times'. Duplicate instances
       are ignored.";
    uses recurrence;
    choice date-times-choice {
      description
        "Specify a list of occurrences which complement the
         recurrence set defined by 'recurrence' grouping. If
         it is specified as a period value, the duration of
         the recurrence instance will be the one specified
         by it, and not the duration defined inside the
         recurrence-first parameter.";
      case date-time {
        description
          "Specify a list of occurrences with date-and-time
           values.";
          leaf-list date-times {
            type yang:date-and-time;
            description
              "Specifies a set of date-and-time values of
               occurrences.";
          }
      }
      case date {
        description
          "Specifies a list of occurrences with date-no-zone
           values.";
          leaf-list dates {
            type yang:date-no-zone;
            description
              "Specifies a set of date-no-zone values of
               occurrences.";
          }
      }
      case period-timeticks {
        description
          "Specifies a list of occurrences with period span of
           timeticks format.";
          list period-timeticks {
            key "period-start";
            description
              "A list of period 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 scheduled value within one
                 recurrence.";
            }
            leaf period-end {
              type yang:timeticks;
              description
                "End time of the scheduled value within one
                 recurrence.";
            }
          }
      }
      case period {
        description
          "Specifies a list of occurrences with period span
           of date-and -time format.";
        list period {
          key "period-start";
          description
            "A list of period with date-and-time formats.";
          uses period-of-time;
        }
      }
    }
  }

  grouping icalendar-recurrence {
    description
      "This grouping is defined to identify properties
       that contain a recurrence rule.";
    reference
      "RFC 5545: Internet Calendaring and Scheduling
                 Core Object Specification (iCalendar),
                 Section 3.8.5";

    uses recurrence-with-date-times;
    leaf-list bysecond {
      type uint32 {
        range "0..60";
      }
      description
        "A list of seconds within a minute.";
    }
    leaf-list byminute {
      type uint32 {
        range "0..59";
      }
      description
        "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
          "Corredponds 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;
      default "monday";
      description
        "Specifies the day on which the workweek starts.";
    }
    leaf-list exception-dates {
      type union {
        type yang:date-no-zone;
        type yang:date-and-time;
      }
      description
        "Defines a list of exceptions for recurrence.";
    }
  }
}
<CODE ENDS>
]]></artwork></figure>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The "ietf-schedule" YANG module specified in this document defines schema for data
   that is designed to be accessed via network management protocols such
   as NETCONF <xref target="RFC6241"/> or RESTCONF <xref target="RFC8040"/>.  The lowest NETCONF layer
   is the secure transport layer, and the mandatory-to-implement secure
   transport is Secure Shell (SSH) <xref target="RFC6242"/>.  The lowest RESTCONF layer
   is HTTPS, and the mandatory-to-implement secure transport is TLS
   <xref target="RFC8446"/>.</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>

</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>

<figure><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></figure>

</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>

<figure><artwork><![CDATA[
        name:               ietf-schedule
        namespace:          urn:ietf:params:xml:ns:yang:ietf-schedule
        prefix:             schedule
        maintained by IANA: N
        reference:          RFC XXXX
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='I-D.ietf-netmod-rfc6991-bis' target='https://datatracker.ietf.org/doc/html/draft-ietf-netmod-rfc6991-bis-15'>
   <front>
      <title>Common YANG Data Types</title>
      <author fullname='Jürgen Schönwälder' initials='J.' surname='Schönwälder'>
         <organization>Constructor University</organization>
      </author>
      <date day='23' month='January' year='2023'/>
      <abstract>
	 <t>   This document defines a collection of common data types to be used
   with the YANG data modeling language.  This version of the document
   adds several new type definitions and obsoletes RFC 6991.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-netmod-rfc6991-bis-15'/>
   
</reference>

<reference anchor='RFC6241' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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='RFC6242' target='https://www.rfc-editor.org/info/rfc6242'>
  <front>
    <title>Using the NETCONF Protocol over Secure Shell (SSH)</title>
    <author fullname='M. Wasserman' initials='M.' surname='Wasserman'/>
    <date month='June' year='2011'/>
    <abstract>
      <t>This document describes a method for invoking and running the Network Configuration Protocol (NETCONF) within a Secure Shell (SSH) session as an SSH subsystem. This document obsoletes RFC 4742. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name='RFC' value='6242'/>
  <seriesInfo name='DOI' value='10.17487/RFC6242'/>
</reference>

<reference anchor='RFC8446' target='https://www.rfc-editor.org/info/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='RFC8341' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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 title='Informative References'>




<reference anchor='I-D.ietf-opsawg-ucl-acl' target='https://datatracker.ietf.org/doc/html/draft-ietf-opsawg-ucl-acl-02'>
   <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='7' month='December' year='2023'/>
      <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 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-02'/>
   
</reference>


<reference anchor='I-D.contreras-opsawg-scheduling-oam-tests' target='https://datatracker.ietf.org/doc/html/draft-contreras-opsawg-scheduling-oam-tests-01'>
   <front>
      <title>A YANG Data Model for Network Diagnosis by scheduling 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='10' month='July' year='2023'/>
      <abstract>
	 <t>   This document defines a YANG data model for network diagnosis on-
   demand using Operations, Administration, and Maintenance (OAM) tests.
   This document defines both &#x27;oam-unitary-test&#x27; and &#x27;oam-test-sequence&#x27;
   data models to enable on-demand activation of network diagnosis
   procedures.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-contreras-opsawg-scheduling-oam-tests-01'/>
   
</reference>


<reference anchor='I-D.united-tvr-schedule-yang' target='https://datatracker.ietf.org/doc/html/draft-united-tvr-schedule-yang-00'>
   <front>
      <title>YANG Data Model for Scheduled Attributes</title>
      <author fullname='Yingzhen Qu' initials='Y.' surname='Qu'>
         <organization>Futurewei</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='11' month='October' year='2023'/>
      <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-united-tvr-schedule-yang-00'/>
   
</reference>

<reference anchor='RFC8340' target='https://www.rfc-editor.org/info/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='RFC7951' target='https://www.rfc-editor.org/info/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='I-D.ietf-tvr-use-cases' target='https://datatracker.ietf.org/doc/html/draft-ietf-tvr-use-cases-04'>
   <front>
      <title>TVR (Time-Variant Routing) Use Cases</title>
      <author fullname='Edward J. Birrane' initials='E. J.' surname='Birrane'>
         <organization>JHU/APL</organization>
      </author>
      <author fullname='Nicolas Kuhn' initials='N.' surname='Kuhn'>
         <organization>Thales Alenia Space</organization>
      </author>
      <author fullname='Yingzhen Qu' initials='Y.' surname='Qu'>
         <organization>Futurewei Technologies</organization>
      </author>
      <author fullname='Rick Taylor' initials='R.' surname='Taylor'>
         <organization>Ori Industries</organization>
      </author>
      <author fullname='Li Zhang' initials='L.' surname='Zhang'>
         <organization>Huawei</organization>
      </author>
      <date day='19' month='November' year='2023'/>
      <abstract>
	 <t>   This document introduces use cases where Time-Variant Routing (TVR)
   computations (i.e. routing computations taking into considerations
   time-based or scheduled changes to a network) could improve routing
   protocol convergence and/or network performance.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-tvr-use-cases-04'/>
   
</reference>


<reference anchor='I-D.ietf-netmod-eca-policy' target='https://datatracker.ietf.org/doc/html/draft-ietf-netmod-eca-policy-01'>
   <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>




    </references>


<section anchor="usage"><name>Examples of Format Representation</name>

<t>This section provides some examples to illustrate the use of the
   period and recurrence formats defined as YANG groupings. Note that "grouping"
   does not define any data nodes in the schema tree, the examples illustrated are
   just for the ease of understanding. Only the message body is provided with
   JSON used for encoding <xref target="RFC7951"/>.</t>

<section anchor="the-period-of-time-grouping"><name>The "period-of-time" Grouping</name>

<t>The 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 is encoded as shown in <xref target="ex-1"/>.</t>

<figure title="Simple Start/End Schedule" anchor="ex-1"><artwork><![CDATA[
{
  "period-start": "2025-01-01T08:00:00Z",
  "period-end": "2027-12-01T18: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 title="Simple Schedule with Duration" anchor="ex-2"><artwork><![CDATA[
{
  "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 title="Simple Schedule with Time Zone Indication" anchor="ex-3"><artwork><![CDATA[
{
  "period-start": "2025-11-19T02:00:00",
  "time-zone-identifier": "America/Los_Angeles",
  "duration": "P20W"
}
]]></artwork></figure>

</section>
<section anchor="the-recurrence-grouping"><name>The "recurrence" Grouping</name>

<t><xref target="ex-4"/> indicates a recurrence of every 2 days for
   10 occurrences, starting at 3 p.m. on December 1, 2025 in the Eastern United States time zone:</t>

<figure title="Simple Schedule with Recurrence" anchor="ex-4"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-11-01T15:00:00",
    "time-zone-identifier": "America/New_York"
  },
  "frequency": "ietf-schedule:daily",
  "interval": 2,
  "count": 10
}
]]></artwork></figure>

<t><xref target="ex-5"/> illustrates an example of an anniversary that will occur annually, from 1997-11-25, until 2050-11-25:</t>

<figure title="Simple Schedule with Recurrence and End Date" anchor="ex-5"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "1979-11-25"
  },
  "frequency": "ietf-schedule:yearly",
  "until": "2050-11-25"
}
]]></artwork></figure>

</section>
<section anchor="the-recurrence-with-date-times-grouping"><name>The "recurrence-with-date-times" Grouping</name>

<t><xref target="ex-6"/> indicates a recurrence that occurs every 2
   hours from 9:00 AM to 5:00 PM, and 6PM UTC time on 2025-12-01:</t>

<figure title="Example of Recurrence With Date Times" anchor="ex-6"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z"
  },
  "frequency": "ietf-schedule:hourly",
  "interval": 2,
  "until": "2025-12-01T17:00:00Z",
  "date-times": ["2025-12-01T18:00:00Z"]
}
]]></artwork></figure>

<t><xref target="ex-7"/> 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:</t>

<figure title="Example of Advanced Recurrence Schedule" anchor="ex-7"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "2025-12-01T09:00:00Z",
    "duration": "PT00:15:00"
  },
  "frequency": "ietf-schedule:minutely",
  "interval": 30,
  "until": "2025-12-01T17:00:00Z",
  "period": [
    {
      "period-start": "2025-12-01T18:00:00Z",
      "duration": "PT00:20:00"
    },
    {
      "period-start": "2025-12-01T18:30:00Z",
      "duration": "PT00:20:00"
    }
   ]
}
]]></artwork></figure>

</section>
<section anchor="the-icalendar-recurrence-grouping"><name>The "icalendar-recurrence" Grouping</name>

<t><xref target="ex-8"/> indicates 10 occurrences that occur at
   8:00 AM (EST), every last Saturday of the month starting in January 2024:</t>

<figure title="Simple iCalendar Recurrence" anchor="ex-8"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "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-9"/> is an example of a recurrence that occurs on the last
   workday of the month until December 25, 2024, from January 1, 2024:</t>

<figure title="Example of Advanced iCalendar Recurrence" anchor="ex-9"><artwork><![CDATA[
{
  "recurrence-first": {
  "date-time-start": "2024-01-01"
  },
  "frequency": "ietf-schedule:monthly",
  "until": "2024-12-25",
  "byday": [
    { "weekday": "monday"},
    { "weekday": "tuesday"},
    { "weekday": "wednesday"},
    { "weekday": "thursday"},
    { "weekday": "friday"}
  ],
  "bysetpos": [-1]
}
]]></artwork></figure>

<t><xref target="ex-10"/> indicates a recurrence that occur 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 title="Example of Advanced iCalendar Recurrence with Exceptions" anchor="ex-10"><artwork><![CDATA[
{
  "recurrence-first": {
    "date-time-start": "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>
<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>

<figure><artwork><![CDATA[
module example-scheduled-backup {
  yang-version 1.1;
  namespace "http://example.com/example-scheduled-backup";
  prefix "ex-scback";

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

  import ietf-schedule {
    prefix "schedule";
  }

  organization
    "Example, Inc.";

  contact
    "Support at example.com";

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

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

  container scheduled-backup-tasks {
    description
      "A container for backing up all current running configuration
       on the device.";

    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-supported;
      description
        "Basic recurrence schedule specification, only applies when 
         schedule:basic-recurrence-supported feaure is supported.";
      uses schedule:recurrence;
    }

    container icalendar-recurrence-schedules {
      if-feature schedule:icalendar-recurrence-supported;    
      description
        "Basic recurrence schedule specification, only applies when 
         schedule:icalendar-recurrence-supported feaure is
         supported.";
      uses schedule:icalendar-recurrence;
    }
  }
}

]]></artwork></figure>

</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="I-D.ietf-tvr-use-cases"/>.
   The following example module which augments the "recurrence-with-date-times"
   grouping from "ietf-schedule" module shows how a scheduled based attribute
   could be defined.</t>

<figure><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-with-date-times {
            augment "date-times-choice/period-timeticks"
                  + "/period-timeticks" {
              description
                "Specifies the attributes inside each 
                 period-timeticks entry.";
              uses link-bandwidth-grouping;
            }
            augment "date-times-choice/period/period" {
              description
                "Specifies the attributes within each period entry.";
              uses link-bandwidth-grouping;
            }
          }
        }
      }
    }
  }
}

]]></artwork></figure>

<t><xref target="ex-11"/> shows a configuration example of a link's bandwidth that is
  scheduled between 2023/12/01 0:00 UTC to the end of 2023/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 title="Example of Scheduled Link's Bandwidth" anchor="ex-11"><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>
      <date-time-start>2023-12-01T01:00:00Z</date-time-start>
    </recurrence-first>
    <frequency>schedule:daily</frequency>
    <until>2023-12-31T23:59:59Z</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 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, and Joe Clarke
   for their valuable comments and inputs to this work.</t>

<t>Many thanks to the authors of <xref target="I-D.united-tvr-schedule-yang"/>, <xref target="I-D.contreras-opsawg-scheduling-oam-tests"/>, and <xref target="I-D.ietf-netmod-eca-policy"/>
   for the constructive discussion during IETF#118.</t>

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

