Search in sources :

Example 11 with Vteps

use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps in project genius by opendaylight.

the class ItmExternalTunnelDeleteWorker method tunnelsDeletion.

private static void tunnelsDeletion(List<DPNTEPsInfo> cfgdDpnList, List<HwVtep> cfgdhwVteps, TransportZone originalTZone, WriteTransaction writeTransaction, DataBroker dataBroker) {
    if (cfgdDpnList != null) {
        for (DPNTEPsInfo dpn : cfgdDpnList) {
            if (dpn.getTunnelEndPoints() != null) {
                for (TunnelEndPoints srcTep : dpn.getTunnelEndPoints()) {
                    for (TzMembership zone : srcTep.getTzMembership()) {
                        deleteTunnelsInTransportZone(zone.getZoneName(), dpn, srcTep, cfgdhwVteps, dataBroker, writeTransaction);
                    }
                }
            }
        }
    }
    if (cfgdhwVteps != null && !cfgdhwVteps.isEmpty()) {
        for (HwVtep hwTep : cfgdhwVteps) {
            LOG.trace("processing hwTep from list {}", hwTep);
            for (HwVtep hwTepRemote : cfgdhwVteps) {
                if (!hwTep.getHwIp().equals(hwTepRemote.getHwIp())) {
                    deleteTrunksTorTor(dataBroker, hwTep.getTopoId(), hwTep.getNodeId(), hwTep.getHwIp(), hwTepRemote.getTopoId(), hwTepRemote.getNodeId(), hwTepRemote.getHwIp(), TunnelTypeVxlan.class, writeTransaction);
                }
            }
            // do we need to check tunnel type?
            LOG.trace("subnets under tz {} are {}", originalTZone.getZoneName(), originalTZone.getSubnets());
            if (originalTZone.getSubnets() != null && !originalTZone.getSubnets().isEmpty()) {
                for (Subnets sub : originalTZone.getSubnets()) {
                    if (sub.getDeviceVteps() != null && !sub.getDeviceVteps().isEmpty()) {
                        for (DeviceVteps hwVtepDS : sub.getDeviceVteps()) {
                            LOG.trace("hwtepDS exists {}", hwVtepDS);
                            // for mlag case and non-m-lag case, isnt it enough to just check ipaddress?
                            if (hwVtepDS.getIpAddress().equals(hwTep.getHwIp())) {
                                // dont delete tunnels with self
                                continue;
                            }
                            // TOR-TOR
                            LOG.trace("deleting tor-tor {} and {}", hwTep, hwVtepDS);
                            deleteTrunksTorTor(dataBroker, hwTep.getTopoId(), hwTep.getNodeId(), hwTep.getHwIp(), hwVtepDS.getTopologyId(), hwVtepDS.getNodeId(), hwVtepDS.getIpAddress(), originalTZone.getTunnelType(), writeTransaction);
                        }
                    }
                    if (sub.getVteps() != null && !sub.getVteps().isEmpty()) {
                        for (Vteps vtep : sub.getVteps()) {
                            // TOR-OVS
                            LOG.trace("deleting tor-css-tor {} and {}", hwTep, vtep);
                            String parentIf = ItmUtils.getInterfaceName(vtep.getDpnId(), vtep.getPortname(), sub.getVlanId());
                            deleteTrunksOvsTor(dataBroker, vtep.getDpnId(), parentIf, vtep.getIpAddress(), hwTep.getTopoId(), hwTep.getNodeId(), hwTep.getHwIp(), originalTZone.getTunnelType(), writeTransaction);
                        }
                    }
                }
            }
        }
    }
}
Also used : DeviceVteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps) TunnelEndPoints(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.TunnelEndPoints) Subnets(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets) Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) DeviceVteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps) TzMembership(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.dpn.teps.info.tunnel.end.points.TzMembership) DPNTEPsInfo(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo)

Example 12 with Vteps

use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps in project genius by opendaylight.

the class TepCommandHelper method checkTepPerTzPerDpn.

