Search in sources :

Example 31 with Transport

use of org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport in project genius by opendaylight.

the class OvsdbTepRemoveConfigHelper method removeVtepFromTZConfig.

/**
 * Removes the TEP from subnet list in the transport zone list
 * from ITM configuration Datastore by delete operation with write transaction.
 *
 * @param subnetMaskObj subnet mask in IpPrefix object
 * @param dpnId bridge datapath ID in BigInteger
 * @param tzName transport zone name in string
 * @param portName port name as a part of VtepsKey
 * @param wrTx WriteTransaction object
 */
private static void removeVtepFromTZConfig(IpPrefix subnetMaskObj, String tzName, BigInteger dpnId, String portName, WriteTransaction wrTx) {
    SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj);
    VtepsKey vtepkey = new VtepsKey(dpnId, portName);
    InstanceIdentifier<Vteps> vtepPath = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new TransportZoneKey(tzName)).child(Subnets.class, subnetsKey).child(Vteps.class, vtepkey).build();
    LOG.trace("Removing TEP from (TZ: {} Subnet: {} DPN-ID: {}) inside ITM Config DS.", tzName, subnetMaskObj, dpnId);
    // remove vtep
    wrTx.delete(LogicalDatastoreType.CONFIGURATION, vtepPath);
}
Also used : SubnetsKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.SubnetsKey) VtepsKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.VtepsKey) UnknownVtepsKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVtepsKey) Vteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps) UnknownVteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone) TepsInNotHostedTransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone) TepsInNotHostedTransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneKey) TransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)

Example 32 with Transport

use of org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport in project genius by opendaylight.

the class OvsdbTepRemoveConfigHelper method removeVtepFromTepsNotHosted.

/**
 * Removes the TEP from unknown vtep list under the transport zone in the TepsNotHosted list
 * from ITM operational Datastore by delete operation with write transaction.
 *
 * @param tzName transport zone name in string
 * @param dpnId bridge datapath ID in BigInteger
 * @param wrTx WriteTransaction object
 */
private static void removeVtepFromTepsNotHosted(String tzName, BigInteger dpnId, WriteTransaction wrTx) {
    UnknownVtepsKey unknownVtepkey = new UnknownVtepsKey(dpnId);
    InstanceIdentifier<UnknownVteps> vtepPath = InstanceIdentifier.builder(NotHostedTransportZones.class).child(TepsInNotHostedTransportZone.class, new TepsInNotHostedTransportZoneKey(tzName)).child(UnknownVteps.class, unknownVtepkey).build();
    LOG.trace("Removing TEP from unhosted (TZ: {}, DPID: {}) inside ITM Oper DS.", tzName, dpnId);
    // remove vtep
    wrTx.delete(LogicalDatastoreType.OPERATIONAL, vtepPath);
}
Also used : TepsInNotHostedTransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneKey) UnknownVteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps) UnknownVtepsKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVtepsKey) NotHostedTransportZones(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.NotHostedTransportZones)

Example 33 with Transport

use of org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport in project genius by opendaylight.

the class ItmUtils method deleteTransportZoneFromConfigDS.

/**
 * Deletes the transport zone from Configuration datastore.
 *
 * @param tzName transport zone name
 * @param dataBroker data broker handle to perform operations on datastore
 */
public static void deleteTransportZoneFromConfigDS(String tzName, DataBroker dataBroker) {
    // check whether transport-zone exists in config DS.
    TransportZone transportZoneFromConfigDS = ItmUtils.getTransportZoneFromConfigDS(tzName, dataBroker);
    if (transportZoneFromConfigDS != null) {
        // it exists, delete default-TZ now
        InstanceIdentifier<TransportZone> path = InstanceIdentifier.builder(TransportZones.class).child(TransportZone.class, new TransportZoneKey(tzName)).build();
        LOG.debug("Removing {} transport-zone from config DS.", tzName);
        try {
            SingleTransactionDataBroker.syncDelete(dataBroker, LogicalDatastoreType.CONFIGURATION, path);
        } catch (TransactionCommitFailedException e) {
            LOG.error("deleteTransportZoneFromConfigDS failed. {} could not be deleted.", tzName, e);
        }
    }
}
Also used : TransactionCommitFailedException(org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone) TepsInNotHostedTransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone) TepsInNotHostedTransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneKey) TransportZoneKey(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)

