Exemplo n.º 1
0
    def build_l2_evpn_interface_config(self,
                                       interfaces_config,
                                       interfaces,
                                       vn=None):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf = Interface(name=ifd_name)
            interfaces_config.add_interface(intf)
            if interface_list[0].is_untagged():
                if (len(interface_list) > 1):
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" %
                        (ifd_name))
                    continue
                intf.set_encapsulation("ethernet-bridge")
                intf.add_unit(
                    Unit(name=interface_list[0].unit,
                         comment=DMUtils.l2_evpn_intf_unit_comment(vn, False),
                         family=Family(bridge='')))
            else:
                intf.set_flexible_vlan_tagging('')
                intf.set_encapsulation("flexible-ethernet-services")
                for interface in interface_list:
                    intf.add_unit(
                        Unit(name=interface.unit,
                             comment=DMUtils.l2_evpn_intf_unit_comment(
                                 vn, True, interface.vlan_tag),
                             encapsulation='vlan-bridge',
                             vlan_id=str(interface.vlan_tag)))
Exemplo n.º 2
0
    def build_l2_evpn_interface_config(self, interfaces_config, interfaces, vn, vlan_conf):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf = Interface(name=ifd_name)
            interfaces_config.add_interface(intf)
            intf.set_flexible_vlan_tagging('')
            intf.set_encapsulation("extended-vlan-bridge")
            if interface_list[0].is_untagged():
                if (len(interface_list) > 1):
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" % (
                            ifd_name))
                    continue
                intf.add_unit(Unit(name=interface_list[0].unit,
                                   comment=DMUtils.l2_evpn_intf_unit_comment(vn, False),
                                   vlan_id="4094"))
                vlan_conf.add_interface(Interface(name=ifd_name + ".0"))
            else:
                for interface in interface_list:
                    intf.add_unit(Unit(name=interface.unit,
                               comment=DMUtils.l2_evpn_intf_unit_comment(vn,
                                                     True, interface.vlan_tag),
                               vlan_id=str(interface.vlan_tag)))
                    vlan_conf.add_interface(Interface(name=ifd_name + "." + str(interface.vlan_tag)))
Exemplo n.º 3
0
    def build_l2_evpn_interface_config(self, interfaces_config, interfaces, vn, vlan_conf):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf = Interface(name=ifd_name)
            interfaces_config.add_interface(intf)
            intf.set_flexible_vlan_tagging('')
            intf.set_encapsulation("extended-vlan-bridge")
            if interface_list[0].is_untagged():
                if (len(interface_list) > 1):
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" % (
                            ifd_name))
                    continue
                intf.add_unit(Unit(name=interface_list[0].unit,
                                   comment=DMUtils.l2_evpn_intf_unit_comment(vn, False),
                                   vlan_id="4094"))
                vlan_conf.add_interface(Interface(name=ifd_name + ".0"))
            else:
                for interface in interface_list:
                    intf.add_unit(Unit(name=interface.unit,
                               comment=DMUtils.l2_evpn_intf_unit_comment(vn,
                                                     True, interface.vlan_tag),
                               vlan_id=str(interface.vlan_tag)))
                    vlan_conf.add_interface(Interface(name=ifd_name + "." + str(interface.vlan_tag)))
Exemplo n.º 4
0
    def build_l2_evpn_interface_config(self, interfaces_config, interfaces, vn=None):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf = Interface(name=ifd_name)
            interfaces_config.add_interface(intf)
            if interface_list[0].is_untagged():
                if (len(interface_list) > 1):
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" % (
                            ifd_name))
                    continue
                intf.set_encapsulation("ethernet-bridge")
                intf.add_unit(Unit(name=interface_list[0].unit,
                                   comment=DMUtils.l2_evpn_intf_unit_comment(vn, False),
                                   family=Family(bridge='')))
            else:
                intf.set_flexible_vlan_tagging('')
                intf.set_encapsulation("flexible-ethernet-services")
                for interface in interface_list:
                    intf.add_unit(Unit(name=interface.unit,
                               comment=DMUtils.l2_evpn_intf_unit_comment(vn,
                                                     True, interface.vlan_tag),
                               encapsulation='vlan-bridge',
                               vlan_id=str(interface.vlan_tag)))
