submodule ietf-ipv6-router-advertisements {
  yang-version "1.1";

  belongs-to ietf-ipv6-unicast-routing {
    prefix "v6ur";
  }

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

  import ietf-interfaces {
    prefix "if";
    description
      "An 'ietf-interfaces' module version that is compatible with
       the Network Management Datastore Architecture (NMDA)
       is required.";
  }

  import ietf-ip {
    prefix "ip";
    description
      "An 'ietf-ip' module version that is compatible with
       the Network Management Datastore Architecture (NMDA)
       is required.";
  }

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

     Editor:   Ladislav Lhotka
               <mailto:lhotka@nic.cz>
               Acee Lindem
               <mailto:acee@cisco.com>
               Yingzhen Qu
               <mailto:yingzhen.qu@huawei.com>";

  description
    "This YANG module augments the 'ietf-ip' module with
     parameters for IPv6 Router Advertisements.  The model fully
     conforms to the Network Management Datastore
     Architecture (NMDA).

     Copyright (c) 2018 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 Simplified 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 8349; see
     the RFC itself for full legal notices.";

  reference
    "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)";

  revision 2018-03-13 {
    description
      "Network Management Datastore Architecture (NMDA) revision.";
    reference
      "RFC 8349: A YANG Data Model for Routing Management
                 (NMDA Version)";
  }

  revision 2016-11-04 {
       description
         "Initial revision.";
       reference
         "RFC 8022: A YANG Data Model for Routing Management";
  }

  augment "/if:interfaces/if:interface/ip:ipv6" {
    description
      "Augments interface configuration with parameters of IPv6
       Router Advertisements.";
    container ipv6-router-advertisements {
      description
        "Support for IPv6 Router Advertisements.";
      leaf send-advertisements {
        type boolean;
        default "false";
        description
          "A flag indicating whether or not the router sends
           periodic Router Advertisements and responds to
           Router Solicitations.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvSendAdvertisements";
      }
      leaf max-rtr-adv-interval {
        type uint16 {
          range "4..65535";
        }
        units "seconds";
        default "600";
        description
          "The maximum time allowed between sending unsolicited
           multicast Router Advertisements from the interface.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - MaxRtrAdvInterval";
      }
      leaf min-rtr-adv-interval {
        type uint16 {
          range "3..1350";
        }
        units "seconds";
        must ". <= 0.75 * ../max-rtr-adv-interval" {
          description
            "The value MUST NOT be greater than 75% of
             'max-rtr-adv-interval'.";
        }
        description
          "The minimum time allowed between sending unsolicited
           multicast Router Advertisements from the interface.

           The default value to be used operationally if this
           leaf is not configured is determined as follows:

           - if max-rtr-adv-interval >= 9 seconds, the default
             value is 0.33 * max-rtr-adv-interval;

           - otherwise, it is 0.75 * max-rtr-adv-interval.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - MinRtrAdvInterval";
      }
      leaf managed-flag {
        type boolean;
        default "false";
        description
          "The value to be placed in the 'Managed address
           configuration' flag field in the Router
           Advertisement.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvManagedFlag";
      }
      leaf other-config-flag {
        type boolean;
        default "false";
        description
          "The value to be placed in the 'Other configuration'
           flag field in the Router Advertisement.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvOtherConfigFlag";
      }
      leaf link-mtu {
        type uint32;
        default "0";
        description
          "The value to be placed in MTU options sent by the
           router.  A value of zero indicates that no MTU options
           are sent.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvLinkMTU";
      }
      leaf reachable-time {
        type uint32 {
          range "0..3600000";
        }
        units "milliseconds";
        default "0";
        description
          "The value to be placed in the Reachable Time field in
           the Router Advertisement messages sent by the router.
           A value of zero means unspecified (by this router).";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvReachableTime";
      }
      leaf retrans-timer {
        type uint32;
        units "milliseconds";
        default "0";
        description
          "The value to be placed in the Retrans Timer field in
           the Router Advertisement messages sent by the router.
           A value of zero means unspecified (by this router).";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvRetransTimer";
      }
      leaf cur-hop-limit {
        type uint8;
        description
          "The value to be placed in the Cur Hop Limit field in
           the Router Advertisement messages sent by the router.
           A value of zero means unspecified (by this router).

           If this parameter is not configured, the device SHOULD
           use the IANA-specified value for the default IPv4
           Time to Live (TTL) parameter that was in effect at the
           time of implementation.";
        reference
          "RFC 3232: Assigned Numbers: RFC 1700 is Replaced by
                     an On-line Database
           RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvCurHopLimit
           IANA: IP Parameters
                 (https://www.iana.org/assignments/ip-parameters)";
      }
      leaf default-lifetime {
        type uint16 {
          range "0..65535";
        }
        units "seconds";
        description
          "The value to be placed in the Router Lifetime field of
           Router Advertisements sent from the interface, in
           seconds.  It MUST be either zero or between
           max-rtr-adv-interval and 9000 seconds.  A value of zero
           indicates that the router is not to be used as a
           default router.  These limits may be overridden by
           specific documents that describe how IPv6 operates over
           different link layers.

           If this parameter is not configured, the device SHOULD
           use a value of 3 * max-rtr-adv-interval.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvDefaultLifetime";
      }
      container prefix-list {
        description
          "Support for prefixes to be placed in Prefix
           Information options in Router Advertisement messages
           sent from the interface.

           Prefixes that are advertised by default but do not
           have their entries in the child 'prefix' list are
           advertised with the default values of all parameters.

           The link-local prefix SHOULD NOT be included in the
           list of advertised prefixes.";
        reference
          "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                     - AdvPrefixList";
        list prefix {
          key "prefix-spec";
          description
            "Support for an advertised prefix entry.";
          leaf prefix-spec {
            type inet:ipv6-prefix;
            description
              "IPv6 address prefix.";
          }
          choice control-adv-prefixes {
            default "advertise";
            description
              "Either (1) the prefix is explicitly removed from the
               set of advertised prefixes or (2) the parameters with
               which the prefix is advertised are specified (default
               case).";
            leaf no-advertise {
              type empty;
              description
                "The prefix will not be advertised.

                 This can be used for removing the prefix from
                 the default set of advertised prefixes.";
            }
            case advertise {
              leaf valid-lifetime {
                type uint32;
                units "seconds";
                default "2592000";
                description
                  "The value to be placed in the Valid Lifetime
                   in the Prefix Information option.  The
                   designated value of all 1's (0xffffffff)
                    represents infinity.";
                reference
                  "RFC 4861: Neighbor Discovery for IP version 6
                             (IPv6) - AdvValidLifetime";
              }
              leaf on-link-flag {
                type boolean;
                default "true";
                description
                  "The value to be placed in the on-link flag
                   ('L-bit') field in the Prefix Information
                   option.";
                reference
                  "RFC 4861: Neighbor Discovery for IP version 6
                             (IPv6) - AdvOnLinkFlag";
              }
              leaf preferred-lifetime {
                type uint32;
                units "seconds";
                must ". <= ../valid-lifetime" {
                  description
                    "This value MUST NOT be greater than
                     valid-lifetime.";
                }
                default "604800";
                description
                  "The value to be placed in the Preferred
                   Lifetime in the Prefix Information option.
                   The designated value of all 1's (0xffffffff)
                   represents infinity.";
                reference
                  "RFC 4861: Neighbor Discovery for IP version 6
                             (IPv6) - AdvPreferredLifetime";
              }
              leaf autonomous-flag {
                type boolean;
                default "true";
                description
                  "The value to be placed in the Autonomous Flag
                   field in the Prefix Information option.";
                reference
                  "RFC 4861: Neighbor Discovery for IP version 6
                             (IPv6) - AdvAutonomousFlag";
              }
            }
          }
        }
      }
    }
  }

  /*
   * The subsequent data nodes are obviated and obsoleted
   * by the Network Management Datastore Architecture
   * as described in RFC 8342.
   */
  augment "/if:interfaces-state/if:interface/ip:ipv6" {
    status obsolete;
    description
      "Augments interface state data with parameters of IPv6
       Router Advertisements.";
    container ipv6-router-advertisements {
      status obsolete;
      description
        "Parameters of IPv6 Router Advertisements.";
      leaf send-advertisements {
        type boolean;
        status obsolete;
        description
          "A flag indicating whether or not the router sends
           periodic Router Advertisements and responds to
           Router Solicitations.";
      }
      leaf max-rtr-adv-interval {
        type uint16 {
          range "4..1800";
        }
        units "seconds";
        status obsolete;
        description
          "The maximum time allowed between sending unsolicited
           multicast Router Advertisements from the interface.";
      }
      leaf min-rtr-adv-interval {
        type uint16 {
          range "3..1350";
        }
        units "seconds";
        status obsolete;
        description
          "The minimum time allowed between sending unsolicited
           multicast Router Advertisements from the interface.";
      }
      leaf managed-flag {
        type boolean;
        status obsolete;
        description
          "The value that is placed in the 'Managed address
           configuration' flag field in the Router Advertisement.";
      }
      leaf other-config-flag {
        type boolean;
        status obsolete;
        description
          "The value that is placed in the 'Other configuration' flag
           field in the Router Advertisement.";
      }
      leaf link-mtu {
        type uint32;
        status obsolete;
        description
          "The value that is placed in MTU options sent by the
           router.  A value of zero indicates that no MTU options
           are sent.";
      }
      leaf reachable-time {
        type uint32 {
          range "0..3600000";
        }
        units "milliseconds";
        status obsolete;
        description
          "The value that is placed in the Reachable Time field in
           the Router Advertisement messages sent by the router.  A
           value of zero means unspecified (by this router).";
      }
      leaf retrans-timer {
        type uint32;
        units "milliseconds";
        status obsolete;
        description
          "The value that is placed in the Retrans Timer field in the
           Router Advertisement messages sent by the router.  A value
           of zero means unspecified (by this router).";
      }
      leaf cur-hop-limit {
        type uint8;
        status obsolete;
        description
          "The value that is placed in the Cur Hop Limit field in the
           Router Advertisement messages sent by the router.  A value
           of zero means unspecified (by this router).";
      }
      leaf default-lifetime {
        type uint16 {
          range "0..9000";
        }
        units "seconds";
        status obsolete;
        description
          "The value that is placed in the Router Lifetime field of
           Router Advertisements sent from the interface, in seconds.
           A value of zero indicates that the router is not to be
           used as a default router.";
      }
      container prefix-list {
        status obsolete;
        description
          "A list of prefixes that are placed in Prefix Information
           options in Router Advertisement messages sent from the
           interface.

           By default, these are all prefixes that the router
           advertises via routing protocols as being on-link for the
           interface from which the advertisement is sent.";
        list prefix {
          key "prefix-spec";
          status obsolete;
          description
            "Advertised prefix entry and its parameters.";
          leaf prefix-spec {
            type inet:ipv6-prefix;
            status obsolete;
            description
              "IPv6 address prefix.";
          }
          leaf valid-lifetime {
            type uint32;
            units "seconds";
            status obsolete;
            description
              "The value that is placed in the Valid Lifetime in the
               Prefix Information option.  The designated value of
               all 1's (0xffffffff) represents infinity.

               An implementation SHOULD keep this value constant in
               consecutive advertisements, except when it is
               explicitly changed in configuration.";
          }
          leaf on-link-flag {
            type boolean;
            status obsolete;
            description
              "The value that is placed in the on-link flag ('L-bit')
               field in the Prefix Information option.";
          }
          leaf preferred-lifetime {
            type uint32;
            units "seconds";
            status obsolete;
            description
              "The value that is placed in the Preferred Lifetime in
               the Prefix Information option, in seconds.  The
               designated value of all 1's (0xffffffff) represents
               infinity.

               An implementation SHOULD keep this value constant in
               consecutive advertisements, except when it is
               explicitly changed in configuration.";
          }
          leaf autonomous-flag {
            type boolean;
            status obsolete;
            description
              "The value that is placed in the Autonomous Flag field
               in the Prefix Information option.";
          }
        }
      }
    }
  }
}
