OECFG (onos-oecfg) completely removed
Change-Id: Id44f58c0402cfdb0fedd91d8a3479cc817f2b4a4
diff --git a/apps/oecfg/pom.xml b/apps/oecfg/pom.xml
deleted file mode 100644
index 8f595db..0000000
--- a/apps/oecfg/pom.xml
+++ /dev/null
@@ -1,73 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ Copyright 2014 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.onosproject</groupId>
- <artifactId>onos-apps</artifactId>
- <version>1.3.0-SNAPSHOT</version>
- <relativePath>../pom.xml</relativePath>
- </parent>
-
- <artifactId>onos-app-oecfg</artifactId>
- <packaging>jar</packaging>
-
- <description>Standalone utility for converting ONOS JSON config to OE-Linc JSON config</description>
-
- <dependencies>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-databind</artifactId>
- <scope>compile</scope>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- <scope>compile</scope>
- </dependency>
- </dependencies>
-
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-shade-plugin</artifactId>
- <executions>
- <execution>
- <phase>package</phase>
- <goals>
- <goal>shade</goal>
- </goals>
- <configuration>
- <transformers>
- <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
- <manifestEntries>
- <Main-Class>org.onosproject.oecfg.OELinkConfig</Main-Class>
- </manifestEntries>
- </transformer>
- </transformers>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java b/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java
deleted file mode 100644
index 480640c..0000000
--- a/apps/oecfg/src/main/java/org/onosproject/oecfg/OELinkConfig.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2014 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.oecfg;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Utility program to convert standard ONOS config JSON to format expected
- * by the OE Link switch.
- */
-public final class OELinkConfig {
-
- private ObjectMapper mapper = new ObjectMapper();
- private Map<String, String> dpidToName = new HashMap<>();
-
- public static void main(String[] args) {
- try {
- OELinkConfig config = new OELinkConfig();
- JsonNode json = config.convert(System.in);
- System.out.println(json.toString());
- } catch (IOException e) {
- System.err.println("Unable to convert JSON due to: " + e.getMessage());
- e.printStackTrace();
- }
- }
-
- private OELinkConfig() {
- }
-
- private JsonNode convert(InputStream input) throws IOException {
- JsonNode json = mapper.readTree(input);
- ObjectNode result = mapper.createObjectNode();
- result.set("switchConfig", opticalSwitches(json));
- result.set("linkConfig", opticalLinks(json));
- return result;
- }
-
- private JsonNode opticalSwitches(JsonNode json) {
- ArrayNode result = mapper.createArrayNode();
- for (JsonNode node : json.get("devices")) {
- String dpid = dpid(node.path("uri"));
- String name = node.path("name").asText("none");
- dpidToName.put(dpid, name);
- if (node.path("type").asText("none").equals("ROADM")) {
- result.add(opticalSwitch(dpid, name, (ObjectNode) node));
- }
- }
- return result;
- }
-
- private ObjectNode opticalSwitch(String dpid, String name, ObjectNode node) {
- ObjectNode result = mapper.createObjectNode();
- ObjectNode annot = (ObjectNode) node.path("annotations");
- result.put("allowed", true).put("type", "Roadm")
- .put("name", name).put("nodeDpid", dpid)
- .put("latitude", annot.path("latitude").asDouble(0.0))
- .put("longitude", annot.path("longitude").asDouble(0.0))
- .set("params", switchParams(annot));
- return result;
- }
-
- private ObjectNode switchParams(ObjectNode annot) {
- return mapper.createObjectNode()
- .put("numRegen", annot.path("optical.regens").asInt(0));
- }
-
- private JsonNode opticalLinks(JsonNode json) {
- ArrayNode result = mapper.createArrayNode();
- for (JsonNode node : json.get("links")) {
- if (node.path("type").asText("none").equals("OPTICAL")) {
- result.add(opticalLink((ObjectNode) node));
- }
- }
- return result;
- }
-
- private ObjectNode opticalLink(ObjectNode node) {
- ObjectNode result = mapper.createObjectNode();
- ObjectNode annot = (ObjectNode) node.path("annotations");
- String src = dpid(node.path("src"));
- String dst = dpid(node.path("dst"));
- result.put("allowed", true).put("type", linkType(annot))
- .put("nodeDpid1", src).put("nodeDpid2", dst)
- .set("params", linkParams(src, dst, node, annot));
- return result;
- }
-
- private String linkType(ObjectNode annot) {
- return annot.path("optical.type").asText("cross-connect").equals("WDM") ?
- "wdmLink" : "pktOptLink";
- }
-
- private ObjectNode linkParams(String src, String dst,
- ObjectNode node, ObjectNode annot) {
- ObjectNode result = mapper.createObjectNode()
- .put("nodeName1", dpidToName.get(src))
- .put("nodeName2", dpidToName.get(dst))
- .put("port1", port(node.path("src")))
- .put("port2", port(node.path("dst")));
- if (annot.has("bandwidth")) {
- result.put("bandwidth", annot.path("bandwidth").asInt());
- }
- if (annot.has("optical.waves")) {
- result.put("numWaves", annot.path("optical.waves").asInt());
- }
- return result;
- }
-
- private String dpid(JsonNode node) {
- String s = node.asText("of:0000000000000000").substring(3);
- return s.substring(0, 2) + ":" + s.substring(2, 4) + ":" +
- s.substring(4, 6) + ":" + s.substring(6, 8) + ":" +
- s.substring(8, 10) + ":" + s.substring(10, 12) + ":" +
- s.substring(12, 14) + ":" + s.substring(14, 16);
- }
-
- private int port(JsonNode node) {
- return Integer.parseInt(node.asText("of:0000000000000000/0").substring(20));
- }
-
-}
diff --git a/apps/pom.xml b/apps/pom.xml
index e30973e..e08f306 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -41,7 +41,6 @@
<module>sdnip</module>
<module>optical</module>
<module>metrics</module>
- <module>oecfg</module>
<module>routing</module>
<module>routing-api</module>
<module>reactive-routing</module>
diff --git a/tools/test/topos/opticalUtils.py b/tools/test/topos/opticalUtils.py
index 5b47d53..ddbe19a 100644
--- a/tools/test/topos/opticalUtils.py
+++ b/tools/test/topos/opticalUtils.py
@@ -366,11 +366,17 @@
with open('Topology.json', 'w') as outfile:
json.dump(opticalJSON, outfile, indent=4, separators=(',', ': '))
- info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file\n')
- output = quietRun('%s/tools/test/bin/onos-oecfg ./Topology.json > TopoConfig.json' % LINCSwitch.onosDir, shell=True)
- if output:
- error('***ERROR: Error creating topology file: %s ' % output + '\n')
- return False
+ info('*** Converting Topology.json to linc-oe format (TopoConfig.json) file (no oecfg) \n')
+
+ topoConfigJson = {};
+ dpIdToName = {};
+
+ topoConfigJson["switchConfig"] = getSwitchConfig(dpIdToName);
+ topoConfigJson["linkConfig"] = getLinkConfig(dpIdToName);
+
+ #Writing to TopoConfig.json
+ with open( 'TopoConfig.json', 'w' ) as outfile:
+ json.dump( topoConfigJson, outfile, indent=4, separators=(',', ': ') )
info('*** Creating sys.config...\n')
output = quietRun('%s/config_generator TopoConfig.json %s/sys.config.template %s %s'
@@ -452,6 +458,87 @@
if output.strip('{}'):
warn('***WARNING: Could not push topology file to ONOS: %s\n' % output)
+ #converts node ids to linc-oe format, with colons every two chars
+ def dpId(id):
+ nodeDpid = ""
+ id = id.split("/", 1)[0]
+ for i in range(3, len(id) - 1, 2):
+ nodeDpid += (id[i:(i + 2):]) + ":"
+ return nodeDpid[0:(len(nodeDpid) - 1)];
+
+ def getSwitchConfig (dpIdToName):
+ switchConfig = [];
+ #Iterate through all switches and convert the ROADM switches to linc-oe format
+ for switch in opticalJSON["devices"]:
+ if switch.get("type", "none") == "ROADM":
+ builtSwitch = {}
+
+ #set basic switch params based on annotations
+ builtSwitch["allowed"] = True;
+ builtSwitch["latitude"] = switch["annotations"].get("latitude", 0.0);
+ builtSwitch["longitude"] = switch["annotations"].get("longitude", 0.0);
+
+ #assumed that all switches have this entry
+ nodeId = switch["uri"]
+
+ #convert the nodeId to linc-oe format
+ nodeDpid = dpId(nodeId);
+
+ builtSwitch["name"] = switch.get("name", "none");
+
+ #keep track of the name corresponding to each switch dpid
+ dpIdToName[nodeDpid] = builtSwitch["name"];
+
+ builtSwitch["nodeDpid"] = nodeDpid
+
+ #set switch params and type
+ builtSwitch["params"] = {};
+ builtSwitch["params"]["numregens"] = switch["annotations"].get("optical.regens", 0);
+ builtSwitch["type"] = "Roadm"
+
+ #append to list of switches
+ switchConfig.append(builtSwitch);
+ return switchConfig
+
+
+ def getLinkConfig (dpIdToName):
+ newLinkConfig = [];
+ #Iterate through all optical links and convert them to linc-oe format
+ for link in opticalJSON["links"]:
+ if link.get("type", "none") == "OPTICAL":
+ builtLink = {}
+
+ #set basic link params for src and dst
+ builtLink["allowed"] = True;
+ builtLink["nodeDpid1"] = dpId(link["src"])
+ builtLink["nodeDpid2"] = dpId(link["dst"])
+
+ #set more params such as name/bandwidth/port/waves if they exist
+ params = {}
+ params["nodeName1"] = dpIdToName.get(builtLink["nodeDpid1"], "none")
+ params["nodeName2"] = dpIdToName.get(builtLink["nodeDpid2"], "none")
+
+ params["port1"] = int(link["src"].split("/")[1])
+ params["port2"] = int(link["dst"].split("/")[1])
+
+ if "bandwidth" in link["annotations"]:
+ params["bandwidth"] = link["annotations"]["bandwidth"]
+
+ if "optical.waves" in link["annotations"]:
+ params["numWaves"] = link["annotations"]["optical.waves"]
+
+ builtLink["params"] = params
+
+ #set type of link (WDM or pktOpt)
+ if link["annotations"].get("optical.type", "cross-connect") == "WDM":
+ builtLink["type"] = "wdmLink"
+ else:
+ builtLink["type"] = "pktOptLink"
+
+ newLinkConfig.append(builtLink);
+ return newLinkConfig
+
+
@staticmethod
def waitStarted(net, timeout=TIMEOUT):
"wait until all tap interfaces are available"
@@ -559,6 +646,8 @@
def terminate(self):
pass
+
+
class LINCLink(Link):
"""
LINC link class