diff --git a/core/api/src/main/java/org/onosproject/net/pi/model/PiPacketMetadataModel.java b/core/api/src/main/java/org/onosproject/net/pi/model/PiPacketMetadataModel.java
index 76fdbe4..6cf2f499 100644
--- a/core/api/src/main/java/org/onosproject/net/pi/model/PiPacketMetadataModel.java
+++ b/core/api/src/main/java/org/onosproject/net/pi/model/PiPacketMetadataModel.java
@@ -37,4 +37,12 @@
      * @return size in bit
      */
     int bitWidth();
+
+    /**
+     * Return true is the packet metadata has a fixed bit width.
+     * It returns false if it can have flexible bit width.
+     *
+     * @return True if the packet metadata has fixed bit width, false otherwise
+     */
+    boolean hasBitWidth();
 }
diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java
index b2f662b..0bb0360 100644
--- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java
+++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4InfoParser.java
@@ -413,7 +413,9 @@
                     ImmutableList.builder();
             ctrlPktMetaMsg.getMetadataList().forEach(metadataMsg -> metadataListBuilder.add(
                     new P4PacketMetadataModel(PiPacketMetadataId.of(metadataMsg.getName()),
-                                               metadataMsg.getBitwidth())));
+                                              isFieldString(p4info, metadataMsg.getTypeName().getName()) ?
+                                                      P4PacketMetadataModel.BIT_WIDTH_UNDEFINED :
+                                                      metadataMsg.getBitwidth())));
             packetOpMap.put(
                     mapPacketOpType(ctrlPktMetaMsg.getPreamble().getName()),
                     new P4PacketOperationModel(mapPacketOpType(ctrlPktMetaMsg.getPreamble().getName()),
diff --git a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketMetadataModel.java
similarity index 92%
rename from protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java
rename to protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketMetadataModel.java
index 19a6fa7..65867ff 100644
--- a/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4ControlMetadataModel.java
+++ b/protocols/p4runtime/model/src/main/java/org/onosproject/p4runtime/model/P4PacketMetadataModel.java
@@ -28,6 +28,8 @@
  */
 final class P4PacketMetadataModel implements PiPacketMetadataModel {
 
+    static final int BIT_WIDTH_UNDEFINED = -1;
+
     private final PiPacketMetadataId id;
     private final int bitWidth;
 
@@ -47,6 +49,11 @@
     }
 
     @Override
+    public boolean hasBitWidth() {
+        return bitWidth != BIT_WIDTH_UNDEFINED;
+    }
+
+    @Override
     public int hashCode() {
         return Objects.hash(id, bitWidth);
     }
diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PacketOperationModelTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PacketOperationModelTest.java
index 5d760e8..6fa2889 100644
--- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PacketOperationModelTest.java
+++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PacketOperationModelTest.java
@@ -22,6 +22,7 @@
 import org.onosproject.net.pi.model.PiPacketMetadataId;
 import org.onosproject.net.pi.model.PiPacketMetadataModel;
 import org.onosproject.net.pi.model.PiPacketOperationType;
+
 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
 
 /**
@@ -42,6 +43,9 @@
         new P4PacketMetadataModel(PI_CONTROL_METADATA_ID_1, BIT_WIDTH_1);
     private static final PiPacketMetadataModel PI_CONTROL_METADATA_MODEL_2 =
         new P4PacketMetadataModel(PI_CONTROL_METADATA_ID_2, BIT_WIDTH_2);
+    private static final PiPacketMetadataModel PI_CONTROL_METADATA_MODEL_3 =
+            new P4PacketMetadataModel(
+                    PI_CONTROL_METADATA_ID_2, P4PacketMetadataModel.BIT_WIDTH_UNDEFINED);
 
     private static final ImmutableList<PiPacketMetadataModel> METADATAS_1 =
         new ImmutableList.Builder<PiPacketMetadataModel>()
@@ -58,6 +62,11 @@
             .add(PI_CONTROL_METADATA_MODEL_1)
             .add(PI_CONTROL_METADATA_MODEL_2)
             .build();
+    private static final ImmutableList<PiPacketMetadataModel> METADATAS_4 =
+            new ImmutableList.Builder<PiPacketMetadataModel>()
+                    .add(PI_CONTROL_METADATA_MODEL_1)
+                    .add(PI_CONTROL_METADATA_MODEL_3)
+                    .build();
 
     private static final P4PacketOperationModel P4_PACKET_OPERATION_MODEL_1 =
         new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_1, METADATAS_1);
@@ -67,6 +76,8 @@
         new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_2, METADATAS_2);
     private static final P4PacketOperationModel P4_PACKET_OPERATION_MODEL_3 =
         new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_2, METADATAS_3);
+    private static final P4PacketOperationModel P4_PACKET_OPERATION_MODEL_4 =
+            new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_2, METADATAS_4);
 
     /**
      * Checks that the P4PacketOperationModel class is immutable.
@@ -85,6 +96,7 @@
             .addEqualityGroup(P4_PACKET_OPERATION_MODEL_1, SAME_AS_P4_PACKET_OPERATION_MODEL_1)
             .addEqualityGroup(P4_PACKET_OPERATION_MODEL_2)
             .addEqualityGroup(P4_PACKET_OPERATION_MODEL_3)
+            .addEqualityGroup(P4_PACKET_OPERATION_MODEL_4)
             .testEquals();
     }
 }
diff --git a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java
index a6bd76f..fdc3d2e 100644
--- a/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java
+++ b/protocols/p4runtime/model/src/test/java/org/onosproject/p4runtime/model/P4PipelineModelTest.java
@@ -297,6 +297,8 @@
             new P4PacketMetadataModel(PI_CONTROL_METADATA_ID_1, META_BIT_WIDTH_1);
     private static final PiPacketMetadataModel P4_CONTROL_METADATA_MODEL_2 =
             new P4PacketMetadataModel(PI_CONTROL_METADATA_ID_2, META_BIT_WIDTH_2);
+    private static final PiPacketMetadataModel P4_CONTROL_METADATA_MODEL_3 =
+            new P4PacketMetadataModel(PI_CONTROL_METADATA_ID_2, P4PacketMetadataModel.BIT_WIDTH_UNDEFINED);
 
     /* Pipeline Models */
     private static final ImmutableMap<PiTableId, PiTableModel> TABLES_1 =
@@ -325,11 +327,17 @@
             new ImmutableList.Builder<PiPacketMetadataModel>()
                     .add(P4_CONTROL_METADATA_MODEL_2)
                     .build();
+    private static final ImmutableList<PiPacketMetadataModel> METADATAS_3 =
+            new ImmutableList.Builder<PiPacketMetadataModel>()
+                    .add(P4_CONTROL_METADATA_MODEL_3)
+                    .build();
 
     private static final PiPacketOperationModel P4_PACKET_OPERATION_MODEL_1 =
             new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_1, METADATAS_1);
     private static final PiPacketOperationModel P4_PACKET_OPERATION_MODEL_2 =
             new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_2, METADATAS_2);
