Add group table, flow rules by listening to openstack node events

Change-Id: Ifbb1ae9c812e9bc24260e960c17b5430dcf59a11
diff --git a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/cli/OpenstackVtapAddCommand.java b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/cli/OpenstackVtapAddCommand.java
index 4b35474..5d116da 100644
--- a/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/cli/OpenstackVtapAddCommand.java
+++ b/apps/openstackvtap/app/src/main/java/org/onosproject/openstackvtap/cli/OpenstackVtapAddCommand.java
@@ -17,7 +17,6 @@
 
 import org.apache.karaf.shell.commands.Argument;
 import org.apache.karaf.shell.commands.Command;
-import org.onlab.packet.IPv4;
 import org.onlab.packet.IpPrefix;
 import org.onlab.packet.TpPort;
 import org.onosproject.cli.AbstractShellCommand;
@@ -25,6 +24,9 @@
 import org.onosproject.openstackvtap.api.OpenstackVtapAdminService;
 import org.onosproject.openstackvtap.impl.DefaultOpenstackVtapCriterion;
 
+import static org.onosproject.openstackvtap.util.OpenstackVtapUtil.getProtocolTypeFromString;
+import static org.onosproject.openstackvtap.util.OpenstackVtapUtil.getVtapTypeFromString;
+
 /**
  * Command line interface for adding openstack vTap rule.
  */
@@ -32,15 +34,16 @@
         description = "OpenstackVtap activate")
 public class OpenstackVtapAddCommand extends AbstractShellCommand {
 
-    private final OpenstackVtapAdminService vTapService = get(OpenstackVtapAdminService.class);
+    private final OpenstackVtapAdminService vTapService =
+                                            get(OpenstackVtapAdminService.class);
 
     @Argument(index = 0, name = "srcIp",
-            description = "source IP address CIDR (e.g., \"10.1.0.0/16\")",
+            description = "source IP address CIDR (e.g., \"10.1.0.2/32\")",
             required = true, multiValued = false)
     String srcIp = "";
 
     @Argument(index = 1, name = "dstIp",
-            description = "destination IP address CIDR (e.g., \"10.1.0.0/16\")",
+            description = "destination IP address CIDR (e.g., \"10.1.0.3/32\")",
             required = true, multiValued = false)
     String dstIp = "";
 
@@ -69,7 +72,7 @@
         DefaultOpenstackVtapCriterion.Builder
                     defaultVtapCriterionBuilder = DefaultOpenstackVtapCriterion.builder();
         if (makeCriterion(defaultVtapCriterionBuilder)) {
-            OpenstackVtap.Type type = getVtapType(vTapTypeStr);
+            OpenstackVtap.Type type = getVtapTypeFromString(vTapTypeStr);
             if (type == null) {
                 print("Invalid vTap type");
                 return;
@@ -84,19 +87,6 @@
         }
     }
 
-    private static OpenstackVtap.Type getVtapType(String vTapTypeStr) {
-        switch (vTapTypeStr.toLowerCase()) {
-            case "all":
-                return OpenstackVtap.Type.VTAP_ALL;
-            case "tx":
-                return OpenstackVtap.Type.VTAP_TX;
-            case "rx":
-                return OpenstackVtap.Type.VTAP_RX;
-            default:
-                return OpenstackVtap.Type.VTAP_NONE;
-       }
-    }
-
     private boolean makeCriterion(DefaultOpenstackVtapCriterion.Builder vTapCriterionBuilder) {
         try {
             vTapCriterionBuilder.srcIpPrefix(IpPrefix.valueOf(srcIp));
@@ -106,25 +96,11 @@
             return false;
         }
 
-        switch (ipProto.toLowerCase()) {
-            case "tcp":
-                vTapCriterionBuilder.ipProtocol(IPv4.PROTOCOL_TCP);
-                break;
-            case "udp":
-                vTapCriterionBuilder.ipProtocol(IPv4.PROTOCOL_UDP);
-                break;
-            case "icmp":
-                vTapCriterionBuilder.ipProtocol(IPv4.PROTOCOL_ICMP);
-                break;
-            default:
-                log.warn("Invalid protocol type {}", ipProto);
-                return false;
-        }
+        vTapCriterionBuilder.ipProtocol(getProtocolTypeFromString(ipProto.toLowerCase()));
 
         vTapCriterionBuilder.srcTpPort(TpPort.tpPort(srcTpPort));
         vTapCriterionBuilder.dstTpPort(TpPort.tpPort(dstTpPort));
 
         return true;
     }
-
 }