public boolean checkTepPerTzPerDpn(String tzone, BigInteger dpnId) {
    // check in local cache
    if (transportZonesHashMap.containsKey(tzone)) {
        Map<SubnetObject, List<Vteps>> subVtepMapTemp = transportZonesHashMap.get(tzone);
        for (List<Vteps> vtepList : subVtepMapTemp.values()) {
            for (Vteps vtep : vtepList) {
                if (vtep.getDpnId().equals(dpnId)) {
                    return true;
                }
            }
        }
    }
    // check in DS
    InstanceIdentifier<TransportZone> tzonePath = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new TransportZoneKey(tzone)).build();
    Optional<TransportZone> transportZoneOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tzonePath, dataBroker);
    if (transportZoneOptional.isPresent()) {
        TransportZone tz = transportZoneOptional.get();
        if (tz.getSubnets() == null || tz.getSubnets().isEmpty()) {
            return false;
        }
        for (Subnets sub : tz.getSubnets()) {
            if (sub.getVteps() == null || sub.getVteps().isEmpty()) {
                continue;
            }
            for (Vteps vtep : sub.getVteps()) {
                if (vtep.getDpnId().equals(dpnId)) {
                    return true;
                }
            }
        }
    }
    return false;
}
Also used : Subnets(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets) Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) StateTunnelList(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList) List(java.util.List) ArrayList(java.util.ArrayList) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone) TransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)

Example 13 with Vteps

use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps in project genius by opendaylight.

the class TepCommandHelper method validateForDuplicateAndSingleGreTep.

private void validateForDuplicateAndSingleGreTep(Vteps inputVtep, boolean isConfiguredTepGreType, boolean isGreType, List<Vteps> vtepList) {
    if (ItmUtils.isEmpty(vtepList)) {
        return;
    }
    if (vtepList.contains(inputVtep)) {
        Preconditions.checkArgument(false, "VTEP already exists");
    }
    BigInteger dpnId = inputVtep.getDpnId();
    if (isConfiguredTepGreType && isGreType) {
        for (Vteps vtep : vtepList) {
            if (vtep.getDpnId().equals(dpnId)) {
                String errMsg = "DPN [" + dpnId + "] already configured with GRE TEP." + " Mutiple GRE TEP's on a single DPN are not allowed.";
                Preconditions.checkArgument(false, errMsg);
            }
        }
    }
}
Also used : Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) BigInteger(java.math.BigInteger)

Example 14 with Vteps

use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps in project genius by opendaylight.

the class TepCommandHelper method buildTeps.

@SuppressWarnings("checkstyle:IllegalCatch")
public void buildTeps() {
    TransportZones transportZonesBuilt = null;
    TransportZone transportZone = null;
    try {
        LOG.debug("no of teps added {}", CHECK);
        if (transportZonesHashMap != null && !transportZonesHashMap.isEmpty()) {
            transportZoneArrayList = new ArrayList<>();
            for (Entry<String, Map<SubnetObject, List<Vteps>>> mapEntry : transportZonesHashMap.entrySet()) {
                String tz = mapEntry.getKey();
                LOG.debug("transportZonesHashMap {}", tz);
                subnetList = new ArrayList<>();
                Map<SubnetObject, List<Vteps>> subVtepMapTemp = mapEntry.getValue();
                for (Entry<SubnetObject, List<Vteps>> entry : subVtepMapTemp.entrySet()) {
                    SubnetObject subOb = entry.getKey();
                    LOG.debug("subnets {}", subOb.get_prefix());
                    List<Vteps> vtepList = entry.getValue();
                    Subnets subnet = new SubnetsBuilder().setGatewayIp(subOb.get_gatewayIp()).setKey(subOb.get_key()).setPrefix(subOb.get_prefix()).setVlanId(subOb.get_vlanId()).setVteps(vtepList).build();
                    subnetList.add(subnet);
                    LOG.debug("vteps {}", vtepList);
                }
                InstanceIdentifier<TransportZone> transportZonePath = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new TransportZoneKey(tz)).build();
                Optional<TransportZone> transportZoneOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, transportZonePath, dataBroker);
                LOG.debug("read container from DS");
                if (transportZoneOptional.isPresent()) {
                    TransportZone tzoneFromDs = transportZoneOptional.get();
                    LOG.debug("read tzone container {}", tzoneFromDs);
                    if (tzoneFromDs.getTunnelType() == null || tzoneFromDs.getTunnelType().equals(TunnelTypeVxlan.class)) {
                        transportZone = new TransportZoneBuilder().setKey(new TransportZoneKey(tz)).setTunnelType(TunnelTypeVxlan.class).setSubnets(subnetList).setZoneName(tz).build();
                    } else if (tzoneFromDs.getTunnelType().equals(TunnelTypeGre.class)) {
                        transportZone = new TransportZoneBuilder().setKey(new TransportZoneKey(tz)).setTunnelType(TunnelTypeGre.class).setSubnets(subnetList).setZoneName(tz).build();
                    }
                } else {
                    transportZone = new TransportZoneBuilder().setKey(new TransportZoneKey(tz)).setTunnelType(TunnelTypeVxlan.class).setSubnets(subnetList).setZoneName(tz).build();
                }
                LOG.debug("tzone object {}", transportZone);
                transportZoneArrayList.add(transportZone);
            }
            transportZonesBuilt = new TransportZonesBuilder().setTransportZone(transportZoneArrayList).build();
            InstanceIdentifier<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
            LOG.debug("InstanceIdentifier {}", path);
            ItmUtils.asyncUpdate(LogicalDatastoreType.CONFIGURATION, path, transportZonesBuilt, dataBroker, ItmUtils.DEFAULT_CALLBACK);
            LOG.debug("wrote to Config DS {}", transportZonesBuilt);
            transportZonesHashMap.clear();
            transportZoneArrayList.clear();
            subnetList.clear();
            LOG.debug("Everything cleared");
        } else {
            LOG.debug("NO vteps were configured");
        }
    } catch (RuntimeException e) {
        LOG.error("Error building TEPs", e);
    }
}
Also used : TunnelTypeGre(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre) TransportZonesBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder) TunnelTypeVxlan(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone) Subnets(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets) SubnetsBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsBuilder) Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) TransportZoneBuilder(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder) StateTunnelList(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList) List(java.util.List) ArrayList(java.util.ArrayList) TransportZones(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones) Map(java.util.Map) HashMap(java.util.HashMap) TransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)

