X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=elanmanager%2Felanmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Felan%2Finternal%2FElanPacketInHandler.java;h=85ccf597887c45e92715bb59a45660d748fc6001;hb=d89e5915c691b50d173c44f9d09e3038838957a9;hp=04de7e3a953a858e4cb01425c574ff0dab4391b4;hpb=6d7c74377513c46aaca9618c8b84750ea46f05a6;p=vpnservice.git diff --git a/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/vpnservice/elan/internal/ElanPacketInHandler.java b/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/vpnservice/elan/internal/ElanPacketInHandler.java index 04de7e3a..85ccf597 100755 --- a/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/vpnservice/elan/internal/ElanPacketInHandler.java +++ b/elanmanager/elanmanager-impl/src/main/java/org/opendaylight/vpnservice/elan/internal/ElanPacketInHandler.java @@ -7,26 +7,26 @@ */ package org.opendaylight.vpnservice.elan.internal; +import java.math.BigInteger; + +import org.opendaylight.controller.liblldp.NetUtils; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.vpnservice.elan.l2gw.utils.ElanL2GatewayUtils; import org.opendaylight.vpnservice.elan.utils.ElanConstants; import org.opendaylight.vpnservice.elan.utils.ElanUtils; -//import org.opendaylight.vpnservice.interfacemgr.globals.InterfaceInfo; import org.opendaylight.vpnservice.interfacemgr.globals.InterfaceInfo; import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; import org.opendaylight.vpnservice.mdsalutil.MDSALUtil; import org.opendaylight.vpnservice.mdsalutil.MetaDataUtil; import org.opendaylight.vpnservice.mdsalutil.NWUtil; -import org.opendaylight.controller.liblldp.NetUtils; import org.opendaylight.vpnservice.mdsalutil.packet.Ethernet; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.NoMatch; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketInReason; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.instances.ElanInstance; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.state.Elan; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.elan.tag.name.map.ElanTagName; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.forwarding.entries.MacEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.elan.rev150602.forwarding.entries.MacEntryBuilder; @@ -36,8 +36,11 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.math.BigInteger; +import com.google.common.base.Optional; +import java.util.Arrays; + +@SuppressWarnings("deprecation") public class ElanPacketInHandler implements PacketProcessingListener { private final DataBroker broker; @@ -72,15 +75,18 @@ public class ElanPacketInHandler implements PacketProcessingListener { long portTag = MetaDataUtil.getLportFromMetadata(metadata).intValue(); - IfIndexInterface interfaceInfo = ElanUtils.getInterfaceInfoByInterfaceTag(portTag); - if (interfaceInfo == null) { + Optional interfaceInfoOp = ElanUtils.getInterfaceInfoByInterfaceTag(portTag); + if (!interfaceInfoOp.isPresent()) { logger.warn("There is no interface for given portTag {}", portTag); return; } - String interfaceName = interfaceInfo.getInterfaceName(); + String interfaceName = interfaceInfoOp.get().getInterfaceName(); ElanTagName elanTagName = ElanUtils.getElanInfoByElanTag(elanTag); + if (elanTagName == null) { + logger.warn("not able to find elanTagName in elan-tag-name-map for elan tag {}", elanTag); + return; + } String elanName = elanTagName.getName(); - Elan elanInfo = ElanUtils.getElanByName(elanName); MacEntry macEntry = ElanUtils.getInterfaceMacEntriesOperationalDataPath(interfaceName, physAddress); if(macEntry != null && macEntry.getInterface() == interfaceName) { BigInteger macTimeStamp = macEntry.getControllerLearnedForwardingEntryTimestamp(); @@ -122,6 +128,10 @@ public class ElanPacketInHandler implements PacketProcessingListener { MDSALUtil.syncWrite(broker, LogicalDatastoreType.OPERATIONAL, elanMacEntryId, macEntry); ElanInstance elanInstance = ElanUtils.getElanInstanceByName(elanName); ElanUtils.setupMacFlows(elanInstance, interfaceManager.getInterfaceInfo(interfaceName), elanInstance.getMacTimeout(), macAddress); + + BigInteger dpId = interfaceManager.getDpnForInterface(interfaceName); + ElanL2GatewayUtils.scheduleAddDpnMacInExtDevices(elanInstance.getElanInstanceName(), dpId, + Arrays.asList(physAddress)); } catch (Exception e) { logger.trace("Failed to decode packet: {}", e); } @@ -150,6 +160,7 @@ public class ElanPacketInHandler implements PacketProcessingListener { return; } ElanUtils.deleteMacFlows(elanInfo, oldInterfaceLport, macEntry); + ElanL2GatewayUtils.removeMacsFromElanExternalDevices(elanInfo, Arrays.asList(macEntry.getMacAddress())); } }