huawei-nvo3

Management for data center network virtualization over Layer 3.

  • Version: 2021-08-12

    huawei-nvo3@2021-08-12


    
      module huawei-nvo3 {
    
        yang-version 1;
    
        namespace "urn:huawei:yang:huawei-nvo3";
    
        prefix nvo3;
    
        import huawei-bd {
          prefix bd;
        }
        import huawei-ifm {
          prefix ifm;
        }
        import huawei-network-instance {
          prefix ni;
        }
        import huawei-pub-type {
          prefix pub-type;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import huawei-extension {
          prefix ext;
        }
        import huawei-evpl {
          prefix evpl;
        }
    
        organization
          "Huawei Technologies Co., Ltd.";
    
        contact
          "Huawei Industrial Base
    Bantian, Longgang
    Shenzhen 518129
    People's Republic of China
    Website: http://www.huawei.com
    Email: support@huawei.com";
    
        description
          "Management for data center network virtualization over Layer 3.";
    
        revision "2021-08-12" {
          description
            "Modify the description of leaf source-vtep-ip.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-03-06" {
          description
            "The modifications in the schema file are synchronized to the YANG file.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-03-01" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "nvo3";
    
        typedef vni-state {
          type enumeration {
            enum "down" {
              value 0;
              description "The state is down.";
            }
            enum "up" {
              value 1;
              description "The state is up.";
            }
          }
          description "The state for VNI.";
        }
    
        typedef tunnel-type {
          type enumeration {
            enum "dynamic" {
              value 0;
              description
                "Learning via protocols.";
            }
            enum "static" {
              value 1;
              description "Created by users.";
            }
          }
          description "VXLAN tunnel type.";
        }
    
        typedef tunnel-mode {
          type enumeration {
            enum "default-mode" {
              value 0;
              description "Default mode.";
            }
            enum "cu-mode" {
              value 1;
              description
                "Control-User separation mode.";
            }
          }
          description "VXLAN tunnel mode.";
        }
    
        typedef peer-learning-type {
          type enumeration {
            enum "peer" {
              value 1;
              description
                "Learning peers for multicast via BGP.";
            }
          }
          description
            "The type of peers Learning via BGP.";
        }
    
        typedef nqa-state-type {
          type enumeration {
            enum "unknown" {
              value 0;
              description
                "The NQA state is unknown.";
            }
            enum "down" {
              value 1;
              description
                "The NQA state is down.";
            }
            enum "up" {
              value 2;
              description "The NQA state is up.";
            }
          }
          description "The NQA state.";
        }
    
        typedef preference-type {
          type enumeration {
            enum "primary" {
              value 1;
              description "Primary enable.";
            }
            enum "secondary" {
              value 2;
              description "Secondary enable.";
            }
            enum "bypass" {
              value 4;
              description "Bypass enable.";
            }
          }
          description "Preference type.";
        }
    
        typedef ipv6-preference-type {
          type enumeration {
            enum "primary" {
              value 1;
              description "Primary enable.";
            }
            enum "secondary" {
              value 2;
              description "Secondary enable.";
            }
          }
          description "Preference type.";
        }
    
        container nvo3 {
          description "Management of NVO3.";
          container vni-instances {
            description
              "List of virtual extensible local area network.";
            list vni-instance {
              key "vni source-nve";
              description
                "Configure the information of virtual extensible local area network.";
              leaf vni {
                type uint32 {
                  range "1..16777215";
                }
                description
                  "VXLAN network identifier.";
              }
    
              leaf source-nve {
                type leafref {
                  path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                }
                must
                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:type='Nve'";
                description
                  "The name of interface NVE, as VXLAN tunnel source point.";
              }
    
              leaf state {
                type vni-state;
                config false;
                description
                  "The state of the VNI. When the VTEP address in the VNI is reachable, the state is up, the opposite is down.";
              }
    
              leaf protocol-bgp {
                type peer-learning-type;
                description
                  "Learning VTEPs via BGP for communication in a same VNI.";
              }
    
              container static-peers {
                description
                  "List of VTEPs created by users for multicast in a same VNI.";
                list static-peer {
                  key "address";
                  description
                    "Configure VTEP by users for multicast.";
                  leaf address {
                    type inet:ipv4-address-no-zone;
                    description
                      "The address of VTEP.";
                  }
                }  // list static-peer
              }  // container static-peers
    
              container static-ipv6-peers {
                description
                  "List of VTEPs created by users for multicast in a same VNI.";
                list static-ipv6-peer {
                  key "address";
                  description
                    "Configure VTEP by users for multicast.";
                  leaf address {
                    type inet:ipv6-address-no-zone;
                    description
                      "The IPv6 address of VTEP.";
                  }
                }  // list static-ipv6-peer
              }  // container static-ipv6-peers
    
              container static-evpl-peers {
                description
                  "List of VTEPs created by users for ethernet virtual private line in the same VNI.";
                list static-evpl-peer {
                  key "address";
                  max-elements 1;
                  description
                    "Configure VTEP by users for ethernet virtual private line.";
                  leaf address {
                    type inet:ipv4-address-no-zone;
                    must
                      "(not(../../../static-peers/static-peer) and not(../../../protocol-bgp)) or not(../address)";
                    description
                      "The address of VTEP.";
                  }
    
                  leaf preference {
                    ext:operation-exclude "update|delete";
                    type preference-type;
                    default "primary";
                    description
                      "The preference of VXLAN tunnel.";
                  }
                }  // list static-evpl-peer
              }  // container static-evpl-peers
    
              container static-evpl-ipv6-peers {
                description
                  "List of IPv6 VTEPs created by users for ethernet virtual private line in the same VNI.";
                list static-evpl-ipv6-peer {
                  key "address";
                  max-elements 1;
                  description
                    "Configure IPv6 VTEP by users for ethernet virtual private line.";
                  leaf address {
                    type inet:ipv6-address-no-zone;
                    description
                      "The IPv6 address of VTEP.";
                  }
    
                  leaf preference {
                    ext:operation-exclude "update|delete";
                    type ipv6-preference-type;
                    default "primary";
                    description
                      "The preference of VXLAN6 tunnel.";
                  }
                }  // list static-evpl-ipv6-peer
              }  // container static-evpl-ipv6-peers
            }  // list vni-instance
          }  // container vni-instances
    
          container vni-labels {
            description
              "List of VXLAN network identifiers.";
            list vni-label {
              key "vni";
              description
                "Configure VXLAN network identifier.";
              leaf vni {
                type uint32 {
                  range "1..16777215";
                }
                description
                  "VXLAN network identifier.";
              }
            }  // list vni-label
          }  // container vni-labels
    
          container vteps {
            config false;
            description "Statistics of VTEPs.";
            container peers {
              config false;
              description
                "List of VTEPs for multicast in a same VNI.";
              list peer {
                key "vni source destination";
                config false;
                description
                  "Operational data of VTEPs for multicast with the same VNI.";
                leaf vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  config false;
                  description
                    "VXLAN network identifier.";
                }
    
                leaf source {
                  type inet:ip-address-no-zone;
                  config false;
                  description
                    "The address of VXLAN tunnel source point.";
                }
    
                leaf destination {
                  type inet:ip-address-no-zone;
                  config false;
                  description
                    "The address of VTEP.";
                }
    
                leaf type {
                  type tunnel-type;
                  config false;
                  description
                    "The type of VXLAN tunnel.";
                }
    
                leaf out-vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  config false;
                  description
                    "VXLAN network identifier for mapping.";
                }
              }  // list peer
            }  // container peers
    
            container cu-peers {
              config false;
              description
                "List of VNI Peers Table of CU Mode.";
              list cu-peer {
                key "vni source destination";
                description
                  "Operational data of VNI Peer Table of CU Mode.";
                leaf vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "The identification of VXLAN tunnel.";
                }
    
                leaf source {
                  type inet:ip-address-no-zone;
                  description
                    "The address of VXLAN tunnel source point.";
                }
    
                leaf destination {
                  type inet:ip-address-no-zone;
                  description
                    "The address of VTEP.";
                }
    
                leaf type {
                  type tunnel-type;
                  description
                    "VXLAN tunnel type.";
                }
    
                leaf out-vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "VXLAN network identifier for mapping.";
                }
    
                leaf nqa-state {
                  type nqa-state-type;
                  description
                    "The NQA state:unknown, down or up.";
                }
    
                leaf packet-loss-ratio {
                  type uint8 {
                    range "0..100";
                  }
                  units "%";
                  description
                    "The NQA packet loss ratio.";
                }
              }  // list cu-peer
            }  // container cu-peers
    
            container evpl-peers {
              config false;
              description
                "List of VTEPs for ethernet virtual private line in a same VNI.";
              list evpl-peer {
                key "id";
                description
                  "Operational data of VTEPs for Ethernet virtual private lines with the same VNI.";
                leaf id {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "The identification of the EVPL instance.";
                }
    
                leaf vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "Local VNI for communication.";
                }
    
                leaf source {
                  type inet:ip-address-no-zone;
                  description
                    "The address of VXLAN tunnel source point.";
                }
    
                leaf ipv6-source {
                  type inet:ipv6-address-no-zone;
                  description
                    "The IPv6 address of VXLAN tunnel source point.";
                }
    
                leaf peer {
                  type inet:ip-address-no-zone;
                  description
                    "The address of primary VTEP.";
                }
    
                leaf out-vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "Primary VNI for mapping.";
                }
    
                leaf backup-peer {
                  type inet:ip-address-no-zone;
                  description
                    "The address of backup VTEP.";
                }
    
                leaf backup-out-vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "Backup VNI for mapping.";
                }
    
                leaf bypass-peer {
                  type inet:ip-address-no-zone;
                  description
                    "The address of bypass VTEP.";
                }
    
                leaf bypass-out-vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "Bypass VNI for mapping.";
                }
              }  // list evpl-peer
            }  // container evpl-peers
          }  // container vteps
    
          container global-attribute {
            description
              "Configure global attribute of VXLAN.";
            leaf exact-sub-enable {
              type boolean;
              default "false";
              description
                "Enable/disable exact route subscribe.";
            }
          }  // container global-attribute
    
          container tunnels {
            config false;
            description
              "List of VXLAN tunnel information.";
            list tunnel {
              key "id";
              config false;
              description
                "Statistics of VXLAN tunnels.";
              leaf id {
                type uint32 {
                  range "1..4294967295";
                }
                config false;
                description
                  "The identification of VXLAN tunnel.";
              }
    
              leaf source {
                ext:support-filter "true";
                type inet:ip-address-no-zone;
                config false;
                description
                  "The address of VXLAN tunnel source point.";
              }
    
              leaf destination {
                ext:support-filter "true";
                type inet:ip-address-no-zone;
                config false;
                description
                  "The address of VTEP.";
              }
    
              leaf mode {
                ext:support-filter "true";
                type tunnel-mode;
                config false;
                description "VXLAN tunnel mode.";
              }
    
              leaf state {
                type vni-state;
                config false;
                description
                  "VXLAN tunnel state. When the address of VTEP is reachable, the state is up, otherwise is down.";
              }
    
              leaf type {
                type tunnel-type;
                config false;
                description "VXLAN tunnel type.";
              }
    
              leaf up-time {
                type string {
                  length "1..10";
                }
                config false;
                description
                  "The continuous time as VXLAN tunnel is reachable.";
              }
    
              leaf vpn-name {
                ext:support-filter "true";
                type string {
                  length "1..31";
                }
                description "VPN instance name.";
              }
            }  // list tunnel
          }  // container tunnels
        }  // container nvo3
    
        augment /ifm:ifm/ifm:interfaces/ifm:interface {
          description
            "The NVO3 configuration for interface.";
          container nve {
            when "../ifm:type='Nve'";
            description
              "Configure NVO3 for interface NVE.";
            container attribute {
              must
                "(./source-vtep-ip and ./bypass-vtep-ip and ./source-vtep-ip != ./bypass-vtep-ip) or not(./source-vtep-ip) or not(./bypass-vtep-ip) ";
              must
                "(./source-vtep-ipv6 and ./bypass-vtep-ipv6 and ./source-vtep-ipv6 != ./bypass-vtep-ipv6) or not(./source-vtep-ipv6) or not(./bypass-vtep-ipv6) ";
              description
                "Configure VTEPs for interface NVE.";
              leaf source-vtep-ip {
                type inet:ipv4-address-no-zone;
                description
                  "The address of interface NVE, as VXLAN tunnel source point.";
              }
    
              leaf source-vtep-ipv6 {
                type inet:ipv6-address-no-zone;
                description
                  "The IPv6 address of interface NVE, as VXLAN tunnel source point.";
              }
    
              leaf phys-address {
                type pub-type:mac-address {
                }
                description
                  "The interface's address at its protocol sub-layer. For example, for an 802.x interface, this object normally contains a Media Access Control (MAC) address.";
              }
    
              leaf bypass-vtep-ip {
                type inet:ipv4-address-no-zone;
                description
                  "The address of interface NVE, as source point in bypass VXLAN tunnel.";
              }
    
              leaf bypass-vtep-ipv6 {
                type inet:ipv6-address-no-zone;
                description
                  "The IPv6 address of interface NVE, as source point in bypass VXLAN tunnel.";
              }
            }  // container attribute
    
            container pip {
              must
                "((./source-ip and ./peer-ip) and (./source-ip != ./peer-ip)) or (not(./source-ip) and not(./peer-ip))";
              description
                "Configure primary IP address as bypass VXLAN tunnel.";
              leaf source-ip {
                ext:operation-exclude "delete";
                type inet:ipv4-address-no-zone;
                must
                  "not (../../attribute[source-vtep-ip != current()])";
                description
                  "The address of interface NVE, as VXLAN tunnel source point.";
              }
    
              leaf peer-ip {
                ext:operation-exclude "delete";
                type inet:ipv4-address-no-zone;
                must
                  "not (../../attribute[source-vtep-ip != current()])";
                description
                  "The address of interface NVE, as VXLAN tunnel peer point.";
              }
            }  // container pip
          }  // container nve
    
          container nvo3-gateway {
            when "../ifm:type='Vbdif'";
            description
              "Configure anycast gateway features for NVO3.";
            leaf vxlan-anycast-gateway {
              type boolean;
              default "false";
              description
                "Enable/disable VXLAN anycast gateway features.";
            }
    
            leaf common-anycast-gateway {
              type boolean;
              default "false";
              description
                "Enable/disable common anycast gateway features.";
            }
          }  // container nvo3-gateway
        }
    
        augment /bd:bd/bd:instances/bd:instance {
          description
            "The NVO3 configuration for bridge domains.";
          container nvo3 {
            must
              "../bd:mac-learn-style!='qualify'";
            description
              "Configure NVO3 for a BD.";
            list vni-list {
              key "vni";
              max-elements 1;
              description
                "Configure the list of VNI that a bridge domain corresponds.";
              leaf vni {
                type uint32 {
                  range "1..16777215";
                }
                description
                  "VXLAN network identifier.";
              }
    
              leaf split-horizon {
                type boolean;
                default "false";
                description
                  "Enable/disable split horizon mode.";
              }
    
              leaf source-vtep-ip {
                type inet:ipv4-address-no-zone;
                description
                  "The address of VXLAN tunnel source point. When not configured, the address of interface NVE is used as default.";
              }
            }  // list vni-list
          }  // container nvo3
        }
    
        augment /ni:network-instance/ni:instances/ni:instance {
          description
            "The NVO3 configuration for network instances.";
          container nvo3 {
            when "../ni:name != '_public_'";
            description
              "Configure NVO3 for a network instance.";
            list vni-list {
              key "vni";
              max-elements 1;
              description
                "Configure NVO3 for a network instance.";
              leaf vni {
                type uint32 {
                  range "1..16777215";
                }
                description
                  "VXLAN network identifier.";
              }
    
              leaf source-vtep-ip {
                type inet:ipv4-address-no-zone;
                description
                  "The address of VXLAN tunnel source point. When not configured, the address of interface NVE is used as default.";
              }
            }  // list vni-list
          }  // container nvo3
        }
    
        augment /evpl:evpl/evpl:instances/evpl:instance {
          when "./evpl:mode = 'vxlan-mode'";
          description
            "The NVO3 configuration for EVPL instances.";
          container nvo3 {
            description
              "Configure NVO3 for an EVPL instance.";
            container attribute {
              description
                "Configure the attribute for an EVPL instance in VXLAN mode.";
              leaf vtep-ip {
                type inet:ipv4-address-no-zone;
                description
                  "The address of VXLAN tunnel source point. When not configured, the address of interface NVE is used as default.";
              }
            }  // container attribute
    
            container vni-lists {
              description
                "List of VXLAN network identifiers.";
              list vni-list {
                key "vni";
                max-elements 1;
                description
                  "Configure a VNI list for an EVPL instance in VXLAN mode.";
                leaf vni {
                  type uint32 {
                    range "1..16777215";
                  }
                  description
                    "VXLAN network identifier.";
                }
              }  // list vni-list
            }  // container vni-lists
          }  // container nvo3
        }
      }  // module huawei-nvo3
    

© 2023 YumaWorks, Inc. All rights reserved.