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):