Presto NRP migrated to new TAPI-based model. Common infrastructure refactored to...
[unimgr.git] / cisco-xr-driver / src / main / java / org / opendaylight / unimgr / mef / nrp / cisco / xr / l2vpn / activator / AbstractL2vpnActivator.java
1 /*
2  * Copyright (c) 2016 Cisco Systems Inc and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.activator;
9
10 import com.google.common.base.Optional;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
13 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
14 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
15 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
16 import org.opendaylight.unimgr.mef.nrp.api.EndPoint;
17 import org.opendaylight.unimgr.mef.nrp.cisco.xr.common.helper.InterfaceHelper;
18 import org.opendaylight.unimgr.mef.nrp.cisco.xr.l2vpn.helper.L2vpnHelper;
19 import org.opendaylight.unimgr.mef.nrp.common.MountPointHelper;
20 import org.opendaylight.unimgr.mef.nrp.common.ResourceActivator;
21 import org.opendaylight.unimgr.mef.nrp.common.ResourceActivatorException;
22 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.asr9k.policymgr.cfg.rev150518.PolicyManager;
23 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceActive;
24 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730.InterfaceConfigurations;
25 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfiguration;
26 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.ifmgr.cfg.rev150730._interface.configurations.InterfaceConfigurationKey;
27 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.L2vpn;
28 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.Database;
29 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.XconnectGroups;
30 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroup;
31 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.XconnectGroupKey;
32 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.P2pXconnects;
33 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.P2pXconnect;
34 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.P2pXconnectKey;
35 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.ios.xr.l2vpn.cfg.rev151109.l2vpn.database.xconnect.groups.xconnect.group.p2p.xconnects.p2p.xconnect.Pseudowires;
36 import org.opendaylight.yang.gen.v1.http.cisco.com.ns.yang.cisco.xr.types.rev150629.CiscoIosXrString;
37 import org.opendaylight.yang.gen.v1.urn.onf.core.network.module.rev160630.g_forwardingconstruct.FcPort;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42 import java.util.List;
43
44 /**
45  * Abstarct activator of VPLS-based L2 VPN on IOS-XR devices. It is responsible for handling activation and deactivation
46  * process of VPN configuration and it provides generic transaction designated for this purpose.
47  *
48  * @author krzysztof.bijakowski@amartus.com
49  */
50 public abstract class AbstractL2vpnActivator implements ResourceActivator {
51
52     private static final Logger LOG = LoggerFactory.getLogger(AbstractL2vpnActivator.class);
53
54     protected DataBroker dataBroker;
55
56     private MountPointService mountService;
57
58     protected AbstractL2vpnActivator(DataBroker dataBroker, MountPointService mountService) {
59         this.dataBroker = dataBroker;
60         this.mountService = mountService;
61     }
62
63     @Override
64     public void activate(List<EndPoint> endPoints, String serviceName) throws ResourceActivatorException, TransactionCommitFailedException {
65 //        java.util.Optional<PolicyManager> qosConfig = activateQos(innerName, port);
66 //        InterfaceConfigurations interfaceConfigurations = activateInterface(port, neighbor, mtu);
67 //        Pseudowires pseudowires = activatePseudowire(neighbor);
68 //        XconnectGroups xconnectGroups = activateXConnect(outerName, innerName, port, neighbor, pseudowires);
69 //        L2vpn l2vpn = activateL2Vpn(xconnectGroups);
70 //
71 //        doActivate(nodeName, outerName, innerName, interfaceConfigurations, l2vpn, qosConfig);
72     }
73
74     @Override
75     public void deactivate(List<EndPoint> endPoints, String serviceName) throws TransactionCommitFailedException, ResourceActivatorException {
76 //        InstanceIdentifier<P2pXconnect> xconnectId = deactivateXConnect(outerName, innerName);
77 //        InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId = deactivateInterface(port);
78 //
79 //        doDeactivate(nodeName, outerName, innerName, xconnectId, interfaceConfigurationId);
80     }
81
82     protected void doActivate(String nodeName,
83                               String outerName,
84                               String innerName,
85                               InterfaceConfigurations interfaceConfigurations,
86                               L2vpn l2vpn,
87                               java.util.Optional<PolicyManager> qosConfig) throws TransactionCommitFailedException {
88
89         Optional<DataBroker> optional = MountPointHelper.getDataBroker(mountService, nodeName);
90         if (!optional.isPresent()) {
91             LOG.error("Could not retrieve MountPoint for {}", nodeName);
92             return;
93         }
94
95         WriteTransaction transaction = optional.get().newWriteOnlyTransaction();
96         transaction.merge(LogicalDatastoreType.CONFIGURATION, InterfaceHelper.getInterfaceConfigurationsId(), interfaceConfigurations);
97         transaction.merge(LogicalDatastoreType.CONFIGURATION, L2vpnHelper.getL2vpnId(), l2vpn);
98         transaction.submit().checkedGet();
99     }
100
101     protected void doDeactivate(String nodeName,
102                                 String outerName,
103                                 String innerName,
104                                 InstanceIdentifier<P2pXconnect> xconnectId,
105                                 InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId) throws TransactionCommitFailedException {
106
107         Optional<DataBroker> optional = MountPointHelper.getDataBroker(mountService, nodeName);
108         if (!optional.isPresent()) {
109             LOG.error("Could not retrieve MountPoint for {}", nodeName);
110             return;
111         }
112
113         WriteTransaction transaction = optional.get().newWriteOnlyTransaction();
114         transaction.delete(LogicalDatastoreType.CONFIGURATION, xconnectId);
115         transaction.delete(LogicalDatastoreType.CONFIGURATION, interfaceConfigurationId);
116         transaction.submit().checkedGet();
117     }
118
119     protected abstract java.util.Optional<PolicyManager> activateQos(String name, FcPort port);
120
121     protected abstract InterfaceConfigurations activateInterface(FcPort portA, FcPort portZ, long mtu);
122
123     protected abstract Pseudowires activatePseudowire(FcPort neighbor);
124
125     protected abstract XconnectGroups activateXConnect(String outerName, String innerName, FcPort portA, FcPort portZ, Pseudowires pseudowires);
126
127     protected abstract L2vpn activateL2Vpn(XconnectGroups xconnectGroups);
128
129     private InstanceIdentifier<P2pXconnect> deactivateXConnect(String outerName, String innerName) {
130         return InstanceIdentifier.builder(L2vpn.class)
131                 .child(Database.class)
132                 .child(XconnectGroups.class)
133                 .child(XconnectGroup.class, new XconnectGroupKey(new CiscoIosXrString(outerName)))
134                 .child(P2pXconnects.class).child(P2pXconnect.class, new P2pXconnectKey(new CiscoIosXrString(innerName)))
135                 .build();
136     }
137
138     private InstanceIdentifier<InterfaceConfiguration> deactivateInterface(FcPort port) {
139         return InstanceIdentifier.builder(InterfaceConfigurations.class)
140                 .child(InterfaceConfiguration.class, new InterfaceConfigurationKey(new InterfaceActive("act"), InterfaceHelper.getInterfaceName(port)))
141                 .build();
142     }
143 }