X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=vpnservice%2Fvpnmanager%2Fvpnmanager-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Fvpnmanager%2FVpnInterfaceManager.java;h=6963239076acda6a7c5863a4ad311d497872d819;hb=f60b2b35594f7cb0bc3aeba1a48f9ef9610649d5;hp=872917358567313a5e89cbb998510d1c5a6e63f7;hpb=318ef33e79a2bb297af9dfcc0d3d7936781be39b;p=netvirt.git diff --git a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java index 8729173585..6963239076 100644 --- a/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java +++ b/vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/VpnInterfaceManager.java @@ -32,14 +32,12 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; +import org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; -import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException; import org.opendaylight.genius.datastoreutils.DataStoreJobCoordinator; -import org.opendaylight.genius.mdsalutil.AbstractDataChangeListener; import org.opendaylight.genius.mdsalutil.ActionInfo; import org.opendaylight.genius.mdsalutil.ActionType; import org.opendaylight.genius.mdsalutil.FlowEntity; @@ -65,7 +63,6 @@ import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev14081 import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstanceKey; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterface; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceBuilder; import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.interfaces.VpnInterfaceKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.PhysAddress; @@ -82,6 +79,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.arputil.rev160406.Se import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.servicebinding.rev160406.service.bindings.services.info.BoundServices; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.lockmanager.rev160413.LockManagerService; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; @@ -121,6 +119,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.neu import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.neutron.router.dpns.router.dpn.list.dpn.vpninterfaces.list.RouterInterfacesKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.remove.dpn.event.RemoveEventData; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.remove.dpn.event.RemoveEventDataBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.id.to.vpn.instance.VpnIds; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListBuilder; @@ -137,9 +136,9 @@ import org.opendaylight.yangtools.yang.common.RpcResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class VpnInterfaceManager extends AbstractDataChangeListener implements AutoCloseable { +public class VpnInterfaceManager extends AsyncDataTreeChangeListenerBase + implements AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(VpnInterfaceManager.class); - private ListenerRegistration listenerRegistration; private final DataBroker dataBroker; private final IBgpManager bgpManager; private final IFibManager fibManager; @@ -159,7 +158,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getWildCardPath() { + @Override + protected InstanceIdentifier getWildCardPath() { return InstanceIdentifier.create(VpnInterfaces.class).child(VpnInterface.class); } @Override - public void close() throws Exception { - if (listenerRegistration != null) { - listenerRegistration.close(); - listenerRegistration = null; - } - LOG.info("{} close", getClass().getSimpleName()); + protected VpnInterfaceManager getDataTreeChangeListener() { + return VpnInterfaceManager.this; } + private InstanceIdentifier getInterfaceListenerPath() { return InstanceIdentifier.create(InterfacesState.class) .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class); @@ -526,7 +522,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnIdsInstanceIdentifier = VpnUtil.getVpnIdToVpnInstanceIdentifier(vpnId); + Optional vpnIdsOptional = VpnUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, vpnIdsInstanceIdentifier); + if (vpnIdsOptional.isPresent() && vpnIdsOptional.get().isExternalVpn()) { + Optional gwMacAddressOptional = InterfaceUtils.getMacAddressForInterface(dataBroker, interfaceName); + if (!gwMacAddressOptional.isPresent()) { + LOG.error("Failed to get gwMacAddress for interface {}", interfaceName); + return; + } + String gwMacAddress = gwMacAddressOptional.get(); + FlowEntity flowEntity = VpnUtil.buildL3vpnGatewayFlow(dpnId, gwMacAddress, vpnId); + if (addOrRemove == NwConstants.ADD_FLOW) { + mdsalManager.addFlowToTx(flowEntity, writeInvTxn); + } else if (addOrRemove == NwConstants.DEL_FLOW) { + mdsalManager.removeFlowToTx(flowEntity, writeInvTxn); + } + } } - private void processVpnInterfaceAdjacencies(BigInteger dpnId, String vpnName, String interfaceName, + protected void processVpnInterfaceAdjacencies(BigInteger dpnId, String vpnName, String interfaceName, WriteTransaction writeConfigTxn, WriteTransaction writeOperTxn) { InstanceIdentifier identifier = VpnUtil.getVpnInterfaceIdentifier(interfaceName); @@ -568,7 +580,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); + List vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); LOG.trace("NextHops for interface {} are {}", interfaceName, nextHops); for (Adjacency nextHop : nextHops) { @@ -576,6 +588,10 @@ public class VpnInterfaceManager extends AbstractDataChangeListener adjNextHop = nextHop.getNextHopIpList(); value.add(new AdjacencyBuilder(nextHop).setLabel(label).setNextHopIpList( (adjNextHop != null && !adjNextHop.isEmpty()) ? adjNextHop : Arrays.asList(nextHopIp)) @@ -613,8 +629,8 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getVpnsImportingMyRoute(final String vpnName) { - List vpnsToImportRoute = new ArrayList<>(); + private List getVpnsImportingMyRoute(final String vpnName) { + List vpnsToImportRoute = new ArrayList<>(); - InstanceIdentifier id = InstanceIdentifier.builder(VpnInstances.class) - .child(VpnInstance.class, new VpnInstanceKey(vpnName)).build(); - Optional optVpnInstance = VpnUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, id); - final VpnInstance vpnInstance; - if (optVpnInstance.isPresent()) { - vpnInstance = optVpnInstance.get(); - } else { - LOG.debug("Could not retrieve vpn instance {} to check for vpns importing the routes", vpnName); + final String vpnRd = VpnUtil.getVpnRd(dataBroker, vpnName); + final VpnInstanceOpDataEntry vpnInstanceOpDataEntry = VpnUtil.getVpnInstanceOpData(dataBroker, vpnRd); + if (vpnInstanceOpDataEntry == null) { + LOG.debug("Could not retrieve vpn instance op data for {} to check for vpns importing the routes", vpnName); return vpnsToImportRoute; } - Predicate excludeVpn = new Predicate() { + Predicate excludeVpn = new Predicate() { @Override - public boolean apply(VpnInstance input) { + public boolean apply(VpnInstanceOpDataEntry input) { + if (input.getVpnInstanceName() == null) { + LOG.error("Received vpn instance without identity"); + return false; + } return !input.getVpnInstanceName().equals(vpnName); } }; - Predicate matchRTs = new Predicate() { + Predicate matchRTs = new Predicate() { @Override - public boolean apply(VpnInstance input) { - Iterable commonRTs = intersection(getRts(vpnInstance, VpnTarget.VrfRTType.ExportExtcommunity), + public boolean apply(VpnInstanceOpDataEntry input) { + Iterable commonRTs = intersection(getRts(vpnInstanceOpDataEntry, VpnTarget.VrfRTType.ExportExtcommunity), getRts(input, VpnTarget.VrfRTType.ImportExtcommunity)); return Iterators.size(commonRTs.iterator()) > 0; } }; - Function toInstanceName = new Function() { + Function toInstanceName = new Function() { @Override - public String apply(VpnInstance vpnInstance) { + public String apply(VpnInstanceOpDataEntry vpnInstance) { //return vpnInstance.getVpnInstanceName(); - return vpnInstance.getIpv4Family().getRouteDistinguisher(); + return vpnInstance.getVrfId(); } }; - vpnsToImportRoute = FluentIterable.from(VpnUtil.getAllVpnInstance(dataBroker)). + vpnsToImportRoute = FluentIterable.from(VpnUtil.getAllVpnInstanceOpData(dataBroker)). filter(excludeVpn). filter(matchRTs).toList(); return vpnsToImportRoute; } - private List getVpnsExportingMyRoute(final String vpnName) { - List vpnsToExportRoute = new ArrayList<>(); + private List getVpnsExportingMyRoute(final String vpnName) { + List vpnsToExportRoute = new ArrayList<>(); - InstanceIdentifier id = InstanceIdentifier.builder(VpnInstances.class) - .child(VpnInstance.class, new VpnInstanceKey(vpnName)).build(); - Optional optVpnInstance = VpnUtil.read(dataBroker, LogicalDatastoreType.CONFIGURATION, id); - final VpnInstance vpnInstance; - if (optVpnInstance.isPresent()) { - vpnInstance = optVpnInstance.get(); - } else { - LOG.debug("Could not retrieve vpn instance {} to check for vpns exporting the routes", vpnName); + String vpnRd = VpnUtil.getVpnRd(dataBroker, vpnName); + final VpnInstanceOpDataEntry vpnInstanceOpDataEntry = VpnUtil.getVpnInstanceOpData(dataBroker, vpnRd); + if (vpnInstanceOpDataEntry == null) { + LOG.debug("Could not retrieve vpn instance op data for {} to check for vpns exporting the routes", vpnName); return vpnsToExportRoute; } - Predicate excludeVpn = new Predicate() { + Predicate excludeVpn = new Predicate() { @Override - public boolean apply(VpnInstance input) { + public boolean apply(VpnInstanceOpDataEntry input) { + if (input.getVpnInstanceName() == null) { + LOG.error("Received vpn instance without identity"); + return false; + } return !input.getVpnInstanceName().equals(vpnName); } }; - Predicate matchRTs = new Predicate() { + Predicate matchRTs = new Predicate() { @Override - public boolean apply(VpnInstance input) { - Iterable commonRTs = intersection(getRts(vpnInstance, VpnTarget.VrfRTType.ImportExtcommunity), + public boolean apply(VpnInstanceOpDataEntry input) { + Iterable commonRTs = intersection(getRts(vpnInstanceOpDataEntry, VpnTarget.VrfRTType.ImportExtcommunity), getRts(input, VpnTarget.VrfRTType.ExportExtcommunity)); return Iterators.size(commonRTs.iterator()) > 0; } }; - Function toInstanceName = new Function() { + Function toInstanceName = new Function() { @Override - public String apply(VpnInstance vpnInstance) { + public String apply(VpnInstanceOpDataEntry vpnInstance) { return vpnInstance.getVpnInstanceName(); } }; - vpnsToExportRoute = FluentIterable.from(VpnUtil.getAllVpnInstance(dataBroker)). + vpnsToExportRoute = FluentIterable.from(VpnUtil.getAllVpnInstanceOpData(dataBroker)). filter(excludeVpn). filter(matchRTs).toList(); return vpnsToExportRoute; @@ -727,25 +743,20 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getRts(VpnInstance vpnInstance, VpnTarget.VrfRTType rtType) { + private List getRts(VpnInstanceOpDataEntry vpnInstance, VpnTarget.VrfRTType rtType) { String name = vpnInstance.getVpnInstanceName(); List rts = new ArrayList<>(); - VpnAfConfig vpnConfig = vpnInstance.getIpv4Family(); - if (vpnConfig == null) { - LOG.trace("vpn config is not available for {}", name); - return rts; - } - VpnTargets targets = vpnConfig.getVpnTargets(); + org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnTargets targets = vpnInstance.getVpnTargets(); if (targets == null) { LOG.trace("vpn targets not available for {}", name); return rts; } - List vpnTargets = targets.getVpnTarget(); + List vpnTargets = targets.getVpnTarget(); if (vpnTargets == null) { LOG.trace("vpnTarget values not available for {}", name); return rts; } - for (VpnTarget target : vpnTargets) { + for (org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.vpntargets.VpnTarget target : vpnTargets) { //TODO: Check for RT type is Both if(target.getVrfRTType().equals(rtType) || target.getVrfRTType().equals(VpnTarget.VrfRTType.Both)) { @@ -755,7 +766,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener getExportRts(VpnInstance vpnInstance) { List exportRts = new ArrayList<>(); VpnAfConfig vpnConfig = vpnInstance.getIpv4Family(); @@ -770,74 +781,6 @@ public class VpnInterfaceManager extends AbstractDataChangeListener matches = new ArrayList(); - BigInteger metadata = MetaDataUtil.getMetaDataForLPortDispatcher(lPortTag, ++sIndex, MetaDataUtil.getVpnIdMetadata(vpnId)); - BigInteger metadataMask = MetaDataUtil.getMetaDataMaskForLPortDispatcher(MetaDataUtil.METADATA_MASK_SERVICE_INDEX, - MetaDataUtil.METADATA_MASK_LPORT_TAG, MetaDataUtil.METADATA_MASK_VRFID); - - // Matching Arp reply flows - matches.add(new MatchInfo(MatchFieldType.eth_type, new long[] { NwConstants.ETHTYPE_ARP })); - matches.add(new MatchInfo(MatchFieldType.metadata, new BigInteger[] { - metadata, metadataMask })); - - matches.add(new MatchInfo(MatchFieldType.arp_op, new long[] { replyOrRequest.getArpOperation() })); - - // Instruction to punt to controller - List instructions = new ArrayList(); - List actionsInfos = new ArrayList(); - actionsInfos.add(new ActionInfo(ActionType.punt_to_controller, new String[] {})); - actionsInfos.add(new ActionInfo(ActionType.nx_resubmit, new String[]{ - Short.toString(NwConstants.LPORT_DISPATCHER_TABLE)})); - - instructions.add(new InstructionInfo(InstructionType.apply_actions, actionsInfos)); - - // Install the flow entry in L3_INTERFACE_TABLE - String flowRef = VpnUtil.getFlowRef(dpId, NwConstants.L3_INTERFACE_TABLE, - NwConstants.ETHTYPE_ARP, lPortTag, replyOrRequest.getArpOperation()); - FlowEntity flowEntity; - flowEntity = MDSALUtil.buildFlowEntity(dpId, NwConstants.L3_INTERFACE_TABLE, flowRef, - NwConstants.DEFAULT_ARP_FLOW_PRIORITY, replyOrRequest.getName(), 0, 0, - VpnUtil.getCookieArpFlow(lPortTag), matches, instructions); - - Flow flow = flowEntity.getFlowBuilder().build(); - String flowId = flowEntity.getFlowId(); - FlowKey flowKey = new FlowKey( new FlowId(flowId)); - Node nodeDpn = buildDpnNode(dpId); - - InstanceIdentifier flowInstanceId = InstanceIdentifier.builder(Nodes.class) - .child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class) - .child(Table.class, new TableKey(flow.getTableId())).child(Flow.class, flowKey).build(); - - if (writeConfigTxn != null) { - if (addOrRemoveFlow == NwConstants.ADD_FLOW) { - LOG.debug("Creating ARP Flow for interface {}", vpnInterfaceName); - writeConfigTxn.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flow, true); - } else { - LOG.debug("Deleting ARP Flow for interface {}", vpnInterfaceName); - writeConfigTxn.delete(LogicalDatastoreType.CONFIGURATION, flowInstanceId); - } - } else { - if (addOrRemoveFlow == NwConstants.ADD_FLOW) { - LOG.debug("Creating ARP Flow for interface {}",vpnInterfaceName); - mdsalManager.installFlow(flowEntity); - } else { - LOG.debug("Deleting ARP Flow for interface {}",vpnInterfaceName); - mdsalManager.removeFlow(flowEntity); - } - } - } - - //TODO: How to handle the below code, its a copy paste from MDSALManager.java - private Node buildDpnNode(BigInteger dpnId) { - NodeId nodeId = new NodeId("openflow:" + dpnId); - Node nodeDpn = new NodeBuilder().setId(nodeId).setKey(new NodeKey(nodeId)).build(); - - return nodeDpn; - } - private String getRouteDistinguisher(String vpnName) { InstanceIdentifier id = InstanceIdentifier.builder(VpnInstances.class) .child(VpnInstance.class, new VpnInstanceKey(vpnName)).build(); @@ -845,7 +788,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnsToExportRoute = getVpnsExportingMyRoute(vpnName); - for (VpnInstance vpn : vpnsToExportRoute) { - String rd = vpn.getIpv4Family().getRouteDistinguisher(); - List vrfEntries = VpnUtil.getAllVrfEntries(dataBroker, vpn.getIpv4Family().getRouteDistinguisher()); + List vpnsToExportRoute = getVpnsExportingMyRoute(vpnName); + for (VpnInstanceOpDataEntry vpn : vpnsToExportRoute) { + String rd = vpn.getVrfId(); + List vrfEntries = VpnUtil.getAllVrfEntries(dataBroker, vpn.getVrfId()); WriteTransaction writeConfigTxn = dataBroker.newWriteOnlyTransaction(); if (vrfEntries != null) { for (VrfEntry vrfEntry : vrfEntries) { @@ -1039,7 +982,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); + List vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); for (String nh : nhList) { //IRT: remove routes from other vpns importing it removePrefixFromBGP(rd, nextHop.getIpAddress(), nh, writeConfigTxn); - for (VpnInstance vpn : vpnsToImportRoute) { - String vpnRd = vpn.getIpv4Family().getRouteDistinguisher(); + for (VpnInstanceOpDataEntry vpn : vpnsToImportRoute) { + String vpnRd = vpn.getVrfId(); if (vpnRd != null) { LOG.info("Removing Exported route with rd {} prefix {} from VPN {}", vpnRd, nextHop.getIpAddress(), vpn.getVpnInstanceName()); fibManager.removeOrUpdateFibEntry(dataBroker, vpnRd, nextHop.getIpAddress(), nh, writeConfigTxn); @@ -1265,10 +1208,7 @@ public class VpnInterfaceManager extends AbstractDataChangeListener oldAdjs = original.getAugmentation(Adjacencies.class).getAdjacency(); - List newAdjs = update.getAugmentation(Adjacencies.class).getAdjacency(); - if (oldAdjs == null) { - oldAdjs = new ArrayList<>(); + List oldAdjsList = new ArrayList<>(); + List newAdjsList = new ArrayList<>(); + Adjacencies oldAdjs = original.getAugmentation(Adjacencies.class); + Adjacencies newAdjs = update.getAugmentation(Adjacencies.class); + if (oldAdjs != null) { + oldAdjsList = oldAdjs.getAdjacency(); } - if (newAdjs == null) { - newAdjs = new ArrayList<>(); + if (newAdjs != null) { + newAdjsList = newAdjs.getAdjacency(); } //handles switching between if (!oldVpnName.equals(newVpnName)) { @@ -1306,16 +1248,16 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); + List vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); if (vpnsToImportRoute.size() > 0) { VrfEntry importingVrfEntry = new VrfEntryBuilder().setDestPrefix(prefix).setNextHopAddressList(Arrays.asList(nextHop)) .setLabel((long) label).setOrigin(RouteOrigin.SELF_IMPORTED.getValue()) .addAugmentation(SubnetRoute.class, route).build(); List importingVrfEntryList = Arrays.asList(importingVrfEntry); - for (VpnInstance vpnInstance : vpnsToImportRoute) { + for (VpnInstanceOpDataEntry vpnInstance : vpnsToImportRoute) { LOG.info("Exporting subnet route rd {} prefix {} nexthop {} label {} to vpn {}", rd, prefix, nextHop, label, vpnInstance.getVpnInstanceName()); - String importingRd = vpnInstance.getIpv4Family().getRouteDistinguisher(); + String importingRd = vpnInstance.getVrfId(); InstanceIdentifier importingVrfTableId = InstanceIdentifier.builder(FibEntries.class).child(VrfTables.class, new VrfTablesKey(importingRd)).build(); VrfTables importingVrfTable = new VrfTablesBuilder().setRouteDistinguisher(importingRd).setVrfEntry(importingVrfEntryList).build(); if (writeTxn != null) { @@ -1466,17 +1408,17 @@ public class VpnInterfaceManager extends AbstractDataChangeListener vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); - for (VpnInstance vpnInstance : vpnsToImportRoute) { - String importingRd = vpnInstance.getIpv4Family().getRouteDistinguisher(); + List vpnsToImportRoute = getVpnsImportingMyRoute(vpnName); + for (VpnInstanceOpDataEntry vpnInstance : vpnsToImportRoute) { + String importingRd = vpnInstance.getVrfId(); LOG.info("Deleting imported subnet route rd {} prefix {} from vpn {}", rd, prefix, vpnInstance.getVpnInstanceName()); fibManager.removeFibEntry(dataBroker, importingRd, prefix, null); } } - protected void addNewAdjToVpnInterface(InstanceIdentifier identifier, Adjacency adj, BigInteger dpnId) { + protected void addNewAdjToVpnInterface(InstanceIdentifier identifier, Adjacency adj) { Optional optVpnInterface = VpnUtil.read(dataBroker, LogicalDatastoreType.OPERATIONAL, identifier); @@ -1490,7 +1432,10 @@ public class VpnInterfaceManager extends AbstractDataChangeListener adjacencies; if (optAdjacencies.isPresent()) { adjacencies = optAdjacencies.get().getAdjacency(); @@ -1500,15 +1445,27 @@ public class VpnInterfaceManager extends AbstractDataChangeListener