ONOS-2708
Add implementation of getting ovsdb ports or bridges in the ovsdb node.
Change-Id: If31af08ccb90a29bc800a79f332dae2bc497b105
diff --git a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
index 54f95a6..30c7526 100644
--- a/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
+++ b/drivers/src/main/java/org/onosproject/driver/ovsdb/OvsdbBridgeConfig.java
@@ -1,136 +1,152 @@
-/*
- * 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.driver.ovsdb;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.onlab.packet.IpAddress;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.behaviour.BridgeConfig;
-import org.onosproject.net.behaviour.BridgeDescription;
-import org.onosproject.net.behaviour.BridgeName;
-import org.onosproject.net.behaviour.DefaultBridgeDescription;
-import org.onosproject.net.device.DefaultPortDescription;
-import org.onosproject.net.device.PortDescription;
-import org.onosproject.net.driver.AbstractHandlerBehaviour;
-import org.onosproject.net.driver.DriverHandler;
-import org.onosproject.ovsdb.controller.OvsdbBridge;
-import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbController;
-import org.onosproject.ovsdb.controller.OvsdbNodeId;
-import org.onosproject.ovsdb.controller.OvsdbPort;
-
-import com.google.common.collect.Sets;
-
-/**
- * The implementation of BridageConfig.
- */
-public class OvsdbBridgeConfig extends AbstractHandlerBehaviour
- implements BridgeConfig {
-
- @Override
- public void addBridge(BridgeName bridgeName) {
- DriverHandler handler = handler();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- ovsdbNode.createBridge(bridgeName.name());
- }
-
- @Override
- public void deleteBridge(BridgeName bridgeName) {
- DriverHandler handler = handler();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- ovsdbNode.dropBridge(bridgeName.name());
- }
-
- @Override
- public Collection<BridgeDescription> getBridges() {
- DriverHandler handler = handler();
- DeviceId deviceId = handler.data().deviceId();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- Set<OvsdbBridge> ovsdbSet = ovsdbNode.getBridges();
- Collection<BridgeDescription> bridges = Sets.newHashSet();
- ovsdbSet.forEach(o -> {
- BridgeName bridgeName = BridgeName.bridgeName(o.bridgeName()
- .toString());
- DeviceId ownDeviceId = DeviceId.deviceId(o.datapathId().toString());
- BridgeDescription description = new DefaultBridgeDescription(
- bridgeName,
- deviceId,
- ownDeviceId);
- bridges.add(description);
- });
- return bridges;
- }
-
- @Override
- public void addPort(PortDescription port) {
- DriverHandler handler = handler();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- Set<OvsdbBridge> ovsdbSet = ovsdbNode.getBridges();
- if (ovsdbSet != null && ovsdbSet.size() > 0) {
- OvsdbBridge bridge = ovsdbSet.iterator().next();
- ovsdbNode.createPort(bridge.bridgeName().toString(), port
- .portNumber().toString());
- }
- }
-
- @Override
- public void deletePort(PortDescription port) {
- DriverHandler handler = handler();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- Set<OvsdbBridge> ovsdbSet = ovsdbNode.getBridges();
- if (ovsdbSet != null && ovsdbSet.size() > 0) {
- OvsdbBridge bridge = ovsdbSet.iterator().next();
- ovsdbNode.dropPort(bridge.bridgeName().toString(), port
- .portNumber().toString());
- }
- }
-
- @Override
- public Collection<PortDescription> getPorts() {
- DriverHandler handler = handler();
- OvsdbClientService ovsdbNode = getOvsdbNode(handler);
- Set<OvsdbPort> ovsdbSet = ovsdbNode.getPorts();
- Collection<PortDescription> ports = Sets.newHashSet();
- ovsdbSet.forEach(o -> {
- PortNumber port = PortNumber.portNumber(o.portNumber().value());
- PortDescription description = new DefaultPortDescription(port, true);
- ports.add(description);
- });
- return ports;
- }
-
- // OvsdbNodeId(IP:port) is used in the adaptor while DeviceId(ovsdb:IP:port)
- // is used in the core. So DeviceId need be changed to OvsdbNodeId.
- private OvsdbNodeId changeDeviceIdToNodeId(DeviceId deviceId) {
- int lastColon = deviceId.toString().lastIndexOf(":");
- int fistColon = deviceId.toString().indexOf(":");
- String ip = deviceId.toString().substring(fistColon + 1, lastColon);
- String port = deviceId.toString().substring(lastColon + 1);
- IpAddress ipAddress = IpAddress.valueOf(ip);
- long portL = Long.valueOf(port).longValue();
- return new OvsdbNodeId(ipAddress, portL);
- }
-
- private OvsdbClientService getOvsdbNode(DriverHandler handler) {
- OvsdbController ovsController = handler.get(OvsdbController.class);
- DeviceId deviceId = handler.data().deviceId();
- OvsdbNodeId nodeId = changeDeviceIdToNodeId(deviceId);
- return ovsController.getOvsdbClient(nodeId);
- }
-}
+/*
+ * 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.driver.ovsdb;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.onlab.packet.IpAddress;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.behaviour.BridgeConfig;
+import org.onosproject.net.behaviour.BridgeDescription;
+import org.onosproject.net.behaviour.BridgeName;
+import org.onosproject.net.behaviour.DefaultBridgeDescription;
+import org.onosproject.net.device.DefaultPortDescription;
+import org.onosproject.net.device.PortDescription;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+import org.onosproject.net.driver.DriverHandler;
+import org.onosproject.ovsdb.controller.OvsdbBridge;
+import org.onosproject.ovsdb.controller.OvsdbClientService;
+import org.onosproject.ovsdb.controller.OvsdbController;
+import org.onosproject.ovsdb.controller.OvsdbNodeId;
+import org.onosproject.ovsdb.controller.OvsdbPort;
+
+import com.google.common.collect.Sets;
+
+/**
+ * The implementation of BridageConfig.
+ */
+public class OvsdbBridgeConfig extends AbstractHandlerBehaviour
+ implements BridgeConfig {
+
+ @Override
+ public void addBridge(BridgeName bridgeName) {
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ clientService.createBridge(bridgeName.name());
+ }
+
+ @Override
+ public void deleteBridge(BridgeName bridgeName) {
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ clientService.dropBridge(bridgeName.name());
+ }
+
+ @Override
+ public Collection<BridgeDescription> getBridges() {
+ DriverHandler handler = handler();
+ DeviceId deviceId = handler.data().deviceId();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ Set<OvsdbBridge> ovsdbSet = clientService.getBridges();
+ Collection<BridgeDescription> bridges = Sets.newHashSet();
+ ovsdbSet.forEach(o -> {
+ BridgeName bridgeName = BridgeName
+ .bridgeName(o.bridgeName().value());
+ DeviceId ownDeviceId = DeviceId.deviceId("of:" + o.datapathId().value());
+ BridgeDescription description = new DefaultBridgeDescription(bridgeName,
+ deviceId,
+ ownDeviceId);
+ bridges.add(description);
+ });
+ return bridges == null ? Collections.emptySet() : bridges;
+ }
+
+ @Override
+ public void addPort(PortDescription port) {
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ Set<OvsdbBridge> ovsdbSet = clientService.getBridges();
+ if (ovsdbSet != null && ovsdbSet.size() > 0) {
+ OvsdbBridge bridge = ovsdbSet.iterator().next();
+ clientService.createPort(bridge.bridgeName().toString(), port
+ .portNumber().toString());
+ }
+ }
+
+ @Override
+ public void deletePort(PortDescription port) {
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ Set<OvsdbBridge> ovsdbSet = clientService.getBridges();
+ if (ovsdbSet != null && ovsdbSet.size() > 0) {
+ OvsdbBridge bridge = ovsdbSet.iterator().next();
+ clientService.dropPort(bridge.bridgeName().toString(), port
+ .portNumber().toString());
+ }
+ }
+
+ @Override
+ public Collection<PortDescription> getPorts() {
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ Set<OvsdbPort> ovsdbSet = clientService.getPorts();
+ Collection<PortDescription> ports = Sets.newHashSet();
+ ovsdbSet.forEach(o -> {
+ PortNumber port = PortNumber.portNumber(o.portNumber().value());
+ PortDescription description = new DefaultPortDescription(port, true);
+ ports.add(description);
+ });
+ return ports;
+ }
+
+ // OvsdbNodeId(IP:port) is used in the adaptor while DeviceId(ovsdb:IP:port)
+ // is used in the core. So DeviceId need be changed to OvsdbNodeId.
+ private OvsdbNodeId changeDeviceIdToNodeId(DeviceId deviceId) {
+ int lastColon = deviceId.toString().lastIndexOf(":");
+ int fistColon = deviceId.toString().indexOf(":");
+ String ip = deviceId.toString().substring(fistColon + 1, lastColon);
+ String port = deviceId.toString().substring(lastColon + 1);
+ IpAddress ipAddress = IpAddress.valueOf(ip);
+ long portL = Long.valueOf(port).longValue();
+ return new OvsdbNodeId(ipAddress, portL);
+ }
+
+ // Used for getting OvsdbClientService.
+ private OvsdbClientService getOvsdbClientService(DriverHandler handler) {
+ OvsdbController ovsController = handler.get(OvsdbController.class);
+ DeviceId deviceId = handler.data().deviceId();
+ OvsdbNodeId nodeId = changeDeviceIdToNodeId(deviceId);
+ return ovsController.getOvsdbClient(nodeId);
+ }
+
+ @Override
+ public Set<PortNumber> getPortNumbers() {
+ Set<PortNumber> ports = new HashSet<>();
+ DriverHandler handler = handler();
+ OvsdbClientService clientService = getOvsdbClientService(handler);
+ Set<OvsdbPort> ovsdbSet = clientService.getPorts();
+ ovsdbSet.forEach(o -> {
+ PortNumber port = PortNumber.portNumber(o.portNumber().value(),
+ o.portName().value());
+ ports.add(port);
+ });
+ return ports;
+ }
+}
diff --git a/drivers/src/main/resources/onos-drivers.xml b/drivers/src/main/resources/onos-drivers.xml
index 0b4ab43..91741ce 100644
--- a/drivers/src/main/resources/onos-drivers.xml
+++ b/drivers/src/main/resources/onos-drivers.xml
@@ -1,119 +1,119 @@
-<?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.Pipeliner"
- impl="org.onosproject.driver.pipeline.DefaultSingleTablePipeline"/>
- <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
- impl="org.onosproject.driver.handshaker.DefaultSwitchHandshaker"/>
- </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.TunnelConfig"
- impl="org.onosproject.driver.ovsdb.OvsdbTunnelConfig"/>
- <behaviour api="org.onosproject.net.behaviour.BridgeConfig"
- impl="org.onosproject.driver.ovsdb.OvsdbBridgeConfig"/>
- </driver>
- <driver name="ovs-corsa" extends="ovs"
- manufacturer="Corsa" hwVersion="emulation" swVersion="0.0.0">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.OVSCorsaPipeline"/>
- </driver>
- <driver name="spring-open-cpqd" extends="default"
- manufacturer="Stanford University, Ericsson Research and CPqD Research"
- hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.SpringOpenTTP"/>
- </driver>
- <driver name="spring-open" extends="default"
- manufacturer="Dell " hwVersion="OpenFlow switch HW ver. 1.0"
- swVersion="OpenFlow switch SW ver. 1.0 and 1.3">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.SpringOpenTTPDell"/>
- </driver>
- <driver name="linc-oe" extends="default"
- manufacturer="FlowForwarding.org" hwVersion="Unknown"
- swVersion="LINC-OE OpenFlow Software Switch 1.1">
- <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
- impl="org.onosproject.driver.handshaker.OFOpticalSwitchImplLINC13"/>
- </driver>
- <driver name="corsa"
- manufacturer="Corsa" hwVersion="Corsa Element" swVersion="2.3.1">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.CorsaPipeline"/>
- <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
- impl="org.onosproject.driver.handshaker.CorsaSwitchHandshaker"/>
- </driver>
- <driver name="ofdpa" extends="default"
- manufacturer="Broadcom Corp." hwVersion="OF-DPA.*" swVersion="OF-DPA.*">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.OFDPA1Pipeline"/>
- </driver>
- <driver name="pmc-olt" extends="default"
- manufacturer="Big Switch Networks" hwVersion="ivs 0.5" swVersion="ivs 0.5">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.OLTPipeline"/>
- </driver>
- <driver name="g.fast" extends="default"
- manufacturer="TEST1" hwVersion="TEST2" swVersion="TEST3">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.OLTPipeline"/>
- </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
- ~ driver declaration with the manufacturer/hwVersion/swVersion of the
- ~ device (see 'noviflow' example).
- -->
- <driver name="softrouter" extends="default"
- manufacturer="Various" hwVersion="various" swVersion="0.0.0">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.SoftRouterPipeline"/>
- </driver>
- <driver name="centec-V350" extends="default"
- manufacturer=".*Centec.*" hwVersion=".*" swVersion="3.1.*">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.CentecV350Pipeline"/>
- </driver>
- <driver name="pica" extends="default"
- manufacturer="Pica8, Inc." hwVersion=".*" swVersion="PicOS 2.6">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.PicaPipeline"/>
- </driver>
- <driver name="noviflow" extends="softrouter"
- manufacturer="NoviFlow Inc" hwVersion="NS.*" swVersion="NW.*">
- </driver>
- <!-- Emulation of the ofdpa pipeline using a CPqD OF 1.3 software switch.
- ~ To use this driver, configure ONOS with the dpid of the device.
- -->
- <driver name="ofdpa-cpqd" extends="default"
- manufacturer="ONF"
- hwVersion="OF1.3 Software Switch from CPqD" swVersion="for Group Chaining">
- <behaviour api="org.onosproject.net.behaviour.Pipeliner"
- impl="org.onosproject.driver.pipeline.CpqdOFDPA1Pipeline"/>
- </driver>
- <driver name="calient" extends="default"
- manufacturer="calient inc" hwVersion="calient hardware"
- swVersion="ocs switch">
- <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
- impl="org.onosproject.driver.handshaker.CalientFiberSwitchHandshaker"/>
- </driver>
-</drivers>
-
+<?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.Pipeliner"
+ impl="org.onosproject.driver.pipeline.OpenVSwitchPipeline"/>
+ <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"/>
+ </driver>
+ <driver name="ovs-corsa" extends="ovs"
+ manufacturer="Corsa" hwVersion="emulation" swVersion="0.0.0">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.OVSCorsaPipeline"/>
+ </driver>
+ <driver name="spring-open-cpqd" extends="default"
+ manufacturer="Stanford University, Ericsson Research and CPqD Research"
+ hwVersion="OpenFlow 1.3 Reference Userspace Switch" swVersion=".*">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.SpringOpenTTP"/>
+ </driver>
+ <driver name="spring-open" extends="default"
+ manufacturer="Dell " hwVersion="OpenFlow switch HW ver. 1.0"
+ swVersion="OpenFlow switch SW ver. 1.0 and 1.3">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.SpringOpenTTPDell"/>
+ </driver>
+ <driver name="linc-oe" extends="default"
+ manufacturer="FlowForwarding.org" hwVersion="Unknown"
+ swVersion="LINC-OE OpenFlow Software Switch 1.1">
+ <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
+ impl="org.onosproject.driver.handshaker.OFOpticalSwitchImplLINC13"/>
+ </driver>
+ <driver name="corsa"
+ manufacturer="Corsa" hwVersion="Corsa Element" swVersion="2.3.1">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.CorsaPipeline"/>
+ <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
+ impl="org.onosproject.driver.handshaker.CorsaSwitchHandshaker"/>
+ </driver>
+ <driver name="ofdpa" extends="default"
+ manufacturer="Broadcom Corp." hwVersion="OF-DPA.*" swVersion="OF-DPA.*">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.OFDPA1Pipeline"/>
+ </driver>
+ <driver name="pmc-olt" extends="default"
+ manufacturer="Big Switch Networks" hwVersion="ivs 0.5" swVersion="ivs 0.5">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.OLTPipeline"/>
+ </driver>
+ <driver name="g.fast" extends="default"
+ manufacturer="TEST1" hwVersion="TEST2" swVersion="TEST3">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.OLTPipeline"/>
+ </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
+ ~ driver declaration with the manufacturer/hwVersion/swVersion of the
+ ~ device (see 'noviflow' example).
+ -->
+ <driver name="softrouter" extends="default"
+ manufacturer="Various" hwVersion="various" swVersion="0.0.0">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.SoftRouterPipeline"/>
+ </driver>
+ <driver name="centec-V350" extends="default"
+ manufacturer=".*Centec.*" hwVersion=".*" swVersion="3.1.*">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.CentecV350Pipeline"/>
+ </driver>
+ <driver name="pica" extends="default"
+ manufacturer="Pica8, Inc." hwVersion=".*" swVersion="PicOS 2.6">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.PicaPipeline"/>
+ </driver>
+ <driver name="noviflow" extends="softrouter"
+ manufacturer="NoviFlow Inc" hwVersion="NS.*" swVersion="NW.*">
+ </driver>
+ <!-- Emulation of the ofdpa pipeline using a CPqD OF 1.3 software switch.
+ ~ To use this driver, configure ONOS with the dpid of the device.
+ -->
+ <driver name="ofdpa-cpqd" extends="default"
+ manufacturer="ONF"
+ hwVersion="OF1.3 Software Switch from CPqD" swVersion="for Group Chaining">
+ <behaviour api="org.onosproject.net.behaviour.Pipeliner"
+ impl="org.onosproject.driver.pipeline.CpqdOFDPA1Pipeline"/>
+ </driver>
+ <driver name="calient" extends="default"
+ manufacturer="calient inc" hwVersion="calient hardware"
+ swVersion="ocs switch">
+ <behaviour api="org.onosproject.openflow.controller.driver.OpenFlowSwitchDriver"
+ impl="org.onosproject.driver.handshaker.CalientFiberSwitchHandshaker"/>
+ </driver>
+</drivers>
+