Fixing the ordering of flow programming operations

* When the subscriber is provisioned, it seems the related flows are being sent
in proper order. However, Voltha receives these in the wrong order. In order to
solve this problem, Charles' suggestion is implemented.

* New property named enableEapol is added, the default is true -  it can be
changed to false from ONOS CLI, when it is false, OLT app does not send EAPOL
trap flows.

* Meter-mod & Flow-mod ordering issue is solved

* Multiple OLT support is added (internal maps are updated)

* New cli commands to debug bandwidthProfile and meter relations

Change-Id: Ic0a15aafa5403e00106dc660061e2a0b46ba5b01
diff --git a/api/src/main/java/org/opencord/olt/AccessDeviceService.java b/api/src/main/java/org/opencord/olt/AccessDeviceService.java
index 2652a31..32c2ed0 100644
--- a/api/src/main/java/org/opencord/olt/AccessDeviceService.java
+++ b/api/src/main/java/org/opencord/olt/AccessDeviceService.java
@@ -21,10 +21,12 @@
 import java.util.Map;
 import java.util.Optional;
 
+import com.google.common.collect.ImmutableSet;
 import org.onlab.packet.VlanId;
 import org.onosproject.event.ListenerService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.meter.MeterKey;
 import org.opencord.sadis.SubscriberAndDeviceInformation;
 
 import com.google.common.collect.ImmutableMap;
@@ -87,10 +89,26 @@
 
     /**
      * Returns information about subscribers that have been programmed in the
-     * dataplane.
+     * data-plane.
      *
      * @return an immutable map of locations and subscriber information
      */
     ImmutableMap<ConnectPoint, SubscriberAndDeviceInformation> getProgSubs();
 
+    /**
+     * Returns information about device-meter mappings that have been programmed in the
+     * data-plane.
+     *
+     * @return an immutable set of device-meter mappings
+     */
+    ImmutableSet<MeterKey> getProgMeters();
+
+    /**
+     * Returns information about bandwidthProfile-meterKey (device / meter) mappings
+     * that have been programmed in the data-plane.
+     *
+     * @return an immutable map of bandwidthProfile-meterKey (device / meter) mappings
+     */
+    ImmutableMap<String, List<MeterKey>> getBpMeterMappings();
+
 }