org.opendaylight.sfc.sfclisp.provider.SfcLispUtil.java Source code

Java tutorial

Introduction

Here is the source code for org.opendaylight.sfc.sfclisp.provider.SfcLispUtil.java

Source

/*
 * Copyright (c) 2015, 2017 Cisco Systems, Inc. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 */

package org.opendaylight.sfc.sfclisp.provider;

import com.google.common.net.InetAddresses;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import org.opendaylight.lispflowmapping.lisp.util.LispAddressStringifier;
import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
import org.opendaylight.sfc.provider.api.SfcProviderAclAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServiceClassifierAPI;
import org.opendaylight.sfc.provider.api.SfcProviderServicePathAPI;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.common.rev151017.SfpName;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.scf.rev140701.service.function.classifiers.ServiceFunctionClassifier;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sfp.rev140701.service.function.paths.ServiceFunctionPath;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.Ip;
import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.sfc.sl.rev140701.data.plane.locator.locator.type.IpBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.access.control.list.rev160218.access.lists.Acl;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.ApplicationData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord.Action;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.AddMappingInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.AddMappingInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.EidUri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.GetMappingInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingDatabase;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.RemoveMappingInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.RemoveMappingInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.VniUri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.Mapping;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.db.instance.MappingKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.database.VirtualNetworkIdentifierKey;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SfcLispUtil {

    private SfcLispUtil() {
    }

    private static final Logger LOG = LoggerFactory.getLogger(SfcLispUtil.class);

    public static Object submitCallable(Callable<Object> callable, ExecutorService executor) {
        Future<Object> future;
        Object result = null;

        future = executor.submit(callable);

        try {
            result = future.get();
        } catch (InterruptedException | ExecutionException e) {
            LOG.warn("{} failed to: {}", callable.toString(), e);
        }

        return result;
    }

    public static Ip createLocator(ApplicationData applicationData) {
        IpAddress ip = new IpAddress(new Ipv4Address(
                InetAddresses.fromInteger(applicationData.getApplicationData().getIpTos()).getHostAddress()));
        return new IpBuilder().setIp(ip).setPort(applicationData.getApplicationData().getLocalPortLow()).build();
    }

    public static GetMappingInput buildGetMappingInput(Eid eid) {
        return new GetMappingInputBuilder().setEid(eid).build();
    }

    public static AddMappingInput buildAddMappingInput(Eid eid, List<Rloc> locators) {
        MappingRecordBuilder record = new MappingRecordBuilder();

        record.setAction(Action.NoAction).setAuthoritative(true).setEid(eid)
                .setLocatorRecord(LispAddressUtil.asLocatorRecords(locators)).setMapVersion((short) 0)
                .setRecordTtl(1440);
        return new AddMappingInputBuilder().setMappingRecord(record.build()).build();
    }

    public static RemoveMappingInput buildRemoveMappingInput(Eid eid, int mask) {
        RemoveMappingInputBuilder rmib = new RemoveMappingInputBuilder();
        rmib.setEid(eid);
        return rmib.build();
    }

    public static InstanceIdentifier<Mapping> buildMappingIid(Mapping mapping) {
        Eid eid = mapping.getMappingRecord().getEid();

        VirtualNetworkIdentifierKey vniKey = new VirtualNetworkIdentifierKey(
                new VniUri(Long.toString(eid.getVirtualNetworkId().getValue())));
        MappingKey eidKey = new MappingKey(new EidUri(LispAddressStringifier.getURIString(eid)),
                MappingOrigin.Northbound);
        return InstanceIdentifier.create(MappingDatabase.class).child(VirtualNetworkIdentifier.class, vniKey)
                .child(Mapping.class, eidKey);
    }

    public static Acl getServiceFunctionAcl(SfpName sfPathName) {
        ServiceFunctionPath serviceFunctionPath = SfcProviderServicePathAPI.readServiceFunctionPath(sfPathName);
        String classifierName = serviceFunctionPath.getClassifier();
        Acl acl = null;
        if (classifierName != null) {
            ServiceFunctionClassifier classifier = SfcProviderServiceClassifierAPI
                    .readServiceClassifier(classifierName);
            if (classifier != null && classifier.getAcl() != null) {
                acl = SfcProviderAclAPI.readAccessList(classifier.getAcl().getName(),
                        classifier.getAcl().getType());
            }
        }
        return acl;
    }
}