From 5aa62ee7d2be070b2ffef0443b59c8891ed06845 Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Tue, 9 Feb 2016 15:03:53 +0100 Subject: Adding vxlan tunnel id allocator. Change-Id: Id638bc0262481921cd42d830e9fc788e76bc3907 Signed-off-by: Jozef Gloncak --- .../io/fd/honeycomb/vbd/impl/TopologyMonitor.java | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java') diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java index 213ff6685..dfab2e877 100644 --- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java +++ b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java @@ -9,6 +9,7 @@ package io.fd.honeycomb.vbd.impl; import com.google.common.base.Preconditions; +import io.fd.honeycomb.vbd.api.VxlanTunnelIdAllocator; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -26,6 +27,8 @@ import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListen import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.topology.types.VbridgeTopology; 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.NodeKey; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,10 +44,12 @@ final class TopologyMonitor implements DataTreeChangeListener, private final Map domains = new HashMap<>(); private final DataBroker dataBroker; private final MountPointService mountService; + private static final VxlanTunnelIdAllocator tunnelIdAllocator = new VxlanTunnelIdAllocatorImpl(); public TopologyMonitor(DataBroker dataBroker, MountPointService mountService) { this.dataBroker = Preconditions.checkNotNull(dataBroker); this.mountService = Preconditions.checkNotNull(mountService); + } @Override @@ -118,7 +123,7 @@ final class TopologyMonitor implements DataTreeChangeListener, } }); - final BridgeDomain domain = BridgeDomain.create(dataBroker, mountService, topology, chain); + final BridgeDomain domain = BridgeDomain.create(dataBroker, mountService, topology, chain, tunnelIdAllocator); domains.put(topology.getKey(), domain); LOG.debug("Bridge domain {} for {} started", domain, topology); @@ -159,4 +164,26 @@ final class TopologyMonitor implements DataTreeChangeListener, LOG.debug("Topology monitor {} shut down completed", this); } + + public static class VxlanTunnelIdAllocatorImpl implements VxlanTunnelIdAllocator { + + private final Map, Integer> vppIIToNextTunnelId; + + VxlanTunnelIdAllocatorImpl() { + vppIIToNextTunnelId = new HashMap<>(); + } + + @Override + public synchronized Integer nextIdFor(final KeyedInstanceIdentifier iiToVPP) { + if(vppIIToNextTunnelId.containsKey(iiToVPP)) { + final int value = vppIIToNextTunnelId.get(iiToVPP); + vppIIToNextTunnelId.put(iiToVPP, value + 1); + return value + 1; + } else { + vppIIToNextTunnelId.put(iiToVPP, 0); + return 0; + } + } + + } } -- cgit 1.2.3-korg