module openconfig-packet-match {

  yang-version "1";

  // namespace
  namespace "http://openconfig.net/yang/header-fields";

  prefix "oc-pkt-match";

  // import some basic types
  import openconfig-inet-types { prefix oc-inet; }
  import openconfig-yang-types { prefix oc-yang; }
  import openconfig-packet-match-types { prefix oc-pkt-match-types; }
  import openconfig-extensions { prefix oc-ext; }

  // meta
  organization "OpenConfig working group";

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

  description
    "This module defines data related to packet header fields
    used in matching operations, for example in ACLs.  When a
    field is omitted from a match expression, the effect is a
    wildcard ('any') for that field.";

  oc-ext:openconfig-version "1.0.0";

  revision "2017-05-26" {
    description
      "Separated IP matches into AFs";
    reference "1.0.0";
  }

  revision "2016-08-08" {
    description
      "OpenConfig public release";
    reference "0.2.0";
  }

  revision "2016-04-27" {
    description
      "Initial revision";
    reference "TBD";
  }


  // Physical Layer fields
  // ethernet-header
  grouping ethernet-header-config {
    description
      "Configuration data of fields in Ethernet header.";

    leaf source-mac {
      type oc-yang:mac-address;
      description
        "Source IEEE 802 MAC address.";
    }

    leaf source-mac-mask {
      type oc-yang:mac-address;
      description
        "Source IEEE 802 MAC address mask.";
    }

    leaf destination-mac {
      type oc-yang:mac-address;
      description
        "Destination IEEE 802 MAC address.";
    }

    leaf destination-mac-mask {
      type oc-yang:mac-address;
      description
        "Destination IEEE 802 MAC address mask.";
    }

    leaf ethertype {
      type oc-pkt-match-types:ethertype-type;
      description
        "Ethertype field to match in Ethernet packets";
    }
  }

  grouping ethernet-header-state {
    description
      "State information of fields in Ethernet header.";
  }

  grouping ethernet-header-top {
    description
      "Top level container for fields in Ethernet header.";

    container l2 {
      description
        "Ethernet header fields";

      container config {
        description
          "Configuration data";
        uses ethernet-header-config;
      }

      container state {
        config false;
        description
          "State Information.";
        uses ethernet-header-config;
        uses ethernet-header-state;
      }
    }
  }

  grouping ip-protocol-fields-common-config {
    description
      "IP protocol fields common to IPv4 and IPv6";

    leaf dscp {
      type oc-inet:dscp;
      description
        "Value of diffserv codepoint.";
    }

    leaf protocol {
      type oc-pkt-match-types:ip-protocol-type;
      description
        "The protocol carried in the IP packet, expressed either
        as its IP protocol number, or by a defined identity.";
    }

    leaf hop-limit {
      type uint8 {
        range 0..255;
      }
      description
        "The IP packet's hop limit -- known as TTL (in hops) in
        IPv4 packets, and hop limit in IPv6";
    }
  }

  // IP Layer
  // ip-protocol-fields
  grouping ipv4-protocol-fields-config {
    description
      "Configuration data of IP protocol fields
      for IPv4";

    leaf source-address {
      type oc-inet:ipv4-prefix;
      description
        "Source IPv4 address prefix.";
    }

    leaf destination-address {
      type oc-inet:ipv4-prefix;
      description
        "Destination IPv4 address prefix.";
    }

    uses ip-protocol-fields-common-config;

  }

  grouping ipv4-protocol-fields-state {
    description
      "State information of IP header fields for IPv4";
  }

  grouping ipv4-protocol-fields-top {
    description
      "IP header fields for IPv4";

    container ipv4 {
      description
        "Top level container for IPv4 match field data";

      container config {
        description
          "Configuration data for IPv4 match fields";
        uses ipv4-protocol-fields-config;
      }

      container state {
        config false;
        description
          "State information for IPv4 match fields";
        uses ipv4-protocol-fields-config;
        uses ipv4-protocol-fields-state;
      }
    }
  }

  grouping ipv6-protocol-fields-config {
    description
      "Configuration data for IPv6 match fields";

    leaf source-address {
      type oc-inet:ipv6-prefix;
      description
        "Source IPv6 address prefix.";
    }

    leaf source-flow-label {
      type oc-inet:ipv6-flow-label;
      description
        "Source IPv6 Flow label.";
    }

    leaf destination-address {
      type oc-inet:ipv6-prefix;
      description
        "Destination IPv6 address prefix.";
    }

    leaf destination-flow-label {
      type oc-inet:ipv6-flow-label;
      description
        "Destination IPv6 Flow label.";
    }

    uses ip-protocol-fields-common-config;
  }

  grouping ipv6-protocol-fields-state {
    description
      "Operational state data for IPv6 match fields";
  }

  grouping ipv6-protocol-fields-top {
    description
      "Top-level grouping for IPv6 match fields";

    container ipv6 {
      description
        "Top-level container for IPv6 match field data";

      container config {
        description
          "Configuration data for IPv6 match fields";

        uses ipv6-protocol-fields-config;
      }

      container state {

        config false;

        description
          "Operational state data for IPv6 match fields";

        uses ipv6-protocol-fields-config;
        uses ipv6-protocol-fields-state;
      }
    }
  }

  // Transport fields
  grouping transport-fields-config {
    description
      "Configuration data of transport-layer packet fields";

    leaf source-port {
      type oc-pkt-match-types:port-num-range;
      description
        "Source port or range";
    }

    leaf destination-port {
      type oc-pkt-match-types:port-num-range;
      description
        "Destination port or range";
    }

    leaf-list tcp-flags {
      type identityref {
        base oc-pkt-match-types:TCP_FLAGS;
      }
      description
        "List of TCP flags to match";
    }
  }

  grouping transport-fields-state {
    description
      "State data of transport-fields";
  }

  grouping transport-fields-top {
    description
      "Destination transport-fields top level grouping";

    container transport {
      description
        "Transport fields container";

      container config {
        description
          "Configuration data";
        uses transport-fields-config;
      }

      container state {
        config false;
        description
          "State data";
        uses transport-fields-config;
        uses transport-fields-state;
      }
    }
  }

}