Example 15 with Vteps

use of org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps in project genius by opendaylight.

the class TepCommandHelper method validateForDuplicates.

/**
 * Validate for duplicates.
 *
 * @param inputVtep
 *            the input vtep
 * @param transportZone
 *            the transport zone
 */
public void validateForDuplicates(Vteps inputVtep, String transportZone) {
    Map<String, TransportZone> allTransportZonesAsMap = getAllTransportZonesAsMap();
    boolean isConfiguredTepGreType = isGreTunnelType(transportZone, allTransportZonesAsMap);
    // Checking for duplicates in local cache
    for (Entry<String, Map<SubnetObject, List<Vteps>>> entry : transportZonesHashMap.entrySet()) {
        String tz = entry.getKey();
        boolean isGreType = isGreTunnelType(tz, allTransportZonesAsMap);
        Map<SubnetObject, List<Vteps>> subVtepMapTemp = entry.getValue();
        for (List<Vteps> vtepList : subVtepMapTemp.values()) {
            validateForDuplicateAndSingleGreTep(inputVtep, isConfiguredTepGreType, isGreType, vtepList);
        }
    }
    // Checking for duplicates in config DS
    for (TransportZone tz : allTransportZonesAsMap.values()) {
        boolean isGreType = false;
        if (tz.getTunnelType().equals(TunnelTypeGre.class)) {
            isGreType = true;
        }
        for (Subnets sub : ItmUtils.emptyIfNull(tz.getSubnets())) {
            List<Vteps> vtepList = sub.getVteps();
            validateForDuplicateAndSingleGreTep(inputVtep, isConfiguredTepGreType, isGreType, vtepList);
        }
    }
}
Also used : Subnets(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets) Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) StateTunnelList(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList) List(java.util.List) ArrayList(java.util.ArrayList) Map(java.util.Map) HashMap(java.util.HashMap) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone)

Aggregations

Vteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps)32 TransportZone (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone)23 Subnets (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets)18 ArrayList (java.util.ArrayList)17 IpPrefix (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix)17 IpAddress (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress)14 TepsInNotHostedTransportZone (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone)14 TransportZoneKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)14 SubnetsKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey)12 VtepsKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey)12 BigInteger (java.math.BigInteger)9 List (java.util.List)9 StateTunnelList (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList)8 DeviceVteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps)8 VtepsBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsBuilder)8 Test (org.junit.Test)7 HashMap (java.util.HashMap)6 TransactionCommitFailedException (org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException)6 UnknownVteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps)6 TransportZoneBuilder (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneBuilder)6