submodule openconfig-pf-interfaces {
  belongs-to openconfig-policy-forwarding {
    prefix "oc-pf";
  }

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

  include openconfig-pf-forwarding-policies;

  organization
    "OpenConfig working group";

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

  description
    "This submodule contains groupings related to the association
    between interfaces and policy forwarding rules.";

  oc-ext:openconfig-version "0.2.0";

  revision "2017-06-21" {
    description
      "Amend policy forwarding model based on ACL changes.";
    reference "0.2.0";
  }

  revision "2017-02-28" {
    description
      "Initial public release of policy forwarding.";
    reference "0.1.0";
  }

  revision "2016-11-08" {
    description
      "Initial revision";
    reference "0.0.1";
  }


  grouping pf-interfaces-structural {
    description
      "Structural grouping for interface to forwarding policy bindings
      within the policy-forwarding model.";

    container interfaces {
      description
        "Configuration and operational state relating policy
        forwarding on interfaces.";

      list interface {
        key "interface-id";

        description
          "Configuration and operationals state relating to the
          relationship between interfaces and policy-based forwarding
          rules.";

        leaf interface-id {
          type leafref {
            path "../config/interface-id";
          }
          description
            "A reference to the unique identifier for the interface
            being referenced by the policy.";
        }

        container config {
          description
            "Configuration parameters relating to an interface to
            policy forwarding rule binding.";

          uses pf-interface-config;
        }

        container state {
          config false;
          description
            "Operational state parameters relating to an interface to
            policy forwarding rule binding.";

          uses pf-interface-config;
        }

        uses oc-if:interface-ref;
      }
    }
  }

  grouping pf-interface-config {
    description
      "Configuration parameters relating to an interface to policy
      forwarding rule binding.";

    leaf interface-id {
      type oc-if:interface-id;
      description
        "A unique identifier for the interface.";
    }

    leaf apply-forwarding-policy {
      type leafref {
        // We are at /network-instances/network-instance/
        // policy-forwarding/interfaces/interface/config/
        // apply-forwarding-policy
        path "../../../../policies/policy/" +
             "config/policy-id";
      }
      description
        "The policy to be applied on the interface. Packets ingress on
        the referenced interface should be compared to the match
        criteria within the specified policy, and in the case that
        these criteria are met, the forwarding actions specified
        applied. These policies should be applied following quality of
        service classification, and ACL actions if such entities are
        referenced by the corresponding interface.";
    }
  }
}
