[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