module openconfig-aft {

  yang-version "1";

  namespace "http://openconfig.net/yang/aft";

  prefix "oc-aft";

  import openconfig-extensions { prefix "oc-ext"; }

  // Include IPv4 AFT submodule.
  include openconfig-aft-ipv4;
  // Include IPv6 AFT submodule.
  include openconfig-aft-ipv6;
  // Include MPLS AFT submodule.
  include openconfig-aft-mpls;
  // Include policy forwarding AFT submodule.
  include openconfig-aft-pf;
  // Include the ethernet AFT submodule.
  include openconfig-aft-ethernet;
  // Include the common cross-AFT entities.
  include openconfig-aft-common;

  organization
    "OpenConfig working group";

  contact
    "OpenConfig working group
    www.openconfig.net";

  description
    "A model describing the forwarding entries installed on a network
    element. It should be noted that this model is not expected to
    align 1:1 with the underlying structure used directly by a
    forwarding element (e.g., linecard), but rather provide an
    abstraction that can be consumed by an NMS to observe, and in some
    cases manipulate, the internal forwarding database in a simplified
    manner. Since the underlying model of the forwarding table is not
    expected to align with this model, the structure described herein
    is referred to as an Abstract Forwarding Table (AFT), rather than
    the FIB.";

  oc-ext:openconfig-version "0.3.0";

  revision 2017-05-10 {
    description
      "Refactor to provide concretised per-AF schemas per AFT.";
    reference "0.3.0";
  }

  // config + state groupings

  // structural groupings

  grouping aft-top {
    description
      "Top-level grouping allowing per-protocol instantiation of the
      AFT.";

    container afts {
      description
        "The abstract forwarding tables (AFTs) that are associated
        with the network instance. An AFT is instantiated per-protocol
        running within the network-instance - such that one exists for
        IPv4 Unicast, IPv6 Unicast, MPLS, L2 forwarding entries, etc.
        A forwarding entry within the FIB has a set of next-hops,
        which may be a reference to an entry within another table -
        e.g., where a Layer 3 next-hop has an associated Layer 2
        forwarding entry.";

      container ipv4-unicast {
        description

          "The abstract forwarding table for IPv4 unicast. Entries
          within this table are uniquely keyed on the IPv4 unicast
          destination prefix which is matched by ingress packets.

          The data set represented by the IPv4 Unicast AFT is the set
          of entries from the IPv4 unicast RIB that have been selected
          for installation into the FIB of the device exporting the
          data structure.";

        uses aft-ipv4-unicast-structural;
      }

      container ipv6-unicast {
        description
          "The abstract forwarding table for IPv6 unicast. Entries
          within this table are uniquely keyed on the IPv6 unicast
          destination prefix which is matched by ingress packets.

          The data set represented by the IPv6 Unicast AFTis the set
          of entries within the IPv6 RIB that ";

        uses aft-ipv6-unicast-structural;

      }

      container policy-forwarding {
        description
          "The abstract forwarding table for policy-based forwarding
          entries. Since multiple match criteria can be utilised
          within a policy-based forwarding rule, this AFT provides a
          flexible match criteria, and is indexed based on an
          arbitrary 64-bit index. Entries within the AFT may match on
          multiple field types (e.g., L4 header fields, as well as L2
          fields).

          Examples of entries within this table are:
            - IPv4 policy-based routing based on DSCP.
            - MPLS policy-based forwarding entries.";

        uses aft-pf-structural;
      }

      container mpls {
        description
          "The abstract forwarding table for MPLS label based
          forwarding entries. Entries within the table are keyed based
          on the top-most MPLS label in the stack on the ingress
          packet.";

        uses aft-mpls-structural;
      }

      container ethernet {
        description
          "The abstract forwarding table for Ethernet based forwarding
          entries. Entries within the table are keyed based on the 
          destination MAC address on the ingress packet.";

        uses aft-ethernet-structural;
      }
    }
  }
}
