2 * Copyright (c) 2016 Cisco Systems Inc 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 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;
42 import java.util.List;
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.
48 * @author krzysztof.bijakowski@amartus.com
50 public abstract class AbstractL2vpnActivator implements ResourceActivator {
52 private static final Logger LOG = LoggerFactory.getLogger(AbstractL2vpnActivator.class);
54 protected DataBroker dataBroker;
56 private MountPointService mountService;
58 protected AbstractL2vpnActivator(DataBroker dataBroker, MountPointService mountService) {
59 this.dataBroker = dataBroker;
60 this.mountService = mountService;
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);
71 // doActivate(nodeName, outerName, innerName, interfaceConfigurations, l2vpn, qosConfig);
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);
79 // doDeactivate(nodeName, outerName, innerName, xconnectId, interfaceConfigurationId);
82 protected void doActivate(String nodeName,
85 InterfaceConfigurations interfaceConfigurations,
87 java.util.Optional<PolicyManager> qosConfig) throws TransactionCommitFailedException {
89 Optional<DataBroker> optional = MountPointHelper.getDataBroker(mountService, nodeName);
90 if (!optional.isPresent()) {
91 LOG.error("Could not retrieve MountPoint for {}", nodeName);
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();
101 protected void doDeactivate(String nodeName,
104 InstanceIdentifier<P2pXconnect> xconnectId,
105 InstanceIdentifier<InterfaceConfiguration> interfaceConfigurationId) throws TransactionCommitFailedException {
107 Optional<DataBroker> optional = MountPointHelper.getDataBroker(mountService, nodeName);
108 if (!optional.isPresent()) {
109 LOG.error("Could not retrieve MountPoint for {}", nodeName);
113 WriteTransaction transaction = optional.get().newWriteOnlyTransaction();
114 transaction.delete(LogicalDatastoreType.CONFIGURATION, xconnectId);
115 transaction.delete(LogicalDatastoreType.CONFIGURATION, interfaceConfigurationId);
116 transaction.submit().checkedGet();
119 protected abstract java.util.Optional<PolicyManager> activateQos(String name, FcPort port);
121 protected abstract InterfaceConfigurations activateInterface(FcPort portA, FcPort portZ, long mtu);
123 protected abstract Pseudowires activatePseudowire(FcPort neighbor);
125 protected abstract XconnectGroups activateXConnect(String outerName, String innerName, FcPort portA, FcPort portZ, Pseudowires pseudowires);
127 protected abstract L2vpn activateL2Vpn(XconnectGroups xconnectGroups);
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)))
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)))