Network toplogy GUI for VM-to-VM flow statistics configuration.

Change-Id: I86543c7bb30d79ec8b5d57f822756b5e8a8e5e40
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/StatsFlowRuleAdminService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/StatsFlowRuleAdminService.java
index e8a4a38..c2fb893 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/StatsFlowRuleAdminService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/StatsFlowRuleAdminService.java
@@ -35,6 +35,15 @@
     void stop();
 
     /**
+     * Creates or delete a stat flow rule with network layer-2 information.
+     *
+     * @param srcIp source IP address
+     * @param dstIp destination IP address
+     * @param install installing flag
+     */
+    void setStatFlowL2Rule(String srcIp, String dstIp, Boolean install);
+
+    /**
      * Creates a stat flow rule.
      *
      * @param statFlowRule stat flow rule for a VM
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
index 2f67050..8560170 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/impl/DefaultFlowInfo.java
@@ -196,8 +196,11 @@
                 return EGRESS_STATS + dstIp.toString();
             }
         }
-        return srcIp.toString() + ":" + srcPort.toString() + " -> " +
-                dstIp.toString() + ":" + dstPort.toString();
+        return srcIp.toString() + ":" +
+                ((srcPort == null) ? "any" : srcPort.toString()) +
+                " -> " +
+                dstIp.toString() + ":" +
+                ((dstPort == null) ? "any" : dstPort.toString());
     }
 
     @Override
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 760fd86..f1318de 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
@@ -145,6 +145,7 @@
     private static final boolean DEFAULT_MONITOR_UNDERLAY = true;
 
     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");
@@ -266,14 +267,22 @@
     }
 
     @Override
-    public void createStatFlowRule(StatsFlowRule statsFlowRule) {
+    public void setStatFlowL2Rule(String srcIp, String dstIp, Boolean install) {
+        StatsFlowRule statsFlowRule = DefaultStatsFlowRule.builder()
+                .srcIpPrefix(IpPrefix.valueOf(IpAddress.valueOf(srcIp), ARBITRARY_LENGTH))
+                .dstIpPrefix(IpPrefix.valueOf(IpAddress.valueOf(dstIp), ARBITRARY_LENGTH))
+                .ipProtocol((byte) ARBITRARY_PROTOCOL)
+                .build();
+        setStatFlowRule(statsFlowRule, install);
+    }
 
+    @Override
+    public void createStatFlowRule(StatsFlowRule statsFlowRule) {
         setStatFlowRule(statsFlowRule, true);
     }
 
     @Override
     public void deleteStatFlowRule(StatsFlowRule statsFlowRule) {
-
         setStatFlowRule(statsFlowRule, false);
     }