[SDFAB-356] Extend P4RuntimeMeterProgrammable and Codecs to support reset scenario
Change-Id: Ifad0b296568d3f78b2aa792fa63f2f81fa80ebae
diff --git a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java
index 3bedfbf..0f32417 100644
--- a/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java
+++ b/protocols/p4runtime/utils/src/main/java/org/onosproject/p4runtime/ctl/codec/DirectMeterEntryCodec.java
@@ -38,11 +38,16 @@
PiMeterCellConfig piEntity, Object ignored, PiPipeconf pipeconf,
P4InfoBrowser browser)
throws CodecException {
- return P4RuntimeOuterClass.DirectMeterEntry.newBuilder()
+ P4RuntimeOuterClass.DirectMeterEntry.Builder builder =
+ P4RuntimeOuterClass.DirectMeterEntry.newBuilder()
.setTableEntry(CODECS.tableEntry().encode(
- piEntity.cellId().tableEntry(), null, pipeconf))
- .setConfig(MeterEntryCodec.getP4Config(piEntity))
- .build();
+ piEntity.cellId().tableEntry(), null, pipeconf));
+ // We keep the config field unset if it is reset scenario
+ P4RuntimeOuterClass.MeterConfig meterConfig = MeterEntryCodec.getP4Config(piEntity);
+ if (meterConfig != null) {
+ builder = builder.setConfig(meterConfig);
+ }
+ return builder.build();
}
@Override