+    private static final PiPacketOperationModel P4_PACKET_OPERATION_MODEL_3 =
+            new P4PacketOperationModel(PI_PACKET_OPERATION_TYPE_1, METADATAS_3);
 
     private static final ImmutableMap<PiPacketOperationType, PiPacketOperationModel> PACKET_OPERATIONS_1 =
             new ImmutableMap.Builder<PiPacketOperationType, PiPacketOperationModel>()
@@ -339,6 +347,10 @@
             new ImmutableMap.Builder<PiPacketOperationType, PiPacketOperationModel>()
                     .put(PI_PACKET_OPERATION_TYPE_2, P4_PACKET_OPERATION_MODEL_2)
                     .build();
+    private static final ImmutableMap<PiPacketOperationType, PiPacketOperationModel> PACKET_OPERATIONS_3 =
+            new ImmutableMap.Builder<PiPacketOperationType, PiPacketOperationModel>()
+                    .put(PI_PACKET_OPERATION_TYPE_1, P4_PACKET_OPERATION_MODEL_3)
+                    .build();
 
     private static final int FINGER_PRINT_1 = 0;
     private static final int FINGER_PRINT_2 = 1;
@@ -352,6 +364,9 @@
     private static final PiPipelineModel P4_PIPELINE_MODEL_2 =
             new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_2,
                     FINGER_PRINT_2);
+    private static final PiPipelineModel P4_PIPELINE_MODEL_3 =
+            new P4PipelineModel(TABLES_2, COUNTERS_2, METERS_2, REGISTERS_1, ACTION_PROFILES_2, PACKET_OPERATIONS_3,
+                                FINGER_PRINT_2);
 
     /**
      * Checks that the P4PipelineModel class is immutable.
@@ -369,6 +384,7 @@
         new EqualsTester()
                 .addEqualityGroup(P4_PIPELINE_MODEL_1, SAME_AS_P4_PIPELINE_MODEL_1)
                 .addEqualityGroup(P4_PIPELINE_MODEL_2)
+                .addEqualityGroup(P4_PIPELINE_MODEL_3)
                 .testEquals();
     }
 }
