X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2Frenderer%2Fovs%2Fconfighelpers%2FOvsInterfaceConfigAddHelper.java;h=11eed1c6dc3baf53525dcb06d48b964c39306a7d;hb=007910122eafb7ccfdfbdd2c48c6ec242c143c87;hp=5e9b5628c171e53a00fe0c307529cbe1ed8223f5;hpb=fd4e64307b45b3e0c9704a3dc699e66c644efc11;p=vpnservice.git diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java index 5e9b5628..11eed1c6 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/confighelpers/OvsInterfaceConfigAddHelper.java @@ -9,6 +9,7 @@ package org.opendaylight.vpnservice.interfacemgr.renderer.ovs.confighelpers; import com.google.common.base.Optional; import com.google.common.util.concurrent.ListenableFuture; + import org.eclipse.xtend.lib.annotations.Data; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; @@ -21,6 +22,10 @@ import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUt import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; import org.opendaylight.vpnservice.interfacemgr.globals.InterfaceInfo; import org.opendaylight.vpnservice.interfacemgr.renderer.ovs.utilities.SouthboundUtils; +import org.opendaylight.vpnservice.interfacemgr.servicebindings.flowbased.utilities.FlowBasedServicesUtils; +import org.opendaylight.vpnservice.mdsalutil.MatchInfo; +import org.opendaylight.vpnservice.mdsalutil.NwConstants; +import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddressBuilder; 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.InterfaceKey; @@ -61,12 +66,15 @@ public class OvsInterfaceConfigAddHelper { private static final Logger LOG = LoggerFactory.getLogger(OvsInterfaceConfigAddHelper.class); public static List> 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; } @@ -85,8 +93,21 @@ public class OvsInterfaceConfigAddHelper { } updateStateEntry(interfaceNew, transaction, ifState); + NodeConnectorId nodeConnectorId = new NodeConnectorId(ifState.getLowerLayerIf().get(0)); + BigInteger dpId = new BigInteger(IfmUtil.getDpnFromNodeConnectorId(nodeConnectorId)); + long portNo = Long.valueOf(IfmUtil.getPortNoFromNodeConnectorId(nodeConnectorId)); + Integer ifIndex = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, interfaceNew.getName()); IfL2vlan ifL2vlan = interfaceNew.getAugmentation(IfL2vlan.class); - if (ifL2vlan == null || ifL2vlan.getL2vlanMode() != IfL2vlan.L2vlanMode.Trunk) { + if (ifL2vlan == null) { + futures.add(transaction.submit()); + return; + } + if(interfaceNew.isEnabled() && ifState.getOperStatus() == OperStatus.Up) { + List matches = FlowBasedServicesUtils.getMatchInfoForVlanPortAtIngressTable(dpId, portNo, interfaceNew); + FlowBasedServicesUtils.installVlanFlow(dpId, portNo, interfaceNew, transaction, matches, ifIndex); + } + if (ifL2vlan.getL2vlanMode() != IfL2vlan.L2vlanMode.Trunk) { + futures.add(transaction.submit()); return; } @@ -94,6 +115,7 @@ public class OvsInterfaceConfigAddHelper { InterfaceParentEntry interfaceParentEntry = InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceParentEntryKey, dataBroker); if (interfaceParentEntry == null) { + futures.add(transaction.submit()); return; } @@ -105,7 +127,6 @@ public class OvsInterfaceConfigAddHelper { OperStatus operStatus = ifState.getOperStatus(); PhysAddress physAddress = ifState.getPhysAddress(); AdminStatus adminStatus = ifState.getAdminStatus(); - NodeConnectorId nodeConnectorId = new NodeConnectorId(ifState.getLowerLayerIf().get(0)); //FIXME: If the no. of child entries exceeds 100, perform txn updates in batches of 100. for (InterfaceChildEntry interfaceChildEntry : interfaceChildEntries) { @@ -122,16 +143,23 @@ public class OvsInterfaceConfigAddHelper { List childLowerLayerIfList = new ArrayList<>(); childLowerLayerIfList.add(0, nodeConnectorId.getValue()); childLowerLayerIfList.add(1, interfaceNew.getName()); + ifIndex = IfmUtil.allocateId(idManager, IfmConstants.IFM_IDPOOL_NAME, ifaceChild.getName()); InterfaceBuilder childIfaceBuilder = new InterfaceBuilder().setAdminStatus(adminStatus) .setOperStatus(operStatus).setPhysAddress(physAddress).setLowerLayerIf(childLowerLayerIfList); childIfaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifaceChild.getName())); transaction.put(LogicalDatastoreType.OPERATIONAL, ifChildStateId, childIfaceBuilder.build(), true); + if (operStatus == OperStatus.Up) { + List matches = FlowBasedServicesUtils.getMatchInfoForVlanPortAtIngressTable(dpId, portNo, ifaceChild); + FlowBasedServicesUtils.installVlanFlow(dpId, portNo, ifaceChild, transaction, matches, ifIndex); + } } futures.add(transaction.submit()); } 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 +201,20 @@ 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 + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState = + InterfaceManagerCommonUtils.getInterfaceStateFromOperDS(interfaceNew.getName(), dataBroker); + if(ifState != null){ + NodeConnectorId ncId = IfmUtil.getNodeConnectorIdFromInterface(ifState); + if(ncId != null) { + long portNo = Long.valueOf(IfmUtil.getPortNoFromNodeConnectorId(ncId)); + InterfaceManagerCommonUtils.makeTunnelIngressFlow(futures, mdsalApiManager, interfaceNew.getAugmentation(IfTunnel.class), + dpId, portNo, interfaceNew, ifState.getIfIndex(), NwConstants.ADD_FLOW); + // start LLDP monitoring for the tunnel interface + AlivenessMonitorUtils.startLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceNew); + } + } } } } @@ -184,6 +226,7 @@ public class OvsInterfaceConfigAddHelper { InterfaceBuilder ifaceBuilder = new InterfaceBuilder(); if (!interfaceNew.isEnabled() && ifState.getOperStatus() != OperStatus.Down) { ifaceBuilder.setOperStatus(OperStatus.Down); + ifaceBuilder.setType(interfaceNew.getType()); ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(interfaceNew.getName())); transaction.merge(LogicalDatastoreType.OPERATIONAL, ifStateId, ifaceBuilder.build()); }