Exemplo n.º 5
0
    def _build_l2_evpn_interface_config(self, interfaces, vn, vlan):
        interface_map = OrderedDict()
        for interface in interfaces:
            interface_map.setdefault(interface.pi_name, []).append(interface)

        for pi_name, interface_list in interface_map.items():
            if len(interface_list) > 1 and \
                    any(int(intf.vlan_tag) == 0 for intf in interface_list):
                self._logger.error(
                    "Invalid logical interface config for PI %s" % pi_name)
                continue
            _, li_map = self._add_or_lookup_pi(self.pi_map, pi_name)
            for interface in interface_list:
                is_tagged = int(interface.vlan_tag) != 0
                unit = self._add_or_lookup_li(li_map, interface.li_name,
                                              interface.unit)
                unit.set_comment(
                    DMUtils.l2_evpn_intf_unit_comment(vn, is_tagged,
                                                      interface.vlan_tag))
                unit.set_is_tagged(is_tagged)
                unit.set_vlan_tag(
                    str(interface.vlan_tag) if is_tagged else '4094')
                if vlan:
                    self._add_ref_to_list(vlan.get_interfaces(),
                                          interface.li_name)
    def build_l2_evpn_interface_config(self, interfaces_config, interfaces, vn,
                                       vlan_conf):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf = PhysicalInterface(name=ifd_name)
            interfaces_config.append(intf)
            if interface_list[0].is_untagged():
                if len(interface_list) > 1:
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" %
                        (ifd_name))
                    continue
                unit_name = ifd_name + "." + str(interface_list[0].unit)
                unit = LogicalInterface(
                    name=unit_name,
                    unit=interface_list[0].unit,
                    comment=DMUtils.l2_evpn_intf_unit_comment(vn, False),
                    is_tagged=False,
                    vlan_tag="4094")
                # attach acls
                self.attach_acls(interface_list[0], unit)
                intf.add_logical_interfaces(unit)
                if vlan_conf:
                    vlan_conf.add_interfaces(LogicalInterface(name=unit_name))
            else:
                for interface in interface_list:
                    unit_name = ifd_name + "." + str(interface.unit)
                    unit = LogicalInterface(
                        name=unit_name,
                        unit=interface.unit,
                        comment=DMUtils.l2_evpn_intf_unit_comment(
                            vn, True, interface.vlan_tag),
                        is_tagged=True,
                        vlan_tag=str(interface.vlan_tag))
                    # attach acls
                    self.attach_acls(interface, unit)
                    intf.add_logical_interfaces(unit)
                    if vlan_conf:
                        vlan_conf.add_interfaces(
                            LogicalInterface(name=unit_name))
Exemplo n.º 7
0
    def _build_l2_evpn_interface_config(self, interfaces, vn, vlan):
        interface_map = OrderedDict()
        vpg_map = {}

        for interface in interfaces:
            interface_map.setdefault(interface.pi_name, []).append(interface)
            vpg_map[interface.pi_name] = interface.vpg_obj.name

        for pi_name, interface_list in list(interface_map.items()):
            untagged = set([
                int(i.port_vlan_tag) for i in interface_list
                if int(i.vlan_tag) == 0
            ])
            if len(untagged) > 1:
                self._logger.error(
                    "Only one untagged interface is allowed on a PI %s" %
                    pi_name)
                continue
            tagged = [
                int(i.vlan_tag) for i in interface_list if int(i.vlan_tag) != 0
            ]
            if self._is_enterprise_style(self._physical_router):
                if len(untagged) > 0 and len(tagged) > 0:
                    self._logger.error(
                        "Enterprise style config: Can't have tagged and "
                        "untagged interfaces for same VN on same PI %s" %
                        pi_name)
                    continue
            elif len(set(untagged) & set(tagged)) > 0:
                self._logger.error(
                    "SP style config: Can't have tagged and untagged "
                    "interfaces with same Vlan-id on same PI %s" % pi_name)
                continue
            pi, li_map = self._add_or_lookup_pi(self.pi_map, pi_name)
            lag = LinkAggrGroup(description="Virtual Port Group : %s" %
                                vpg_map[pi_name])
            pi.set_link_aggregation_group(lag)

            for interface in interface_list:
                if int(interface.vlan_tag) == 0:
                    is_tagged = False
                    vlan_tag = str(interface.port_vlan_tag)
                else:
                    is_tagged = True
                    vlan_tag = str(interface.vlan_tag)
                unit = self._add_or_lookup_li(li_map, interface.li_name,
                                              interface.unit)
                unit.set_comment(
                    DMUtils.l2_evpn_intf_unit_comment(vn, is_tagged, vlan_tag))
                unit.set_is_tagged(is_tagged)
                unit.set_vlan_tag(vlan_tag)
                if vlan:
                    vlan.set_vlan_id(int(vlan_tag))
                    self._add_ref_to_list(vlan.get_interfaces(),
                                          interface.li_name)
