Andrea Campanella
Committed by Gerrit Code Review

ONOS-3758 restructuring driver module with sub-modules for different drivers

Change-Id: I3c65d19be87066448655610abf9d8b89385a4141
Showing 97 changed files with 869 additions and 141 deletions
......@@ -13,18 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.driver;
package org.onosproject.net.driver;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.net.driver.DefaultDriverProviderService;
import org.onosproject.net.driver.DriverAdminService;
import org.onosproject.net.driver.DriverProvider;
import org.onosproject.net.driver.XmlDriverLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -33,13 +28,12 @@ import java.io.InputStream;
/**
* Bootstrap for built in drivers.
*/
@Service
@Component(immediate = false)
public class DefaultDrivers implements DefaultDriverProviderService {
@Component
public abstract class AbstractDriverLoader {
private final Logger log = LoggerFactory.getLogger(getClass());
private static final String DRIVERS_XML = "/onos-drivers.xml";
//private static final String DRIVERS_XML = "/onos-drivers.xml";
private DriverProvider provider;
......@@ -48,11 +42,9 @@ public class DefaultDrivers implements DefaultDriverProviderService {
@Activate
protected void activate() {
ClassLoader classLoader = getClass().getClassLoader();
try {
InputStream stream = classLoader.getResourceAsStream(DRIVERS_XML);
provider = new XmlDriverLoader(classLoader)
.loadDrivers(stream, driverAdminService);
provider = new XmlDriverLoader(getClassLoaderInstance())
.loadDrivers(loadXMLDriversStream(), driverAdminService);
driverAdminService.registerProvider(provider);
} catch (Exception e) {
log.error("Unable to load default drivers", e);
......@@ -66,4 +58,8 @@ public class DefaultDrivers implements DefaultDriverProviderService {
log.info("Stopped");
}
protected abstract InputStream loadXMLDriversStream();
protected abstract ClassLoader getClassLoaderInstance();
}
......
......@@ -101,7 +101,6 @@ public class DefaultDriver implements Driver {
public Driver merge(Driver other) {
checkArgument(parents == null || Objects.equals(parent(), other.parent()),
"Parent drivers are not the same");
// Merge the behaviours.
Map<Class<? extends Behaviour>, Class<? extends Behaviour>>
behaviours = Maps.newHashMap();
......@@ -261,4 +260,23 @@ public class DefaultDriver implements Driver {
.toString();
}
@Override
public boolean equals(Object driverToBeCompared) {
if (this == driverToBeCompared) {
return true;
}
if (driverToBeCompared == null || getClass() != driverToBeCompared.getClass()) {
return false;
}
DefaultDriver driver = (DefaultDriver) driverToBeCompared;
return name.equals(driver.name());
}
@Override
public int hashCode() {
return Objects.hashCode(name);
}
}
......
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
~ Copyright 2016 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" version="${project.version}"
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-restsb-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-drivers-utilities/${project.version}</bundle>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-drivers-ciena</artifactId>
<packaging>bundle</packaging>
<description>Ciena device drivers</description>
<properties>
<onos.app.name>org.onosproject.drivers.ciena</onos.app.name>
</properties>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-drivers-utilities</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-restsb-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2016 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.drivers.ciena;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.net.driver.AbstractDriverLoader;
import java.io.InputStream;
/**
* Loader for Ciena device drivers from specific xml.
*/
@Component(immediate = true)
public class CienaDriversLoader extends AbstractDriverLoader {
private static final String DRIVERS_XML = "/ciena-drivers.xml";
@Override
protected InputStream loadXMLDriversStream() {
return getClassLoaderInstance().getResourceAsStream(DRIVERS_XML);
}
@Override
protected ClassLoader getClassLoaderInstance() {
return getClass().getClassLoader();
}
}
......@@ -16,11 +16,11 @@
*
*/
package org.onosproject.driver.rest;
package org.onosproject.drivers.ciena;
import com.google.common.collect.Lists;
import org.apache.commons.configuration.HierarchicalConfiguration;
import org.onosproject.driver.XmlConfigParser;
import org.onosproject.drivers.utilities.XmlConfigParser;
import org.onosproject.net.AnnotationKeys;
import org.onosproject.net.CltSignalType;
import org.onosproject.net.DefaultAnnotations;
......
......@@ -15,6 +15,6 @@
*/
/**
* Implementations of the REST driver behaviours.
* Package for Ciena device drivers.
*/
package org.onosproject.driver.rest;
\ No newline at end of file
package org.onosproject.drivers.ciena;
\ No newline at end of file
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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.
-->
<drivers>
<driver name="restCiena" manufacturer="Ciena" hwVersion="1.0.0" swVersion="1.0.0">
<behaviour api="org.onosproject.net.behaviour.PortDiscovery"
impl="org.onosproject.drivers.ciena.PortDiscoveryCienaWaveserverImpl"/>
</driver>
</drivers>
......@@ -19,13 +19,8 @@
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-rfc/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-netconf-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-of-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-restsb-api/${project.version}</bundle>
</feature>
</features>
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>Default device drivers</description>
<!--should be onos-drivers-default for clarity but left as onos-drivers for compatibility-->
<artifactId>onos-drivers</artifactId>
<packaging>bundle</packaging>
<properties>
<onos.app.name>org.onosproject.drivers</onos.app.name>
</properties>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-api</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2016 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.driver;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;
import org.onosproject.net.driver.AbstractDriverLoader;
import org.onosproject.net.driver.DefaultDriverProviderService;
import java.io.InputStream;
/**
* Loader for default device drivers from specific xml.
*/
@Service
@Component(immediate = true)
public class DefaultDriversLoader extends AbstractDriverLoader implements DefaultDriverProviderService {
private static final String DRIVERS_XML = "/onos-drivers.xml";
@Override
protected InputStream loadXMLDriversStream() {
return getClassLoaderInstance().getResourceAsStream(DRIVERS_XML);
}
@Override
protected ClassLoader getClassLoaderInstance() {
return getClass().getClassLoader();
}
}
......@@ -15,15 +15,14 @@
*/
package org.onosproject.driver.extensions;
import java.util.Map;
import java.util.Objects;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Maps;
import org.onlab.util.KryoNamespace;
import org.onosproject.net.flow.AbstractExtension;
import org.onosproject.net.flow.instructions.ExtensionTreatmentType;
import com.google.common.base.MoreObjects;
import com.google.common.collect.Maps;
import java.util.Map;
import java.util.Objects;
/**
* Default implementation of Move treatment.
......
......@@ -34,7 +34,6 @@ import org.onlab.packet.VlanId;
import org.onlab.util.KryoNamespace;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.driver.pipeline.OFDPA2GroupHandler.OfdpaNextGroup;
import org.onosproject.net.DeviceId;
import org.onosproject.net.Port;
import org.onosproject.net.PortNumber;
......@@ -113,7 +112,7 @@ public class OFDPA2Pipeline extends AbstractHandlerBehaviour implements Pipeline
.register(KryoNamespaces.API)
.register(GroupKey.class)
.register(DefaultGroupKey.class)
.register(OfdpaNextGroup.class)
.register(OFDPA2GroupHandler.OfdpaNextGroup.class)
.register(byte[].class)
.register(ArrayDeque.class)
.build();
......
......@@ -21,17 +21,11 @@
impl="org.onosproject.driver.pipeline.DefaultSingleTablePipeline"/>
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.DefaultSwitchHandshaker"/>
<behaviour api="org.onosproject.net.behaviour.TunnelConfig"
impl="org.onosproject.driver.ovsdb.OvsdbTunnelConfig"/>
<behaviour api="org.onosproject.net.behaviour.BridgeConfig"
impl="org.onosproject.driver.ovsdb.OvsdbBridgeConfig"/>
</driver>
<driver name="ovs" extends="default"
manufacturer="Nicira, Inc\." hwVersion="Open vSwitch" swVersion="2\..*">
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.NiciraSwitchHandshaker"/>
<behaviour api="org.onosproject.net.behaviour.ControllerConfig"
impl="org.onosproject.driver.ovsdb.OvsdbControllerConfig"/>
<behaviour api="org.onosproject.openflow.controller.ExtensionTreatmentInterpreter"
impl="org.onosproject.driver.extensions.NiciraExtensionTreatmentInterpreter" />
<behaviour api="org.onosproject.net.behaviour.ExtensionTreatmentResolver"
......@@ -45,20 +39,6 @@
<behaviour api="org.onosproject.net.behaviour.MplsQuery"
impl="org.onosproject.driver.query.FullMplsAvailable" />
</driver>
<!--This driver is for simulated NETCONF devices through of-config tool on top og OVSDB-->
<driver name="ovs-netconf" extends="default,ovs"
manufacturer="" hwVersion="" swVersion="">
<behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
impl="org.onosproject.driver.handshaker.NiciraSwitchHandshaker"/>
<behaviour api="org.onosproject.net.behaviour.ControllerConfig"
impl="org.onosproject.driver.netconf.NetconfControllerConfig"/>
<behaviour api="org.onosproject.net.behaviour.ConfigGetter"
impl="org.onosproject.driver.netconf.NetconfConfigGetter"/>
</driver>
<driver name="netconf" extends="default">
<behaviour api="org.onosproject.net.behaviour.ConfigGetter"
impl="org.onosproject.driver.netconf.NetconfConfigGetter"/>
</driver>
<driver name="ovs-corsa" extends="ovs"
manufacturer="Corsa" hwVersion="emulation" swVersion="0.0.0">
<behaviour api="org.onosproject.net.behaviour.Pipeliner"
......@@ -128,10 +108,6 @@
<behaviour api="org.onosproject.net.behaviour.Pipeliner"
impl="org.onosproject.driver.pipeline.OltPipeline"/>
</driver>
<driver name="restCiena" manufacturer="Ciena" hwVersion="1.0.0" swVersion="1.0.0">
<behaviour api="org.onosproject.net.behaviour.PortDiscovery"
impl="org.onosproject.driver.rest.PortDiscoveryCienaWaveserverImpl"/>
</driver>
<!-- The SoftRouter driver is meant to be used by any software/NPU based
~ switch that wishes to implement a simple 2-table router. To use this
~ driver, configure ONOS with the dpid of the device, or extend the
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>Fujitsu device drivers</description>
<artifactId>onos-drivers-fujitsu</artifactId>
<packaging>bundle</packaging>
<properties>
<onos.app.name>org.onosproject.drivers.fujitsu</onos.app.name>
</properties>
</project>
\ No newline at end of file
/*
* Copyright 2016 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.drivers.fujitsu;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.net.driver.AbstractDriverLoader;
import java.io.InputStream;
/**
* Loader for Fujitsu device drivers from specific xml.
*/
@Component(immediate = true)
public class FujitsuDriversLoader extends AbstractDriverLoader {
private static final String DRIVERS_XML = "/fujitsu-drivers.xml";
@Override
protected InputStream loadXMLDriversStream() {
return getClassLoaderInstance().getResourceAsStream(DRIVERS_XML);
}
@Override
protected ClassLoader getClassLoaderInstance() {
return getClass().getClassLoader();
}
}
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 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.
......@@ -15,6 +15,6 @@
*/
/**
* Implementations of the Netconf driver behaviours.
* Package for Ciena device drivers.
*/
package org.onosproject.driver.netconf;
\ No newline at end of file
package org.onosproject.drivers.fujitsu;
\ No newline at end of file
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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.
-->
<drivers>
<driver>
</driver>
</drivers>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
~ Copyright 2016 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" version="${project.version}"
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-drivers-utilities/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-netconf-api/${project.version}</bundle>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-drivers-netconf</artifactId>
<packaging>bundle</packaging>
<description>Netconf device drivers</description>
<properties>
<onos.app.name>org.onosproject.drivers.netconf</onos.app.name>
</properties>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-netconf-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-drivers-utilities</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.onosproject.driver.netconf;
package org.onosproject.drivers.netconf;
import com.google.common.base.Preconditions;
import org.onosproject.net.DeviceId;
......@@ -31,7 +31,6 @@ import static org.slf4j.LoggerFactory.getLogger;
/**
* Gets the configuration of the specified type from the specified device. If a
* failure occurs it returns the error string found in UNABLE_TO_READ_CONFIG.
*
* This is a temporary development tool for use until yang integration is complete.
* This is not a properly specified behavior implementation. DO NOT USE AS AN EXAMPLE.
*/
......
......@@ -14,10 +14,10 @@
* limitations under the License.
*/
package org.onosproject.driver.netconf;
package org.onosproject.drivers.netconf;
import com.google.common.base.Preconditions;
import org.onosproject.driver.XmlConfigParser;
import org.onosproject.drivers.utilities.XmlConfigParser;
import org.onosproject.net.DeviceId;
import org.onosproject.net.behaviour.ControllerConfig;
import org.onosproject.net.behaviour.ControllerInfo;
......
/*
* Copyright 2016 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.drivers.netconf;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.net.driver.AbstractDriverLoader;
import java.io.InputStream;
/**
* Loader for NETCONF device drivers from specific xml.
*/
@Component(immediate = true)
public class NetconfDriversLoader extends AbstractDriverLoader {
private static final String DRIVERS_XML = "/netconf-drivers.xml";
@Override
protected InputStream loadXMLDriversStream() {
return getClassLoaderInstance().getResourceAsStream(DRIVERS_XML);
}
@Override
protected ClassLoader getClassLoaderInstance() {
return getClass().getClassLoader();
}
}
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 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.
......@@ -15,6 +15,6 @@
*/
/**
* Implementations of OVSDB protocol configurations.
* Package for NETCONF device drivers.
*/
package org.onosproject.driver.ovsdb;
\ No newline at end of file
package org.onosproject.drivers.netconf;
\ No newline at end of file
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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.
-->
<drivers>
<!--This driver is for simulated NETCONF devices through of-config tool on top og OVSDB-->
<driver name="ovs-netconf" extends="default,ovs"
manufacturer="" hwVersion="" swVersion="">
<behaviour api="org.onosproject.net.behaviour.ControllerConfig"
impl="org.onosproject.drivers.netconf.NetconfControllerConfig"/>
<behaviour api="org.onosproject.net.behaviour.ConfigGetter"
impl="org.onosproject.drivers.netconf.NetconfConfigGetter"/>
</driver>
<driver name="netconf" extends="default">
<behaviour api="org.onosproject.net.behaviour.ConfigGetter"
impl="org.onosproject.drivers.netconf.NetconfConfigGetter"/>
</driver>
</drivers>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
~ Copyright 2016 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" version="${project.version}"
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-rfc/${project.version}</bundle>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>onos-drivers-ovsdb</artifactId>
<packaging>bundle</packaging>
<description>ovsdb device drivers</description>
<properties>
<onos.app.name>org.onosproject.drivers.ovsdb</onos.app.name>
</properties>
<dependencies>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-api</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
</project>
\ No newline at end of file
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 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.
......@@ -13,13 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.driver.ovsdb;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
package org.onosproject.drivers.ovsdb;
import org.onlab.packet.IpAddress;
import org.onosproject.net.DefaultAnnotations;
......@@ -40,6 +35,12 @@ import org.onosproject.ovsdb.controller.OvsdbController;
import org.onosproject.ovsdb.controller.OvsdbNodeId;
import org.onosproject.ovsdb.controller.OvsdbPort;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* The implementation of BridageConfig.
*/
......
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 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.
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.onosproject.driver.ovsdb;
package org.onosproject.drivers.ovsdb;
import com.google.common.collect.ImmutableSet;
import org.onlab.packet.IpAddress;
......
/*
* Copyright 2016 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.drivers.ovsdb;
import org.apache.felix.scr.annotations.Component;
import org.onosproject.net.driver.AbstractDriverLoader;
import java.io.InputStream;
/**
* Loader for OVSDB device drivers from specific xml.
*/
@Component(immediate = true)
public class OvsdbDriversLoader extends AbstractDriverLoader {
private static final String DRIVERS_XML = "/ovsdb-drivers.xml";
@Override
protected InputStream loadXMLDriversStream() {
return getClassLoaderInstance().getResourceAsStream(DRIVERS_XML);
}
@Override
protected ClassLoader getClassLoaderInstance() {
return getClass().getClassLoader();
}
}
/*
* Copyright 2015 Open Networking Laboratory
* Copyright 2016 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.
......@@ -13,12 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.driver.ovsdb;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
package org.onosproject.drivers.ovsdb;
import org.onlab.packet.IpAddress;
import org.onosproject.net.DefaultAnnotations;
......@@ -36,6 +32,11 @@ import org.onosproject.ovsdb.controller.OvsdbController;
import org.onosproject.ovsdb.controller.OvsdbNodeId;
import org.onosproject.ovsdb.controller.OvsdbTunnel;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* OVSDB-based implementation of tunnel config behaviour.
*/
......
/*
* Copyright 2016 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 for OVSDB device drivers.
*/
package org.onosproject.drivers.ovsdb;
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ 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.
-->
<drivers>
<driver name="default"
manufacturer="ON.Lab" hwVersion="0.0.1" swVersion="0.0.1">
<behaviour api="org.onosproject.net.behaviour.TunnelConfig"
impl="org.onosproject.drivers.ovsdb.OvsdbTunnelConfig"/>
<behaviour api="org.onosproject.net.behaviour.BridgeConfig"
impl="org.onosproject.drivers.ovsdb.OvsdbBridgeConfig"/>
</driver>
<driver name="ovs" extends="default"
manufacturer="Nicira, Inc\." hwVersion="Open vSwitch" swVersion="2\..*">
<behaviour api="org.onosproject.net.behaviour.ControllerConfig"
impl="org.onosproject.drivers.ovsdb.OvsdbControllerConfig"/>
</driver>
</drivers>
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.onosproject.driver.ovsdb;
package org.onosproject.drivers.ovsdb;
import com.google.common.collect.ImmutableMap;
import org.junit.Before;
......
......@@ -19,7 +19,6 @@
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</artifactId>
......@@ -27,14 +26,23 @@
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>onos-drivers</artifactId>
<packaging>bundle</packaging>
<artifactId>onos-drivers-general</artifactId>
<packaging>pom</packaging>
<description>Builtin device drivers general module</description>
<description>Builtin device drivers</description>
<modules>
<module>default</module>
<module>ciena</module>
<module>fujitsu</module>
<module>netconf</module>
<module>ovsdb</module>
<module>utilities</module>
</modules>
<properties>
<!--<properties>
<onos.app.name>org.onosproject.drivers</onos.app.name>
</properties>
</properties>-->
<dependencies>
<dependency>
......@@ -49,36 +57,15 @@
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-of-api</artifactId>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-core-serializers</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-restsb-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-netconf-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
</dependency>
......@@ -94,13 +81,6 @@
<artifactId>onlab-junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-ovsdb-api</artifactId>
<version>${project.version}</version>
<classifier>tests</classifier>
<scope>test</scope>
</dependency>
</dependencies>
<build>
......
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
~ Copyright 2016 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.
-->
<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0" name="${project.artifactId}-${project.version}">
<feature name="${project.artifactId}" version="${project.version}"
description="${project.description}">
<feature>onos-api</feature>
<bundle>mvn:${project.groupId}/${project.artifactId}/${project.version}</bundle>
</feature>
</features>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright 2016 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/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>onos-drivers-general</artifactId>
<groupId>org.onosproject</groupId>
<version>1.5.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<description>Device drivers utilities</description>
<artifactId>onos-drivers-utilities</artifactId>
<packaging>bundle</packaging>
</project>
\ No newline at end of file
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.onosproject.driver;
package org.onosproject.drivers.utilities;
import com.google.common.collect.Lists;
import org.apache.commons.configuration.ConfigurationException;
......
/*
* Copyright 2016 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 for device drivers utilities.
*/
package org.onosproject.drivers.utilities;
\ No newline at end of file
<!--
~ 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.
-->
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<edit-config>
<target>
</target>
<default-operation>
</default-operation>
<config>
<capable-switch xmlns="urn:onf:config:yang">
<id></id>
<logical-switches>
<switch>
<id></id>
<controllers>
</controllers>
</switch>
</logical-switches>
</capable-switch>
</config>
</edit-config>
</rpc>
\ No newline at end of file
......@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.onosproject.driver;
package org.onosproject.drivers.utilities;
import org.junit.Test;
import org.onlab.packet.IpAddress;
......@@ -27,7 +27,6 @@ import java.util.Arrays;
import java.util.List;
import static org.junit.Assert.assertTrue;
import static org.onosproject.driver.XmlConfigParser.*;
/**
* Test the XML document Parsing for netconf configuration.
......@@ -37,8 +36,9 @@ public class XmlConfigParserTest {
@Test
public void basics() throws IOException {
InputStream stream = getClass().getResourceAsStream("testConfig.xml");
List<ControllerInfo> controllers = parseStreamControllers(loadXml(stream));
InputStream stream = getClass().getResourceAsStream("/testConfig.xml");
List<ControllerInfo> controllers = XmlConfigParser
.parseStreamControllers(XmlConfigParser.loadXml(stream));
assertTrue(controllers.get(0).equals(new ControllerInfo(
IpAddress.valueOf("10.128.12.1"), 6653, "tcp")));
assertTrue(controllers.get(1).equals(new ControllerInfo(
......@@ -48,27 +48,33 @@ public class XmlConfigParserTest {
@Test
public void switchId() {
InputStream stream = getClass().getResourceAsStream("testConfig.xml");
String switchId = parseSwitchId(loadXml(stream));
InputStream stream = getClass().getResourceAsStream("/testConfig.xml");
String switchId = XmlConfigParser.parseSwitchId(XmlConfigParser
.loadXml(stream));
assertTrue(switchId.equals("ofc-bridge"));
}
@Test
public void capableSwitchId() {
InputStream stream = getClass().getResourceAsStream("testConfig.xml");
String capableSwitchId = parseCapableSwitchId(loadXml(stream));
InputStream stream = getClass().getResourceAsStream("/testConfig.xml");
String capableSwitchId = XmlConfigParser
.parseCapableSwitchId(XmlConfigParser.loadXml(stream));
assertTrue(capableSwitchId.equals("openvswitch"));
}
@Test
public void controllersConfig() {
InputStream streamOrig = getClass().getResourceAsStream("testConfig.xml");
InputStream streamCFG = XmlConfigParser.class
.getResourceAsStream("controllers.xml");
String config = createControllersConfig(loadXml(streamCFG),
loadXml(streamOrig), "running", "merge",
"create", new ArrayList<>(Arrays.asList(
new ControllerInfo(IpAddress.valueOf("192.168.1.1"),
InputStream streamOrig = getClass().getResourceAsStream("/testConfig.xml");
InputStream streamCFG = XmlConfigParser.class.getResourceAsStream("/controllers.xml");
String config = XmlConfigParser
.createControllersConfig(XmlConfigParser.loadXml(streamCFG),
XmlConfigParser.loadXml(streamOrig),
"running", "merge", "create",
new ArrayList<>(
Arrays.asList(
new ControllerInfo(
IpAddress.valueOf(
"192.168.1.1"),
5000, "tcp"))));
assertTrue(config.contains("192.168.1.1"));
assertTrue(config.contains("tcp"));
......
......@@ -15,16 +15,13 @@
~ limitations under the License.
-->
<app name="org.onosproject.netconf" origin="ON.Lab" version="${project.version}"
category="default" url="http://onosproject.org"
category="default" url="http://onosproject.org" apps="org.onosproject.drivers.netconf"
featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
features="${project.artifactId}">
<description>${project.description}</description>
<artifact>mvn:${project.groupId}/onos-netconf-api/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-netconf-ctl/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-netconf-provider-device/${project.version}</artifact>
<!--<artifact>mvn:${project.groupId}/onos-netconf-provider-device/${project.version}</artifact>-->
<!-- Question: should there be the jnc stuff here? Or is it just for testing -->
</app>
......
......@@ -23,7 +23,6 @@
<bundle>mvn:${project.groupId}/onos-netconf-ctl/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-netconf-provider-device/${project.version}</bundle>
<!-- Question: should there be the jnc stuff here? Or is it just for testing -->
</feature>
</features>
......
......@@ -22,7 +22,7 @@
<artifact>mvn:${project.groupId}/onos-ovsdb-rfc/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-ovsdb-api/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-ovsdb-ctl/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-drivers-ovsdb/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-ovsdb-provider-device/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-ovsdb-provider-tunnel/${project.version}</artifact>
......
......@@ -27,6 +27,8 @@
<bundle>mvn:${project.groupId}/onos-ovsdb-api/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-ctl/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-drivers-ovsdb/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-provider-device/${project.version}</bundle>
<bundle>mvn:${project.groupId}/onos-ovsdb-provider-tunnel/${project.version}</bundle>
</feature>
......
......@@ -49,7 +49,7 @@
</dependency>
<dependency>
<groupId>org.onosproject</groupId>
<artifactId>onos-drivers</artifactId>
<artifactId>onos-drivers-ovsdb</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
......
......@@ -15,13 +15,12 @@
~ limitations under the License.
-->
<app name="org.onosproject.restsb" origin="ON.Lab" version="${project.version}"
category="default" url="http://onosproject.org"
category="default" url="http://onosproject.org" apps="org.onosproject.drivers.ciena"
featuresRepo="mvn:${project.groupId}/${project.artifactId}/${project.version}/xml/features"
features="${project.artifactId}">
<description>${project.description}</description>
<artifact>mvn:${project.groupId}/onos-restsb-api/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-restsb-ctl/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-drivers/${project.version}</artifact>
<artifact>mvn:${project.groupId}/onos-restsb-provider-device/${project.version}</artifact>
......