X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=neutronvpn%2Fimpl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fnetvirt%2Fneutronvpn%2Fevpn%2Fmanager%2FNeutronEvpnManager.java;h=749a6dc264584d8e6b63b8ee1e8e1ef8d046282c;hb=2f0569ed75ef8a1fb60f992d19c8bbdf92ff45bf;hp=0892699d9f71b2fe213c50d260eaa0766bde98e0;hpb=7c996c0868d978f0a66028dce581165b54ee7787;p=netvirt.git diff --git a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java index 0892699d9f..749a6dc264 100644 --- a/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java +++ b/neutronvpn/impl/src/main/java/org/opendaylight/netvirt/neutronvpn/evpn/manager/NeutronEvpnManager.java @@ -7,25 +7,22 @@ */ package org.opendaylight.netvirt.neutronvpn.evpn.manager; -import static org.opendaylight.netvirt.neutronvpn.api.utils.NeutronUtils.requireNonNullElse; - -import com.google.common.base.Optional; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import java.util.ArrayList; -import java.util.Collections; import java.util.List; +import java.util.Optional; +import java.util.concurrent.ExecutionException; import java.util.function.Consumer; -import org.opendaylight.controller.md.sal.binding.api.DataBroker; -import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException; import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker; +import org.opendaylight.mdsal.binding.api.DataBroker; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.netvirt.neutronvpn.NeutronvpnManager; import org.opendaylight.netvirt.neutronvpn.NeutronvpnUtils; import org.opendaylight.netvirt.vpnmanager.api.VpnHelper; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.af.config.vpntargets.VpnTarget; -import org.opendaylight.yang.gen.v1.urn.huawei.params.xml.ns.yang.l3vpn.rev140815.vpn.instances.VpnInstance; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstance; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.vpn.instance.vpntargets.VpnTarget; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.CreateEVPNInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.CreateEVPNOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.CreateEVPNOutputBuilder; @@ -72,14 +69,13 @@ public class NeutronEvpnManager { int failurecount = 0; List existingRDs = neutronvpnUtils.getExistingRDs(); - for (Evpn vpn : requireNonNullElse(input.getEvpn(), Collections.emptyList())) { + for (Evpn vpn : input.nonnullEvpn()) { if (vpn.getRouteDistinguisher() == null || vpn.getImportRT() == null || vpn.getExportRT() == null) { errorList.add(RpcResultBuilder.newWarning(RpcError.ErrorType.PROTOCOL, "invalid-input", formatAndLog(LOG::warn, "Creation of EVPN failed for VPN {} due to absence of RD/iRT/eRT input", vpn.getId().getValue()))); continue; } - VpnInstance.Type vpnInstanceType = VpnInstance.Type.L2; if (vpn.getRouteDistinguisher().size() > 1) { errorList.add(RpcResultBuilder.newWarning(RpcError.ErrorType.PROTOCOL, "invalid-input", formatAndLog(LOG::warn, "Creation of EVPN failed for VPN {} due to multiple RD input {}", @@ -95,9 +91,15 @@ public class NeutronEvpnManager { continue; } try { - neutronvpnManager.createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), vpn.getRouteDistinguisher(), - vpn.getImportRT(), vpn.getExportRT(), null /*router-id*/, null /*network-id*/, - vpnInstanceType, 0 /*l2vni*/); + List rdList = vpn.getRouteDistinguisher() != null + ? new ArrayList<>(vpn.getRouteDistinguisher()) : new ArrayList<>(); + List importRdList = vpn.getImportRT() != null + ? new ArrayList<>(vpn.getImportRT()) : new ArrayList<>(); + List exportRdList = vpn.getExportRT() != null + ? new ArrayList<>(vpn.getExportRT()) : new ArrayList<>(); + neutronvpnManager.createVpn(vpn.getId(), vpn.getName(), vpn.getTenantId(), rdList, + importRdList, exportRdList, null /*router-id*/, null /*network-id*/, + true /*isL2Vpn*/, 0 /*l2vni*/); } catch (Exception ex) { errorList.add(RpcResultBuilder.newError(RpcError.ErrorType.APPLICATION, formatAndLog(LOG::error, "Creation of EVPN failed for VPN {}", vpn.getId().getValue(), ex), @@ -132,8 +134,8 @@ public class NeutronEvpnManager { vpns = VpnHelper.getAllVpnInstances(dataBroker); if (!vpns.isEmpty()) { for (VpnInstance vpn : vpns) { - if (vpn.getIpv4Family().getRouteDistinguisher() != null - && vpn.getType() == VpnInstance.Type.L2) { + if (vpn.getRouteDistinguisher() != null + && vpn.isL2vpn()) { vpns.add(vpn); } } @@ -145,8 +147,8 @@ public class NeutronEvpnManager { } else { String name = inputVpnId.getValue(); VpnInstance vpnInstance = VpnHelper.getVpnInstance(dataBroker, name); - if (vpnInstance != null && vpnInstance.getIpv4Family().getRouteDistinguisher() != null - && vpnInstance.getType() == VpnInstance.Type.L2) { + if (vpnInstance != null && vpnInstance.getRouteDistinguisher() != null + && vpnInstance.isL2vpn()) { vpns.add(vpnInstance); } else { result.set(RpcResultBuilder.failed().withWarning(RpcError.ErrorType.PROTOCOL, @@ -160,11 +162,10 @@ public class NeutronEvpnManager { InstanceIdentifier vpnMapIdentifier = InstanceIdentifier.builder(VpnMaps.class).child(VpnMap .class, new VpnMapKey(vpnId)).build(); EvpnInstancesBuilder evpn = new EvpnInstancesBuilder(); - List rd = vpnInstance.getIpv4Family().getRouteDistinguisher(); + List rd = vpnInstance.getRouteDistinguisher(); List ertList = new ArrayList<>(); List irtList = new ArrayList<>(); - for (VpnTarget vpnTarget : requireNonNullElse(vpnInstance.getIpv4Family().getVpnTargets().getVpnTarget(), - Collections.emptyList())) { + for (VpnTarget vpnTarget : vpnInstance.getVpnTargets().nonnullVpnTarget()) { if (vpnTarget.getVrfRTType() == VpnTarget.VrfRTType.ExportExtcommunity) { ertList.add(vpnTarget.getVrfRTValue()); } @@ -185,7 +186,7 @@ public class NeutronEvpnManager { VpnMap vpnMap = optionalVpnMap.get(); evpn.setTenantId(vpnMap.getTenantId()).setName(vpnMap.getName()); } - } catch (ReadFailedException e) { + } catch (ExecutionException | InterruptedException e) { LOG.error("Error reading the VPN map for {}", vpnMapIdentifier, e); result.set(RpcResultBuilder.failed().withError(RpcError.ErrorType.APPLICATION, "Error reading the VPN map for " + vpnMapIdentifier, e).build()); @@ -202,13 +203,15 @@ public class NeutronEvpnManager { public ListenableFuture> deleteEVPN(DeleteEVPNInput input) { List errorList = new ArrayList<>(); - for (Uuid vpn : requireNonNullElse(input.getId(), Collections.emptyList())) { - VpnInstance vpnInstance = VpnHelper.getVpnInstance(dataBroker, vpn.getValue()); - if (vpnInstance != null) { - neutronvpnManager.removeVpn(vpn); - } else { - errorList.add(RpcResultBuilder.newWarning(RpcError.ErrorType.PROTOCOL, "invalid-value", + if (input.getId() != null) { + for (Uuid vpn : input.getId()) { + VpnInstance vpnInstance = VpnHelper.getVpnInstance(dataBroker, vpn.getValue()); + if (vpnInstance != null) { + neutronvpnManager.removeVpn(vpn); + } else { + errorList.add(RpcResultBuilder.newWarning(RpcError.ErrorType.PROTOCOL, "invalid-value", formatAndLog(LOG::warn, "EVPN with vpnid: {} does not exist", vpn.getValue()))); + } } } List errorResponseList = new ArrayList<>();