Commit 4e3bd3d1 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component - IETF ACL connector:

- Fixed composition of ACL rules in GET
parent 4e6aeab5
Loading
Loading
Loading
Loading
+38 −14
Original line number Diff line number Diff line
@@ -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
    )


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