Exemplo n.º 8
0
    def build_l2_evpn_interface_config(self, interfaces, vn, vlan_conf):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf, li_map = self.set_default_pi(ifd_name)
            if interface_list[0].is_untagged():
                if len(interface_list) > 1:
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" %
                        (ifd_name))
                    continue
                unit_name = ifd_name + "." + str(interface_list[0].unit)
                unit = self.set_default_li(li_map, unit_name,
                                           interface_list[0].unit)
                unit.set_comment(DMUtils.l2_evpn_intf_unit_comment(vn, False))
                unit.set_is_tagged(False)
                unit.set_vlan_tag('4094')
                # attach acls
                self.attach_acls(interface_list[0], unit)
                if vlan_conf:
                    self.add_ref_to_list(vlan_conf.get_interfaces(), unit_name)
            else:
                for interface in interface_list:
                    unit_name = ifd_name + "." + str(interface.unit)
                    unit = self.set_default_li(li_map, unit_name,
                                               interface.unit)
                    unit.set_comment(
                        DMUtils.l2_evpn_intf_unit_comment(
                            vn, True, interface.vlan_tag))
                    unit.set_is_tagged(True)
                    unit.set_vlan_tag(str(interface.vlan_tag))
                    # attach acls
                    self.attach_acls(interface, unit)
                    if vlan_conf:
                        self.add_ref_to_list(vlan_conf.get_interfaces(),
                                             unit_name)
    def build_l2_evpn_interface_config(self, interfaces, vn, vlan_conf):
        ifd_map = {}
        for interface in interfaces:
            ifd_map.setdefault(interface.ifd_name, []).append(interface)

        for ifd_name, interface_list in ifd_map.items():
            intf, li_map = self.set_default_pi(ifd_name)
            if interface_list[0].is_untagged():
                if len(interface_list) > 1:
                    self._logger.error(
                        "invalid logical interfaces config for ifd %s" % (
                            ifd_name))
                    continue
                unit_name = ifd_name + "." + str(interface_list[0].unit)
                unit = self.set_default_li(li_map, unit_name,
                                           interface_list[0].unit)
                unit.set_comment(DMUtils.l2_evpn_intf_unit_comment(vn, False))
                unit.set_is_tagged(False)
                unit.set_vlan_tag('4094')
                # attach acls
                self.attach_acls(interface_list[0], unit)
                if vlan_conf:
                    self.add_ref_to_list(vlan_conf.get_interfaces(), unit_name)
            else:
                for interface in interface_list:
                    unit_name = ifd_name + "." + str(interface.unit)
                    unit = self.set_default_li(li_map, unit_name,
                                               interface.unit)
                    unit.set_comment(DMUtils.l2_evpn_intf_unit_comment(vn,
                        True, interface.vlan_tag))
                    unit.set_is_tagged(True)
                    unit.set_vlan_tag(str(interface.vlan_tag))
                    # attach acls
                    self.attach_acls(interface, unit)
                    if vlan_conf:
                        self.add_ref_to_list(vlan_conf.get_interfaces(), unit_name)
    def _build_l2_evpn_interface_config(self, interfaces, vn, vlan):
        interface_map = OrderedDict()
        for interface in interfaces:
            interface_map.setdefault(interface.pi_name, []).append(interface)

        for pi_name, interface_list in interface_map.items():
            if len(interface_list) > 1 and \
                    any(int(intf.vlan_tag) == 0 for intf in interface_list):
                self._logger.error(
                    "Invalid logical interface config for PI %s" % pi_name)
                continue
            _, li_map = self._add_or_lookup_pi(self.pi_map, pi_name)
            for interface in interface_list:
                is_tagged = int(interface.vlan_tag) != 0
                unit = self._add_or_lookup_li(li_map, interface.li_name, interface.unit)
                unit.set_comment(DMUtils.l2_evpn_intf_unit_comment(vn,
                    is_tagged, interface.vlan_tag))
                unit.set_is_tagged(is_tagged)
                unit.set_vlan_tag(str(interface.vlan_tag) if is_tagged else '4094')
                if vlan:
                    self._add_ref_to_list(vlan.get_interfaces(), interface.li_name)