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=07a4709d91eaaced4740a02c99865b613537fd56;hpb=54bc9b93fa8c0bde759196cd2ebbb78fcbb18959;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 07a4709d..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,8 @@ 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; @@ -90,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; } @@ -99,6 +115,7 @@ public class OvsInterfaceConfigAddHelper { InterfaceParentEntry interfaceParentEntry = InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceParentEntryKey, dataBroker); if (interfaceParentEntry == null) { + futures.add(transaction.submit()); return; } @@ -110,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) { @@ -127,10 +143,15 @@ 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()); } @@ -182,13 +203,17 @@ public class OvsInterfaceConfigAddHelper { 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); + 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); + } } } } @@ -201,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()); }