Example 34 with Transport

use of org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport in project genius by opendaylight.

the class ItmUtils method validateForAddVtepConfigSchema.

public static VtepConfigSchema validateForAddVtepConfigSchema(VtepConfigSchema schema, List<VtepConfigSchema> existingSchemas) {
    VtepConfigSchema validSchema = validateVtepConfigSchema(schema);
    for (VtepConfigSchema existingSchema : emptyIfNull(existingSchemas)) {
        if (!StringUtils.equalsIgnoreCase(schema.getSchemaName(), existingSchema.getSchemaName()) && schema.getSubnet().equals(existingSchema.getSubnet())) {
            String subnetCidr = getSubnetCidrAsString(schema.getSubnet());
            Preconditions.checkArgument(false, "VTEP schema with subnet [" + subnetCidr + "] already exists. Multiple VTEP schemas with same subnet is not allowed.");
        }
    }
    if (isNotEmpty(getDpnIdList(validSchema.getDpnIds()))) {
        String tzone = validSchema.getTransportZoneName();
        List<BigInteger> lstDpns = getConflictingDpnsAlreadyConfiguredWithTz(validSchema.getSchemaName(), tzone, getDpnIdList(validSchema.getDpnIds()), existingSchemas);
        if (!lstDpns.isEmpty()) {
            Preconditions.checkArgument(false, "DPN's " + lstDpns + " already configured for transport zone " + tzone + ". Only one end point per transport Zone per Dpn is allowed.");
        }
        if (schema.getTunnelType().equals(TunnelTypeGre.class)) {
            validateForSingleGreTep(validSchema.getSchemaName(), getDpnIdList(validSchema.getDpnIds()), existingSchemas);
        }
    }
    return validSchema;
}
Also used : VtepConfigSchema(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.vtep.config.schemas.VtepConfigSchema) BigInteger(java.math.BigInteger)

Example 35 with Transport

use of org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Transport in project genius by opendaylight.

the class OvsdbTepAddConfigHelper method addTepReceivedFromOvsdb.

/**
 * Adds the TEP into ITM configuration/operational Datastore in one of the following cases.
 * 1) default transport zone
 * 2) Configured transport zone
 * 3) Unhosted transport zone
 *
 * @param tepIp TEP-IP address in string
 * @param strDpnId bridge datapath ID in string
 * @param tzName transport zone name in string
 * @param ofTunnel boolean flag for TEP to enable/disable of-tunnel feature on it
 * @param dataBroker data broker handle to perform operations on config/operational datastore
 * @param wrTx WriteTransaction object
 */
