Loading src/nbi/service/ietf_acl/ietf_acl_parser.py +38 −14 Original line number Diff line number Diff line Loading @@ -28,9 +28,12 @@ class AclDirectionEnum(Enum): class Ipv4(BaseModel): dscp: int = 0 source_ipv4_network: str = Field(serialization_alias='source-ipv4-network', default='') protocol: int = 0 source_ipv4_network: str = Field( serialization_alias='source-ipv4-network', default=None ) destination_ipv4_network: str = Field( serialization_alias='destination-ipv4-network', default='' serialization_alias='destination-ipv4-network', default=None ) Loading @@ -45,9 +48,15 @@ class Tcp(BaseModel): destination_port: Optional[Port] = Field(serialization_alias='destination-port', default=None) class Udp(BaseModel): 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): ipv4: Ipv4 = Ipv4() tcp: Optional[Tcp] = None udp: Optional[Udp] = None class Action(BaseModel): Loading Loading @@ -237,27 +246,42 @@ def config_rule_from_ietf_acl( def ietf_acl_from_config_rule_resource_value(config_rule_rv: Dict) -> Dict: rule_set = config_rule_rv['rule_set'] rule_set = config_rule_rv.get('rule_set', dict()) ace = [] for acl_entry in rule_set['entries']: match_ = acl_entry['match'] for acl_entry in rule_set.get('entries', list()): match_ = acl_entry.get('match', dict()) protocol = match_.get('protocol', 0) ipv4 = Ipv4( dscp=match_['dscp'], source_ipv4_network=match_['src_address'], destination_ipv4_network=match_['dst_address'], dscp=match_.get('dscp', 0), protocol=protocol, source_ipv4_network=match_.get('src_address'), destination_ipv4_network=match_.get('dst_address'), ) src_port = match_.get('src_port') src_port = None if src_port is None else Port(port=src_port) dst_port = match_.get('dst_port') dst_port = None if dst_port is None else Port(port=dst_port) tcp = None if match_['tcp_flags']: udp = None if protocol == 6: tcp = Tcp( flags=match_['tcp_flags'], source_port=Port(port=match_['src_port']), destination_port=Port(port=match_['dst_port']), flags=match_.get('tcp_flags', 0), source_port=src_port, destination_port=dst_port, ) matches = Matches(ipv4=ipv4, tcp=tcp) elif protocol == 17: udp = Udp( source_port=src_port, destination_port=dst_port, ) matches = Matches(ipv4=ipv4, tcp=tcp, udp=udp) ace.append( Ace( name=acl_entry['description'], name=acl_entry.get('description', ''), matches=matches, actions=Action( forwarding=TFS_IETF_FORWARDING_ACTION_MAPPING[ Loading Loading
src/nbi/service/ietf_acl/ietf_acl_parser.py +38 −14 Original line number Diff line number Diff line Loading @@ -28,9 +28,12 @@ class AclDirectionEnum(Enum): class Ipv4(BaseModel): dscp: int = 0 source_ipv4_network: str = Field(serialization_alias='source-ipv4-network', default='') protocol: int = 0 source_ipv4_network: str = Field( serialization_alias='source-ipv4-network', default=None ) destination_ipv4_network: str = Field( serialization_alias='destination-ipv4-network', default='' serialization_alias='destination-ipv4-network', default=None ) Loading @@ -45,9 +48,15 @@ class Tcp(BaseModel): destination_port: Optional[Port] = Field(serialization_alias='destination-port', default=None) class Udp(BaseModel): 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): ipv4: Ipv4 = Ipv4() tcp: Optional[Tcp] = None udp: Optional[Udp] = None class Action(BaseModel): Loading Loading @@ -237,27 +246,42 @@ def config_rule_from_ietf_acl( def ietf_acl_from_config_rule_resource_value(config_rule_rv: Dict) -> Dict: rule_set = config_rule_rv['rule_set'] rule_set = config_rule_rv.get('rule_set', dict()) ace = [] for acl_entry in rule_set['entries']: match_ = acl_entry['match'] for acl_entry in rule_set.get('entries', list()): match_ = acl_entry.get('match', dict()) protocol = match_.get('protocol', 0) ipv4 = Ipv4( dscp=match_['dscp'], source_ipv4_network=match_['src_address'], destination_ipv4_network=match_['dst_address'], dscp=match_.get('dscp', 0), protocol=protocol, source_ipv4_network=match_.get('src_address'), destination_ipv4_network=match_.get('dst_address'), ) src_port = match_.get('src_port') src_port = None if src_port is None else Port(port=src_port) dst_port = match_.get('dst_port') dst_port = None if dst_port is None else Port(port=dst_port) tcp = None if match_['tcp_flags']: udp = None if protocol == 6: tcp = Tcp( flags=match_['tcp_flags'], source_port=Port(port=match_['src_port']), destination_port=Port(port=match_['dst_port']), flags=match_.get('tcp_flags', 0), source_port=src_port, destination_port=dst_port, ) matches = Matches(ipv4=ipv4, tcp=tcp) elif protocol == 17: udp = Udp( source_port=src_port, destination_port=dst_port, ) matches = Matches(ipv4=ipv4, tcp=tcp, udp=udp) ace.append( Ace( name=acl_entry['description'], name=acl_entry.get('description', ''), matches=matches, actions=Action( forwarding=TFS_IETF_FORWARDING_ACTION_MAPPING[ Loading