diff --git a/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py b/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py
index bdfeec430bdfdec833b381b6bc055b50b09ba5d6..9617471cbb07fac3429d715289df05bdde10ce20 100644
--- a/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py
+++ b/src/device/service/drivers/gnmi_openconfig/handlers/Acl.py
@@ -63,16 +63,28 @@ class AclHandler(_Handler):
         y_entries = y_set.create_path('acl-entries')
         for entry in rs.get('entries', []):
             seq = int(entry['sequence_id'])
-            src = entry['match'].get('src_address', '0.0.0.0/0')
-            dst = entry['match'].get('dst_address', '0.0.0.0/0')
+            m_ = entry["match"]
+            src_address = m_.get('src_address', '0.0.0.0/0')
+            dst_address = m_.get('dst_address', '0.0.0.0/0')
+            src_port = m_.get("src_port")
+            dst_port = m_.get("dst_port")
             act = _TFS_OC_FWD_ACTION[entry['action']['forward_action']]
 
             y_e = y_entries.create_path(f'acl-entry[sequence-id="{seq}"]')
             y_e.create_path('config/sequence-id', seq)
 
             y_ipv4 = y_e.create_path('ipv4')
-            y_ipv4.create_path('config/source-address', src)
-            y_ipv4.create_path('config/destination-address', dst)
+            y_ipv4.create_path('config/source-address', src_address)
+            y_ipv4.create_path('config/destination-address', dst_address)
+
+            if src_port or dst_port:
+                proto = m_.get("protocol")
+                y_trans = y_e.create_path("transport")
+                if src_port:
+                    y_trans.create_path("config/source-port", int(src_port))
+                if dst_port:
+                    y_trans.create_path("config/destination-port", int(dst_port))
+                y_ipv4.create_path('config/protocol', int(proto))
 
             y_act = y_e.create_path('actions')
             y_act.create_path('config/forwarding-action', act)
diff --git a/src/nbi/service/ietf_acl/ietf_acl_parser.py b/src/nbi/service/ietf_acl/ietf_acl_parser.py
index 929b69233326e010e44c30643e324866497b0409..66259f2811ea0bb4e2c7319cf2b28d5f16003c6e 100644
--- a/src/nbi/service/ietf_acl/ietf_acl_parser.py
+++ b/src/nbi/service/ietf_acl/ietf_acl_parser.py
@@ -39,11 +39,9 @@ class Port(BaseModel):
 
 
 class Tcp(BaseModel):
-    flags: str = ''
-    source_port: Port = Field(serialization_alias='source-port', default_factory=lambda: Port())
-    destination_port: Port = Field(
-        serialization_alias='destination-port', default_factory=lambda: Port()
-    )
+    flags: Optional[str] = None
+    source_port: Optional[Port] = Field(serialization_alias='source-port', default=None)
+    destination_port: Optional[Port] = Field(serialization_alias='destination-port', default=None)
 
 
 class Matches(BaseModel):