Cleanup CRLF consistency 99/50199/1
authorRobert Varga <rovarga@cisco.com>
Tue, 10 Jan 2017 14:46:45 +0000 (15:46 +0100)
committerRobert Varga <rovarga@cisco.com>
Tue, 10 Jan 2017 14:46:45 +0000 (15:46 +0100)
This file has inconsistent CR/LF combination, clean that up.

Change-Id: I202b9253422e8555e091631d875e8cdbdcd5ce21
Signed-off-by: Robert Varga <rovarga@cisco.com>
renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/adapter/VppRpcServiceImpl.java

index af9d3b597d0aef8dedb6cf3e376f35357121be1b..bec0dbcf972e98fefcfdbe755e0cf1fcd9b38522 100644 (file)
-/*\r
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.\r
- *\r
- * This program and the accompanying materials are made available under the\r
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
- * and is available at http://www.eclipse.org/legal/epl-v10.html\r
- */\r
-\r
-package org.opendaylight.groupbasedpolicy.renderer.vpp.adapter;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import java.util.concurrent.Future;\r
-import java.util.stream.Collectors;\r
-\r
-import javax.annotation.Nonnull;\r
-\r
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;\r
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.ConfigCommand;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.TapPortCommand;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand.VhostUserCommandBuilder;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.InterfaceManager;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;\r
-import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.AddInterfaceToBridgeDomainInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateInterfaceOnNodeInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateVirtualBridgeDomainOnNodesInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DelInterfaceFromBridgeDomainInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteInterfaceFromNodeInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteVirtualBridgeDomainFromNodesInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CloneVirtualBridgeDomainOnNodesInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.bridge.domain.attributes.tunnel.type.Vlan;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.bridge.domain.attributes.tunnel.type.Vxlan;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes.InterfaceTypeChoice;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.VhostUserCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VhostUserRole;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VxlanVni;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vlan.rev160429.network.topology.topology.tunnel.parameters.VlanNetworkParameters;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev160429.network.topology.topology.tunnel.parameters.VxlanTunnelParameters;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;\r
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;\r
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
-import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;\r
-import org.opendaylight.yangtools.yang.common.RpcResult;\r
-import org.opendaylight.yangtools.yang.common.RpcResultBuilder;\r
-import org.slf4j.Logger;\r
-import org.slf4j.LoggerFactory;\r
-\r
-import com.google.common.base.Optional;\r
-import com.google.common.util.concurrent.AsyncFunction;\r
-import com.google.common.util.concurrent.CheckedFuture;\r
-import com.google.common.util.concurrent.Futures;\r
-import com.google.common.util.concurrent.ListenableFuture;\r
-\r
-public class VppRpcServiceImpl {\r
-\r
-    private static final Logger LOG = LoggerFactory.getLogger(VppRpcServiceImpl.class);\r
-\r
-    private final DataBroker dataBroker;\r
-    private final BridgeDomainManager bridgeDomainManager;\r
-    private final InterfaceManager interfaceManager;\r
-    private final MountedDataBrokerProvider mountDataProvider;\r
-\r
-    public VppRpcServiceImpl(@Nonnull DataBroker dataBroker, @Nonnull MountedDataBrokerProvider mountDataProvider,\r
-            BridgeDomainManager bridgeDomainManager, InterfaceManager interfaceManager) {\r
-        this.dataBroker = dataBroker;\r
-        this.bridgeDomainManager = bridgeDomainManager;\r
-        this.interfaceManager = interfaceManager;\r
-        this.mountDataProvider = mountDataProvider;\r
-    }\r
-\r
-    public Future<RpcResult<Void>> createVirtualBridgeDomain(CreateVirtualBridgeDomainOnNodesInput input) {\r
-        LOG.info("Processing a remote call for creating bridge domain {}", input.getId());\r
-        if (input.getTunnelType() == null) {\r
-            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                .withError(ErrorType.RPC,\r
-                        "Failed to create bridge domain" + input.getId() + "." + "Tunnel type not specified")\r
-                .build());\r
-        }\r
-        List<ListenableFuture<Void>> futures = new ArrayList<>();\r
-        List<NodeId> nodeIds = input.getPhysicalLocationRef()\r
-            .stream()\r
-            .map(locationRef -> locationRef.getNodeId())\r
-            .collect(Collectors.toList());\r
-        LOG.trace("Corresponding nodes for bridge-domain {}", input.getPhysicalLocationRef());\r
-        if (input.getTunnelType() instanceof Vxlan) {\r
-            LOG.trace("Detected VXLAN type for bridge domain {}", input.getId());\r
-            Vxlan tunnelType = (Vxlan) input.getTunnelType();\r
-            VxlanVni vxlanVni = new VxlanVni(tunnelType.getVni().getValue());\r
-            nodeIds.forEach(nodeId -> {\r
-                futures.add(bridgeDomainManager.createVxlanBridgeDomainOnVppNode(input.getId(), vxlanVni, nodeId));\r
-            });\r
-        } else if (input.getTunnelType() instanceof Vlan) {\r
-            LOG.trace("Detected VLAN type for bridge domain {}", input.getId());\r
-            Vlan vlan = (Vlan) input.getTunnelType();\r
-            VlanId vlanId = new VlanId(vlan.getVlanId().getValue());\r
-            nodeIds.forEach(nodeId -> {\r
-                futures.add(bridgeDomainManager.createVlanBridgeDomainOnVppNode(input.getId(), vlanId, nodeId));\r
-            });\r
-        }\r
-        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());\r
-    }\r
-\r
-    public Future<RpcResult<Void>> deleteVirtualBridgeDomain(DeleteVirtualBridgeDomainFromNodesInput input) {\r
-        LOG.info("Processing a remote call for removing bridge domain {}", input.getBridgeDomainId());\r
-        List<ListenableFuture<Void>> futures = new ArrayList<>();\r
-        input.getBridgeDomainNode().forEach(nodeId -> {\r
-            futures.add(bridgeDomainManager.removeBridgeDomainFromVppNode(input.getBridgeDomainId(), nodeId));\r
-        });\r
-        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());\r
-    }\r
-\r
-    public ListenableFuture<RpcResult<Void>> cloneVirtualBridgeDomainOnNode(CloneVirtualBridgeDomainOnNodesInput input) {\r
-        LOG.info("Processing a remote call for clonning  bridge domain {}", input.getBridgeDomainId());\r
-        List<ListenableFuture<Void>> futures = new ArrayList<>();\r
-        ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();\r
-        InstanceIdentifier<Topology> topologyIid = VppIidFactory.getTopologyIid(new TopologyKey(new TopologyId(\r
-                input.getBridgeDomainId())));\r
-        return Futures.transform(rTx.read(LogicalDatastoreType.CONFIGURATION, topologyIid),\r
-                new AsyncFunction<Optional<Topology>, RpcResult<Void>>() {\r
-\r
-                    @Override\r
-                    public ListenableFuture<RpcResult<Void>> apply(Optional<Topology> optTopology) throws Exception {\r
-                        if (!optTopology.isPresent()) {\r
-\r
-                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                                .withError(\r
-                                        ErrorType.RPC,\r
-                                        "Failed to clone bridge domain. Bridge domain " + input.getBridgeDomainId()\r
-                                                + " does not exist.")\r
-                                .build());\r
-                        }\r
-                        TopologyVbridgeAugment vBridgeAug = optTopology.get().getAugmentation(TopologyVbridgeAugment.class);\r
-                        if (vBridgeAug == null) {\r
-                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                                .withError(\r
-                                        ErrorType.RPC,\r
-                                        "Failed to clone bridge domain. Topology " + input.getBridgeDomainId()\r
-                                                + " is not bridge domain type.")\r
-                                .build());\r
-                        }\r
-                        if (vBridgeAug.getTunnelParameters() instanceof VxlanTunnelParameters) {\r
-                            LOG.debug("Clonning VXLAN type bridge domain {} on nodes {}", input.getBridgeDomainId(),\r
-                                    input.getBridgeDomainNode());\r
-                            VxlanTunnelParameters vxlanTunnelParams = (VxlanTunnelParameters) vBridgeAug.getTunnelParameters();\r
-                            VxlanVni vni = vxlanTunnelParams.getVni();\r
-                            input.getBridgeDomainNode().forEach(\r
-                                    nodeId -> {\r
-                                        futures.add(bridgeDomainManager.createVxlanBridgeDomainOnVppNode(\r
-                                                input.getBridgeDomainId(), vni, nodeId));\r
-                                    });\r
-                        } else if (vBridgeAug.getTunnelParameters() instanceof VlanNetworkParameters) {\r
-                            LOG.debug("Clonning VLAN type bridge domain {} on nodes {}", input.getBridgeDomainId(),\r
-                                    input.getBridgeDomainNode());\r
-                            VlanNetworkParameters vlanTunnelParams = (VlanNetworkParameters) vBridgeAug.getTunnelParameters();\r
-                            VlanId vlanId = vlanTunnelParams.getVlanId();\r
-                            input.getBridgeDomainNode().forEach(\r
-                                    nodeId -> {\r
-                                        futures.add(bridgeDomainManager.createVlanBridgeDomainOnVppNode(\r
-                                                input.getBridgeDomainId(), vlanId, nodeId));\r
-                                    });\r
-                        }\r
-                        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());\r
-                    }\r
-                });\r
-    }\r
-\r
-    public ListenableFuture<RpcResult<Void>> createInterfaceOnNodes(CreateInterfaceOnNodeInput input) {\r
-        InterfaceTypeChoice interfaceType = input.getInterfaceTypeChoice();\r
-        ConfigCommand ifaceCommand = null;\r
-        if (interfaceType instanceof VhostUserCase) {\r
-            VhostUserCommandBuilder vhostBuilder = VhostUserCommand.builder();\r
-            vhostBuilder.setName(input.getVppInterfaceName());\r
-            VhostUserCase vhostCase = (VhostUserCase) input.getInterfaceTypeChoice();\r
-            vhostBuilder.setSocket(vhostCase.getSocket());\r
-            vhostBuilder.setRole(VhostUserRole.Client);\r
-            vhostBuilder.setDescription(input.getDescription());\r
-            vhostBuilder.setOperation(Operations.PUT);\r
-            ifaceCommand = vhostBuilder.build();\r
-        }\r
-        if (interfaceType instanceof TapCase) {\r
-            TapPortCommand.TapPortCommandBuilder tapBuilder = TapPortCommand.builder();\r
-            TapCase tapIface = (TapCase) input.getInterfaceTypeChoice();\r
-            tapBuilder.setTapName(tapIface.getName());\r
-            tapBuilder.setPhysAddress(tapIface.getPhysicalAddress());\r
-            tapBuilder.setInterfaceName(input.getVppInterfaceName());\r
-            tapBuilder.setDescription(input.getDescription());\r
-            tapBuilder.setOperation(Operations.PUT);\r
-            ifaceCommand = tapBuilder.build();\r
-        }\r
-        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());\r
-        Optional<DataBroker> optDataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);\r
-        if (!optDataBroker.isPresent()) {\r
-            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                .withError(ErrorType.RPC, "Cannot find data broker for mount point " + vppNodeIid)\r
-                .build());\r
-        }\r
-        return Futures.transform(interfaceManager.createInterfaceOnVpp(ifaceCommand, optDataBroker.get()),\r
-                voidToRpcResult());\r
-    }\r
+/*
+ * Copyright (c) 2016 Cisco Systems, Inc. and others. 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.groupbasedpolicy.renderer.vpp.adapter;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Future;
+import java.util.stream.Collectors;
+
+import javax.annotation.Nonnull;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.api.BridgeDomainManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.ConfigCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.TapPortCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.commands.VhostUserCommand.VhostUserCommandBuilder;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.iface.InterfaceManager;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General.Operations;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.MountedDataBrokerProvider;
+import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.AddInterfaceToBridgeDomainInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateInterfaceOnNodeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CreateVirtualBridgeDomainOnNodesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DelInterfaceFromBridgeDomainInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteInterfaceFromNodeInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.DeleteVirtualBridgeDomainFromNodesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.CloneVirtualBridgeDomainOnNodesInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.bridge.domain.attributes.tunnel.type.Vlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_adapter.rev161201.bridge.domain.attributes.tunnel.type.Vxlan;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes.InterfaceTypeChoice;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.TapCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.vpp_renderer.rev160425._interface.attributes._interface.type.choice.VhostUserCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VhostUserRole;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev161214.VxlanVni;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vlan.rev160429.network.topology.topology.tunnel.parameters.VlanNetworkParameters;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.tunnel.vxlan.rev160429.network.topology.topology.tunnel.parameters.VxlanTunnelParameters;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
+import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError.ErrorType;
+import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.AsyncFunction;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+public class VppRpcServiceImpl {
+
+    private static final Logger LOG = LoggerFactory.getLogger(VppRpcServiceImpl.class);
+
+    private final DataBroker dataBroker;
+    private final BridgeDomainManager bridgeDomainManager;
+    private final InterfaceManager interfaceManager;
+    private final MountedDataBrokerProvider mountDataProvider;
+
+    public VppRpcServiceImpl(@Nonnull DataBroker dataBroker, @Nonnull MountedDataBrokerProvider mountDataProvider,
+            BridgeDomainManager bridgeDomainManager, InterfaceManager interfaceManager) {
+        this.dataBroker = dataBroker;
+        this.bridgeDomainManager = bridgeDomainManager;
+        this.interfaceManager = interfaceManager;
+        this.mountDataProvider = mountDataProvider;
+    }
+
+    public Future<RpcResult<Void>> createVirtualBridgeDomain(CreateVirtualBridgeDomainOnNodesInput input) {
+        LOG.info("Processing a remote call for creating bridge domain {}", input.getId());
+        if (input.getTunnelType() == null) {
+            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                .withError(ErrorType.RPC,
+                        "Failed to create bridge domain" + input.getId() + "." + "Tunnel type not specified")
+                .build());
+        }
+        List<ListenableFuture<Void>> futures = new ArrayList<>();
+        List<NodeId> nodeIds = input.getPhysicalLocationRef()
+            .stream()
+            .map(locationRef -> locationRef.getNodeId())
+            .collect(Collectors.toList());
+        LOG.trace("Corresponding nodes for bridge-domain {}", input.getPhysicalLocationRef());
+        if (input.getTunnelType() instanceof Vxlan) {
+            LOG.trace("Detected VXLAN type for bridge domain {}", input.getId());
+            Vxlan tunnelType = (Vxlan) input.getTunnelType();
+            VxlanVni vxlanVni = new VxlanVni(tunnelType.getVni().getValue());
+            nodeIds.forEach(nodeId -> {
+                futures.add(bridgeDomainManager.createVxlanBridgeDomainOnVppNode(input.getId(), vxlanVni, nodeId));
+            });
+        } else if (input.getTunnelType() instanceof Vlan) {
+            LOG.trace("Detected VLAN type for bridge domain {}", input.getId());
+            Vlan vlan = (Vlan) input.getTunnelType();
+            VlanId vlanId = new VlanId(vlan.getVlanId().getValue());
+            nodeIds.forEach(nodeId -> {
+                futures.add(bridgeDomainManager.createVlanBridgeDomainOnVppNode(input.getId(), vlanId, nodeId));
+            });
+        }
+        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());
+    }
+
+    public Future<RpcResult<Void>> deleteVirtualBridgeDomain(DeleteVirtualBridgeDomainFromNodesInput input) {
+        LOG.info("Processing a remote call for removing bridge domain {}", input.getBridgeDomainId());
+        List<ListenableFuture<Void>> futures = new ArrayList<>();
+        input.getBridgeDomainNode().forEach(nodeId -> {
+            futures.add(bridgeDomainManager.removeBridgeDomainFromVppNode(input.getBridgeDomainId(), nodeId));
+        });
+        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());
+    }
+
+    public ListenableFuture<RpcResult<Void>> cloneVirtualBridgeDomainOnNode(CloneVirtualBridgeDomainOnNodesInput input) {
+        LOG.info("Processing a remote call for clonning  bridge domain {}", input.getBridgeDomainId());
+        List<ListenableFuture<Void>> futures = new ArrayList<>();
+        ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
+        InstanceIdentifier<Topology> topologyIid = VppIidFactory.getTopologyIid(new TopologyKey(new TopologyId(
+                input.getBridgeDomainId())));
+        return Futures.transform(rTx.read(LogicalDatastoreType.CONFIGURATION, topologyIid),
+                new AsyncFunction<Optional<Topology>, RpcResult<Void>>() {
+
+                    @Override
+                    public ListenableFuture<RpcResult<Void>> apply(Optional<Topology> optTopology) throws Exception {
+                        if (!optTopology.isPresent()) {
+
+                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                                .withError(
+                                        ErrorType.RPC,
+                                        "Failed to clone bridge domain. Bridge domain " + input.getBridgeDomainId()
+                                                + " does not exist.")
+                                .build());
+                        }
+                        TopologyVbridgeAugment vBridgeAug = optTopology.get().getAugmentation(TopologyVbridgeAugment.class);
+                        if (vBridgeAug == null) {
+                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                                .withError(
+                                        ErrorType.RPC,
+                                        "Failed to clone bridge domain. Topology " + input.getBridgeDomainId()
+                                                + " is not bridge domain type.")
+                                .build());
+                        }
+                        if (vBridgeAug.getTunnelParameters() instanceof VxlanTunnelParameters) {
+                            LOG.debug("Clonning VXLAN type bridge domain {} on nodes {}", input.getBridgeDomainId(),
+                                    input.getBridgeDomainNode());
+                            VxlanTunnelParameters vxlanTunnelParams = (VxlanTunnelParameters) vBridgeAug.getTunnelParameters();
+                            VxlanVni vni = vxlanTunnelParams.getVni();
+                            input.getBridgeDomainNode().forEach(
+                                    nodeId -> {
+                                        futures.add(bridgeDomainManager.createVxlanBridgeDomainOnVppNode(
+                                                input.getBridgeDomainId(), vni, nodeId));
+                                    });
+                        } else if (vBridgeAug.getTunnelParameters() instanceof VlanNetworkParameters) {
+                            LOG.debug("Clonning VLAN type bridge domain {} on nodes {}", input.getBridgeDomainId(),
+                                    input.getBridgeDomainNode());
+                            VlanNetworkParameters vlanTunnelParams = (VlanNetworkParameters) vBridgeAug.getTunnelParameters();
+                            VlanId vlanId = vlanTunnelParams.getVlanId();
+                            input.getBridgeDomainNode().forEach(
+                                    nodeId -> {
+                                        futures.add(bridgeDomainManager.createVlanBridgeDomainOnVppNode(
+                                                input.getBridgeDomainId(), vlanId, nodeId));
+                                    });
+                        }
+                        return Futures.transform(Futures.allAsList(futures), voidsToRpcResult());
+                    }
+                });
+    }
+
+    public ListenableFuture<RpcResult<Void>> createInterfaceOnNodes(CreateInterfaceOnNodeInput input) {
+        InterfaceTypeChoice interfaceType = input.getInterfaceTypeChoice();
+        ConfigCommand ifaceCommand = null;
+        if (interfaceType instanceof VhostUserCase) {
+            VhostUserCommandBuilder vhostBuilder = VhostUserCommand.builder();
+            vhostBuilder.setName(input.getVppInterfaceName());
+            VhostUserCase vhostCase = (VhostUserCase) input.getInterfaceTypeChoice();
+            vhostBuilder.setSocket(vhostCase.getSocket());
+            vhostBuilder.setRole(VhostUserRole.Client);
+            vhostBuilder.setDescription(input.getDescription());
+            vhostBuilder.setOperation(Operations.PUT);
+            ifaceCommand = vhostBuilder.build();
+        }
+        if (interfaceType instanceof TapCase) {
+            TapPortCommand.TapPortCommandBuilder tapBuilder = TapPortCommand.builder();
+            TapCase tapIface = (TapCase) input.getInterfaceTypeChoice();
+            tapBuilder.setTapName(tapIface.getName());
+            tapBuilder.setPhysAddress(tapIface.getPhysicalAddress());
+            tapBuilder.setInterfaceName(input.getVppInterfaceName());
+            tapBuilder.setDescription(input.getDescription());
+            tapBuilder.setOperation(Operations.PUT);
+            ifaceCommand = tapBuilder.build();
+        }
+        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());
+        Optional<DataBroker> optDataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
+        if (!optDataBroker.isPresent()) {
+            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                .withError(ErrorType.RPC, "Cannot find data broker for mount point " + vppNodeIid)
+                .build());
+        }
+        return Futures.transform(interfaceManager.createInterfaceOnVpp(ifaceCommand, optDataBroker.get()),
+                voidToRpcResult());
+    }
 
     public ListenableFuture<RpcResult<Void>> deleteInterfaceFromNodes(DeleteInterfaceFromNodeInput input) {
-        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());\r
-        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),\r
-                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {\r
-\r
-                    @Override\r
-                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {\r
-                        InterfaceKey iKey = new InterfaceKey(input.getVppInterfaceName());\r
-                        if (!optIface.isPresent()) {\r
-                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                                .withError(\r
-                                        ErrorType.RPC,\r
-                                        "Cannot delete interface " + iKey + " on node " + vppNodeIid\r
-                                                + ". Not found or already deleted.")\r
-                                .build());\r
-                        }\r
-                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);\r
-                        WriteTransaction wTx = dataBroker.get().newWriteOnlyTransaction();\r
-                        wTx.delete(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(iKey));\r
-                        return Futures.transform(wTx.submit(), voidToRpcResult());\r
-                    }\r
-                });\r
-    }\r
-\r
-    public ListenableFuture<RpcResult<Void>> addInterfaceToBridgeDomain(AddInterfaceToBridgeDomainInput input) {\r
-        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());\r
-        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),\r
-                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {\r
-\r
-                    @Override\r
-                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {\r
-                        InterfaceKey iKey = new InterfaceKey(input.getVppInterfaceName());\r
-                        if (!optIface.isPresent()) {\r
-                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                                .withError(\r
-                                        ErrorType.RPC,\r
-                                        "Cannot add interface " + iKey + " to bridge domain on node "\r
-                                                + vppNodeIid + ". Not found or deleted.")\r
-                                .build());\r
-                        }\r
-                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);\r
-                        return Futures.transform(interfaceManager.configureInterface(dataBroker.get(), iKey,\r
-                                input.getBridgeDomainId(), null), voidToRpcResult());\r
-                    }\r
-                });\r
-    }\r
-\r
-    public ListenableFuture<RpcResult<Void>> delInterfaceFromBridgeDomain(DelInterfaceFromBridgeDomainInput input) {\r
-        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());\r
-        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),\r
-                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {\r
-\r
-                    @Override\r
-                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {\r
-                        if (!optIface.isPresent()) {\r
-                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()\r
-                                .withError(\r
-                                        ErrorType.RPC,\r
-                                        "Cannot remove interface " + input.getVppInterfaceName()\r
-                                                + " from bridge domain on node " + vppNodeIid\r
-                                                + ". Not found or deleted.")\r
-                                .build());\r
-                        }\r
-                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);\r
-                        return Futures.transform(interfaceManager.removeInterfaceFromBridgeDomain(dataBroker.get(),\r
-                                optIface.get().getKey()), voidToRpcResult());\r
-                    }\r
-                });\r
-    }\r
-\r
-    private CheckedFuture<Optional<Interface>, ReadFailedException> readInterface(InstanceIdentifier<?> nodeIid,\r
-            String interfaceName) {\r
-        Optional<DataBroker> optDataBroker = mountDataProvider.getDataBrokerForMountPoint(nodeIid);\r
-        if (!optDataBroker.isPresent()) {\r
-            LOG.error("Cannot find data broker for node {}", nodeIid);\r
-            return Futures.immediateCheckedFuture(Optional.absent());\r
-        }\r
-        ReadOnlyTransaction rwTx = optDataBroker.get().newReadOnlyTransaction();\r
-        InterfaceKey iKey = new InterfaceKey(interfaceName);\r
-        InstanceIdentifier<Interface> interfaceIID = VppIidFactory.getInterfaceIID(iKey);\r
-        CheckedFuture<Optional<Interface>, ReadFailedException> readInterface = rwTx.read(\r
-                LogicalDatastoreType.CONFIGURATION, interfaceIID);\r
-        rwTx.close();\r
-        return readInterface;\r
-    }\r
-\r
-    private AsyncFunction<Void, RpcResult<Void>> voidToRpcResult() {\r
-        return new AsyncFunction<Void, RpcResult<Void>>() {\r
-\r
-            @Override\r
-            public ListenableFuture<RpcResult<Void>> apply(Void input) throws Exception {\r
-                return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());\r
-            }\r
-        };\r
-    }\r
-\r
-    private AsyncFunction<List<Void>, RpcResult<Void>> voidsToRpcResult() {\r
-        return new AsyncFunction<List<Void>, RpcResult<Void>>() {\r
-\r
-            @Override\r
-            public ListenableFuture<RpcResult<Void>> apply(List<Void> input) throws Exception {\r
-                return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());\r
-            }\r
-        };\r
-    }\r
-}\r
+        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());
+        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),
+                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {
+
+                    @Override
+                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {
+                        InterfaceKey iKey = new InterfaceKey(input.getVppInterfaceName());
+                        if (!optIface.isPresent()) {
+                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                                .withError(
+                                        ErrorType.RPC,
+                                        "Cannot delete interface " + iKey + " on node " + vppNodeIid
+                                                + ". Not found or already deleted.")
+                                .build());
+                        }
+                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
+                        WriteTransaction wTx = dataBroker.get().newWriteOnlyTransaction();
+                        wTx.delete(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(iKey));
+                        return Futures.transform(wTx.submit(), voidToRpcResult());
+                    }
+                });
+    }
+
+    public ListenableFuture<RpcResult<Void>> addInterfaceToBridgeDomain(AddInterfaceToBridgeDomainInput input) {
+        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());
+        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),
+                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {
+
+                    @Override
+                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {
+                        InterfaceKey iKey = new InterfaceKey(input.getVppInterfaceName());
+                        if (!optIface.isPresent()) {
+                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                                .withError(
+                                        ErrorType.RPC,
+                                        "Cannot add interface " + iKey + " to bridge domain on node "
+                                                + vppNodeIid + ". Not found or deleted.")
+                                .build());
+                        }
+                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
+                        return Futures.transform(interfaceManager.configureInterface(dataBroker.get(), iKey,
+                                input.getBridgeDomainId(), null), voidToRpcResult());
+                    }
+                });
+    }
+
+    public ListenableFuture<RpcResult<Void>> delInterfaceFromBridgeDomain(DelInterfaceFromBridgeDomainInput input) {
+        InstanceIdentifier<Node> vppNodeIid = VppIidFactory.getNetconfNodeIid(input.getVppNodeId());
+        return Futures.transform(readInterface(vppNodeIid, input.getVppInterfaceName()),
+                new AsyncFunction<Optional<Interface>, RpcResult<Void>>() {
+
+                    @Override
+                    public ListenableFuture<RpcResult<Void>> apply(Optional<Interface> optIface) throws Exception {
+                        if (!optIface.isPresent()) {
+                            return Futures.immediateFuture(RpcResultBuilder.<Void>failed()
+                                .withError(
+                                        ErrorType.RPC,
+                                        "Cannot remove interface " + input.getVppInterfaceName()
+                                                + " from bridge domain on node " + vppNodeIid
+                                                + ". Not found or deleted.")
+                                .build());
+                        }
+                        Optional<DataBroker> dataBroker = mountDataProvider.getDataBrokerForMountPoint(vppNodeIid);
+                        return Futures.transform(interfaceManager.removeInterfaceFromBridgeDomain(dataBroker.get(),
+                                optIface.get().getKey()), voidToRpcResult());
+                    }
+                });
+    }
+
+    private CheckedFuture<Optional<Interface>, ReadFailedException> readInterface(InstanceIdentifier<?> nodeIid,
+            String interfaceName) {
+        Optional<DataBroker> optDataBroker = mountDataProvider.getDataBrokerForMountPoint(nodeIid);
+        if (!optDataBroker.isPresent()) {
+            LOG.error("Cannot find data broker for node {}", nodeIid);
+            return Futures.immediateCheckedFuture(Optional.absent());
+        }
+        ReadOnlyTransaction rwTx = optDataBroker.get().newReadOnlyTransaction();
+        InterfaceKey iKey = new InterfaceKey(interfaceName);
+        InstanceIdentifier<Interface> interfaceIID = VppIidFactory.getInterfaceIID(iKey);
+        CheckedFuture<Optional<Interface>, ReadFailedException> readInterface = rwTx.read(
+                LogicalDatastoreType.CONFIGURATION, interfaceIID);
+        rwTx.close();
+        return readInterface;
+    }
+
+    private AsyncFunction<Void, RpcResult<Void>> voidToRpcResult() {
+        return new AsyncFunction<Void, RpcResult<Void>>() {
+
+            @Override
+            public ListenableFuture<RpcResult<Void>> apply(Void input) throws Exception {
+                return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
+            }
+        };
+    }
+
+    private AsyncFunction<List<Void>, RpcResult<Void>> voidsToRpcResult() {
+        return new AsyncFunction<List<Void>, RpcResult<Void>>() {
+
+            @Override
+            public ListenableFuture<RpcResult<Void>> apply(List<Void> input) throws Exception {
+                return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
+            }
+        };
+    }
+}