1 package org.opendaylight.ovsdb.neutron;
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.LinkedList;
8 import java.util.Queue;
10 import org.opendaylight.controller.containermanager.ContainerConfig;
11 import org.opendaylight.controller.containermanager.ContainerFlowConfig;
12 import org.opendaylight.controller.containermanager.IContainerManager;
13 import org.opendaylight.controller.sal.utils.ServiceHelper;
14 import org.opendaylight.controller.sal.utils.Status;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
18 public class TenantNetworkManager {
19 static final Logger logger = LoggerFactory.getLogger(TenantNetworkManager.class);
21 private static final int MAX_VLAN = 4096;
22 private static TenantNetworkManager tenantHelper = new TenantNetworkManager();
23 private Queue<Integer> internalVlans = new LinkedList<Integer>();
24 private Map<String, Integer> tenantVlanMap = new HashMap<String, Integer>();
25 private TenantNetworkManager() {
26 for (int i = 1; i < MAX_VLAN ; i++) {
31 public static TenantNetworkManager getManager() {
35 private int assignInternalVlan (String networkId) {
36 Integer mappedVlan = tenantVlanMap.get(networkId);
37 if (mappedVlan != null) return mappedVlan;
38 mappedVlan = internalVlans.poll();
39 if (mappedVlan != null) tenantVlanMap.put(networkId, mappedVlan);
43 public void internalVlanInUse (int vlan) {
44 internalVlans.remove(vlan);
47 public int getInternalVlan (String networkId) {
48 return tenantVlanMap.get(networkId);
51 public int networkCreated (String networkId) {
52 int internalVlan = this.assignInternalVlan(networkId);
53 if (internalVlan != 0) {
54 ContainerConfig config = new ContainerConfig();
55 config.setContainer(networkId);
56 ContainerFlowConfig flowConfig = new ContainerFlowConfig("InternalVlan", internalVlan+"",
57 null, null, null, null, null);
58 List<ContainerFlowConfig> containerFlowConfigs = new ArrayList<ContainerFlowConfig>();
59 containerFlowConfigs.add(flowConfig);
60 config.addContainerFlows(containerFlowConfigs);
61 IContainerManager containerManager = (IContainerManager)ServiceHelper.getGlobalInstance(IContainerManager.class, this);
62 if (containerManager != null) {
63 Status status = containerManager.addContainer(config);
64 logger.debug("Network Creation Status : {}", status.toString());
66 logger.error("ContainerManager is null. Failed to create Container for {}", networkId);