X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2Frenderer%2Fovs%2Futilities%2FSouthboundUtils.java;h=4bf4d42f30ca91a8003280e7e032c8a931ad773b;hb=eb631c5ab0c30cd07e2968d2f2b1724a862145ed;hp=d921ac91826d0bd82ed99344c18037de8fdf4d7d;hpb=b4b1b760287d5aa668c493b0a8f35e2ebae5ecd8;p=vpnservice.git diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/utilities/SouthboundUtils.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/utilities/SouthboundUtils.java index d921ac91..4bf4d42f 100644 --- a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/utilities/SouthboundUtils.java +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/ovs/utilities/SouthboundUtils.java @@ -8,6 +8,7 @@ package org.opendaylight.vpnservice.interfacemgr.renderer.ovs.utilities; import com.google.common.collect.Maps; +import com.google.common.util.concurrent.ListenableFuture; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; @@ -17,16 +18,15 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces. import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.*; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.port._interface.attributes.*; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfTunnel; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeGre; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.TunnelTypeVxlan; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.*; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; +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.TpId; 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.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; @@ -45,17 +45,38 @@ public class SouthboundUtils { public static void addPortToBridge(InstanceIdentifier bridgeIid, Interface iface, OvsdbBridgeAugmentation bridgeAugmentation, String bridgeName, - String portName, DataBroker dataBroker, WriteTransaction t) { + String portName, DataBroker dataBroker, List> futures) { + WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); IfTunnel ifTunnel = iface.getAugmentation(IfTunnel.class); if (ifTunnel != null) { - addTunnelPortToBridge(ifTunnel, bridgeIid, iface, bridgeAugmentation, bridgeName, portName, dataBroker, t); - return; + addTunnelPortToBridge(ifTunnel, bridgeIid, iface, bridgeAugmentation, bridgeName, portName, dataBroker, tx); } IfL2vlan ifL2vlan = iface.getAugmentation(IfL2vlan.class); if (ifL2vlan != null) { - addVlanPortToBridge(bridgeIid, ifL2vlan, bridgeAugmentation, bridgeName, portName, dataBroker, t); + addVlanPortToBridge(bridgeIid, ifL2vlan, bridgeAugmentation, bridgeName, portName, dataBroker, tx); } + futures.add(tx.submit()); + } + + public static void addBridge(InstanceIdentifier bridgeIid, + OvsdbBridgeAugmentation bridgeAugmentation, + DataBroker dataBroker, List> futures){ + WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); + NodeId nodeId = InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(Node.class)).getNodeId(); + NodeBuilder bridgeNodeBuilder = new NodeBuilder(); + bridgeNodeBuilder.setNodeId(nodeId); + bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, bridgeAugmentation); + tx.put(LogicalDatastoreType.CONFIGURATION, createNodeInstanceIdentifier(nodeId), bridgeNodeBuilder.build(), true); + futures.add(tx.submit()); + } + + public static void deleteBridge(InstanceIdentifier bridgeIid, + DataBroker dataBroker, List> futures){ + WriteTransaction tx = dataBroker.newWriteOnlyTransaction(); + NodeId nodeId = InstanceIdentifier.keyOf(bridgeIid.firstIdentifierOf(Node.class)).getNodeId(); + tx.delete(LogicalDatastoreType.CONFIGURATION, createNodeInstanceIdentifier(nodeId)); + futures.add(tx.submit()); } private static void addVlanPortToBridge(InstanceIdentifier bridgeIid, IfL2vlan ifL2vlan, @@ -69,7 +90,10 @@ public class SouthboundUtils { OvsdbBridgeAugmentation bridgeAugmentation, String bridgeName, String portName, DataBroker dataBroker, WriteTransaction t) { Class type = null; - if (ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeGre.class)) { + LOG.debug("adding tunnel port {} to bridge {}",portName, bridgeName); + + if (ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeGre.class) || + ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeMplsOverGre.class)) { type = InterfaceTypeGre.class; } else if (ifTunnel.getTunnelInterfaceType().isAssignableFrom(TunnelTypeVxlan.class)) { type = InterfaceTypeVxlan.class; @@ -158,4 +182,11 @@ public class SouthboundUtils { LOG.debug("Termination point InstanceIdentifier generated : {}",terminationPointPath); return terminationPointPath; } + + public static InstanceIdentifier createNodeInstanceIdentifier(NodeId nodeId) { + return InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(OVSDB_TOPOLOGY_ID)) + .child(Node.class,new NodeKey(nodeId)); + } } \ No newline at end of file