From 1f0f101e195df2cf6c8879632ddfd281d59b638f Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Thu, 16 Jun 2016 18:34:40 +0200 Subject: [PATCH] Implementing VNI generation for VBD Change-Id: Id79cb9442f58761c957914cc8448883d32ebccf3 Signed-off-by: Michal Cmarada Signed-off-by: Martin Sunal --- .../renderer/vpp/api/BridgeDomainManager.java | 2 +- .../renderer/vpp/listener/VppNodeListener.java | 8 +++++++- .../renderer/vpp/policy/BridgeDomainManagerImpl.java | 4 ++-- .../renderer/vpp/policy/ForwardingManager.java | 11 ++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/api/BridgeDomainManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/api/BridgeDomainManager.java index bbb3a6d41..1fd983930 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/api/BridgeDomainManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/api/BridgeDomainManager.java @@ -30,7 +30,7 @@ public interface BridgeDomainManager { * @param vppNodeId VPP node where the bridge domain should be created * @return {@link ListenableFuture} */ - ListenableFuture createVxlanBridgeDomainOnVppNode(@Nonnull String bridgeDomainName, VxlanVni vni, @Nonnull NodeId vppNodeId); + ListenableFuture createVxlanBridgeDomainOnVppNode(@Nonnull String bridgeDomainName, @Nonnull VxlanVni vni, @Nonnull NodeId vppNodeId); /** * Creates a bridge domain on VPP node and it also adds tunnels of the bridge domain to VLAN diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/listener/VppNodeListener.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/listener/VppNodeListener.java index 086b51953..7eeb35653 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/listener/VppNodeListener.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/listener/VppNodeListener.java @@ -21,7 +21,9 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.groupbasedpolicy.renderer.vpp.event.NodeOperEvent; import org.opendaylight.groupbasedpolicy.renderer.vpp.manager.VppNodeManager; 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.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.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; @@ -34,6 +36,7 @@ import com.google.common.eventbus.EventBus; public class VppNodeListener implements DataTreeChangeListener, AutoCloseable { private static final Logger LOG = LoggerFactory.getLogger(VppNodeListener.class); + private static final TopologyId TOPOLOGY_NETCONF = new TopologyId("topology-netconf"); private final ListenerRegistration listenerRegistration; private final VppNodeManager nodeManager; @@ -44,7 +47,10 @@ public class VppNodeListener implements DataTreeChangeListener, AutoClosea this.eventBus = Preconditions.checkNotNull(eventBus); // Register listener final DataTreeIdentifier networkTopologyPath = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, - InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(Node.class).build()); + InstanceIdentifier.builder(NetworkTopology.class) + .child(Topology.class, new TopologyKey(TOPOLOGY_NETCONF)) + .child(Node.class) + .build()); listenerRegistration = Preconditions.checkNotNull(dataBroker.registerDataTreeChangeListener(networkTopologyPath, this)); LOG.info("Network-Topology VppNodelistener registered"); diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java index d573246a5..def9b7bb1 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/BridgeDomainManagerImpl.java @@ -130,8 +130,8 @@ public class BridgeDomainManagerImpl implements BridgeDomainManager { } @Override - public ListenableFuture createVxlanBridgeDomainOnVppNode(@Nonnull String bridgeDomainName, VxlanVni vni, - @Nonnull NodeId vppNodeId) { + public ListenableFuture createVxlanBridgeDomainOnVppNode(@Nonnull String bridgeDomainName, + @Nonnull VxlanVni vni, @Nonnull NodeId vppNodeId) { TopologyVbridgeAugment topoAug = new TopologyVbridgeAugmentBuilder().setTunnelType(TunnelTypeVxlan.class) .setArpTermination(false) .setFlood(true) diff --git a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java index ba98eae0b..fc8dd52d8 100644 --- a/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java +++ b/renderers/vpp/src/main/java/org/opendaylight/groupbasedpolicy/renderer/vpp/policy/ForwardingManager.java @@ -8,6 +8,8 @@ package org.opendaylight.groupbasedpolicy.renderer.vpp.policy; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -54,6 +56,8 @@ public final class ForwardingManager { private static final Logger LOG = LoggerFactory.getLogger(ForwardingManager.class); @VisibleForTesting static long WAIT_FOR_BD_CREATION = 10; // seconds + private long lastVxlanVni = 1L; + private final Map vxlanVniByBridgeDomain = new HashMap<>(); private final InterfaceManager ifaceManager; private final BridgeDomainManager bdManager; private final DataBroker dataBroker; @@ -80,7 +84,12 @@ public final class ForwardingManager { createVlanBridgeDomains(bd, bdConfig.get().getVlan(), vppNodes); } } else { - createVxlanBridgeDomains(bd, null, vppNodes); + VxlanVni vxlanVni = vxlanVniByBridgeDomain.get(bd); + if (vxlanVni == null) { + vxlanVni = new VxlanVni(lastVxlanVni++); + vxlanVniByBridgeDomain.put(bd, vxlanVni); + } + createVxlanBridgeDomains(bd, vxlanVni, vppNodes); } } } -- 2.36.6