@Override public List<String> getElanInterfaces(String elanInstanceName) { List<String> elanInterfaces = new ArrayList<>(); InstanceIdentifier<ElanInterfaces> elanInterfacesIdentifier = InstanceIdentifier.builder(ElanInterfaces.class) .build(); Optional<ElanInterfaces> elanInterfacesOptional = elanUtils.read(broker, LogicalDatastoreType.CONFIGURATION, elanInterfacesIdentifier); if (!elanInterfacesOptional.isPresent()) { return elanInterfaces; } List<ElanInterface> elanInterfaceList = elanInterfacesOptional.get().getElanInterface(); for (ElanInterface elanInterface : elanInterfaceList) { if (elanInterface.getElanInstanceName().equals(elanInstanceName)) { elanInterfaces.add(elanInterface.getName()); } } return elanInterfaces; }
private void bindEtreeService(ElanInstance elanInfo, ElanInterface elanInterface, WriteTransaction tx) { if (elanInterface.getAugmentation(EtreeInterface.class).getEtreeInterfaceType() == EtreeInterfaceType.Root) { bindElanService(elanInfo.getElanTag(), elanInfo.getElanInstanceName(), elanInterface.getName(), tx); } else { EtreeInstance etreeInstance = elanInfo.getAugmentation(EtreeInstance.class); if (etreeInstance == null) { LOG.error("EtreeInterface " + elanInterface.getName() + " is associated with a non EtreeInstance: " + elanInfo.getElanInstanceName()); } else { bindElanService(etreeInstance.getEtreeLeafTagVal().getValue(), elanInfo.getElanInstanceName(), elanInterface.getName(), tx); } } }
@Override protected void update(InstanceIdentifier<ElanInterface> identifier, ElanInterface original, ElanInterface update) { String elanName = update.getElanInstanceName(); String interfaceName = update.getName(); List<PhysAddress> existingPhysAddress = original.getStaticMacEntries(); List<PhysAddress> updatedPhysAddress = update.getStaticMacEntries(); if (updatedPhysAddress != null && !updatedPhysAddress.isEmpty()) { List<PhysAddress> existingClonedPhyAddress = new ArrayList<>();
@Override protected void add(InstanceIdentifier<ElanInterface> identifier, ElanInterface elanInterfaceAdded) { String elanInstanceName = elanInterfaceAdded.getElanInstanceName(); String interfaceName = elanInterfaceAdded.getName(); InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName); if (interfaceInfo == null) { .setDescription(elanInterfaceAdded.getDescription()).build();
public static Long getElanIdFromInterface(String elanInterfaceName,DataBroker broker) { ElanInterface elanInterface = getElanInterfaceByElanInterfaceName(elanInterfaceName, broker); if (null != elanInterface) { ElanInstance elanInfo = getElanInstanceByName(elanInterface.getElanInstanceName(), broker); return elanInfo.getElanTag(); } return null; }
throws ElanException { String elanInstanceName = elanInstance.getElanInstanceName(); String interfaceName = elanInterface.getName(); WriteTransaction tx = broker.newWriteOnlyTransaction(); BigInteger dpId = interfaceInfo.getDpId(); WriteTransaction writeFlowGroupTx = broker.newWriteOnlyTransaction(); installEntriesForElanInterface(elanInstance, interfaceInfo, isFirstInterfaceInDpn, tx, writeFlowGroupTx); List<PhysAddress> staticMacAddresses = elanInterface.getStaticMacEntries(); if (staticMacAddresses != null) { boolean isInterfaceOperational = isOperational(interfaceInfo);
void handleunprocessedElanInterfaces(ElanInstance elanInstance) throws ElanException { List<ListenableFuture<Void>> futures = new ArrayList<>(); Queue<ElanInterface> elanInterfaces = unProcessedElanInterfaces.get(elanInstance.getElanInstanceName()); if (elanInterfaces == null || elanInterfaces.isEmpty()) { return; } for (ElanInterface elanInterface : elanInterfaces) { String interfaceName = elanInterface.getName(); InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName); addElanInterface(futures, elanInterface, interfaceInfo, elanInstance); } }
@Override public void addStaticMacAddress(String elanInstanceName, String interfaceName, String macAddress) { ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); PhysAddress updateStaticMacAddress = new PhysAddress(macAddress); if (existingElanInterface != null) { List<PhysAddress> existingMacAddress = existingElanInterface.getStaticMacEntries(); if (existingMacAddress.contains(updateStaticMacAddress)) { return; } existingMacAddress.add(updateStaticMacAddress); ElanInterface elanInterface = new ElanInterfaceBuilder().setElanInstanceName(elanInstanceName) .setName(interfaceName).setStaticMacEntries(existingMacAddress) .setDescription(existingElanInterface.getDescription()).setKey(new ElanInterfaceKey(interfaceName)) .build(); MDSALUtil.syncWrite(broker, LogicalDatastoreType.CONFIGURATION, ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName), elanInterface); } }
private boolean isStandardElanService(ElanInterface elanInterface) { return elanInterface.getAugmentation(EtreeInterface.class) == null; }
@Override public void updateElanInterface(String elanInstanceName, String interfaceName, List<String> updatedStaticMacAddresses, String newDescription) { ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); if (existingElanInterface == null) { return; } List<PhysAddress> existingMacAddress = existingElanInterface.getStaticMacEntries(); List<PhysAddress> updatedMacAddresses = getPhysAddress(updatedStaticMacAddresses); List<PhysAddress> updatedPhysAddress = getUpdatedPhyAddress(existingMacAddress, updatedMacAddresses); if (updatedPhysAddress.size() > 0) { LOG.debug("updating the ElanInterface with new Mac Entries {}", updatedStaticMacAddresses); ElanInterface elanInterface = new ElanInterfaceBuilder().setElanInstanceName(elanInstanceName) .setName(interfaceName).setDescription(newDescription).setStaticMacEntries(updatedPhysAddress) .setKey(new ElanInterfaceKey(interfaceName)).build(); MDSALUtil.syncWrite(broker, LogicalDatastoreType.CONFIGURATION, ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName), elanInterface); } }
@Override public List<ListenableFuture<Void>> call() throws Exception { List<ListenableFuture<Void>> futures = new ArrayList<>(); WriteTransaction flowWritetx = broker.newWriteOnlyTransaction(); WriteTransaction tx = broker.newWriteOnlyTransaction(); ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); if (elanInterface == null) { LOG.debug("ElanInterface Not present for interfaceName {} for add event", interfaceName); return futures; } elanUtils.addMacEntryToDsAndSetupFlows(interfaceManager, interfaceName, macAddress, elanInterface.getElanInstanceName(), tx, flowWritetx, ElanConstants.STATIC_MAC_TIMEOUT); futures.add(tx.submit()); futures.add(flowWritetx.submit()); return futures; } }
@Override public void onDataTreeChanged(Collection<DataTreeModification<ElanInterface>> changes) { for (DataTreeModification<ElanInterface> change : changes) { DataObjectModification<ElanInterface> mod = change.getRootNode(); switch (mod.getModificationType()) { case DELETE: ElanUtils.removeElanInterfaceFromCache(mod.getDataBefore().getName()); break; case SUBTREE_MODIFIED: case WRITE: ElanInterface elanInterface = mod.getDataAfter(); ElanUtils.addElanInterfaceIntoCache(elanInterface.getName(), elanInterface); break; default: throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType()); } } }
@Override public void deleteStaticMacAddress(String elanInstanceName, String interfaceName, String macAddress) throws MacNotFoundException { ElanInterface existingElanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); PhysAddress physAddress = new PhysAddress(macAddress); if (existingElanInterface == null) { return; } List<PhysAddress> existingMacAddress = existingElanInterface.getStaticMacEntries(); if (existingMacAddress.contains(physAddress)) { existingMacAddress.remove(physAddress); ElanInterface elanInterface = new ElanInterfaceBuilder().setElanInstanceName(elanInstanceName) .setName(interfaceName).setStaticMacEntries(existingMacAddress) .setDescription(existingElanInterface.getDescription()).setKey(new ElanInterfaceKey(interfaceName)) .build(); MDSALUtil.syncWrite(broker, LogicalDatastoreType.CONFIGURATION, ElanUtils.getElanInterfaceConfigurationDataPathId(interfaceName), elanInterface); } else { throw new MacNotFoundException("deleteStaticMacAddress did not find MAC: " + macAddress); } }
public static EtreeInterface getEtreeInterfaceByElanInterfaceName(DataBroker broker, String elanInterfaceName) { ElanInterface elanInterface = getElanInterfaceByElanInterfaceName(broker, elanInterfaceName); return elanInterface.getAugmentation(EtreeInterface.class); }
@Override protected void remove(InstanceIdentifier<ElanInterface> identifier, ElanInterface del) { String interfaceName = del.getName(); ElanInstance elanInfo = ElanUtils.getElanInstanceByName(broker, del.getElanInstanceName()); /* * Handling in case the elan instance is deleted.If the Elan instance is * deleted, there is no need to explicitly delete the elan interfaces */ if (elanInfo == null) { return; } InterfaceInfo interfaceInfo = interfaceManager.getInterfaceInfo(interfaceName); String elanInstanceName = elanInfo.getElanInstanceName(); DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance(); InterfaceRemoveWorkerOnElan configWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInfo, interfaceName, interfaceInfo, false, this); coordinator.enqueueJob(elanInstanceName, configWorker, ElanConstants.JOB_MAX_RETRIES); }
@Override public List<ListenableFuture<Void>> call() throws Exception { List<ListenableFuture<Void>> futures = new ArrayList<>(); WriteTransaction deleteFlowTx = broker.newWriteOnlyTransaction(); WriteTransaction tx = broker.newWriteOnlyTransaction(); ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); if (elanInterface == null) { LOG.debug("ElanInterface Not present for interfaceName {} for delete event", interfaceName); return futures; } elanUtils.deleteMacEntryFromDsAndRemoveFlows(interfaceManager, interfaceName, macAddress, elanInterface.getElanInstanceName(), tx, deleteFlowTx); futures.add(tx.submit()); futures.add(deleteFlowTx.submit()); return futures; } }
private void bindService(ElanInstance elanInfo, ElanInterface elanInterface, WriteTransaction tx) { if (isStandardElanService(elanInterface)) { bindElanService(elanInfo.getElanTag(), elanInfo.getElanInstanceName(), elanInterface.getName(), tx); } else { // Etree service bindEtreeService(elanInfo, elanInterface, tx); } }
@Override protected Object doExecute() throws Exception { LOG.debug("Deleting EtreeInterface command" + "\t" + etreeName + "\t" + interfaceName + "\t"); ElanInterface existingInterface = elanProvider.getElanInterfaceByElanInterfaceName(interfaceName); if (existingInterface == null || existingInterface.getAugmentation(EtreeInterface.class) == null) { session.getConsole() .println("Etree interface doesn't exist or isn't configured as etree: " + interfaceName); } elanProvider.deleteEtreeInterface(etreeName, interfaceName); session.getConsole().println("Deleted the Etree interface succesfully"); return null; } }
private void handleUpdatedInterfaces(DataTreeModification<ElanInterfaces> newDataObject) { ElanInterfaces instance = newDataObject.getRootNode().getDataAfter(); Optional<String> findFirst = instance.getElanInterface().stream().map(x -> x.getElanInstanceName()).findFirst(); if (!findFirst.isPresent()) { log.info("empty - exiting"); .map(x -> NetvirtUtils.getIetfInterface(dataBroker, x.getName()))// instance.getElanInterface().size(), StringUtils.join( instance.getElanInterface().stream().map(x -> x.getName()).collect(Collectors.toList()), ", "));
@Override protected void remove(InstanceIdentifier<Interface> identifier, Interface delIf) { LOG.trace("Received interface {} Down event", delIf); String interfaceName = delIf.getName(); ElanInterface elanInterface = ElanUtils.getElanInterfaceByElanInterfaceName(broker, interfaceName); if (elanInterface == null) { LOG.debug("No Elan Interface is created for the interface:{} ", interfaceName); return; } NodeConnectorId nodeConnectorId = new NodeConnectorId(delIf.getLowerLayerIf().get(0)); BigInteger dpId = BigInteger.valueOf(MDSALUtil.getDpnIdFromPortName(nodeConnectorId)); InterfaceInfo interfaceInfo = new InterfaceInfo(dpId, nodeConnectorId.getValue()); interfaceInfo.setInterfaceName(interfaceName); interfaceInfo.setInterfaceType(InterfaceInfo.InterfaceType.VLAN_INTERFACE); interfaceInfo.setInterfaceTag(delIf.getIfIndex()); String elanInstanceName = elanInterface.getElanInstanceName(); ElanInstance elanInstance = ElanUtils.getElanInstanceByName(broker, elanInstanceName); DataStoreJobCoordinator coordinator = DataStoreJobCoordinator.getInstance(); InterfaceRemoveWorkerOnElan removeWorker = new InterfaceRemoveWorkerOnElan(elanInstanceName, elanInstance, interfaceName, interfaceInfo, true, elanInterfaceManager); coordinator.enqueueJob(elanInstanceName, removeWorker, ElanConstants.JOB_MAX_RETRIES); }