Define new type of group CLONE

Used to distinguish between multicast groups and clone sessions in
P4Runtime.

Change-Id: I21a2411c759a1d9524b4a69354c8b343100f8f05
diff --git a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
index 6986103..4b3d64f 100644
--- a/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
+++ b/core/api/src/main/java/org/onosproject/net/group/DefaultGroupBucket.java
@@ -153,6 +153,20 @@
                                       null);
     }
 
+    /**
+     * Creates clone group bucket.
+     *
+     * @param treatment traffic treatment associated with group bucket
+     * @return clone group bucket object
+     */
+    public static GroupBucket createCloneGroupBucket(TrafficTreatment treatment) {
+        return new DefaultGroupBucket(GroupDescription.Type.CLONE,
+                                      treatment,
+                                      (short) -1,
+                                      null,
+                                      null);
+    }
+
     @Override
     public GroupDescription.Type type() {
         return this.type;
diff --git a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
index 3ae93d5..69ebe8d 100644
--- a/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
+++ b/core/api/src/main/java/org/onosproject/net/group/GroupDescription.java
@@ -41,6 +41,12 @@
          */
         ALL,
         /**
+         * Similar to {@link Type#ALL} but used for cloning of packets
+         * independently of the egress decision (singleton treatment or other
+         * group).
+         */
+        CLONE,
+        /**
          * Uses the first live bucket in a group.
          */
         FAILOVER
diff --git a/core/common/src/main/java/org/onosproject/codec/impl/GroupCodec.java b/core/common/src/main/java/org/onosproject/codec/impl/GroupCodec.java
index 36df2f6..37c0319 100644
--- a/core/common/src/main/java/org/onosproject/codec/impl/GroupCodec.java
+++ b/core/common/src/main/java/org/onosproject/codec/impl/GroupCodec.java
@@ -146,6 +146,9 @@
             case "ALL":
                 groupType = Group.Type.ALL;
                 break;
+            case "CLONE":
+                groupType = Group.Type.CLONE;
+                break;
             case "FAILOVER":
                 groupType = Group.Type.FAILOVER;
                 break;