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());
});
}