module Cisco-IOS-XR-ip-static-cfg {

  /*** NAMESPACE / PREFIX DEFINITION ***/

  namespace "http://cisco.com/ns/yang/Cisco-IOS-XR-ip-static-cfg";


  prefix "ip-static-cfg";

  /*** LINKAGE (IMPORTS / INCLUDES) ***/

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

  import Cisco-IOS-XR-types { prefix "xr"; }

  /*** META INFORMATION ***/

  organization "Cisco Systems, Inc.";

  contact
    "Cisco Systems, Inc.
     Customer Service

     Postal: 170 West Tasman Drive
     San Jose, CA 95134

     Tel: +1 800 553-NETS

     E-mail: cs-yang@cisco.com";

  description
    "This module contains a collection of YANG definitions
     for Cisco IOS-XR ip-static package configuration.

     This module contains definitions
     for the following management objects:
       router-static: This class represents router static
         configuration

     Copyright (c) 2013 by Cisco Systems, Inc.
     All rights reserved.";

  revision "2013-07-22" {
    description
      "Initial revision.";
  }


  grouping VRF-ROUTE {
    description "Common node of vrf-prefix, vrf-prefix-topology";

    container vrf-route {
      xr:xr-xml-map "ip_static_cfg:VRFRoute";
      description "A connected or recursive  static route";

      container vrf-next-hops {
        xr:xr-xml-map "ip_static_cfg:VRFNextHopTable";
        description
          "A forwarding interface and/or the address of a
          nexthop router for this route (one of these
          must be specified)";

        grouping VRF-NEXT-HOP-CONTENT {
          description "Content grouping.";
          leaf bfd-fast-detect {
            xr:xr-xml-map "ip_static_cfg:BFDFastDetect";
            type boolean;
            default "false";
            description "If set, bfd is enabled";
          }
          leaf minimum-interval {
            xr:xr-xml-map "ip_static_cfg:MinimumInterval";
            type uint32 {
              range "3..30000";
            }
            units "millisecond";
            default "100";
            description "BFD Hello interval in milliseconds";
          }
          leaf detect-multiplier {
            xr:xr-xml-map "ip_static_cfg:DetectMultiplier";
            type uint32 {
              range "1..10";
            }
            default "3";
            description "BFD Detect Multiplier";
          }
          leaf metric {
            xr:xr-xml-map "ip_static_cfg:Metric";
            type uint32 {
              range "1..254";
            }
            default "1";
            description "Distance metric for this path";
          }
          leaf tag {
            xr:xr-xml-map "ip_static_cfg:Tag";
            type uint32 {
              range "1..4294967295";
            }
            description "Tag for this path";
          }
          leaf permanent {
            xr:xr-xml-map "ip_static_cfg:Permanent";
            type boolean;
            default "false";
            description "If set, path is permanent";
          }
          leaf vrf-lable {
            xr:xr-xml-map "ip_static_cfg:VRFLable";
            type uint32 {
              range "0..4294967295";
            }
            default "0";
            description "VRF LABEL";
          }
          leaf tunnel-id {
            xr:xr-xml-map "ip_static_cfg:TunnelID";
            type uint32 {
              range "0..65535";
            }
            default "0";
            description "Tunnel ID for this path";
          }
          leaf object-name {
            xr:xr-xml-map "ip_static_cfg:ObjectName";
            type xr:Cisco-ios-xr-string {
              length "0..32";
            }
            description "Name of the object to track";
          }
          leaf description {
            xr:xr-xml-map "ip_static_cfg:Description";
            type string;
            description "Short Description of Static Route";
          }
        }

        list interface-name-and-next-hop-address {
          xr:xr-xml-map "ip_static_cfg:VRFNextHop";
          key "interface-name next-hop-address";
          description "keys: interface-name, next-hop-address";
          leaf interface-name {
            xr:xr-xml-map "ip_static_cfg:InterfaceName";
            type xr:Interface-name;
            description "Forwarding interface";
          }
          leaf next-hop-address {
            xr:xr-xml-map "ip_static_cfg:NextHopAddress";
            type inet:ip-address;
            description "Next hop address";
          }
          uses VRF-NEXT-HOP-CONTENT;
        }

        list interface-name {
          xr:xr-xml-map "ip_static_cfg:VRFNextHop";
          key "interface-name";
          description "keys: interface-name";
          leaf interface-name {
            xr:xr-xml-map "ip_static_cfg:InterfaceName";
            type xr:Interface-name;
            description "Forwarding interface";
          }
          uses VRF-NEXT-HOP-CONTENT;
        }

        list next-hop-address {
          xr:xr-xml-map "ip_static_cfg:VRFNextHop";
          key "next-hop-address";
          description "keys: next-hop-address";
          leaf next-hop-address {
            xr:xr-xml-map "ip_static_cfg:NextHopAddress";
            type inet:ip-address;
            description "Next hop address";
          }
          uses VRF-NEXT-HOP-CONTENT;
        }
      }
    }
  }

