diff --git a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
index 500126a..10889fe 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
@@ -22,12 +22,13 @@
 import java.util.List;
 
 import org.apache.karaf.shell.commands.Option;
+import org.onlab.packet.Ip6Address;
+import org.onlab.packet.IpAddress;
 import org.onosproject.cli.AbstractShellCommand;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.net.Link;
 import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficSelector;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.intent.Constraint;
@@ -70,6 +71,30 @@
             required = false, multiValued = false)
     private String dstIpString = null;
 
+    @Option(name = "--fLabel", description = "IPv6 Flow Label",
+            required = false, multiValued = false)
+    private String fLabelString = null;
+
+    @Option(name = "--icmp6Type", description = "ICMPv6 Type",
+            required = false, multiValued = false)
+    private String icmp6TypeString = null;
+
+    @Option(name = "--icmp6Code", description = "ICMPv6 Code",
+            required = false, multiValued = false)
+    private String icmp6CodeString = null;
+
+    @Option(name = "--ndTarget", description = "IPv6 Neighbor Discovery Target Address",
+            required = false, multiValued = false)
+    private String ndTargetString = null;
+
+    @Option(name = "--ndSLL", description = "IPv6 Neighbor Discovery Source Link-Layer",
+            required = false, multiValued = false)
+    private String ndSLLString = null;
+
+    @Option(name = "--ndTLL", description = "IPv6 Neighbor Discovery Target Link-Layer",
+            required = false, multiValued = false)
+    private String ndTLLString = null;
+
     @Option(name = "--tcpSrc", description = "Source TCP Port",
             required = false, multiValued = false)
     private String srcTcpString = null;
@@ -78,6 +103,10 @@
             required = false, multiValued = false)
     private String dstTcpString = null;
 
+    @Option(name = "--extHdr", description = "IPv6 Extension Header Pseudo-field",
+            required = false, multiValued = false)
+    private String extHdrString = null;
+
     @Option(name = "-b", aliases = "--bandwidth", description = "Bandwidth",
             required = false, multiValued = false)
     private String bandwidthString = null;
@@ -104,6 +133,15 @@
             required = false, multiValued = false)
     private String setEthDstString = null;
 
+    @Option(name = "--setIpSrc", description = "Rewrite Source IP Address",
+            required = false, multiValued = false)
+    private String setIpSrcString = null;
+
+    @Option(name = "--setIpDst", description = "Rewrite Destination IP Address",
+            required = false, multiValued = false)
+    private String setIpDstString = null;
+
+
     // Priorities
     @Option(name = "-p", aliases = "--priority", description = "Priority",
             required = false, multiValued = false)
@@ -174,6 +212,30 @@
             selectorBuilder.matchIPProtocol((byte) ipProtoShort);
         }
 
+        if (!isNullOrEmpty(fLabelString)) {
+            selectorBuilder.matchIPv6FlowLabel(Integer.parseInt(fLabelString));
+        }
+
+        if (!isNullOrEmpty(icmp6TypeString)) {
+            selectorBuilder.matchIcmpv6Type((byte) Integer.parseInt(icmp6TypeString));
+        }
+
+        if (!isNullOrEmpty(icmp6CodeString)) {
+            selectorBuilder.matchIcmpv6Code((byte) Integer.parseInt(icmp6CodeString));
+        }
+
+        if (!isNullOrEmpty(ndTargetString)) {
+            selectorBuilder.matchIPv6NDTargetAddress(Ip6Address.valueOf(ndTargetString));
+        }
+
+        if (!isNullOrEmpty(ndSLLString)) {
+            selectorBuilder.matchIPv6NDSourceLinkLayerAddress(MacAddress.valueOf(ndSLLString));
+        }
+
+        if (!isNullOrEmpty(ndTLLString)) {
+            selectorBuilder.matchIPv6NDTargetLinkLayerAddress(MacAddress.valueOf(ndTLLString));
+        }
+
         if (!isNullOrEmpty(srcTcpString)) {
             selectorBuilder.matchTcpSrc((short) Integer.parseInt(srcTcpString));
         }
@@ -182,6 +244,10 @@
             selectorBuilder.matchTcpDst((short) Integer.parseInt(dstTcpString));
         }
 
+        if (!isNullOrEmpty(extHdrString)) {
+            selectorBuilder.matchIPv6ExthdrFlags(Integer.parseInt(extHdrString));
+        }
+
         return selectorBuilder.build();
     }
 
@@ -192,23 +258,25 @@
      * @return traffic treatment
      */
     protected TrafficTreatment buildTrafficTreatment() {
-        boolean hasEthSrc = !isNullOrEmpty(setEthSrcString);
-        boolean hasEthDst = !isNullOrEmpty(setEthDstString);
+        final TrafficTreatment.Builder treatmentBuilder = builder();
 
-        if (!hasEthSrc && !hasEthDst) {
-            return DefaultTrafficTreatment.emptyTreatment();
+        if (!isNullOrEmpty(setEthSrcString)) {
+            treatmentBuilder.setEthSrc(MacAddress.valueOf(setEthSrcString));
         }
 
-        final TrafficTreatment.Builder builder = builder();
-        if (hasEthSrc) {
-            final MacAddress setEthSrc = MacAddress.valueOf(setEthSrcString);
-            builder.setEthSrc(setEthSrc);
+        if (!isNullOrEmpty(setEthDstString)) {
+            treatmentBuilder.setEthDst(MacAddress.valueOf(setEthDstString));
         }
-        if (hasEthDst) {
-            final MacAddress setEthDst = MacAddress.valueOf(setEthDstString);
-            builder.setEthDst(setEthDst);
+
+        if (!isNullOrEmpty(setIpSrcString)) {
+            treatmentBuilder.setIpSrc(IpAddress.valueOf(setIpSrcString));
         }
-        return builder.build();
+
+        if (!isNullOrEmpty(setIpDstString)) {
+            treatmentBuilder.setIpSrc(IpAddress.valueOf(setIpDstString));
+        }
+
+        return treatmentBuilder.build();
     }
 
     /**
diff --git a/cli/src/main/java/org/onosproject/cli/net/IpProtocol.java b/cli/src/main/java/org/onosproject/cli/net/IpProtocol.java
index d197df9..5e0d865 100644
--- a/cli/src/main/java/org/onosproject/cli/net/IpProtocol.java
+++ b/cli/src/main/java/org/onosproject/cli/net/IpProtocol.java
@@ -16,6 +16,7 @@
 package org.onosproject.cli.net;
 
 import org.onlab.packet.IPv4;
+import org.onlab.packet.IPv6;
 
 /**
  * Known protocol values for IP protocol field that can be supplied to the CLI.
@@ -26,7 +27,9 @@
     /** TCP. **/
     TCP(IPv4.PROTOCOL_TCP),
     /** UDP. **/
-    UDP(IPv4.PROTOCOL_UDP);
+    UDP(IPv4.PROTOCOL_UDP),
+    /** ICMP6. **/
+    ICMP6(IPv6.PROTOCOL_ICMP6);
 
     private short value;
 
