Skeleton code for the NetworkManagers : Provider, Internal and Tenant.
[netvirt.git] / neutron / src / main / java / org / opendaylight / ovsdb / neutron / TenantNetworkManager.java
1 package org.opendaylight.ovsdb.neutron;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.LinkedList;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Queue;
9
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;
17
18 public class TenantNetworkManager {
19     static final Logger logger = LoggerFactory.getLogger(TenantNetworkManager.class);
20
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++) {
27             internalVlans.add(i);
28         }
29     }
30
31     public static TenantNetworkManager getManager() {
32         return tenantHelper;
33     }
34
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);
40         return mappedVlan;
41     }
42
43     public void internalVlanInUse (int vlan) {
44         internalVlans.remove(vlan);
45     }
46
47     public int getInternalVlan (String networkId) {
48         return tenantVlanMap.get(networkId);
49     }
50
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());
65             } else {
66                 logger.error("ContainerManager is null. Failed to create Container for {}", networkId);
67             }
68         }
69         return internalVlan;
70     }
71 }