public static void addTepReceivedFromOvsdb(String tepIp, String strDpnId, String tzName, boolean ofTunnel, DataBroker dataBroker, WriteTransaction wrTx) {
    BigInteger dpnId = BigInteger.valueOf(0);
    if (strDpnId != null && !strDpnId.isEmpty()) {
        dpnId = MDSALUtil.getDpnId(strDpnId);
    }
    // Get tep IP
    IpAddress tepIpAddress = IpAddressBuilder.getDefaultInstance(tepIp);
    TransportZone tzone = null;
    // Case: TZ name is not given with OVS TEP.
    if (tzName == null) {
        tzName = ITMConstants.DEFAULT_TRANSPORT_ZONE;
        // add TEP into default-TZ
        tzone = ItmUtils.getTransportZoneFromConfigDS(tzName, dataBroker);
        if (tzone == null) {
            LOG.error("Error: default-transport-zone is not yet created.");
            return;
        }
        LOG.trace("Add TEP into default-transport-zone.");
    } else {
        // Case: Add TEP into corresponding TZ created from Northbound.
        tzone = ItmUtils.getTransportZoneFromConfigDS(tzName, dataBroker);
        if (tzone == null) {
            // Case: TZ is not configured from Northbound, then add TEP into "teps-in-not-hosted-transport-zone"
            LOG.trace("Adding TEP with unknown TZ into teps-in-not-hosted-transport-zone.");
            addUnknownTzTepIntoTepsNotHosted(tzName, tepIpAddress, dpnId, ofTunnel, dataBroker, wrTx);
            return;
        } else {
            LOG.trace("Add TEP into transport-zone already configured by Northbound.");
        }
    }
    // Get subnet list of corresponding TZ created from Northbound.
    List<Subnets> subnetList = tzone.getSubnets();
    String portName = ITMConstants.DUMMY_PORT;
    IpPrefix subnetMaskObj = ItmUtils.getDummySubnet();
    if (subnetList == null || subnetList.isEmpty()) {
        if (subnetList == null) {
            subnetList = new ArrayList<>();
        }
        List<Vteps> vtepList = new ArrayList<>();
        LOG.trace("Add TEP in transport-zone when no subnet-list.");
        addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName, dpnId, portName, ofTunnel, wrTx);
    } else {
        List<Vteps> vtepList = null;
        // subnet list already exists case; check for dummy-subnet
        for (Subnets subnet : subnetList) {
            if (subnet.getKey().getPrefix().equals(subnetMaskObj)) {
                LOG.trace("Subnet exists in the subnet list of transport-zone {}.", tzName);
                // get vtep list of existing subnet
                vtepList = subnet.getVteps();
                break;
            }
        }
        if (vtepList == null || vtepList.isEmpty()) {
            // case: vtep list does not exist or it has no elements
            if (vtepList == null) {
                vtepList = new ArrayList<>();
            }
            LOG.trace("Add TEP in transport-zone when no vtep-list for specific subnet.");
            addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName, dpnId, portName, ofTunnel, wrTx);
        } else {
            // case: vtep list has elements
            boolean vtepFound = false;
            Vteps oldVtep = null;
            for (Vteps vtep : vtepList) {
                if (vtep.getDpnId().equals(dpnId)) {
                    vtepFound = true;
                    oldVtep = vtep;
                    // get portName of existing vtep
                    portName = vtep.getPortname();
                    break;
                }
            }
            if (!vtepFound) {
                addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName, dpnId, portName, ofTunnel, wrTx);
            } else {
                // vtep is found, update it with tep-ip
                vtepList.remove(oldVtep);
                addVtepInITMConfigDS(subnetList, subnetMaskObj, vtepList, tepIpAddress, tzName, dpnId, portName, ofTunnel, wrTx);
            }
        }
    }
}
Also used : IpPrefix(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix) 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) UnknownVteps(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps) ArrayList(java.util.ArrayList) BigInteger(java.math.BigInteger) IpAddress(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress) TransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone) TepsInNotHostedTransportZone(org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone)

Aggregations

TransportZone (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone)16 Vteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.Vteps)14 ArrayList (java.util.ArrayList)11 TepsInNotHostedTransportZone (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZone)11 Subnets (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.Subnets)10 IpAddress (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress)9 UnknownVteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVteps)9 IpPrefix (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix)8 BigInteger (java.math.BigInteger)7 Test (org.junit.Test)7 DPNTEPsInfo (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.dpn.endpoints.DPNTEPsInfo)5 TepsInNotHostedTransportZoneKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.TepsInNotHostedTransportZoneKey)5 HashMap (java.util.HashMap)4 ReadFailedException (org.opendaylight.controller.md.sal.common.api.data.ReadFailedException)4 TransactionCommitFailedException (org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException)4 HwVtep (org.opendaylight.genius.itm.confighelpers.HwVtep)4 TransportZones (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones)4 UnknownVtepsKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.not.hosted.transport.zones.tepsinnothostedtransportzone.UnknownVtepsKey)4 TransportZoneKey (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZoneKey)4 DeviceVteps (org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.transport.zone.subnets.DeviceVteps)4