2 * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.vpnservice.interfacemgr.listeners;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
12 import org.opendaylight.vpnservice.datastoreutils.AsyncDataTreeChangeListenerBase;
13 import org.opendaylight.vpnservice.datastoreutils.DataStoreJobCoordinator;
14 import org.opendaylight.vpnservice.interfacemgr.renderer.hwvtep.confighelpers.HwVTEPConfigRemoveHelper;
15 import org.opendaylight.vpnservice.interfacemgr.renderer.hwvtep.confighelpers.HwVTEPInterfaceConfigAddHelper;
16 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfTunnel;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.ParentRefs;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeVxlan;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.interfaces._interface.NodeIdentifier;
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
24 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory;
27 import java.util.List;
28 import java.util.concurrent.Callable;
30 public class HwVTEPConfigListener extends AsyncDataTreeChangeListenerBase<Interface, HwVTEPConfigListener> {
31 private static final Logger LOG = LoggerFactory.getLogger(HwVTEPConfigListener.class);
32 private DataBroker dataBroker;
34 public HwVTEPConfigListener(final DataBroker dataBroker) {
35 super(Interface.class, HwVTEPConfigListener.class);
36 this.dataBroker = dataBroker;
40 protected InstanceIdentifier<Interface> getWildCardPath() {
41 return InstanceIdentifier.create(Interfaces.class).child(Interface.class);
45 protected void remove(InstanceIdentifier<Interface> key, Interface interfaceOld) {
46 // HwVTEPs support only vxlan
47 IfTunnel ifTunnel = interfaceOld.getAugmentation(IfTunnel.class);
48 if (ifTunnel != null && ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)) {
49 ParentRefs parentRefs = interfaceOld.getAugmentation(ParentRefs.class);
50 if (parentRefs != null) {
51 for(NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier()) {
52 if(nodeIdentifier.getNodeId().equals("hwvtep:1")) {
53 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
54 RendererConfigRemoveWorker configWorker = new RendererConfigRemoveWorker(key, interfaceOld, parentRefs);
55 coordinator.enqueueJob(interfaceOld.getName(), configWorker);
63 protected void update(InstanceIdentifier<Interface> key, Interface interfaceOld, Interface interfaceNew) {
68 protected void add(InstanceIdentifier<Interface> key, Interface interfaceNew) {
69 // HwVTEPs support only vxlan
70 IfTunnel ifTunnel = interfaceNew.getAugmentation(IfTunnel.class);
71 if (ifTunnel != null && ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)) {
72 ParentRefs parentRefs = interfaceNew.getAugmentation(ParentRefs.class);
73 if (parentRefs != null) {
74 for(NodeIdentifier nodeIdentifier : parentRefs.getNodeIdentifier()) {
75 if(nodeIdentifier.getNodeId().equals("hwvtep:1")) {
76 DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance();
77 RendererConfigAddWorker configWorker = new RendererConfigAddWorker(key, interfaceNew, parentRefs);
78 coordinator.enqueueJob(interfaceNew.getName(), configWorker);
86 protected HwVTEPConfigListener getDataTreeChangeListener() {
87 return HwVTEPConfigListener.this;
90 private class RendererConfigAddWorker implements Callable<List<ListenableFuture<Void>>> {
91 InstanceIdentifier<Interface> key;
92 Interface interfaceNew;
94 ParentRefs parentRefs;
96 public RendererConfigAddWorker(InstanceIdentifier<Interface> key, Interface interfaceNew,
97 ParentRefs parentRefs) {
99 this.interfaceNew = interfaceNew;
100 this.ifL2vlan = ifL2vlan;
101 this.parentRefs = parentRefs;
105 public List<ListenableFuture<Void>> call() throws Exception {
106 return HwVTEPInterfaceConfigAddHelper.addConfiguration(dataBroker, parentRefs, interfaceNew);
110 private class RendererConfigRemoveWorker implements Callable<List<ListenableFuture<Void>>> {
111 InstanceIdentifier<Interface> key;
112 Interface interfaceOld;
113 ParentRefs parentRefs;
115 public RendererConfigRemoveWorker(InstanceIdentifier<Interface> key, Interface interfaceOld,
116 ParentRefs parentRefs) {
118 this.interfaceOld = interfaceOld;
119 this.parentRefs = parentRefs;
123 public List<ListenableFuture<Void>> call() throws Exception {
124 return HwVTEPConfigRemoveHelper.removeConfiguration(dataBroker, interfaceOld, parentRefs);