Added a set of abstractions for flow rule subsystem.
Added an apps source subtree.
diff --git a/core/api/src/main/java/org/onlab/onos/net/flow/Criterion.java b/core/api/src/main/java/org/onlab/onos/net/flow/Criterion.java
new file mode 100644
index 0000000..0b55a42
--- /dev/null
+++ b/core/api/src/main/java/org/onlab/onos/net/flow/Criterion.java
@@ -0,0 +1,98 @@
+package org.onlab.onos.net.flow;
+
+/**
+ * Representation of a single header field selection.
+ */
+public interface Criterion {
+
+    /**
+     * Types of fields to which the selection criterion may apply.
+     */
+    // From page 42 of OpenFlow 1.3.x spec
+    public enum Type {
+        /** Switch input port. */
+        IN_PORT,
+        /** Switch physical input port. */
+        IN_PHY_PORT,
+        /** Metadata passed between tables. */
+        METADATA,
+        /** Ethernet destination address. */
+        ETH_DST,
+        /** Ethernet source address. */
+        ETH_SRC,
+        /** Ethernet frame type. */
+        ETH_TYPE,
+        /** VLAN id. */
+        VLAN_VID,
+        /** VLAN priority. */
+        VLAN_PCP,
+        /** IP DSCP (6 bits in ToS field). */
+        IP_DSCP,
+        /** IP ECN (2 bits in ToS field). */
+        IP_ECN,
+        /** IP protocol. */
+        IP_PROTO,
+        /** IPv4 source address. */
+        IPV4_SRC,
+        /** IPv4 destination address. */
+        IPV4_DST,
+        /** TCP source port. */
+        TCP_SRC,
+        /** TCP destination port. */
+        TCP_DST,
+        /** UDP source port. */
+        UDP_SRC,
+        /** UDP destination port. */
+        UDP_DST,
+        /** SCTP source port. */
+        SCTP_SRC,
+        /** SCTP destination port. */
+        SCTP_DST,
+        /** ICMP type. */
+        ICMPV4_TYPE,
+        /** ICMP code. */
+        ICMPV4_CODE,
+        /** ARP opcode. */
+        ARP_OP,
+        /** ARP source IPv4 address. */
+        ARP_SPA,
+        /** ARP target IPv4 address. */
+        ARP_TPA,
+        /** ARP source hardware address. */
+        ARP_SHA,
+        /** ARP target hardware address. */
+        ARP_THA,
+        /** IPv6 source address. */
+        IPV6_SRC,
+        /** IPv6 destination address. */
+        IPV6_DST,
+        /** IPv6 Flow Label. */
+        IPV6_FLABEL,
+        /** ICMPv6 type. */
+        ICMPV6_TYPE,
+        /** ICMPv6 code. */
+        ICMPV6_CODE,
+        /** Target address for ND. */
+        IPV6_ND_TARGET,
+        /** Source link-layer for ND. */
+        IPV6_ND_SLL,
+        /** Target link-layer for ND. */
+        IPV6_ND_TLL,
+        /** MPLS label. */
+        MPLS_LABEL,
+        /** MPLS TC. */
+        MPLS_TC,
+        /** MPLS BoS bit. */
+        MPLS_BOS,
+        /** PBB I-SID. */
+        PBB_ISID,
+        /** Logical Port Metadata. */
+        TUNNEL_ID,
+        /** IPv6 Extension Header pseudo-field. */
+        IPV6_EXTHDR
+    }
+
+    // TODO: Create factory class 'Criteria' that will have various factory
+    // to create specific criterions.
+
+}