  grouping TOPOLOGY-TABLE {
    description "Common node of vrf-unicast, vrf-multicast";

    container topologies {
      xr:xr-xml-map "ip_static_cfg:TopologyTable";
      description "Topology static configuration container";

      list topology {
        xr:xr-xml-map "ip_static_cfg:Topology";
        key "topology-name";
        description "Topology static configuration";
        leaf topology-name {
          xr:xr-xml-map "ip_static_cfg:TopologyName";
          type xr:Cisco-ios-xr-string;
          description "Topology name";
        }
        uses VRF-PREFIX-TOPOLOGY-TABLE;
      }
    }
  }

  grouping VRF-PREFIX-TABLE {
    description "Common node of vrf-unicast, vrf-multicast";

    container vrf-prefixes {
      xr:xr-xml-map "ip_static_cfg:VRFPrefixTable";
      description "The set of all Static Topologies for this AFI.";

      list vrf-prefix {
        xr:xr-xml-map "ip_static_cfg:VRFPrefix";
        key "prefix prefix-length";
        description "A static route";
        leaf prefix {
          xr:xr-xml-map "ip_static_cfg:Prefix";
          type inet:ip-address;
          description "Destination prefix";
        }
        leaf prefix-length {
          xr:xr-xml-map "ip_static_cfg:PrefixLength";
          type uint32 {
            range "0..128";
          }
          description "Destination prefix length";
        }
        uses VRF-ROUTE;
      }
    }
  }

  grouping ADDRESS-FAMILY {
    description "Common node of default-vrf, vrf";

    container address-family {
      xr:xr-xml-map "ip_static_cfg:AddressFamily";
      description "Address family configuration";

      container vrfipv4 {
        xr:xr-xml-map "ip_static_cfg:VRFIPV4";
        description "IPv4 static configuration";
        uses VRF-UNICAST;
        uses VRF-MULTICAST;
      }

      container vrfipv6 {
        xr:xr-xml-map "ip_static_cfg:VRFIPV6";
        description "IPv6 static configuration";
        uses VRF-UNICAST;
        uses VRF-MULTICAST;
      }
    }
  }

  grouping VRF-PREFIX-TOPOLOGY-TABLE {
    description "Common node of default-topology, topology";

    container vrf-prefix-topologies {
      xr:xr-xml-map "ip_static_cfg:VRFPrefixTopologyTable";
      description "The set of all Static Topologies for this AFI.";

      list vrf-prefix-topology {
        xr:xr-xml-map "ip_static_cfg:VRFPrefixTopology";
        key "prefix prefix-length";
        description "A static route";
        leaf prefix {
          xr:xr-xml-map "ip_static_cfg:Prefix";
          type inet:ip-address;
          description "Destination prefix";
        }
        leaf prefix-length {
          xr:xr-xml-map "ip_static_cfg:PrefixLength";
          type uint32 {
            range "0..128";
          }
          description "Destination prefix length";
        }
        uses VRF-ROUTE;
      }
    }
  }

  grouping DEFAULT-TOPOLOGY {
    description "Common node of vrf-unicast, vrf-multicast";

    container default-topology {
      xr:xr-xml-map "ip_static_cfg:DefaultTopology";
      description "Default topology configuration";
      uses VRF-PREFIX-TOPOLOGY-TABLE;
    }
  }

  grouping VRF-UNICAST {
    description "Common node of vrfipv4, vrfipv6";

    container vrf-unicast {
      xr:xr-xml-map "ip_static_cfg:VRFUnicast";
      description "Unicast static configuration";
      uses TOPOLOGY-TABLE;
      uses VRF-PREFIX-TABLE;
      uses DEFAULT-TOPOLOGY;
    }
  }

  grouping VRF-MULTICAST {
    description "Common node of vrfipv4, vrfipv6";

    container vrf-multicast {
      xr:xr-xml-map "ip_static_cfg:VRFMulticast";
      description "Multicast static configuration";
      uses TOPOLOGY-TABLE;
      uses VRF-PREFIX-TABLE;
      uses DEFAULT-TOPOLOGY;
    }
  }

  container router-static {
    xr:xr-xml-map "ip_static_cfg:RouterStatic";
    description "This class represents router static configuration";

    container vrfs {
      xr:xr-xml-map "ip_static_cfg:VRFTable";
      description "VRF static configuration container";

      list vrf {
        xr:xr-xml-map "ip_static_cfg:VRF";
        key "vrf-name";
        description "VRF static configuration";
        leaf vrf-name {
          xr:xr-xml-map "ip_static_cfg:VRFName";
          type xr:Cisco-ios-xr-string;
          description "VRF name";
        }
        uses ADDRESS-FAMILY;
      }
    }

    container default-vrf {
      xr:xr-xml-map "ip_static_cfg:DefaultVRF";
      description "Default VRF configuration";
      uses ADDRESS-FAMILY;
    }

    container maximum-routes {
      xr:xr-xml-map "ip_static_cfg:MaximumRoutes";
      description
        "The maximum number of static routes that can be
        configured.";
      leaf ipv6-routes {
        xr:xr-xml-map "ip_static_cfg:IPV6Routes";
        type uint32 {
          range "1..140000";
        }
        default "4000";
        description
          "The maximum number of static routes that can be
          configured for this AFI";
      }
      leaf ipv4-routes {
        xr:xr-xml-map "ip_static_cfg:IPV4Routes";
        type uint32 {
          range "1..140000";
        }
        default "4000";
        description
          "The maximum number of static routes that can be
          configured for this AFI";
      }
    }
  }
}