aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java')
-rw-r--r--framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java206
1 files changed, 206 insertions, 0 deletions
diff --git a/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
new file mode 100644
index 00000000..b7aa3bda
--- /dev/null
+++ b/framework/src/onos/providers/pcep/tunnel/src/main/java/org/onosproject/provider/pcep/tunnel/impl/PcepTunnelApiMapper.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.provider.pcep.tunnel.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.collections.map.MultiKeyMap;
+import org.onosproject.incubator.net.tunnel.TunnelId;
+import org.onosproject.incubator.net.tunnel.TunnelProviderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Entity to provide tunnel DB and mapping for request/response between CORE to PCEP
+ * and PCEP to PCC.
+ */
+public class PcepTunnelApiMapper {
+ protected static final Logger log = LoggerFactory.getLogger(PcepTunnelApiMapper.class);
+
+ static final String PROVIDER_ID = "org.onosproject.provider.tunnel.pcep";
+ // Map to store all the tunnel requests.
+ private Map<Integer, PcepTunnelData> tunnelRequestQueue;
+ //Map to store all core related tunnel requests.
+ private Map<TunnelId, PcepTunnelData> coreTunnelRequestQueue;
+ //Map to store all the created tunnels.
+ private Map<Integer, PcepTunnelData> tunnelDB;
+ // Map to store the tunnel ids, given by core and given by pcc.
+ private Map<TunnelId, Integer> tunnelIdMap;
+ //Map to store all the learnt tunnels.
+ private MultiKeyMap pccTunnelDB = new MultiKeyMap();
+
+ TunnelProviderService tunnelApiMapperservice;
+
+ /**
+ * Default constructor.
+ */
+ public PcepTunnelApiMapper() {
+ //TODO check if the map need to initialize
+ tunnelRequestQueue = new HashMap<Integer, PcepTunnelData>();
+ coreTunnelRequestQueue = new HashMap<TunnelId, PcepTunnelData>();
+ tunnelDB = new HashMap<Integer, PcepTunnelData>();
+ tunnelIdMap = new HashMap<TunnelId, Integer>();
+ }
+
+ /**
+ * Add tunnels to tunnel Request queues.
+ *
+ * @param srpId srp id
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void addToTunnelRequestQueue(int srpId, PcepTunnelData pcepTunnelData) {
+ tunnelRequestQueue.put(new Integer(srpId), pcepTunnelData);
+ log.debug("Tunnel Added to TunnelRequestQueue");
+ }
+
+ /**
+ * Map between Tunnel ID and pcc provided Tunnel ID.
+ *
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void addToTunnelIdMap(PcepTunnelData pcepTunnelData) {
+ int value = pcepTunnelData.statefulIpv4IndentifierTlv().getTunnelId() & 0xFFFF;
+ tunnelIdMap.put(pcepTunnelData.tunnel().tunnelId(), (new Integer(value)));
+ log.debug("Tunnel ID Added to tunnelIdMap");
+ }
+
+ /**
+ * Add tunnels to core tunnel request queue.
+ *
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void addToCoreTunnelRequestQueue(PcepTunnelData pcepTunnelData) {
+ coreTunnelRequestQueue.put(pcepTunnelData.tunnel().tunnelId(), pcepTunnelData);
+ log.debug("Tunnel Added to CoreTunnelRequestQueue");
+ }
+
+ /**
+ * Removes tunnels from the core tunnel request queue.
+ *
+ * @param tunnelId tunnel id
+ */
+ public void removeFromCoreTunnelRequestQueue(TunnelId tunnelId) {
+ coreTunnelRequestQueue.remove(tunnelId);
+ log.debug("Tunnnel create response sent to core and removed from CoreTunnelRequestQueue");
+ }
+
+ /**
+ * Handle the report which comes after initiate message.
+ *
+ * @param srpId srp id
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void handleCreateTunnelRequestQueue(int srpId, PcepTunnelData pcepTunnelData) {
+
+ int value = tunnelIdMap.get(pcepTunnelData.tunnel().tunnelId());
+ tunnelDB.put(new Integer(value), pcepTunnelData);
+ tunnelRequestQueue.remove(new Integer(srpId), pcepTunnelData);
+ log.debug("Tunnel Added to TunnelDBQueue and removed from TunnelRequestQueue. tunnel id {}"
+ + (new Integer(value)).toString());
+ }
+
+ /**
+ * Handle report which comes for update message.
+ *
+ * @param srpId srp id
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void handleUpdateTunnelRequestQueue(int srpId, PcepTunnelData pcepTunnelData) {
+ if (pcepTunnelData.rptFlag()) {
+ pcepTunnelData.setRptFlag(false);
+ int value = tunnelIdMap.get(pcepTunnelData.tunnel().tunnelId());
+ tunnelDB.put(new Integer(value), pcepTunnelData);
+ tunnelRequestQueue.remove(new Integer(srpId), pcepTunnelData);
+ log.debug("Tunnel Added to TunnelDBQueue and removed from TunnelRequestQueue. tunnel id {}" ,
+ (new Integer(value)).toString());
+ } else {
+ pcepTunnelData.setRptFlag(true);
+ tunnelRequestQueue.put(new Integer(srpId), pcepTunnelData);
+ log.debug("Tunnel updated in TunnelRequestQueue");
+ }
+ }
+
+ /**
+ * Handle report for tunnel Release request.
+ *
+ * @param srpId srp id
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void handleRemoveFromTunnelRequestQueue(int srpId, PcepTunnelData pcepTunnelData) {
+
+ int value = tunnelIdMap.get(pcepTunnelData.tunnel().tunnelId());
+ tunnelIdMap.remove(pcepTunnelData.tunnel().tunnelId());
+ tunnelDB.remove(new Integer(value));
+ tunnelRequestQueue.remove(srpId);
+ log.debug("Tunnel removed from TunnelDBQueue and TunnelRequestQueue");
+ }
+
+ /**
+ * Returns PcepTunnelData from the tunnel request queue.
+ *
+ * @param srpId srp id
+ * @return PcepTunnelData pcep tunnel data
+ */
+ public PcepTunnelData getDataFromTunnelRequestQueue(int srpId) {
+ return tunnelRequestQueue.get(new Integer(srpId));
+
+ }
+
+ /**
+ * Returns PcepTunnelData from the tunnel DB.
+ *
+ * @param tunnelId tunnel id
+ * @return PcepTunnelData pcep tunnel data
+ */
+ public PcepTunnelData getDataFromTunnelDBQueue(TunnelId tunnelId) {
+ int value = tunnelIdMap.get(tunnelId);
+ return tunnelDB.get((new Integer(value)));
+ }
+
+ /**
+ * Checks whether the tunnel exist in tunnel request queue.
+ *
+ * @param srpId srp id
+ * @return true if tunnel exist in reuest queue, false otherwise
+ */
+ public boolean checkFromTunnelRequestQueue(int srpId) {
+ boolean retValue = tunnelRequestQueue.containsKey(srpId);
+ return retValue;
+ }
+
+ /**
+ * Returns whether tunnel exist in tunnel db.
+ *
+ * @param tunnelId tunnel id
+ * @return true/false if the tunnel exists in the tunnel db
+ */
+ public boolean checkFromTunnelDBQueue(TunnelId tunnelId) {
+ int value = tunnelIdMap.get(tunnelId);
+ boolean retValue = tunnelDB.containsKey((new Integer(value)));
+ return retValue;
+ }
+
+ /**
+ * Add Learnt tunnels to pcc tunnel DB.
+ *
+ * @param pcepTunnelData pcep tunnel data
+ */
+ public void addPccTunnelDB(PcepTunnelData pcepTunnelData) {
+ pccTunnelDB.put(pcepTunnelData.statefulIpv4IndentifierTlv().getTunnelId() & 0xFFFFL,
+ pcepTunnelData.statefulIpv4IndentifierTlv().getIpv4IngressAddress(), pcepTunnelData);
+ }
+}