X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=elanmanager%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Felan%2Finternal%2FElanServiceProvider.java;h=d62503d8d62895f6802dbb77628385f621d06880;hb=cf1ea9172b94fc17e45391b62bf4ca24ac5c5fe0;hp=5f811558963b3076a20052f954d5b7261ec365c4;hpb=84a7d0a360f0d5f9b588e269840a92158d1be7d2;p=netvirt.git diff --git a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanServiceProvider.java b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanServiceProvider.java index 5f81155896..d62503d8d6 100644 --- a/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanServiceProvider.java +++ b/elanmanager/impl/src/main/java/org/opendaylight/netvirt/elan/internal/ElanServiceProvider.java @@ -8,12 +8,13 @@ package org.opendaylight.netvirt.elan.internal; -import static java.util.Collections.emptyList; +import static java.util.Collections.emptyMap; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -83,7 +84,9 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.interfaces.elan._interface.StaticMacEntriesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.elan.state.Elan; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.elan.rev150602.forwarding.entries.MacEntryKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.Uint32; @@ -392,7 +395,7 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(elanInterface); if (elanInterfaceMac != null && elanInterfaceMac.getMacEntry() != null && elanInterfaceMac.getMacEntry().size() > 0) { - macAddress.addAll(elanInterfaceMac.getMacEntry()); + macAddress.addAll(elanInterfaceMac.getMacEntry().values()); } } } @@ -412,8 +415,8 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi for (String elanInterface : elanInterfaces) { ElanInterfaceMac elanInterfaceMac = elanUtils.getElanInterfaceMacByInterfaceName(elanInterface); if (elanInterfaceMac.getMacEntry() != null && elanInterfaceMac.getMacEntry().size() > 0) { - List macEntries = elanInterfaceMac.getMacEntry(); - for (MacEntry macEntry : macEntries) { + Map macEntries = elanInterfaceMac.getMacEntry(); + for (MacEntry macEntry : macEntries.values()) { deleteStaticMacAddress(elanInterface, macEntry.getMacAddress().getValue()); } } @@ -431,8 +434,8 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi public List getElanInstances() { InstanceIdentifier elanInstancesIdentifier = InstanceIdentifier.builder(ElanInstances.class) .build(); - return ElanUtils.read(broker, LogicalDatastoreType.CONFIGURATION, elanInstancesIdentifier).map( - ElanInstances::getElanInstance).orElse(emptyList()); + return new ArrayList<>(ElanUtils.read(broker, LogicalDatastoreType.CONFIGURATION, elanInstancesIdentifier).map( + ElanInstances::getElanInstance).orElse(emptyMap()).values()); } @Override @@ -446,8 +449,8 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi if (!elanInterfacesOptional.isPresent()) { return elanInterfaces; } - List elanInterfaceList = elanInterfacesOptional.get().nonnullElanInterface(); - for (ElanInterface elanInterface : elanInterfaceList) { + Map elanInterfaceList = elanInterfacesOptional.get().nonnullElanInterface(); + for (ElanInterface elanInterface : elanInterfaceList.values()) { if (Objects.equals(elanInterface.getElanInstanceName(), elanInstanceName)) { elanInterfaces.add(elanInterface.getName()); } @@ -810,14 +813,14 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi return; } - List nodes = southboundUtils.getOvsdbNodes(); + Map nodes = southboundUtils.getOvsdbNodes(); if (nodes == null || nodes.isEmpty()) { LOG.trace("No OVS nodes found while creating external network for ELAN {}", elanInstance.getElanInstanceName()); return; } - for (Node node : nodes) { + for (Node node : nodes.values()) { if (bridgeMgr.isIntegrationBridge(node)) { if (update && !elanInstance.isExternal()) { DpnInterfaces dpnInterfaces = elanUtils.getElanInterfaceInfoByElanDpn(elanInstanceName, @@ -869,12 +872,21 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi return; } String flowId = ArpResponderUtil.getFlowId(lportTag, ipAddress); + Map + arpResponderInputInstructionsMap = new HashMap<>(); + int instructionKey = 0; + for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction + instructionObj : arpResponderInput.getInstructions()) { + arpResponderInputInstructionsMap.put(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types + .rev131026.instruction.list.InstructionKey(++instructionKey), instructionObj); + } Flow flowEntity = MDSALUtil.buildFlowNew(NwConstants.ARP_RESPONDER_TABLE, flowId, NwConstants.DEFAULT_ARP_FLOW_PRIORITY, flowId, 0, 0, ArpResponderUtil.generateCookie(lportTag, ipAddress), ArpResponderUtil.getMatchCriteria(lportTag, elanInstance, ipAddress), - arpResponderInput.getInstructions()); + arpResponderInputInstructionsMap); LoggingFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION, tx -> mdsalManager.addFlow(tx, dpnId, flowEntity)), LOG, "Error adding flow {}", flowEntity); LOG.info("Installed the ARP Responder flow for Interface {}", ingressInterfaceName); @@ -897,12 +909,23 @@ public class ElanServiceProvider extends AbstractLifecycle implements IElanServi int lportTag = arpResponderInput.getLportTag(); String flowId = ArpResponderUtil.getFlowId(lportTag, ipAddress); + + Map + arpResponderInputInstructionsMap = new HashMap<>(); + int instructionKey = 0; + for (org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction + instructionObj : arpResponderInput.getInstructions()) { + arpResponderInputInstructionsMap.put(new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types + .rev131026.instruction.list.InstructionKey(++instructionKey), instructionObj); + } + Flow flowEntity = MDSALUtil.buildFlowNew(NwConstants.ARP_RESPONDER_TABLE, flowId, NwConstants.DEFAULT_ARP_FLOW_PRIORITY, flowId, 0, 0, ArpResponderUtil.generateCookie(lportTag, ipAddress), ArpResponderUtil.getMatchCriteria(lportTag, elanInstance, ipAddress), - arpResponderInput.getInstructions()); + arpResponderInputInstructionsMap); LoggingFutures.addErrorLogging(txRunner.callWithNewWriteOnlyTransactionAndSubmit(Datastore.CONFIGURATION, tx -> mdsalManager.addFlow(tx, dpnId, flowEntity)), LOG, "Error adding flow {}", flowEntity); LOG.trace("Installed the ExternalTunnel ARP Responder flow for ElanInstance {}", elanInstanceName);