diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowAddCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowAddCommand.java
new file mode 100644
index 0000000..70a0af1
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowAddCommand.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacktelemetry.cli;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.TpPort;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.openstacktelemetry.api.DefaultStatsFlowRule;
+import org.onosproject.openstacktelemetry.api.StatsFlowRule;
+import org.onosproject.openstacktelemetry.api.StatsFlowRuleAdminService;
+
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getProtocolTypeFromString;
+
+/**
+ * Adds vFlow telemetry rule.
+ */
+@Service
+@Command(scope = "onos", name = "telemetry-add-vflow",
+        description = "Adds a telemetry virtual flow rule")
+public class TelemetryVflowAddCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "Source IP", description = "Source IP address",
+            required = true, multiValued = false)
+    private String srcIp = null;
+
+    @Argument(index = 1, name = "Source port", description = "Source port number",
+            required = true, multiValued = false)
+    private String srcTpPort = null;
+
+    @Argument(index = 2, name = "Destination IP", description = "Destination IP address",
+            required = true, multiValued = false)
+    private String dstIp = null;
+
+    @Argument(index = 3, name = "Destination port", description = "Destination port number",
+            required = true, multiValued = false)
+    private String dstTpPort = null;
+
+    @Argument(index = 4, name = "IP protocol", description = "IP protocol (TCP/UDP/ANY)",
+            required = true, multiValued = false)
+    private String ipProto = null;
+
+    @Override
+    protected void doExecute() {
+        StatsFlowRuleAdminService statsService = get(StatsFlowRuleAdminService.class);
+
+        StatsFlowRule statsFlowRule = DefaultStatsFlowRule.builder()
+                .srcIpPrefix(IpPrefix.valueOf(srcIp))
+                .dstIpPrefix(IpPrefix.valueOf(dstIp))
+                .srcTpPort(TpPort.tpPort(Integer.valueOf(srcTpPort)))
+                .dstTpPort(TpPort.tpPort(Integer.valueOf(dstTpPort)))
+                .ipProtocol(getProtocolTypeFromString(ipProto))
+                .build();
+
+        statsService.createStatFlowRule(statsFlowRule);
+
+        print("Added the stat flow rule.");
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowDeleteCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowDeleteCommand.java
new file mode 100644
index 0000000..9d17916
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowDeleteCommand.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacktelemetry.cli;
+
+import org.apache.karaf.shell.api.action.Argument;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.TpPort;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.openstacktelemetry.api.DefaultStatsFlowRule;
+import org.onosproject.openstacktelemetry.api.StatsFlowRule;
+import org.onosproject.openstacktelemetry.api.StatsFlowRuleAdminService;
+
+import static org.onosproject.openstacktelemetry.util.OpenstackTelemetryUtil.getProtocolTypeFromString;
+
+/**
+ * Removes vFlow telemetry rule.
+ */
+@Service
+@Command(scope = "onos", name = "telemetry-delete-vflow",
+        description = "Adds a telemetry virtual flow rule")
+public class TelemetryVflowDeleteCommand extends AbstractShellCommand {
+
+    @Argument(index = 0, name = "Source IP", description = "Source IP address",
+            required = true, multiValued = false)
+    private String srcIp = null;
+
+    @Argument(index = 1, name = "Source port", description = "Source port number",
+            required = true, multiValued = false)
+    private String srcTpPort = null;
+
+    @Argument(index = 2, name = "Destination IP", description = "Destination IP address",
+            required = true, multiValued = false)
+    private String dstIp = null;
+
+    @Argument(index = 3, name = "Destination port", description = "Destination port number",
+            required = true, multiValued = false)
+    private String dstTpPort = null;
+
+    @Argument(index = 4, name = "IP protocol", description = "IP protocol (TCP/UDP/ANY)",
+            required = true, multiValued = false)
+    private String ipProto = null;
+
+    @Override
+    protected void doExecute() {
+        StatsFlowRuleAdminService statsService = get(StatsFlowRuleAdminService.class);
+
+        StatsFlowRule statsFlowRule = DefaultStatsFlowRule.builder()
+                .srcIpPrefix(IpPrefix.valueOf(srcIp))
+                .dstIpPrefix(IpPrefix.valueOf(dstIp))
+                .srcTpPort(TpPort.tpPort(Integer.valueOf(srcTpPort)))
+                .dstTpPort(TpPort.tpPort(Integer.valueOf(dstTpPort)))
+                .ipProtocol(getProtocolTypeFromString(ipProto))
+                .build();
+
+        statsService.deleteStatFlowRule(statsFlowRule);
+
+        print("Removed the stat flow rule.");
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowListCommand.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowListCommand.java
new file mode 100644
index 0000000..0614f93
--- /dev/null
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/cli/TelemetryVflowListCommand.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.openstacktelemetry.cli;
+
+import com.google.common.collect.Lists;
+import org.apache.karaf.shell.api.action.Command;
+import org.apache.karaf.shell.api.action.lifecycle.Service;
+import org.onlab.packet.IpPrefix;
+import org.onlab.packet.TpPort;
+import org.onosproject.cli.AbstractShellCommand;
+import org.onosproject.core.ApplicationId;
+import org.onosproject.core.CoreService;
+import org.onosproject.net.flow.FlowEntry;
+import org.onosproject.net.flow.FlowRuleService;
+import org.onosproject.net.flow.TrafficSelector;
+import org.onosproject.net.flow.criteria.Criterion;
+import org.onosproject.net.flow.criteria.IPCriterion;
+import org.onosproject.net.flow.criteria.IPProtocolCriterion;
+import org.onosproject.net.flow.criteria.TcpPortCriterion;
+import org.onosproject.net.flow.criteria.UdpPortCriterion;
+
+import java.util.List;
+
+import static org.onlab.packet.IPv4.PROTOCOL_TCP;
+import static org.onlab.packet.IPv4.PROTOCOL_UDP;
+import static org.onosproject.net.flow.criteria.Criterion.Type.IPV4_DST;
+import static org.onosproject.net.flow.criteria.Criterion.Type.IPV4_SRC;
+import static org.onosproject.net.flow.criteria.Criterion.Type.IP_PROTO;
+import static org.onosproject.net.flow.criteria.Criterion.Type.TCP_DST;
+import static org.onosproject.net.flow.criteria.Criterion.Type.TCP_SRC;
+import static org.onosproject.net.flow.criteria.Criterion.Type.UDP_SRC;
+import static org.onosproject.openstacktelemetry.api.Constants.OPENSTACK_TELEMETRY_APP_ID;
+
+/**
+ * Lists telemetry vFlows.
+ */
+@Service
+@Command(scope = "onos", name = "telemetry-vflows",
+        description = "Lists all Telemetry virtual flows")
+public class TelemetryVflowListCommand extends AbstractShellCommand {
+
+    private static final String FORMAT = "%-20s%-10s%-20s%-10s%-10s";
+    private static final String TCP = "TCP";
+    private static final String UDP = "UDP";
+
+    @Override
+    protected void doExecute() {
+        CoreService coreService = get(CoreService.class);
+        FlowRuleService flowService = get(FlowRuleService.class);
+        ApplicationId appId = coreService.getAppId(OPENSTACK_TELEMETRY_APP_ID);
+
+        List<FlowEntry> flows =
+                Lists.newArrayList(flowService.getFlowEntriesById(appId));
+
+        print(FORMAT, "SrcIp", "SrcPort", "DstIp", "DstPort", "Protocol");
+
+        for (FlowEntry entry : flows) {
+            TrafficSelector selector = entry.selector();
+            IpPrefix srcIp = ((IPCriterion) selector.getCriterion(IPV4_SRC)).ip();
+            IpPrefix dstIp = ((IPCriterion) selector.getCriterion(IPV4_DST)).ip();
+
+            TpPort srcPort = TpPort.tpPort(0);
+            TpPort dstPort = TpPort.tpPort(0);
+            String protocolStr = "ANY";
+
+            Criterion ipProtocolCriterion = selector.getCriterion(IP_PROTO);
+
+            if (ipProtocolCriterion != null) {
+                short protocol = ((IPProtocolCriterion) selector.getCriterion(IP_PROTO)).protocol();
+
+                if (protocol == PROTOCOL_TCP) {
+                    srcPort = ((TcpPortCriterion) selector.getCriterion(TCP_SRC)).tcpPort();
+                    dstPort = ((TcpPortCriterion) selector.getCriterion(TCP_DST)).tcpPort();
+                    protocolStr = TCP;
+                }
+
+                if (protocol == PROTOCOL_UDP) {
+                    srcPort = ((UdpPortCriterion) selector.getCriterion(UDP_SRC)).udpPort();
+                    dstPort = ((UdpPortCriterion) selector.getCriterion(UDP_SRC)).udpPort();
+                    protocolStr = UDP;
+                }
+            }
+
+            print(FORMAT,
+                    srcIp.toString(),
+                    srcPort.toString(),
+                    dstIp.toString(),
+                    dstPort.toString(),
+                    protocolStr);
+        }
+    }
+}
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
index 9bf7994..956fab1 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/StatsFlowRuleManager.java
@@ -151,6 +151,7 @@
     private static final String OVS_DRIVER_NAME = "ovs";
 
     private static final String ARBITRARY_IP = "0.0.0.0/32";
+    private static final int ARBITRARY_PROTOCOL = 0x0;
     private static final int ARBITRARY_LENGTH = 32;
     private static final String ARBITRARY_MAC = "00:00:00:00:00:00";
     private static final IpAddress NO_HOST_IP = IpAddress.valueOf("255.255.255.255");
@@ -695,6 +696,8 @@
                     .matchIPProtocol(statsFlowRule.ipProtocol())
                     .matchUdpSrc(statsFlowRule.srcTpPort())
                     .matchUdpDst(statsFlowRule.dstTpPort());
+        } else if (protocol == ARBITRARY_PROTOCOL) {
+            log.debug("IP protocol type is not specified.");
         } else {
             log.warn("Unsupported protocol {}", statsFlowRule.ipProtocol());
         }
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
index 78245f2..be18a95 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/util/OpenstackTelemetryUtil.java
@@ -105,6 +105,7 @@
                 return IPv4.PROTOCOL_TCP;
             case PROTOCOL_NAME_UDP:
                 return IPv4.PROTOCOL_UDP;
+            case PROTOCOL_NAME_ANY:
             default:
                 return ARBITRARY_PROTOCOL;
         }
@@ -123,7 +124,6 @@
             case IPv4.PROTOCOL_UDP:
                 return PROTOCOL_NAME_UDP;
             case ARBITRARY_PROTOCOL:
-                return PROTOCOL_NAME_ANY;
             default:
                 return PROTOCOL_NAME_ANY;
         }
