org-openroadm-ip

This model defines Yang model for IP (IPv4 and IPv6) interfaces. This model reuses data items defined in the IETF YANG model fo...

  • Version: 2023-12-08

    org-openroadm-ip@2023-12-08


    
      module org-openroadm-ip {
    
        yang-version 1;
    
        namespace "http://org/openroadm/ip";
    
        prefix org-openroadm-ip;
    
        import org-openroadm-device {
          prefix org-openroadm-device;
          revision-date "2023-12-08";
        }
        import ietf-inet-types {
          prefix inet;
          revision-date "2013-07-15";
        }
        import ietf-yang-types {
          prefix yang;
          revision-date "2013-07-15";
        }
    
        organization "Open ROADM MSA";
    
        contact "OpenROADM.org";
    
        description
          "This model defines Yang model for IP (IPv4 and IPv6) interfaces.
    
         This model reuses data items defined in the IETF YANG model for
         interfaces described by RFC 7277.
    
         Some attributes which are not required in Open ROADM MSA are removed.
         Yang file included are changed to fit into Open ROADM MSA yang structure.
    
         IETF code is subject to the following copyright and license:
         Copyright (c) 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 (http://trustee.ietf.org/license-info).";
    
        revision "2023-12-08" {
          description "Version 14.1";
        }
    
        revision "2023-09-29" {
          description "Version 14.0";
        }
    
        revision "2023-05-26" {
          description "Version 13.1";
        }
    
        revision "2023-03-31" {
          description "Version 13.0";
        }
    
        revision "2022-12-09" {
          description "Version 12.1";
        }
    
        revision "2022-09-30" {
          description "Version 12.0";
        }
    
        revision "2022-05-27" {
          description "Version 11.1";
        }
    
        revision "2022-03-25" {
          description "Version 11.0";
        }
    
        revision "2021-12-10" {
          description "Version 10.1";
        }
    
        revision "2021-09-24" {
          description "Version 10.0";
        }
    
        revision "2021-05-28" {
          description "Version 9.1";
        }
    
        revision "2021-03-26" {
          description "Version 9.0";
        }
    
        revision "2020-12-11" {
          description "Version 8.1";
        }
    
        revision "2020-09-25" {
          description "Version 8.0";
        }
    
        revision "2020-05-29" {
          description "Version 7.1.0";
        }
    
        revision "2020-03-27" {
          description "Version 7.0.0";
        }
    
        revision "2019-11-29" {
          description "Version 6.1.0";
        }
    
        revision "2019-09-27" {
          description "Version 6.0.0";
        }
    
        revision "2019-05-31" {
          description "Version 5.1.0";
        }
    
        revision "2019-03-29" {
          description "Version 5.0.0";
        }
    
        revision "2014-06-16" {
          description "Initial revision.";
          reference
            "RFC 7277: A YANG Data Model for IP Management";
    
        }
    
    
        feature ipv4-non-contiguous-netmasks {
          description
            "Indicates support for configuring non-contiguous
           subnet masks.";
        }
    
        feature ipv4-proxy-arp-subnet {
          description
            "Indicates support for IPv4 proxy arp subnet";
        }
    
        feature ipv6-privacy-autoconf {
          description
            "Indicates support for Privacy Extensions for Stateless Address
           Autoconfiguration in IPv6.";
          reference
            "RFC 4941: Privacy Extensions for Stateless Address
            	  Autoconfiguration in IPv6";
    
        }
    
        feature ipv6-proxy-ndp-subnet {
          description
            "Indicates support for IPv6 proxy ndp subnet";
        }
    
        typedef ip-address-origin {
          type enumeration {
            enum "other" {
              value 0;
              description
                "None of the following.";
            }
            enum "static" {
              value 1;
              description
                "Indicates that the address has been statically
               configured - for example, using NETCONF or a Command Line
               Interface.";
            }
            enum "dhcp" {
              value 2;
              description
                "Indicates an address that has been assigned to this
               system by a DHCP server.";
            }
            enum "link-layer" {
              value 3;
              description
                "Indicates an address created by IPv6 stateless
               autoconfiguration that embeds a link-layer address in its
               interface identifier.";
            }
            enum "random" {
              value 4;
              description
                "Indicates an address chosen by the system at
    
               random, e.g., an IPv4 address within 169.254/16, an
               RFC 4941 temporary address, or an RFC 7217 semantically
               opaque address.";
              reference
                "RFC 4941: Privacy Extensions for Stateless Address
                	  Autoconfiguration in IPv6
                 RFC 7217: A Method for Generating Semantically Opaque
                	  Interface Identifiers with IPv6 Stateless
                	  Address Autoconfiguration (SLAAC)";
    
            }
          }
          description
            "The origin of an address.";
        }
    
        typedef neighbor-origin {
          type enumeration {
            enum "other" {
              value 0;
              description
                "None of the following.";
            }
            enum "static" {
              value 1;
              description
                "Indicates that the mapping has been statically
               configured - for example, using NETCONF or a Command Line
               Interface.";
            }
            enum "dynamic" {
              value 2;
              description
                "Indicates that the mapping has been dynamically resolved
               using, e.g., IPv4 ARP or the IPv6 Neighbor Discovery
               protocol.";
            }
          }
          description
            "The origin of a neighbor entry.";
        }
    
        typedef ipv6-address-status {
          type enumeration {
            enum "preferred" {
              value 0;
              description
                "This is a valid address that can appear as the
               destination or source address of a packet.";
            }
            enum "deprecated" {
              value 1;
              description
                "This is a valid but deprecated address that should
               no longer be used as a source address in new
               communications, but packets addressed to such an
               address are processed as expected.";
            }
            enum "invalid" {
              value 2;
              description
                "This isn't a valid address, and it shouldn't appear
               as the destination or source address of a packet.";
            }
            enum "inaccessible" {
              value 3;
              description
                "The address is not accessible because the interface
               to which this address is assigned is not
               operational.";
            }
            enum "unknown" {
              value 4;
              description
                "The status cannot be determined for some reason.";
            }
            enum "tentative" {
              value 5;
              description
                "The uniqueness of the address on the link is being
               verified.  Addresses in this state should not be
               used for general communication and should only be
               used to determine the uniqueness of the address.";
            }
            enum "duplicate" {
              value 6;
              description
                "The address has been determined to be non-unique on
               the link and so must not be used.";
            }
            enum "optimistic" {
              value 7;
              description
                "The address is available for use despite DAD not being
               fully complete";
            }
          }
        }
    
        grouping ip-grp {
          description "Grouping for ip";
          container ipv4 {
            presence
              "Enables IPv4 unless the 'enabled' leaf
                    (which defaults to 'true') is set to 'false'";
            description
              "Parameters for the IPv4 address family.";
            leaf enabled {
              type boolean;
              default "false";
              description
                "Controls whether IPv4 is enabled or disabled on this
               interface.  When IPv4 is enabled, this interface is
               connected to an IPv4 stack, and the interface can send
               and receive IPv4 packets.";
            }
    
            leaf forwarding {
              type boolean;
              default "false";
              description
                "Controls IPv4 packet forwarding of datagrams received by,
               but not addressed to, this interface.  IPv4 routers
               forward datagrams.  IPv4 hosts do not (except those
               source-routed via the host).";
            }
    
            leaf mtu {
              type uint16 {
                range "68..max";
              }
              units "octets";
              default "1500";
              description
                "The size, in octets, of the largest IPv4 packet that the
               interface will send and receive.
    
               The server may restrict the allowed values for this leaf,
               depending on the interface's type.
    
               If this leaf is not configured, the operationally used MTU
               depends on the interface's type.
    
               The max value supported must be at least 9000.";
              reference
                "RFC 791: Internet Protocol";
    
            }
    
            leaf dhcpc-enabled {
              type boolean;
              default "true";
              description "DHCP Client enabled";
            }
    
            choice address-type {
              description "Address type choice";
              case numbered-address {
                description
                  "Numbered address case";
                list address {
                  key "ip";
                  description
                    "The list of configured IPv4 addresses on the interface.";
                  leaf ip {
                    type inet:ipv4-address-no-zone;
                    description
                      "The IPv4 address on the interface.";
                  }
    
                  choice subnet {
                    mandatory true;
                    description
                      "The subnet can be specified as a prefix-length, or,
                     if the server supports non-contiguous netmasks, as
                     a netmask.";
                    leaf prefix-length {
                      type uint8 {
                        range "0..32";
                      }
                      description
                        "The length of the subnet prefix.";
                    }
                    leaf netmask {
                      if-feature ipv4-non-contiguous-netmasks;
                      type yang:dotted-quad;
                      description
                        "The subnet specified as a netmask.";
                    }
                  }  // choice subnet
                }  // list address
              }  // case numbered-address
              leaf address-src {
                type leafref {
                  path "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface/org-openroadm-device:name";
                }
                description
                  "Unnumbered address source";
              }
            }  // choice address-type
    
            container proxy-arp {
              presence
                "Creates Proxy ARP container with its function disabled unless the
            'enabled' leaf (which defaults to 'false') is set to 'true'";
              description "Configure Proxy ARP";
              leaf enabled {
                type boolean;
                default "false";
                description
                  "Enable / Disable proxy ARP support";
              }
    
              list proxy-subnet {
                if-feature ipv4-proxy-arp-subnet;
                key "ipv4-subnet";
                description
                  "The list of IPv4 proxy subnet rules";
                leaf ipv4-subnet {
                  type inet:ipv4-prefix;
                  description
                    "The IPv4 proxy subnet on the interface";
                }
              }  // list proxy-subnet
            }  // container proxy-arp
          }  // container ipv4
    
          container ipv4-state {
            presence
              "Data nodes for operational state of IPv4 on interfaces";
            config false;
            description "State for the IPv4";
            leaf forwarding {
              type boolean;
            }
    
            leaf mtu {
              type uint16 {
                range "68..max";
              }
              units "octets";
            }
    
            list address {
              key "ip";
              description
                "The list of configured IPv4 addresses on the interface.";
              leaf ip {
                type inet:ipv4-address-no-zone;
                description
                  "The IPv4 address on the interface.";
              }
    
              choice subnet {
                mandatory true;
                description
                  "The subnet can be specified as a prefix-length, or,
                 if the server supports non-contiguous netmasks, as
                 a netmask.";
                leaf prefix-length {
                  type uint8 {
                    range "0..32";
                  }
                  description
                    "The length of the subnet prefix.";
                }
                leaf netmask {
                  if-feature ipv4-non-contiguous-netmasks;
                  type yang:dotted-quad;
                  description
                    "The subnet specified as a netmask.";
                }
              }  // choice subnet
    
              leaf origin {
                type ip-address-origin;
              }
            }  // list address
          }  // container ipv4-state
    
          container ipv6 {
            presence
              "Enables IPv6 unless the 'enabled' leaf
                    (which defaults to 'true') is set to 'false'";
            description
              "Parameters for the IPv6 address family.";
            leaf enabled {
              type boolean;
              default "false";
              description
                "Controls whether IPv6 is enabled or disabled on this
               interface.  When IPv6 is enabled, this interface is
               connected to an IPv6 stack, and the interface can send
               and receive IPv6 packets.";
            }
    
            leaf forwarding {
              type boolean;
              default "false";
              description
                "Controls IPv6 packet forwarding of datagrams received by,
               but not addressed to, this interface.  IPv6 routers
               forward datagrams.  IPv6 hosts do not (except those
               source-routed via the host).";
              reference
                "RFC 4861: Neighbor Discovery for IP version 6 (IPv6)
                	  Section 6.2.1, IsRouter";
    
            }
    
            leaf mtu {
              type uint32 {
                range "1280..max";
              }
              units "octets";
              default "1500";
              description
                "The size, in octets, of the largest IPv6 packet that the
               interface will send and receive.
    
               The server may restrict the allowed values for this leaf,
               depending on the interface's type.
    
               If this leaf is not configured, the operationally used MTU
               depends on the interface's type.";
              reference
                "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
                	  Section 5";
    
            }
    
            leaf dhcpc-enabled {
              type boolean;
              default "true";
              description "DHCP Client enabled";
            }
    
            choice address-type {
              description "Address type choice";
              list address {
                key "ip";
                description
                  "The list of configured IPv6 addresses on the interface.";
                leaf ip {
                  type inet:ipv6-address-no-zone;
                  description
                    "The IPv6 address on the interface.";
                }
    
                leaf prefix-length {
                  type uint8 {
                    range "0..128";
                  }
                  mandatory true;
                  description
                    "The length of the subnet prefix.";
                }
              }  // list address
    
              case unnumbered-address {
                description
                  "Unnumbered address case";
                leaf address-src {
                  type leafref {
                    path "/org-openroadm-device:org-openroadm-device/org-openroadm-device:interface/org-openroadm-device:name";
                  }
                  description
                    "Unnumbered address source";
                }
              }  // case unnumbered-address
            }  // choice address-type
    
            container proxy-ndp {
              presence
                "Creates Proxy NDP container with its function disabled unless the
            'enabled' leaf (which defaults to 'false') is set to 'true'";
              description "Configure Proxy NDP";
              leaf enabled {
                type boolean;
                default "false";
                description
                  "Enable / Disable proxy NDP support";
              }
    
              list proxy-subnet {
                if-feature ipv6-proxy-ndp-subnet;
                key "ipv6-subnet";
                description
                  "The list of IPv6 proxy subnet rules";
                leaf ipv6-subnet {
                  type inet:ipv6-prefix;
                  description
                    "The IPv6 proxy subnet on the interface";
                }
              }  // list proxy-subnet
            }  // container proxy-ndp
          }  // container ipv6
    
          container ipv6-state {
            presence
              "Data nodes for operational state of IPv6 on interfaces";
            config false;
            description "State for the IPv6";
            leaf forwarding {
              type boolean;
            }
    
            leaf mtu {
              type uint32 {
                range "1280..max";
              }
              units "octets";
              default "1500";
              description
                "The size, in octets, of the largest IPv6 packet that the
               interface will send and receive.
    
               The server may restrict the allowed values for this leaf,
               depending on the interface's type.
    
               If this leaf is not configured, the operationally used MTU
               depends on the interface's type.";
              reference
                "RFC 2460: Internet Protocol, Version 6 (IPv6) Specification
                	  Section 5";
    
            }
    
            list address {
              key "ip";
              description
                "The list of configured IPv6 addresses on the interface.";
              leaf ip {
                type inet:ipv6-address-no-zone;
                description
                  "The IPv6 address on the interface.";
              }
    
              leaf prefix-length {
                type uint8 {
                  range "0..128";
                }
                mandatory true;
                description
                  "The length of the subnet prefix.";
              }
            }  // list address
    
            leaf origin {
              type ip-address-origin;
            }
    
            leaf status {
              type ipv6-address-status;
            }
          }  // container ipv6-state
        }  // grouping ip-grp
    
        augment /org-openroadm-device:org-openroadm-device/org-openroadm-device:interface {
          description
            "Parameters for configuring IP on interfaces.
    
           If an interface is not capable of running IP, the server
           must not allow the client to configure these parameters.";
          uses ip-grp;
        }
      }  // module org-openroadm-ip
    

© 2023 YumaWorks, Inc. All rights reserved.