Commit 20741322 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

NBI component - IETF ACL connector:

- Directionality of ACL rules
parent 22842a88
Loading
Loading
Loading
Loading
+15 −14
Original line number Diff line number Diff line
@@ -46,12 +46,11 @@ def compose_interface_direction_acl_rules(
        if acl_set is None:
            MSG = 'Interface({:s})/{:s}/AclSet({:s}) not found'
            raise NotFound(MSG.format(
                str(interface_name), acl_direction_title,
                str(acl_set_name)
                str(interface_name), acl_direction_title, str(acl_set_name)
            ))

        acl_config_rule = config_rule_from_ietf_acl(
            device_name, interface_name, acl_set
            device_name, interface_name, acl_direction, acl_set
        )
        MSG = 'Adding {:s} ACL Config Rule: {:s}'
        LOGGER.info(MSG.format(
@@ -114,12 +113,14 @@ class Acls(Resource):
            interface_data = interface_name__to__interface_data.get(interface_name)
            if interface_data is None: continue

            if 'ingress' in interface_data:
                ingress_acl_config_rules = compose_interface_direction_acl_rules(
                    device_name, interface_name, interface_data, AclDirectionEnum.INGRESS,
                    acl_name__to__acl_data
                )
                device.device_config.config_rules.extend(ingress_acl_config_rules)

            if 'egress' in interface_data:
                egress_acl_config_rules = compose_interface_direction_acl_rules(
                    device_name, interface_name, interface_data, AclDirectionEnum.EGRESS,
                    acl_name__to__acl_data
+13 −3
Original line number Diff line number Diff line
@@ -17,10 +17,11 @@ from typing import List, Dict, Optional
from pydantic import BaseModel, Field
from werkzeug.exceptions import NotImplemented
from common.proto.acl_pb2 import AclForwardActionEnum, AclRuleTypeEnum, AclEntry
from common.proto.context_pb2 import ConfigActionEnum, ConfigRule
from common.proto.context_pb2 import ConfigActionEnum, ConfigRule, AclDirectionEnum as Proto_AclDirectionEnum


class AclDirectionEnum(Enum):
    BOTH    = 'both'
    INGRESS = 'ingress'
    EGRESS  = 'egress'

@@ -132,14 +133,23 @@ TFS_IETF_FORWARDING_ACTION_MAPPING = {


def config_rule_from_ietf_acl(
    device_name: str, endpoint_name: str, acl_set_data: Dict
    device_name : str, endpoint_name : str, acl_direction : AclDirectionEnum,
    acl_set_data : Dict
) -> ConfigRule:
    acl_config_rule = ConfigRule()
    acl_config_rule.action = ConfigActionEnum.CONFIGACTION_SET

    acl_endpoint_id = acl_config_rule.acl.endpoint_id
    acl_endpoint_id.device_id.device_uuid.uuid = device_name
    acl_endpoint_id.endpoint_uuid.uuid = endpoint_name

    if acl_direction == AclDirectionEnum.INGRESS:
        acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_INGRESS
    elif acl_direction == AclDirectionEnum.EGRESS:
        acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_EGRESS
    else:
        acl_config_rule.acl.direction = Proto_AclDirectionEnum.ACLDIRECTION_BOTH

    acl_name = acl_set_data['name']
    acl_type = acl_set_data['type']
    if acl_type.startswith('ietf-access-control-list:'):