public void setVpnmanager(IVpnManager vpnmanager) {
this.vpnmanager = vpnmanager;
- vpnmanager.setFibService(this);
+ vpnmanager.setFibManager(this);
}
public void setIdManager(IdManagerService idManager) {
import org.opendaylight.netvirt.fibmanager.api.IFibManager;
public interface IVpnManager {
- void setFibService(IFibManager fibManager);
+ void setFibManager(IFibManager fibManager);
void addExtraRoute(String destination, String nextHop, String rd, String routerID, int label);
void delExtraRoute(String destination, String nextHop, String rd, String routerID);
package org.opendaylight.netvirt.vpnmanager;
import com.google.common.base.Optional;
+
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
import org.opendaylight.netvirt.bgpmanager.api.IBgpManager;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.VpnInstances;
import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance;
import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelsState;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.Adjacencies;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.adjacency.list.Adjacency;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpnservice.impl.rev150216.modules.module.configuration.vpnservice.impl.Bgpmanager;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.fibmanager.rev150330.vrfentries.VrfEntry;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeExternal;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeHwvtep;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.IsDcgwPresentOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.slf4j.Logger;
import java.util.List;
import java.util.concurrent.Future;
-public class TunnelInterfaceStateListener extends AbstractDataChangeListener<StateTunnelList> {
+public class TunnelInterfaceStateListener extends AbstractDataChangeListener<StateTunnelList> implements AutoCloseable{
private static final Logger LOG = LoggerFactory.getLogger(TunnelInterfaceStateListener.class);
protected enum UpdateRouteAction {
ADVERTISE_ROUTE, WITHDRAW_ROUTE
}
- DataBroker broker;
+
+ private ListenerRegistration<DataChangeListener> tunnelInterfaceStateListenerRegistration;
+ private final DataBroker broker;
private final IBgpManager bgpManager;
private IFibManager fibManager;
- private ItmRpcService itmProvider;
+ private ItmRpcService itmRpcService;
- public TunnelInterfaceStateListener(final DataBroker broker,
- final IBgpManager bgpManager, final IFibManager fibManager) {
+ /**
+ * Responsible for listening to tunnel interface state change
+ *
+ * @param db - dataBroker service reference
+ * @param bgpManager Used to advertise routes to the BGP Router
+ */
+ public TunnelInterfaceStateListener(final DataBroker db,
+ final IBgpManager bgpManager) {
super(StateTunnelList.class);
- this.broker = broker;
- this.fibManager = fibManager;
+ broker = db;
this.bgpManager = bgpManager;
+ registerListener(db);
+ }
+
+ public void setITMRpcService(ItmRpcService itmRpcService) {
+ this.itmRpcService = itmRpcService;
+ }
+
+ public void setFibManager(IFibManager fibManager) {
+ this.fibManager = fibManager;
+ }
+
+ public IFibManager getFibManager() {
+ return this.fibManager;
+ }
+
+ @Override
+ public void close() throws Exception {
+ if (tunnelInterfaceStateListenerRegistration != null) {
+ try {
+ tunnelInterfaceStateListenerRegistration.close();
+ } catch (final Exception e) {
+ LOG.error("Error when cleaning up DataChangeListener.", e);
+ }
+ tunnelInterfaceStateListenerRegistration = null;
+ }
+ LOG.info("Tunnel Interface State Listener Closed");
+ }
+
+ private void registerListener(final DataBroker db) {
+ try {
+ tunnelInterfaceStateListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
+ getWildCardPath(), TunnelInterfaceStateListener.this, AsyncDataBroker.DataChangeScope.SUBTREE);
+ } catch (final Exception e) {
+ LOG.error("Tunnel Interface State Listener DataChange listener registration fail!", e);
+ throw new IllegalStateException("Tunnel Interface State Listener registration Listener failed.", e);
+ }
}
- public void setITMProvider(ItmRpcService itmProvider) {
- this.itmProvider = itmProvider;
+ private InstanceIdentifier<StateTunnelList> getWildCardPath() {
+ return InstanceIdentifier.create(TunnelsState.class).child(StateTunnelList.class);
}
@Override
if (tunTypeVal == VpnConstants.ITMTunnelLocType.External.getValue()) {
Future<RpcResult<IsDcgwPresentOutput>> result;
try {
- result = itmProvider.isDcgwPresent(new IsDcgwPresentInputBuilder()
+ result = itmRpcService.isDcgwPresent(new IsDcgwPresentInputBuilder()
.setDcgwIp(destTepIp)
.build());
RpcResult<IsDcgwPresentOutput> rpcResult = result.get();
public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface> implements AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(VpnInterfaceManager.class);
- private ListenerRegistration<DataChangeListener> listenerRegistration, opListenerRegistration, tunnelInterfaceStateListenerRegistration;
+ private ListenerRegistration<DataChangeListener> listenerRegistration, opListenerRegistration;
private final DataBroker broker;
private final IBgpManager bgpManager;
private IFibManager fibManager;
private IMdsalApiManager mdsalManager;
private OdlInterfaceRpcService ifaceMgrRpcService;
- private ItmRpcService itmProvider;
private IdManagerService idManager;
private OdlArputilService arpManager;
private NeutronvpnService neuService;
arpNotificationHandler = new ArpNotificationHandler(this, broker);
vpnSubnetRouteHandler = new VpnSubnetRouteHandler(broker, bgpManager, this);
dpnInVpnChangeListener = new DpnInVpnChangeListener(broker);
- tunnelInterfaceStateListener = new TunnelInterfaceStateListener(broker, bgpManager, fibManager);
notificationService.registerNotificationListener(vpnSubnetRouteHandler);
notificationService.registerNotificationListener(arpNotificationHandler);
notificationService.registerNotificationListener(dpnInVpnChangeListener);
getWildCardPath(), VpnInterfaceManager.this, DataChangeScope.SUBTREE);
opListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
getWildCardPath(), vpnInterfaceOpListener, DataChangeScope.SUBTREE);
- tunnelInterfaceStateListenerRegistration = db.registerDataChangeListener(LogicalDatastoreType.OPERATIONAL,
- getTunnelInterfaceStateListenerPath(), tunnelInterfaceStateListener, DataChangeScope.SUBTREE);
} catch (final Exception e) {
LOG.error("VPN Service DataChange listener registration fail!", e);
throw new IllegalStateException("VPN Service registration Listener failed.", e);
}
}
- private InstanceIdentifier<StateTunnelList> getTunnelInterfaceStateListenerPath() {
- return InstanceIdentifier.create(TunnelsState.class).child(StateTunnelList.class);
- }
-
private InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> getInterfaceListenerPath() {
return InstanceIdentifier.create(InterfacesState.class)
.child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class);
private IFibManager fibManager;
private IMdsalApiManager mdsalManager;
private OdlInterfaceRpcService odlInterfaceRpcService;
- private ItmRpcService itmProvider;
+ private ItmRpcService itmRpcService;
private IdManagerService idManager;
private OdlArputilService arpManager;
private NeutronvpnService neuService;
vpnManager = new VpnManager(dataBroker, bgpManager);
vpnManager.setIdManager(idManager);
vpnInterfaceManager = new VpnInterfaceManager(dataBroker, bgpManager, notificationService);
- tunIntfStateListener = new TunnelInterfaceStateListener(dataBroker, bgpManager, fibManager);
+ tunIntfStateListener = new TunnelInterfaceStateListener(dataBroker, bgpManager);
vpnInterfaceManager.setMdsalManager(mdsalManager);
vpnInterfaceManager.setIfaceMgrRpcService(odlInterfaceRpcService);
- tunIntfStateListener.setITMProvider(itmProvider);
vpnInterfaceManager.setIdManager(idManager);
vpnInterfaceManager.setArpManager(arpManager);
vpnInterfaceManager.setNeutronvpnManager(neuService);
vpnInterfaceManager.setNotificationPublishService(notificationPublishService);
vpnManager.setVpnInterfaceManager(vpnInterfaceManager);
fibService = rpcProviderRegistry.getRpcService(FibRpcService.class);
+ itmRpcService = rpcProviderRegistry.getRpcService(ItmRpcService.class);
vpnInterfaceManager.setFibRpcService(fibService);
+ tunIntfStateListener.setITMRpcService(itmRpcService);
VpnRpcService vpnRpcService = new VpnRpcServiceImpl(idManager, vpnInterfaceManager, dataBroker);
rpcRegistration = getRpcProviderRegistry().addRpcImplementation(VpnRpcService.class, vpnRpcService);
//Handles subnet route entries
this.odlInterfaceRpcService = odlInterfaceRpcService;
}
- public void setITMProvider(ItmRpcService itmProvider) {
- this.itmProvider = itmProvider;
- }
-
public void setIdManager(IdManagerService idManager) {
this.idManager = idManager;
}
public void close() throws Exception {
vpnManager.close();
vpnInterfaceManager.close();
+ tunIntfStateListener.close();
interVpnLinkListener.close();
interVpnLinkNodeListener.close();
}
@Override
- public void setFibService(IFibManager fibManager) {
+ public void setFibManager(IFibManager fibManager) {
LOG.debug("Fib service reference is initialized in VPN Manager");
this.fibManager = fibManager;
vpnInterfaceManager.setFibManager(fibManager);
+ tunIntfStateListener.setFibManager(fibManager);
}
@Override
IdManagerService idManager = getRpcregistryDependency().getRpcService(IdManagerService.class);
OdlArputilService arpManager = getRpcregistryDependency().getRpcService(OdlArputilService.class);
OdlInterfaceRpcService odlInterfaceRpcService = getRpcregistryDependency().getRpcService(OdlInterfaceRpcService.class);
- ItmRpcService itmRpcService = getRpcregistryDependency().getRpcService(ItmRpcService.class);
VpnserviceProvider provider = new VpnserviceProvider(bundleContext);
provider.setNotificationService(getNotificationServiceDependency());
provider.setOdlInterfaceRpcService(odlInterfaceRpcService);
provider.setIdManager(idManager);
provider.setArpManager(arpManager);
- provider.setITMProvider(itmRpcService);
provider.setRpcProviderRegistry(getRpcregistryDependency());
provider.setNotificationPublishService(getNotificationPublishServiceDependency());
getBrokerDependency().registerProvider(provider);