From 54bc9b93fa8c0bde759196cd2ebbb78fcbb18959 Mon Sep 17 00:00:00 2001 From: Faseela K Date: Mon, 25 Jan 2016 17:46:24 +0530 Subject: [PATCH] Bug 5064 : TEP configuration should program the ingress flow even if the TEP is created manually on the switch Description : Initial code has been done under the assumption that TEP will always be configured from northbound using ovsdb. Just hardening the code to support manual TEP configuration on the switch. Change-Id: Ifc4a688911e1cbe819795fea34da459a52a2bc97 Signed-off-by: Faseela K (cherry picked from commit b603bdaf1c6daaf709c9a649367de0759f353a77) --- .../interfacemgr/InterfacemgrProvider.java | 2 +- .../listeners/InterfaceConfigListener.java | 2 +- .../listeners/VlanMemberConfigListener.java | 8 +++++-- .../OvsInterfaceConfigAddHelper.java | 21 +++++++++++++++++-- .../OvsInterfaceConfigRemoveHelper.java | 1 - .../OvsInterfaceConfigUpdateHelper.java | 4 ++-- .../OvsVlanMemberConfigUpdateHelper.java | 6 ++++-- .../TunnelInterfaceConfigurationTest.java | 9 +++++--- .../test/VlanInterfaceConfigurationTest.java | 9 +++++--- 9 files changed, 45 insertions(+), 17 deletions(-) diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java index 69930e9d..b06fd247 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java @@ -119,7 +119,7 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable flowBasedServicesInterfaceStateListener.registerListener(LogicalDatastoreType.OPERATIONAL, dataBroker); vlanMemberConfigListener = - new VlanMemberConfigListener(dataBroker, idManager, alivenessManager); + new VlanMemberConfigListener(dataBroker, idManager, alivenessManager,mdsalManager); vlanMemberConfigListener.registerListener(LogicalDatastoreType.CONFIGURATION, dataBroker); alivenessMonitorListener = new org.opendaylight.vpnservice.interfacemgr.listeners.AlivenessMonitorListener(dataBroker); notificationService.registerNotificationListener(alivenessMonitorListener); diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java index 9eb7869c..be8bd8d1 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/listeners/InterfaceConfigListener.java @@ -141,7 +141,7 @@ public class InterfaceConfigListener extends AsyncDataTreeChangeListenerBase> addConfiguration(DataBroker dataBroker, ParentRefs parentRefs, - Interface interfaceNew, IdManagerService idManager) { + Interface interfaceNew, IdManagerService idManager, + AlivenessMonitorService alivenessMonitorService, + IMdsalApiManager mdsalApiManager) { List> futures = new ArrayList<>(); IfTunnel ifTunnel = interfaceNew.getAugmentation(IfTunnel.class); if (ifTunnel != null) { - addTunnelConfiguration(dataBroker, parentRefs, interfaceNew, idManager, futures); + addTunnelConfiguration(dataBroker, parentRefs, interfaceNew, idManager, alivenessMonitorService, + mdsalApiManager, futures); return futures; } @@ -132,6 +137,8 @@ public class OvsInterfaceConfigAddHelper { private static void addTunnelConfiguration(DataBroker dataBroker, ParentRefs parentRefs, Interface interfaceNew, IdManagerService idManager, + AlivenessMonitorService alivenessMonitorService, + IMdsalApiManager mdsalApiManager, List> futures) { LOG.debug("adding tunnel configuration for {}", interfaceNew.getName()); WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); @@ -173,6 +180,16 @@ public class OvsInterfaceConfigAddHelper { String bridgeName = ovsdbBridgeAugmentation.getBridgeName().getValue(); SouthboundUtils.addPortToBridge(bridgeIid, interfaceNew, ovsdbBridgeAugmentation, bridgeName, interfaceNew.getName(), dataBroker, futures); + + // if TEP is already configured on switch, start LLDP monitoring and program tunnel ingress flow + NodeConnectorId ncId = IfmUtil.getNodeConnectorIdFromInterface(interfaceNew, dataBroker); + if(ncId != null){ + long portNo = Long.valueOf(IfmUtil.getPortNoFromNodeConnectorId(ncId)); + InterfaceManagerCommonUtils.makeTunnelIngressFlow(futures, mdsalApiManager, interfaceNew.getAugmentation(IfTunnel.class), + dpId, portNo, interfaceNew, NwConstants.ADD_FLOW); + // start LLDP monitoring for the tunnel interface + AlivenessMonitorUtils.startLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceNew); + } } } } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java index 9264b5b9..8a4748c6 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigRemoveHelper.java @@ -161,7 +161,6 @@ public class OvsInterfaceConfigRemoveHelper { t.delete(LogicalDatastoreType.CONFIGURATION, tpIid); // delete tunnel ingress flow - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(interfaceOld.getName(), dataBroker); NodeConnectorId ncId = IfmUtil.getNodeConnectorIdFromInterface(interfaceOld, dataBroker); long portNo = Long.valueOf(IfmUtil.getPortNoFromNodeConnectorId(ncId)); InterfaceManagerCommonUtils.makeTunnelIngressFlow(futures, mdsalApiManager, diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java index cc00a4e5..328c37c1 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigUpdateHelper.java @@ -56,7 +56,7 @@ public class OvsInterfaceConfigUpdateHelper{ futures.addAll(OvsInterfaceConfigRemoveHelper.removeConfiguration(dataBroker, alivenessMonitorService, interfaceOld, idManager, mdsalApiManager, interfaceOld.getAugmentation(ParentRefs.class))); futures.addAll(OvsInterfaceConfigAddHelper.addConfiguration(dataBroker, - interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager)); + interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager,alivenessMonitorService,mdsalApiManager)); return futures; } @@ -64,7 +64,7 @@ public class OvsInterfaceConfigUpdateHelper{ InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(interfaceNew.getName(), dataBroker); if (ifState == null) { futures.addAll(OvsInterfaceConfigAddHelper.addConfiguration(dataBroker, - interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager)); + interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager, alivenessMonitorService, mdsalApiManager)); return futures; } diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java index 9111839d..9d5a578a 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsVlanMemberConfigUpdateHelper.java @@ -15,6 +15,7 @@ import org.opendaylight.idmanager.IdManager; import org.opendaylight.vpnservice.interfacemgr.IfmUtil; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils; import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; +import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder; @@ -36,7 +37,8 @@ public class OvsVlanMemberConfigUpdateHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsVlanMemberConfigUpdateHelper.class); public static List> updateConfiguration(DataBroker dataBroker, AlivenessMonitorService alivenessMonitorService, ParentRefs parentRefsNew, Interface interfaceOld, IfL2vlan ifL2vlanNew, - Interface interfaceNew, IdManagerService idManager) { + Interface interfaceNew, IdManagerService idManager, + IMdsalApiManager mdsalApiManager) { List> futures = new ArrayList<>(); ParentRefs parentRefsOld = interfaceOld.getAugmentation(ParentRefs.class); @@ -49,7 +51,7 @@ public class OvsVlanMemberConfigUpdateHelper { if (interfaceChildEntry == null) { futures.addAll(OvsInterfaceConfigAddHelper.addConfiguration(dataBroker, - interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager)); + interfaceNew.getAugmentation(ParentRefs.class), interfaceNew, idManager, alivenessMonitorService, mdsalApiManager)); return futures; } diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java index cdf1e48a..172d1935 100644 --- a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java +++ b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/TunnelInterfaceConfigurationTest.java @@ -162,7 +162,8 @@ public class TunnelInterfaceConfigurationTest { doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read( LogicalDatastoreType.OPERATIONAL, dpnBridgeEntryIid); - addHelper.addConfiguration(dataBroker, parentRefs, tunnelInterfaceEnabled, idManager); + addHelper.addConfiguration(dataBroker, parentRefs, tunnelInterfaceEnabled, idManager, + alivenessMonitorService, mdsalApiManager); //Add some verifications verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, bridgeInterfaceEntryInstanceIdentifier, bridgeInterfaceEntry, true); @@ -172,13 +173,15 @@ public class TunnelInterfaceConfigurationTest { public void testAddGreInterfaceWhenSwitchIsConnected() { Optional expectedBridgeRefEntry = Optional.of(bridgeRefEntry); Optional expectedOvsdbBridgeAugmentation = Optional.of(ovsdbBridgeAugmentation); - + doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read( + LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier); doReturn(Futures.immediateCheckedFuture(expectedBridgeRefEntry)).when(mockReadTx).read( LogicalDatastoreType.OPERATIONAL, dpnBridgeEntryIid); doReturn(Futures.immediateCheckedFuture(expectedOvsdbBridgeAugmentation)).when(mockReadTx).read( LogicalDatastoreType.OPERATIONAL, ovsdbBridgeAugmentationInstanceIdentifier); - addHelper.addConfiguration(dataBroker, parentRefs, tunnelInterfaceEnabled, idManager); + addHelper.addConfiguration(dataBroker, parentRefs, tunnelInterfaceEnabled, idManager, + alivenessMonitorService, mdsalApiManager); //Add some verifications verify(mockWriteTx).put(LogicalDatastoreType.CONFIGURATION, bridgeInterfaceEntryInstanceIdentifier , diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/VlanInterfaceConfigurationTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/VlanInterfaceConfigurationTest.java index 8355014e..469ac2a5 100644 --- a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/VlanInterfaceConfigurationTest.java +++ b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/VlanInterfaceConfigurationTest.java @@ -107,7 +107,8 @@ public class VlanInterfaceConfigurationTest { doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read( LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier); - addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager); + addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager, + alivenessMonitorService, mdsalApiManager); //Nothing to verify, since when switch is not connected we don't do any datastore operation @@ -123,7 +124,8 @@ public class VlanInterfaceConfigurationTest { doReturn(Futures.immediateCheckedFuture(expectedStateInterface)).when(mockReadTx).read( LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier); - addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager); + addHelper.addConfiguration(dataBroker, null, vlanInterfaceEnabled, idManager, + alivenessMonitorService, mdsalApiManager); //Nothing to verify, since when adminstate is enabled and switch opstate is already up, //we don't do any datastore operation @@ -145,7 +147,8 @@ public class VlanInterfaceConfigurationTest { ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(vlanInterfaceEnabled.getName())); stateInterface = ifaceBuilder.build(); - addHelper.addConfiguration(dataBroker, null, vlanInterfaceDisabled, idManager); + addHelper.addConfiguration(dataBroker, null, vlanInterfaceDisabled, idManager, + alivenessMonitorService, mdsalApiManager); //verification verify(mockWriteTx).merge(LogicalDatastoreType.OPERATIONAL, interfaceStateIdentifier, stateInterface); -- 2.36.6