In order to implement VOLTHA VOL-949 task (https://jira.opencord.org/browse/VOL-949) , OltPipeline (pmc-olt driver) must support meter, transition and also QinQ vlan push instructions.

Change-Id: Ie027469fa190a78b0c8366da55431ebc62e699ef
diff --git a/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java b/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java
index fe4fb7b..a380f2d 100644
--- a/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java
+++ b/core/api/src/main/java/org/onosproject/net/meter/MeterEvent.java
@@ -42,7 +42,12 @@
         /**
          * A meter was finally removed from device.
          */
-        METER_REMOVED
+        METER_REMOVED,
+
+        /**
+         * Meter is not used by any flow. It can be deleted.
+         */
+        METER_REFERENCE_COUNT_ZERO
     }
 
 
diff --git a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
index 11420a9..f6f4816 100644
--- a/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
+++ b/core/net/src/main/java/org/onosproject/net/meter/impl/MeterManager.java
@@ -375,6 +375,10 @@
                     log.info("Meter removed {}", event.subject());
                     post(new MeterEvent(MeterEvent.Type.METER_REMOVED, event.subject()));
                     break;
+                case METER_REFERENCE_COUNT_ZERO:
+                    log.info("Meter reference count zero {}", event.subject());
+                    post(new MeterEvent(MeterEvent.Type.METER_REFERENCE_COUNT_ZERO, event.subject()));
+                    break;
                 default:
                     log.warn("Unknown meter event {}", event.type());
             }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java
index 09a55ad..1b5c9ca 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/meter/impl/DistributedMeterStore.java
@@ -285,6 +285,9 @@
             m.setLife(meter.life());
             // TODO: Prune if drops to zero.
             m.setReferenceCount(meter.referenceCount());
+            if (meter.referenceCount() == 0) {
+                notifyDelegate(new MeterEvent(MeterEvent.Type.METER_REFERENCE_COUNT_ZERO, m));
+            }
             return new MeterData(m, null, v.origin());
         });
     }