2 * Copyright (c) 2019 Xoriant Corporation and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator;
10 import static org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthProfileComposition.BwpApplicability.UNI;
11 import static org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthProfileComposition.BwpDirection.EGRESS;
12 import static org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthProfileComposition.BwpDirection.INGRESS;
14 import java.util.List;
15 import java.util.Optional;
16 import java.util.concurrent.ExecutionException;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.mdsal.binding.api.MountPointService;
19 import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
20 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.FixedServiceNaming;
21 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.ServicePort;
22 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.BandwidthProfileHelper;
23 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.util.LoopbackUtils;
24 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.BridgeDomainAttachmentCircuitHelper;
25 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.BridgeDomainHelper;
26 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.BridgeDomainPseudowireHelper;
27 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.L2vpnHelper;
28 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev170907.InterfaceConfigurations;
29 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev170907._interface.configurations.InterfaceConfiguration;
30 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.infra.policymgr.cfg.rev171212.PolicyManager;
31 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.L2vpn;
32 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.l2vpn.database.BridgeDomainGroups;
33 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.l2vpn.database.bridge.domain.groups.BridgeDomainGroup;
34 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.l2vpn.database.bridge.domain.groups.bridge.domain.group.bridge.domains.BridgeDomain;
35 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.l2vpn.database.bridge.domain.groups.bridge.domain.group.bridge.domains.bridge.domain.BdAttachmentCircuits;
36 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev170626.l2vpn.database.bridge.domain.groups.bridge.domain.group.bridge.domains.bridge.domain.BdPseudowires;
37 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev180307.Uuid;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
41 * @author arif.hussain@xoriant.com
43 public class L2vpnBridgeDomainActivator extends AbstractL2vpnBridgeDomainActivator {
45 private final FixedServiceNaming namingProvider;
47 public L2vpnBridgeDomainActivator(DataBroker dataBroker, MountPointService mountService) {
48 super(dataBroker, mountService);
49 namingProvider = new FixedServiceNaming();
53 protected Optional<PolicyManager> activateQos(String name, ServicePort port) {
54 return new BandwidthProfileHelper(port).addPolicyMap(name, INGRESS, UNI)
55 .addPolicyMap(name, EGRESS, UNI).build();
59 protected String getInnerName(String serviceId) {
60 return namingProvider.replaceForbidenCharacters(serviceId);
64 protected String getOuterName(String serviceId) {
65 return namingProvider.replaceForbidenCharacters(serviceId);
69 protected InterfaceConfigurations activateInterface(ServicePort portA, ServicePort portZ,
70 long mtu, boolean isExclusive) {
72 return new InterfaceActivator().activate(portA, portZ, mtu, isExclusive);
76 protected void createSubInterface(String nodeName, InterfaceConfigurations subInterfaceConfigurations,
77 MountPointService mountService2) throws InterruptedException, ExecutionException {
78 new TransactionActivator().activateSubInterface(nodeName, subInterfaceConfigurations, mountService2);
82 protected InterfaceConfigurations createSubInterface(ServicePort portA, ServicePort portZ,
85 return new InterfaceActivator().buildSubInterface(portA, portZ, mtu);
89 protected BdPseudowires activateBdPseudowire(ServicePort neighbor) {
91 return new BridgeDomainPseudowireHelper()
92 .addBdPseudowire(LoopbackUtils.getIpv4Address(neighbor, dataBroker)).build();
96 protected BridgeDomainGroups activateBridgeDomain(String outerName, String innerName,
97 ServicePort port, ServicePort neighbor, BdPseudowires bdPseudowires,
98 boolean isExclusive) {
100 BdAttachmentCircuits bdattachmentCircuits =
101 new BridgeDomainAttachmentCircuitHelper().addPort(port, isExclusive).build();
102 BridgeDomainGroup bridgeDomainGroup = new BridgeDomainHelper()
103 .appendBridgeDomain(innerName, bdattachmentCircuits, bdPseudowires)
106 return BridgeDomainHelper.createBridgeDomainGroups(bridgeDomainGroup);
110 protected L2vpn activateL2Vpn(BridgeDomainGroups bridgeDomainGroups) {
112 return L2vpnHelper.build(bridgeDomainGroups);
116 protected void doActivate(String node, InterfaceConfigurations interfaceConfigurations,
117 L2vpn l2vpn, MountPointService mountService2, Optional<PolicyManager> qosConfig)
118 throws InterruptedException, ExecutionException {
120 new TransactionActivator().activate(node, interfaceConfigurations, l2vpn, mountService2, qosConfig);
124 protected InstanceIdentifier<InterfaceConfiguration> deactivateInterface(ServicePort port,
125 boolean isExclusive) {
127 return new InterfaceActivator().deactivate(port, isExclusive);
131 protected void doDeactivate(ServicePort port, InstanceIdentifier<BridgeDomain> bridgeDomainId,
132 InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId,
133 boolean isExclusive, EndPoint endPoint, List<String> dvls2, List<Uuid> inls2)
134 throws InterruptedException, ExecutionException {
136 new TransactionActivator().deactivate(port, bridgeDomainId, interfaceConfigurationId,
137 isExclusive, endPoint, mountService, dvls2, inls2);